Lệnh wget trong Linux — Cách tải tệp tin từ internet

Bạn đã bao giờ rơi vào tình huống đang quản trị một chiếc VPS từ xa mà cần tải gấp một file cấu hình hay bản cài đặt phần mềm nặng hàng GB về máy, nhưng giao diện đồ họa lại không hề tồn tại chưa nhỉ?

Nếu câu trả lời là có, thì bạn chắc chắn sẽ cần đến một "trợ thủ" vô cùng đắc lực. wget là một công cụ dòng lệnh mạnh mẽ cho phép bạn tải xuống các tệp tin từ internet một cách nhanh chóng và ổn định. Vậy thực chất wget là gì và tại sao nó lại trở thành vật bất ly thân của mọi Admin? Trong bài viết này, mình sẽ hướng dẫn bạn cách dùng wget một cách chi tiết nhất, từ những lệnh cơ bản đến các kỹ thuật nâng cao như cách tải toàn bộ website hoặc tải file trong môi trường mạng chập chờn. Việc nắm vững wget Linux sẽ giúp bạn làm chủ việc cách tải dữ liệu từ server về máy cực kỳ dễ dàng, đúng không nào? Hãy cùng mình khám phá ngay nhé!

Cần chuẩn bị gì trước khi dùng lệnh wget?

  • Quyền user: Có thể sử dụng với user thường. Tuy nhiên, cần quyền sudo hoặc root nếu bạn muốn tải file vào các thư mục hệ thống được bảo vệ.
  • Distro/OS hỗ trợ: Hỗ trợ hầu hết các bản phân phối Linux (Ubuntu, Debian, CentOS, Fedora...), macOS và các hệ điều hành dựa trên Unix.
  • Package dependencies: Nếu hệ thống chưa cài đặt sẵn, bạn có thể cài đặt thông qua trình quản lý gói:
    • Ubuntu/Debian: sudo apt install wget
    • CentOS/RHEL/Fedora: sudo yum install wget hoặc sudo dnf install wget
    • macOS (qua Homebrew): brew install wget

Cú pháp lệnh wget là gì?

Lệnh wget hỗ trợ nhiều dạng cú pháp khác nhau để thực hiện việc tải tệp tin trên các hệ điều hành dựa trên Linux/Unix.

wget [OPTIONS] [URL]
wget [OPTIONS] [URL] [URL]...
wget -O [FILENAME] [URL]

Các tùy chọn của lệnh wget là gì?

Lệnh wget cung cấp nhiều nhóm tùy chọn bao gồm kiểm soát đầu ra, quản lý kết nối, xác thực, tải đệ quy và xử lý giao thức HTTPS.

