Tải file trên Linux dùng wget và curl Image Tải file trên Linux dùng wget và curl

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ệp
  • Received: 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ên Time TotalTime 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ủ.