Bài này sẽ giới thiệu các bạn tổng quát về cách tải file sử dụng wget và curl trên hệ điều hành Linux. Từ các ví dụ dưới đây giúp bạn có thể sử dụng wget và curl để tải các file bạn mong muốn giúp bạn tự học Linux một cách dễ dàng.
1. Giới thiệu về wget
Tiện ích wget
cho phép chúng ta tải các trang web, tập tin và hình ảnh từ các trang web. wget
có hầu hết trên các bản phân phối Linux và nó cũng có thể được dùng trên Mac OS, Microsoft Windows,... Tiện ích wget
sẽ thử lại một download ngay cả khi kết nối bị rớt, tiếp tục tải khi có kết nối trở lại.
Các tính năng của wget như sau:
- Tải các file bằng HTTP, HTTPS và FTP.
- Tiếp tục cho quá trình tải xuống bị gián đoạn.
- Chuyển đổi các liên kết tuyệt đối trong các trang web được tải xuống thành các URL tương đối để các trang web có thể được xem ngoại tuyến.
- Hỗ trợ HTTP proxy và cookie.
- Hỗ trợ các kết nối HTTP liên tục.
- Có thể chạy trong nền ngay cả khi bạn không đăng nhập.
- Hoạt động trên Linux, Mac OS và Windows,...
1.1. Cài đặt wget
Gói wget
có trên hầu hết các bản phân phối Linux. Để kiểm tra xem gói wget
có trên hệ thống của bạn chưa bằng cách chạy lệnh sau:
[root@localhost ~]# wget --version
GNU Wget 1.14 built on linux-gnu.
Nếu gói wget
không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:
Đối với bản phân phối Debian/Ubuntu:
Chạy lệnh sau để cài đặt gói
wget
:apt-get install wget
Đối với bản phân phối RHEL/CentOS:
Chạy lệnh bên dưới để thực hiện cài đặt gói
wget
:yum install wget
2. Giới thiệu về curl
curl vừa là thư viện vừa là tiện ích dòng lệnh được viết để xử lý việc truyền dữ liệu bằng nhiều giao thức khác nhau. Curl cũng hỗ trợ nhiều giao thức hơn mà wget không hỗ trợ (Ví dụ: SCP, SFTP, TFTP, TELNET, LDAP(S), FILE, POP3, IMAP, SMTP, RTMP và RTSP). Ngoài ra curl
còn cung cấp các API có thể được sử dụng bởi các lập trình viên bên trong mã của riêng họ. curl
sử dụng libcurl là một thư viện đa nền tảng.
Tiện ích curl
rất mạnh mẽ hỗ trợ download qua nhiều giao thức như HTTP, HTTPS, FTP và SFTP. Nó hỗ trợ nhiều tính năng bao gồm POST, cookies, chứng thực, tải các tập tin được chia nhỏ, giới hạn tốc độ tải tập tin, giới hạn kích thước tối đa của tập tin được tải, hiển thị thanh tiến trình,...
2.1. Cài đặt curl
Gói curl
có trên hầu hết các bản phân phối Linux. Để kiểm tra xem gói curl
có trên hệ thống của bạn chưa bằng cách chạy lệnh sau:
[root@localhost ~]# curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.36 zlib/1.2.7 libidn/1.28 libssh2/1.4.3
Nếu gói curl
không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:
Đối với bản phân phối Debian/Ubuntu:
Chạy lệnh sau để cài đặt gói
curl
:apt-get install curl
Đối với bản phân phối RHEL/CentOS:
Chạy lệnh bên dưới để thực hiện cài đặt gói
curl
:yum install curl
3. Ví dụ về lệnh wget
👉 Ví dụ 1: Tải file xuống và lưu trữ file cùng tên với máy chủ từ xa thực hiện như sau.
[root@localhost ~]# wget https://blogd.net/images/logo.png
--2019-05-31 22:51:56-- https://blogd.net/images/logo.png
Resolving blogd.net (blogd.net)... 178.128.115.5, 2400:6180:0:d1::6e:5001
Connecting to blogd.net (blogd.net)|178.128.115.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5326 (5.2K) [image/png]
Saving to: ‘logo.png’
100%[=================================================================================================>] 5,326 --.-K/s in 0s
2019-05-31 22:51:57 (107 MB/s) - ‘logo.png’ saved [5326/5326]
[root@localhost ~]# ls -l | grep logo
-rw-r--r--. 1 root root 5326 May 31 22:51 logo.png
Trong qua trình tải xuống thì nó sẽ hiển thị một thanh tiến trình với thông tin sau:
- Hoàn thành tải xuống (Ví dụ: 100% như TRÊN)
- Tổng số lượng byte được tải xuống cho đến nay (Ví dụ: 879,382 byte như được hiển thị bên trên)
- Tốc độ tải xuống hiện tại (Ví dụ: 63.0KB/s)
- Thời gian để tải xuống (Ví dụ: 13s)
👉 Ví dụ 2: Tải xuống và lưu trữ với tên tệp khác
Theo mặc định, wget
sẽ chọn tên tệp sau dấu gạch chéo cuối cùng trở về sau, trong một số trường hợp thì url không có chứa tên tệp như ví dụ sau:
[root@localhost ~]# wget http://www.vim.org/scripts/download_script.php?src_id=7701
--2019-05-28 02:10:34-- http://www.vim.org/scripts/download_script.php?src_id=7701
Resolving www.vim.org (www.vim.org)... 202.221.179.29
Connecting to www.vim.org (www.vim.org)|202.221.179.29|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.vim.org/scripts/download_script.php?src_id=7701 [following]
--2019-05-28 02:10:34-- https://www.vim.org/scripts/download_script.php?src_id=7701
Connecting to www.vim.org (www.vim.org)|202.221.179.29|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octetstream]
Saving to: ‘download_script.php?src_id=7701’
[ <=> ] 50,243 268KB/s in 0.2s
2019-05-28 02:10:35 (268 KB/s) - ‘download_script.php?src_id=7701’ saved [50243]
[root@localhost ~]# ls -l | grep download
-rw-r--r--. 1 root root 50243 May 28 02:10 download_script.php?src_id=7701
Chúng ta thấy tệp đã tải xuống ở định dạng .zip
, nhưng nó sẽ được lưu trữ tên tệp như bên trên.
Vì vậy để khắc phục trình trạng này, chúng ta sử dụng lệnh wget
kết hợp với tùy chọn -O
đặt tên cho file khi tải xuống. Việc đặt tên trước này rất hữu ích khi url từ xa không chứa tên tệp trong url như trong ví dụ bên dưới:
[root@localhost ~]# wget -O testwget.zip http://www.vim.org/scripts/download_script.php?src_id=7701
--2019-05-28 01:58:25-- http://www.vim.org/scripts/download_script.php?src_id=7701
Resolving www.vim.org (www.vim.org)... 202.221.179.29
Connecting to www.vim.org (www.vim.org)|202.221.179.29|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.vim.org/scripts/download_script.php?src_id=7701 [following]
--2019-05-28 01:58:25-- https://www.vim.org/scripts/download_script.php?src_id=7701
Connecting to www.vim.org (www.vim.org)|202.221.179.29|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octetstream]
Saving to: ‘testwget.zip’
[ <=> ] 50,243 267KB/s in 0.2s
2019-05-28 01:58:26 (267 KB/s) - ‘testwget.zip’ saved [50243]
[root@localhost ~]# ls -l | grep testwget
-rw-r--r--. 1 root root 3852374 Oct 31 2008 testwget.zip
👉 Ví dụ 3: Chỉ định tốc độ tải xuống
Khi chúng ta chạy lệnh wget
theo mặc định nó sẽ cố gắng sử dụng hết băng thông có thể. Việc sử dụng hết băng thông khi bạn đang tải xuống các file lớn trên các máy chủ sẽ dẫn đến trì trệ hệ thống. Vì vậy chúng ta cần thiết lập giới hạn tốc độ tải xuống bằng cách sử dụng lệnh wget
kết hợp với tùy chọn --limit-rate
như sau:
[root@localhost ~]# wget --limit-rate=150k https://blogd.net/images/logo.png
--2019-05-31 22:55:27-- https://blogd.net/images/logo.png
Resolving blogd.net (blogd.net)... 178.128.115.5, 2400:6180:0:d1::575:a001
Connecting to blogd.net (blogd.net)|178.128.115.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5326 (5.2K) [image/png]
Saving to: ‘logo.png.1’
100%[=================================================================================================>] 5,326 --.-K/s in 0s
2019-05-31 22:55:27 (105 MB/s) - ‘logo.png.1’ saved [5326/5326]
Trong ví dụ trên thì tốc độ tải xuống được giới hạn ở mức 150k
👉 Ví dụ 4: Tiếp tục tải xuống khi file cho tải xong
Điều này rất hữu ích khi bạn tải xuống tệp có kích thước rất lớn bị gián đoạn ở giữa. Thay vì bắt đầu tải xuống lại toàn bộ, bạn có thể bắt đầu tải xuống từ nơi bị gián đoạn bằng tùy chọn -c
như ví dụ dưới đây:
[root@localhost ~]# wget http://www.openss7.org/repos/tarballs/iperf-2.0.8.tar.gz
--2019-05-28 02:28:51-- http://www.openss7.org/repos/tarballs/iperf-2.0.8.tar.gz
Resolving www.openss7.org (www.openss7.org)... 142.59.210.7
Connecting to www.openss7.org (www.openss7.org)|142.59.210.7|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1739067 (1.7M) [application/x-gzip]
Saving to: ‘iperf-2.0.8.tar.gz’
11% [==========> ] 205,176 46.6KB/s eta 32s
[root@localhost ~]# wget -c http://www.openss7.org/repos/tarballs/iperf-2.0.8.tar.gz
--2019-05-28 02:29:07-- http://www.openss7.org/repos/tarballs/iperf-2.0.8.tar.gz
Resolving www.openss7.org (www.openss7.org)... 142.59.210.7
Connecting to www.openss7.org (www.openss7.org)|142.59.210.7|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 1739067 (1.7M), 1452647 (1.4M) remaining [application/x-gzip]
Saving to: ‘iperf-2.0.8.tar.gz’
100%[++++++++++++++++=================================================================================>] 1,739,067 89.3KB/s in 17s
2019-05-28 02:29:25 (81.6 KB/s) - ‘iperf-2.0.8.tar.gz’ saved [1739067/1739067]
Chúng ta thấy trong quá trình tải ban đầu thì file tải xuống bị gián đọan khi mới đạt 11%, để không bắt đầu tải lại từ đầu thì ở lệnh 2 chúng ta kết hợp tùy chọn -c
thì nó bắt đầu tải tiếp phần còn lại của file tải xuống còn gian dở.
👉 Ví dụ 5: Tải xuống trong nền
Khi tải một file có kích thước lớn chúng ta cần tải xuống trong nền bằng cách sử dụng tùy chọn -b
:
wget -b https://blogd.net/images/docker.png
Continuing in background, pid 7285.
Output will be written to ‘wget-log’.
Đầu ra sẽ được ghi vào tệp wget-log
. Bạn có thể kiểm tra trạng thái tải xuống như sau:
[root@localhost ~]# cat wget-log
--2019-05-31 22:57:11-- https://blogd.net/images/docker.png
Resolving blogd.net (blogd.net)... 206.189.89.118, 2400:6180:0:d1::6e:5001
Connecting to blogd.net (blogd.net)|206.189.89.118|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22495 (22K) [image/png]
Saving to: ‘docker.png’
0K .......... .......... . 100% 540K=0.04s
2019-05-31 22:57:11 (540 KB/s) - ‘docker.png’ saved [22495/22495]
Hoặc có thể sử dụng lệnh tail
để xem các dòng cuối của file:
[root@localhost ~]# tail -n 5 wget-log
0K .......... .......... . 100% 540K=0.04s
2019-05-31 22:57:11 (540 KB/s) - ‘docker.png’ saved [22495/22495]
👉 Ví dụ 6: Mặt nạ (Mask) người dùng và hiển thị wget như trình duyệt
Trong một số trường hợp thì trang web có thể không cho phép tải xuống trang của nó bằng cách xác định rằng tác nhân người dùng không phải là trình duyệt. Vì vậy, bạn có thể che dấu tác nhân người dùng bằng cách sử dụng các tùy chọn --user-agent
và hiển thị wget như một trình duyệt:
[root@localhost ~]# wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" http://yahoo.com
--2019-05-28 02:55:31-- http://yahoo.com/
Resolving yahoo.com (yahoo.com)... 98.137.246.8, 98.137.246.7, 72.30.35.9, ...
Connecting to yahoo.com (yahoo.com)|98.137.246.8|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://yahoo.com/ [following]
--2019-05-28 02:55:32-- https://yahoo.com/
Connecting to yahoo.com (yahoo.com)|98.137.246.8|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.yahoo.com/ [following]
--2019-05-28 02:55:34-- https://www.yahoo.com/
Resolving www.yahoo.com (www.yahoo.com)... 106.10.250.10, 106.10.250.11, 2406:2000:e4:a1a::10, ...
Connecting to www.yahoo.com (www.yahoo.com)|106.10.250.10|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://vn.yahoo.com/?p=us [following]
--2019-05-28 02:55:34-- https://vn.yahoo.com/?p=us
Resolving vn.yahoo.com (vn.yahoo.com)... 106.10.250.10, 106.10.250.11, 2406:2000:e4:a1a::10, ...
Connecting to vn.yahoo.com (vn.yahoo.com)|106.10.250.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.2’
[ <=> ] 417,856 726KB/s in 0.6s
2019-05-28 02:55:35 (726 KB/s) - ‘index.html.2’ saved [417856]
👉 Ví dụ 7: Tăng số lần thử lại
Khi thực hiện tải file xuống nếu kết nối internet có vấn đề và nếu tệp tải xuống lớn thì có khả năng bị lỗi trong quá trình tải xuống. Theo mặc định, wget
thử lại 20 lần để tải xuống thành công. Bạn có thể tăng số lần thử lại bằng cách sử dụng tùy chọn --tries
[root@localhost ~]# wget --tries=50 https://blogd.net/kubernetes/cai-dat-kubernetes-cluster/img/kubernetes-logo.png
--2019-05-31 23:01:01-- https://blogd.net/kubernetes/cai-dat-kubernetes-cluster/img/kubernetes-logo.png
Resolving blogd.net (blogd.net)... 178.128.123.58, 2400:6180:0:d1::5cd:c001
Connecting to blogd.net (blogd.net)|178.128.123.58|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18541 (18K) [image/png]
Saving to: ‘kubernetes-logo.png.1’
100%[=================================================================================================>] 18,541 --.-K/s in 0.04s
2019-05-31 23:01:01 (420 KB/s) - ‘kubernetes-logo.png.1’ saved [18541/18541]
Trong ví dụ trên thi khi mất kết nối mạng wget sẽ thử kết nối lại 50 lần
👉 Ví dụ 8: Tải xuống nhiều file hoặc URL
Để có thể tải nhiều file hoặc nhiều url cùng lúc thì chúng ta cẩn lưu trữ tất cả các file cần tải xuống hoặc URL trong một tệp văn bản:
[root@localhost ~]# cat list-url.xtx
https://blogd.net/linux/lenh-sudo-tren-linux/img/nhap-pass-khi-dung-sudo-lan-dau-tien.png
https://blogd.net/kubernetes/cai-dat-kubernetes-cluster/img/kubernetes-logo.png
https://blogd.net/images/docker.png
https://blogd.net/linux/su-dung-tinh-nang-mo-rong-cua-bash-shell/img/shell-expansion.png
Sau khi đã có danh sách file hoặc danh sách url cần tải chúng ta dùng tệp list-url.txt làm đối số để sử dụng tùy chọn -i
như hiển thị bên dưới:
[root@localhost ~]# wget -i list-url.xtx
--2019-05-31 23:04:10-- https://blogd.net/linux/lenh-sudo-tren-linux/img/nhap-pass-khi-dung-sudo-lan-dau-tien.png
Resolving blogd.net (blogd.net)... 178.128.123.58, 2400:6180:0:d1::575:a001
Connecting to blogd.net (blogd.net)|178.128.123.58|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24046 (23K) [image/png]
Saving to: ‘nhap-pass-khi-dung-sudo-lan-dau-tien.png’
100%[=================================================================================================>] 24,046 --.-K/s in 0.04s
2019-05-31 23:04:10 (575 KB/s) - ‘nhap-pass-khi-dung-sudo-lan-dau-tien.png’ saved [24046/24046]
--2019-05-31 23:04:10-- https://blogd.net/kubernetes/cai-dat-kubernetes-cluster/img/kubernetes-logo.png
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 18541 (18K) [image/png]
Saving to: ‘kubernetes-logo.png.2’
100%[=================================================================================================>] 18,541 --.-K/s in 0.003s
2019-05-31 23:04:10 (5.42 MB/s) - ‘kubernetes-logo.png.2’ saved [18541/18541]
--2019-05-31 23:04:10-- https://blogd.net/images/docker.png
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 22495 (22K) [image/png]
Saving to: ‘docker.png.1’
100%[=================================================================================================>] 22,495 --.-K/s in 0.003s
2019-05-31 23:04:10 (6.32 MB/s) - ‘docker.png.1’ saved [22495/22495]
--2019-05-31 23:04:10-- https://blogd.net/linux/su-dung-tinh-nang-mo-rong-cua-bash-shell/img/shell-expansion.png
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 14460 (14K) [image/png]
Saving to: ‘shell-expansion.png’
100%[=================================================================================================>] 14,460 --.-K/s in 0.001s
2019-05-31 23:04:10 (10.4 MB/s) - ‘shell-expansion.png’ saved [14460/14460]
FINISHED --2019-05-31 23:04:10--
Total wall clock time: 0.4s
Downloaded: 4 files, 78K in 0.05s (1.55 MB/s)
Qua kết quả trên cho chúng ta thấy 4 url trong file list-url.xtx đã được tải xuống đầy đủ.
👉 Ví dụ 9: Tải xuống một trang web đầy đủ
Khi bạn muốn tải xuống một trang web đầy đủ và có sẵn để xem cục bộ chạy lệnh bên dưới.
[root@localhost ~]# wget --mirror -p --convert-links -P ./LOCAL-DIR https://blogd.net/
--2019-05-31 23:08:12-- https://blogd.net/
Resolving blogd.net (blogd.net)... 178.128.123.58, 2400:6180:0:d1::575:a001
Connecting to blogd.net (blogd.net)|178.128.123.58|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16523 (16K) [text/html]
Last-modified header missing -- time-stamps turned off.
--2019-05-31 23:08:12-- https://blogd.net/
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 16523 (16K) [text/html]
Saving to: ‘./LOCAL-DIR/blogd.net/index.html’
100%[=================================================================================================>] 16,523 --.-K/s in 0.04s
2019-05-31 23:08:12 (383 KB/s) - ‘./LOCAL-DIR/blogd.net/index.html’ saved [16523/16523]
Loading robots.txt; please ignore errors.
--2019-05-31 23:08:12-- https://blogd.net/robots.txt
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 53 [text/plain]
Saving to: ‘./LOCAL-DIR/blogd.net/robots.txt’
100%[=================================================================================================>] 53 --.-K/s in 0s
2019-05-31 23:08:12 (1.73 MB/s) - ‘./LOCAL-DIR/blogd.net/robots.txt’ saved [53/53]
--2019-05-31 23:08:12-- https://blogd.net/images/apple-icon-57x57.png
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 1633 (1.6K) [image/png]
Last-modified header missing -- time-stamps turned off.
--2019-05-31 23:08:13-- https://blogd.net/images/apple-icon-57x57.png
Reusing existing connection to blogd.net:443.
HTTP request sent, awaiting response... 200 OK
Length: 1633 (1.6K) [image/png]
Saving to: ‘./LOCAL-DIR/blogd.net/images/apple-icon-57x57.png’
100%[=================================================================================================>] 1,633 --.-K/s in 0s
...
Trong đó các tùy chọn có ý nghĩa như sau:
--mirror
: Bật tùy chọn phù hợp để phản chiếu (mirroring).-p
: Tải xuống tất cả các tệp cần thiết để hiển thị đúng một trang HTML đã cho.-–convert-links
: Sau khi tải xuống, chuyển đổi các liên kết trong tài liệu để xem cục bộ.-P ./LOCAL-DIR
: Lưu tất cả các tệp và thư mục vào thư mục được chỉ định.
👉 Ví dụ 10: Ghi vào tệp nhật ký
Bạn muốn nhật ký được ghi và tệp nhật ký thay vì thiết bị đầu cuối hãy sử dụng tùy chọn -o
.
[root@localhost ~]# wget -o test-download.log https://blogd.net/
[root@localhost ~]# cat test-download.log
--2019-05-31 23:09:33-- https://blogd.net/
Resolving blogd.net (blogd.net)... 178.128.115.5, 2400:6180:0:d1::575:a001
Connecting to blogd.net (blogd.net)|178.128.115.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16523 (16K) [text/html]
Saving to: ‘index.html.2’
0K .......... ...... 100% 379K=0.04s
2019-05-31 23:09:33 (379 KB/s) - ‘index.html.2’ saved [16523/16523]
4. Ví dụ về lệnh curl
👉 Ví dụ 1: Tải xuống một tệp
Lệnh curl
sẽ lấy nội dung của URL và hiển thị kết quả đầu ra như sau:
[root@localhost ~]# curl http://www.centos.org
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
Để lưu trữ đầu ra trong một tệp chúng ta cần chuyển hướng nó và cách này sẽ hiển thị một số thống kê:
[root@localhost ~]# curl http://www.centos.org > test.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 185 100 185 0 0 161 0 0:00:01 0:00:01 --:--:-- 161
Khi curl
tải xuống, nó cung cấp các thông tin sau:
%
: Tải xuống đã được hoàn thành tính đến thời điểm hiện tại.Total
: Tổng kích thước của tệpReceived
: Tổng kích thước của tệp đã được tải xuống cho đến nay.Xferd
: Trường này được sử dụng khi bạn tải một số tệp lên máy chủ từ xa. Trong quá trình tải lên, điều này sẽ cho biết tổng kích thước của tệp đã được tải lên cho đến nay.Average Speed Dload
: Tốc độ tải xuống trung bình.AVerage Speed Upload
: Tốc độ tải lên một tệp.Time Total
: Tổng thời gian cần để tải xuống (hoặc tải lên) toàn bộ tệp dựa trên tốc độ tải xuống (hoặc tải lên) hiện tại.Time Spend
: Thời gian đã dành cho đến nay để tải xuống (hoặc tải lên) tệp.Time Left
: Tính toán dựa trênTime Total
vàTime Spend
.Current Speed
: Tốc độ tải xuống/tải lên hiện tại. So sánh với Average Speed Dload/UPload để xem hệ thống của bạn đang tải xuống nhanh hay chậm.
👉 Ví dụ 2: Lưu đầu ra curl vào một tệp
Để lưu kết quả của lệnh curl
vào một tệp chúng ta có thể sử dụng các tùy chọn -o
hoặc tùy chọn -O
.
Ý nghĩa hai tuỳ chọn như sau:
-o
: Kết quả sẽ được lưu trong tên tệp được cung cấp trong dòng lệnh.-O
: Tên tệp trong URL sẽ được lấy và nó sẽ được sử dụng làm tên tệp để lưu trữ kết quả.
Chúng ta cùng thực hiện các ví dụ sau để hiểu về hai tùy chọn này:
[root@localhost ~]# curl -o test.html https://blogd.net/ve-blogd/index.md
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16523 100 16523 0 0 40610 0 --:--:-- --:--:-- --:--:-- 40697
[root@localhost ~]# ls -l | grep test
-rw-r--r--. 1 root root 185648 May 28 10:37 test.html
Qua kết quả lệnh trên cho chúng ta thấy trang index.md sẽ được lưu trong tệp có tên test.html.
Khi bạn sử dụng lệnh curl -O
nó sẽ lưu nội dung trong tệp có tên index.md về máy của chúng ta:
[root@localhost ~]# curl -O https://blogd.net/linux/cac-thao-tac-co-ban-voi-yum/index.md
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9407 0 9407 0 0 13773 0 --:--:-- --:--:-- --:--:-- 13773
[root@localhost ~]# ls -l | grep index
-rw-r--r--. 1 root root 9407 May 31 23:21 index.md
Lưu ý: Khi curl ghi dữ liệu vào thiết bị đầu cuối, nó sẽ vô hiệu hóa bộ đo tiến độ, để tránh nhầm lẫn trong in ấn.
Chúng ta có thể sử dụng các tùy chọn >
-o
-O
để di chuyển kết quả vào một tệp.
👉 Ví dụ 3: Tải nhiều tệp cùng một lúc
Chúng ta có thể tải xuống nhiều tệp trong một lần bằng cú pháp như sau: curl -O URL1 -O URL2
Chúng ta thực hiện tải xuống cả index.html và gettext.html và lưu nó trong trong thư mục hiện tại.
[root@localhost ~]# curl -O https://blogd.net/linux/cac-thao-tac-co-ban-voi-yum/index.md -O https://blogd.net/images/logo.png
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9407 100 9407 0 0 26148 0 --:--:-- --:--:-- --:--:-- 26203
100 5326 100 5326 0 0 121k 0 --:--:-- --:--:-- --:--:-- 121k
[root@localhost ~]# ls -l | grep index
-rw-r--r--. 1 root root 9407 May 31 23:28 index.md
[root@localhost ~]# ls -l | grep logo
-rw-r--r--. 1 root root 5326 May 31 23:28 logo.png
👉 Ví dụ 4: Tiếp tục tải xuống trước đó
Để có thể tiếp tục tải xuống đã bị dừng chúng ta sử dụng tùy chọn -C -
việc này rất có ích khi bạn tải xuống các tệp lớn và quá trình tải xuống bị gián đoạn.
Thực hiện tải xuống file có kích thước lớn và trong quá trình tải nhấn Ctrl-C để dừng tải xuống giữa quá trình tải xuống.
[root@localhost ~]# curl -O http://www.openss7.org/repos/tarballs/autoconf-2.59.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
23 1207k 23 281k 0 0 48633 0 0:00:25 0:00:05 0:00:20 61182
Chạy lệnh sau để tiếp tục tải xuống ở vị trí bị gián đoạn là 23%:
[root@localhost ~]# curl -C - -O http://www.openss7.org/repos/tarballs/autoconf-2.59.tar.gz
** Resuming transfer from byte position 331776
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 883k 100 883k 0 0 70157 0 0:00:12 0:00:12 --:--:-- 80012
👉 Ví dụ 5: Hạn chế tốc độ truyền dữ liệu
Bạn có thể giới hạn số lượng dữ liệu được truyền bằng cách sử dụng tùy chọn --limit-rate
.
[root@localhost ~]# curl --limit-rate 3K -O https://blogd.net/images/logo.png
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
57 5326 57 3072 0 0 2178 0 0:00:02 0:00:01 0:00:01 2178
100 5326 100 5326 0 0 45 0 0:01:58 0:01:56 0:00:02 678
Lệnh trên đang giới hạn việc truyền dữ liệu xuống 3k/s. curl
có thể sử dụng tốc độ truyền cao hơn trong khoảng thời gian ngắn.
👉 Ví dụ 6: Truy vấn tiêu đề HTTP
Tiêu đề HTTP cho phép máy chủ web từ xa gửi thông tin bổ sung về chính nó cùng với yêu cầu thực tế. Điều này cung cấp cho khách hàng chi tiết về cách xử lý yêu cầu.
Để truy vấn các tiêu đề HTTP từ một trang web chạy lệnh bên dưới:
[root@localhost ~]# curl -I blogd.net
HTTP/1.1 301 Moved Permanently
Cache-Control: public, max-age=0, must-revalidate
Content-Length: 0
Content-Type: text/plain
Date: Tue, 28 May 2019 17:49:59 GMT
Location: https://blogd.net/
Age: 0
Connection: keep-alive
Server: Netlify
X-NF-Request-ID: fd48c6f2-b984-48a4-84be-dcfa6653cb77-22992663
👉 Ví dụ 7: Tải xuống tệp từ máy chủ FTP có hoặc không có xác thực
Nếu tải file từ máy chủ FTP tại ftp://ftpserver, lệnh bên sẽ tải file yourfile.zip
xuống thư mục làm việc hiện tại của bạn.
curl -u username:password -O ftp://ftpserver/yourfile.zip
Tùy chọn username:password
có thể bỏ qua nếu máy chủ FTP cho phép đăng nhập ẩn danh.
👉 Ví dụ 8: Tải tệp lên máy chủ FTP
Để tải lên tệp từ máy cục bộ có tên localfile.tar.gz
lên ftp://ftpserver chúng ta thực hiện như sau:
curl -u username:password -T ocalfile.tar.gz ftp://ftpserver
👉 Ví dụ 9: Chỉ tải xuống một tệp được sửa đổi thời gian nhất định
Chúng ta có thể nhận được các tệp được sửa đổi sau một thời gian cụ thể bằng cách sử dụng tùy chọn -z
:
curl -z 11-May-19 https://blogd.net/viet-bai-tren-blogd-net/index.md
Lệnh trên sẽ tải xuống index.html khi nó được sửa đổi sau ngày 19 tnáng 5 kể từ lúc 11 giờ.
curl -z -11-May-19 https://blogd.net/viet-bai-tren-blogd-net/index.md
Lệnh trên sẽ tải xuống index.html khi nó được sửa đổi trước ngày 19 tháng 5 kể từ lúc 11 giờ.
👉 Ví dụ 10: Vượt qua xác thực HTTP
Trong một số trường hợp thì các trang web sẽ yêu cầu tên người dùng và mật khẩu để xem nội dung. Với tùy chọn -u
chúng ta có thể chuyển các thông tin đăng nhập từ curl đến máy chủ:
curl -u username:password URL
5. Lời kết
Qua bài trên, giúp cho chúng ta cách sử dụng lệnh wget
và lệnh curl
theo nhiều cách khác nhau để thực hiện tải các file trên hệ điều hành Linux, làm cho nó trở thành một công cụ hữu ích để giúp chúng ta có thể tải các file về máy cũng như tải lên máy chủ.