Tùy chọn ngắn Tùy chọn dài Mô tả
-V --version wget --version hiển thị phiên bản wget đang được cài đặt trên hệ thống.
-h --help wget --help hiển thị danh sách các tùy chọn và cú pháp sử dụng lệnh.
-b --background wget --background chuyển tiến trình tải xuống sang chạy nền ngay sau khi khởi động.
-e --execute wget -e thực thi một lệnh thuộc kiểu wgetrc ngay sau khi đọc tệp cấu hình.
-o --output-file wget --output-file ghi toàn bộ thông báo log vào tệp được chỉ định thay vì hiển thị ra màn hình.
-a --append-output wget --append-output ghi thêm thông báo log vào tệp đã có, không ghi đè nội dung cũ.
-d --debug wget --debug in ra thông tin debug chi tiết để hỗ trợ chẩn đoán sự cố kết nối.
-q --quiet wget --quiet tắt toàn bộ đầu ra, không hiển thị thông báo nào trong quá trình tải.
-v --verbose wget --verbose hiển thị đầy đủ thông tin chi tiết trong quá trình tải xuống, đây là chế độ mặc định.
-nv --no-verbose wget --no-verbose tắt chế độ verbose nhưng vẫn hiển thị thông báo lỗi và thông tin cơ bản.
-i --input-file wget --input-file đọc danh sách URL từ tệp văn bản được chỉ định rồi tải lần lượt từng URL.
-F --force-html wget --force-html buộc wget xử lý tệp đầu vào từ -i như một tài liệu HTML.
-B --base wget --base chỉ định URL gốc để giải quyết các liên kết tương đối khi dùng cùng tùy chọn -F.
-t --tries wget --tries đặt số lần thử lại tối đa khi kết nối thất bại, mặc định là 20 lần.
-O --output-document wget --output-document lưu nội dung tải về vào tên tệp do người dùng chỉ định.
-nc --no-clobber wget --no-clobber không ghi đè lên tệp đã tồn tại trên máy tính cục bộ.
-c --continue wget --continue tiếp tục tải lại tệp còn dang dở từ điểm đã tải trước đó.
-N --timestamping wget --timestamping chỉ tải tệp mới hơn tệp cục bộ dựa trên thời gian sửa đổi.
-S --server-response wget --server-response hiển thị tiêu đề phản hồi HTTP hoặc FTP mà máy chủ gửi về.
-T --timeout wget --timeout đặt thời gian chờ tối đa tính bằng giây cho tất cả các loại kết nối.
-w --wait wget --wait chờ một khoảng thời gian nhất định tính bằng giây giữa các lần tải liên tiếp.
--waitretry wget --waitretry đặt thời gian chờ tối đa giữa các lần thử lại khi tải thất bại.
--random-wait wget --random-wait thêm khoảng chờ ngẫu nhiên giữa các lần tải để giảm tải cho máy chủ.
-Q --quota wget --quota giới hạn tổng dung lượng tải xuống theo đơn vị byte, kilobyte hoặc megabyte.
--limit-rate wget --limit-rate giới hạn tốc độ tải xuống theo đơn vị bytes mỗi giây.
-Y --proxy wget --proxy bật hoặc tắt việc sử dụng proxy bằng giá trị on hoặc off.
-e use_proxy --no-proxy wget --no-proxy bỏ qua cấu hình proxy cho tất cả các kết nối trong phiên làm việc.
--bind-address wget --bind-address buộc wget sử dụng địa chỉ IP cụ thể trên máy cục bộ khi thiết lập kết nối.
-4 --inet4-only wget --inet4-only chỉ cho phép kết nối qua giao thức IPv4.
-6 --inet6-only wget --inet6-only chỉ cho phép kết nối qua giao thức IPv6.
--user wget --user cung cấp tên đăng nhập cho xác thực HTTP hoặc FTP.
--password wget --password cung cấp mật khẩu cho xác thực HTTP hoặc FTP.
--ask-password wget --ask-password yêu cầu người dùng nhập mật khẩu trực tiếp từ bàn phím thay vì truyền qua dòng lệnh.
--http-user wget --http-user chỉ định tên đăng nhập riêng cho xác thực HTTP.
--http-password wget --http-password chỉ định mật khẩu riêng cho xác thực HTTP.
--no-http-keep-alive wget --no-http-keep-alive tắt tính năng giữ kết nối HTTP liên tục giữa các yêu cầu.
--no-cache wget --no-cache yêu cầu máy chủ không trả về nội dung được lưu trong bộ nhớ đệm.
--no-cookies wget --no-cookies tắt toàn bộ việc sử dụng cookie trong phiên kết nối HTTP.
--load-cookies wget --load-cookies đọc cookie từ tệp được chỉ định trước khi bắt đầu kết nối.
--save-cookies wget --save-cookies lưu toàn bộ cookie nhận được trong phiên vào tệp được chỉ định.
--keep-session-cookies wget --keep-session-cookies lưu cả cookie phiên thường bị bỏ qua khi ghi vào tệp.
--post-data wget --post-data gửi yêu cầu POST với dữ liệu được chỉ định dưới dạng chuỗi văn bản.
--post-file wget --post-file gửi yêu cầu POST với nội dung lấy từ tệp được chỉ định.
--referer wget --referer đặt giá trị tiêu đề HTTP Referer để giả lập nguồn truy cập.
-U --user-agent wget --user-agent thay thế chuỗi định danh trình duyệt mặc định bằng giá trị tùy chỉnh.
--header wget --header thêm một tiêu đề HTTP tùy chỉnh vào yêu cầu gửi đến máy chủ.
--max-redirect wget --max-redirect giới hạn số lần chuyển hướng tối đa cho mỗi yêu cầu HTTP.
--secure-protocol wget --secure-protocol chỉ định phiên bản giao thức SSL hoặc TLS được phép sử dụng.
--https-only wget --https-only chỉ tải các URL có giao thức HTTPS, bỏ qua toàn bộ URL dùng HTTP thường.
--no-check-certificate wget --no-check-certificate bỏ qua kiểm tra chứng chỉ SSL của máy chủ khi kết nối HTTPS.
--certificate wget --certificate chỉ định tệp chứng chỉ phía client dùng cho xác thực SSL.
--private-key wget --private-key chỉ định tệp khóa riêng tư dùng kết hợp với chứng chỉ client.
--ca-certificate wget --ca-certificate chỉ định tệp chứa danh sách chứng chỉ CA tin cậy để xác minh máy chủ.
--ca-directory wget --ca-directory chỉ định thư mục chứa các tệp chứng chỉ CA dùng để xác minh máy chủ.
-r --recursive wget --recursive bật chế độ tải đệ quy, cho phép tải theo liên kết từ trang đã chỉ định.
-l --level wget --level giới hạn độ sâu tối đa khi tải đệ quy, mặc định là 5 cấp.
--delete-after wget --delete-after xóa tệp đã tải xuống sau khi hoàn tất, thường dùng để kiểm tra liên kết.
-k --convert-links wget --convert-links chuyển đổi các liên kết trong tài liệu đã tải để có thể duyệt ngoại tuyến.
-K --backup-converted wget --backup-converted sao lưu tệp gốc trước khi chuyển đổi liên kết bằng tùy chọn -k.
-m --mirror wget --mirror bật chế độ nhân bản toàn bộ trang web, tương đương kết hợp -r -N -l inf --no-remove-listing.
-p --page-requisites wget --page-requisites tải tất cả tài nguyên cần thiết như ảnh, CSS, JavaScript để hiển thị đầy đủ trang.
--strict-comments wget --strict-comments áp dụng xử lý nghiêm ngặt đối với chú thích HTML khi phân tích liên kết.
-A --accept wget --accept chỉ tải các tệp có phần mở rộng hoặc kiểu MIME nằm trong danh sách cho phép.
-R --reject wget --reject bỏ qua các tệp có phần mở rộng hoặc kiểu MIME nằm trong danh sách loại trừ.
--accept-regex wget --accept-regex chỉ tải các URL khớp với biểu thức chính quy được chỉ định.
--reject-regex wget --reject-regex bỏ qua các URL khớp với biểu thức chính quy được chỉ định.
-D --domains wget --domains giới hạn tải đệ quy chỉ trong danh sách tên miền được chỉ định.
--exclude-domains wget --exclude-domains loại trừ các tên miền trong danh sách ra khỏi quá trình tải đệ quy.
--follow-ftp wget --follow-ftp cho phép theo dõi và tải các liên kết FTP tìm thấy trong tài liệu HTML.
--follow-tags wget --follow-tags chỉ theo dõi các thẻ HTML cụ thể được liệt kê khi phân tích liên kết.
--ignore-tags wget --ignore-tags bỏ qua các thẻ HTML cụ thể được liệt kê khi phân tích liên kết.
-H --span-hosts wget --span-hosts cho phép tải đệ quy vượt qua sang các tên miền khác khi gặp liên kết ngoài.
-L --relative wget --relative chỉ theo dõi các liên kết tương đối trong tài liệu HTML khi tải đệ quy.
-I --include-directories wget --include-directories chỉ tải nội dung từ các thư mục nằm trong danh sách cho phép.
-X --exclude-directories wget --exclude-directories bỏ qua nội dung từ các thư mục nằm trong danh sách loại trừ.
-np --no-parent wget --no-parent ngăn wget đi ngược lên thư mục cha khi tải đệ quy.
-nd --no-directories wget --no-directories lưu tất cả tệp tải về vào thư mục hiện tại, không tạo cấu trúc thư mục.
-x --force-directories wget --force-directories buộc tạo cấu trúc thư mục đầy đủ dù URL không yêu cầu.
-nH --no-host-directories wget --no-host-directories không tạo thư mục gốc theo tên máy chủ khi lưu tệp tải về.
--protocol-directories wget --protocol-directories thêm tên giao thức như http hoặc ftp vào đầu đường dẫn thư mục lưu tệp.
--cut-dirs wget --cut-dirs bỏ đi một số cấp thư mục đầu tiên trong URL khi tạo cấu trúc lưu trữ cục bộ.
-P --directory-prefix wget --directory-prefix chỉ định thư mục gốc dùng để lưu toàn bộ tệp tải về, mặc định là thư mục hiện tại.

xem thêm: Networking and Communication

Sử dụng lệnh wget trong thực tế như thế nào?

Các ví dụ dưới đây mô phỏng các kịch bản tải tài nguyên thường gặp của quản trị viên hệ thống và kỹ sư DevOps.

wget là gì? [Tải một tệp tin mặc định]

wget https://example.com/file.zip

Lệnh tải tệp tin về thư mục làm việc hiện tại. Trong thực tế, đây là cách nhanh nhất để lấy các gói cài đặt từ các URL công khai.

wget -O là gì? [Lưu tệp với tên tùy chỉnh]

wget -O custom_name.zip https://example.com/file.zip

Lưu tệp tin được tải về với một tên khác so với tên gốc trên server. Trên môi trường production, việc này giúp chuẩn hóa tên tệp theo quy tắc đặt tên của hệ thống hoặc dự án.

wget -c là gì? [Tiếp tục tải tệp tin bị gián đoạn]

wget -c https://example.com/large-dataset.iso

Tiếp tục quá trình tải xuống đối với các tệp tin đã có một phần dữ liệu trên máy cục bộ. Trong thực tế, tham số này cực kỳ quan trọng khi tải các file ISO hoặc database dung lượng lớn qua kết nối mạng không ổn định.

wget -r là gì? [Tải toàn bộ nội dung một website]

wget -r -np -k https://example.com/docs/

Tải xuống toàn bộ thư mục tài liệu và chuyển đổi các liên kết để xem ngoại tuyến. Trong các kịch bản backup hoặc lưu trữ tài liệu kỹ thuật, tùy chọn này giúp tạo ra một bản sao cục bộ đầy đủ của website.

wget -b là gì? [Tải tệp trong chế độ chạy ngầm]

wget -b https://example.com/very-large-file.tar.gz
nohup: ignoring input and appending output to 'nohup.out'

Thực hiện quá trình tải xuống dưới nền và ghi nhật ký (log) vào một tệp riêng biệt. Trên môi trường server, việc sử dụng chế độ chạy ngầm cho phép bạn ngắt kết nối terminal mà không làm gián đoạn tiến trình tải tệp lớn.

Tại sao lệnh wget không tải được file hoặc báo lỗi kết nối?

Trong quá trình sử dụng thực tế, người dùng thường gặp phải các trở ngại liên quan đến quyền truy cập, chứng chỉ bảo mật hoặc cấu hình mạng khi thực thi lệnh wget.

Lỗi từ chối truy cập do thiếu quyền hạn (Permission denied)

wget https://example.com/data/config.tar.gz
ERROR: Could not open file for writing

Lỗi xảy ra khi người dùng cố gắng tải file vào một thư mục hệ thống mà tài khoản hiện tại không có quyền ghi.

Lỗi chứng chỉ SSL/TLS không hợp lệ

wget https://expired-ssl-site.com/file.zip
ERROR: The certificate of ‘expired-ssl-site.com’ is not trusted!

Lệnh wget sẽ dừng tiến trình tải nếu chứng chỉ SSL của máy chủ đã hết hạn hoặc không được xác thực bởi các CA tin cậy.

Lỗi không tìm thấy tài nguyên (404 Not Found)

wget https://example.com/non-existent-file.txt
--2023-10-27T10:00:00Z-- https://example.com/non-existent-file.txt
404 Not Found [text/html]

Lỗi này xuất hiện khi đường dẫn URL cung cấp không tồn tại trên máy chủ đích.

Lỗi kết nối bị từ chối bởi tường lửa hoặc Proxy

wget https://secure-server.com/update.bin
Connecting to secure-server.com|192.168.1.10|:443... failed: Connection refused

Trường hợp này xảy ra khi máy chủ đích từ chối kết nối hoặc có thiết bị mạng trung gian ngăn chặn gói tin truyền tải.

Quy trình thực tế dùng wget trong dự án triển khai Server Web?

Trong kịch bản thiết lập một máy chủ web mới, wget đóng vai trò là công cụ để tải về các gói cài đặt, mã nguồn ứng dụng và các tệp cấu hình từ internet.

Bước 1: Tải gói cài đặt từ máy chủ lưu trữ

wget https://example.com/packages/nginx-1.24.tar.gz

Lệnh cho phép bạn tải tệp nén mã nguồn Nginx trực tiếp về thư mục hiện hành để chuẩn bị cho quá trình biên dịch.

Bước 2: Tải tệp với tên khác để quản lý phiên bản

wget -O config_prod.conf https://example.com/configs/default.conf

Sử dụng tham số -O giúp bạn lưu tệp tải về với một tên cụ thể, giúp phân biệt giữa cấu hình môi trường production và staging.

Bước 3: Tải toàn bộ nội dung một trang web để kiểm tra offline

wget --mirror --convert-links https://example.com/docs/

Lệnh này thực hiện sao chép toàn bộ tài liệu hướng dẫn từ máy chủ về máy cục bộ, đồng thời điều chỉnh các liên kết để bạn có thể đọc offline.

Bước 4: Tiếp tục tải xuống tệp tin khi kết nối bị ngắt

wget -c https://example.com/large-data-file.iso

Trong trường hợp đường truyền không ổn định, tham số -c cho phép bạn tiếp tục tải tệp từ vị trí bị gián đoạn thay vì phải tải lại từ đầu.

Khi thực hiện quản trị VPS, lệnh wget thường gặp lỗi SSL/TLS do chứng chỉ hệ thống cũ hoặc cấu hình máy chủ đích không tương thích. Trong các trường hợp này, việc thêm tham số --no-check-certificate cho phép lệnh tiếp tục quá trình tải xuống mà không cần xác thực chứng chỉ. Một vấn đề phổ biến khác trên VPS là việc thiếu file đích hoặc sai đường dẫn thư mục. Việc sử dụng wget -O /path/to/file [URL] giúp xác định chính xác vị trí lưu trữ và tên tệp tin ngay khi tải về. Ngoài ra, khi triển khai các script tự động hoặc cron job, việc thiếu tham số -q (quiet mode) sẽ khiến nhật ký hệ thống bị lấp đầy bởi các thông tin tiến trình tải. Điều này gây khó khăn cho việc debug lỗi hệ thống sau này. Việc kết hợp các tham số này giúp quá trình quản lý server trở nên ổn định hơn.

Những câu hỏi thường gặp về lệnh wget?

Dưới đây là các tình huống thực tế mà người dùng thường gặp phải khi sử dụng lệnh wget để tải dữ liệu từ internet.

Làm thế nào để tải một tệp tin và lưu với tên khác?

Bạn có thể sử dụng tham số -O để chỉ định tên tệp tin mới sau khi tải về.

wget -O filename_moi.zip https://example.com/file_goc.zip

Làm sao để tải tệp tin trong trường hợp kết nối bị ngắt quãng?

Tham số -c cho phép wget tiếp tục tải xuống một tệp tin đang tải dở thay vì bắt đầu lại từ đầu.

wget -c https://example.com/large-file.iso

Lệnh wget có thể tải toàn bộ nội dung của một trang web không?

wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains example.com --no-parent https://example.com

Cách tải tệp tin từ một máy chủ yêu cầu xác thực người dùng?

Bạn sử dụng tham số --user và --password để cung cấp thông tin đăng nhập cho máy chủ.

wget --user=myusername --password=mypassword https://example.com/protected-file.pdf

Làm thế nào để tải tệp tin trong chế độ chạy ngầm?

Tham số -b cho phép wget chuyển sang chế độ chạy nền và ghi lại nhật ký hoạt động vào tệp log.

wget -b https://example.com/big-data.tar.gz
[nohup attached. Output written to 'wget-log']

Làm sao để giới hạn tốc độ tải xuống để không chiếm dụng băng thông?

Tham số --limit-rate cho phép bạn kiểm soát tốc độ tải tối đa của quá trình truyền tải.

wget --limit-rate=500k https://example.com/file.zip

Lệnh wget là một công cụ dòng lệnh vô cùng mạnh mẽ dùng để tải xuống các tệp tin từ internet thông qua các giao thức như HTTP, HTTPS và FTP. Bạn có thể dễ dàng tối ưu hóa công việc bằng cách sử dụng tham số -O để đặt tên tệp tùy ý hoặc dùng -c để tiếp tục tải xuống các tệp bị gián đoạn giữa chừng, rất tiện lợi trong những kết nối không ổn định đúng không? Việc làm chủ công cụ này chắc chắn sẽ giúp trải nghiệm quản trị hệ thống của bạn trở nên nhanh chóng và hiệu quả hơn rất nhiều. Chúc bạn thành công!