NỘI DUNG
Tiếp theo nội dung Phần 7: Nâng cấp kỹ năng giám sát hệ thống và file với tail command, kỳ này tôi sẽ chuyển sang một nội dung cực kỳ thiết yếu như nhu cầu hít thở khí trời – đó là download file. Đối tượng được đưa vô tầm ngắm để chém gió trong kỳ này là thằng wget.
Ngoài ra, bàn về việc download trên Linux mà không đề cập đến curl là một thiếu sót lớn cũng như ăn thịt gà mà thiếu lá chanh. Vấn đề ở đây là trời đã sinh wget sau còn sinh curl?
Để trả lời câu hỏi này, bạn sẽ cần lưu ý các điểm khác biệt quan trọng sau để có thể rút đúng “hàng” ra chiến cho đúng hoàn cảnh:
- wget thuần command line trong khi curl được buff khá nhiều skill nhờ dựa libcurl;
- curl hỗ trợ nhiều giao thức hơn wget bao gồm FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP, RTMP và RTSP;
- curl cung cấp nhiều phương thức upload và gửi dữ liệu trong khi wget chỉ hỗ trợ HTTP POST đơn thuần;
- wget có chiêu giết trùm cuối với khả năng download recursively (tôi sẽ nói kỹ hơn ngay bên dưới).
#1 wget và bí kiếp sinh tồn trong những ngày bị cắt Net
wget là công cụ command line hỗ trợ tải trang web, file với một số đặc điểm nổi bật sau:
- Cho phép download recursively (download đệ quy, duyệt lần lượt toàn bộ cấu trúc của trang) nên rất thuận tiện trong việc hốt toàn bộ website về coi offline;
- Hỗ trợ các giao thức phổ biến như HTTP, HTTPS, FTP;
- Có thể dừng và phục hồi quá trình download;
- Có thể hoạt động ở chế độ nền (background) nên không cần tương tác.
Thằng này thì khá phổ biến trên các Linux Distro (bạn có thể xem thêm thông về Linux Distro trong nội dung Giải ngố Linux – Phần 1: Linux là gì?), nhưng nếu lỡ bạn số nhọ xài đúng bản không có sẵn wget thì cũng không có gì căng. Việc cài đặt trên Debian Distro (bao gồm thằng Kali Linux) có thể thực hiện với command:
apt-get install wget
Lưu ý:
- Trước khi thực hiện việc cài cắm, việc đầu tiên bạn nên làm là kiểm tra xem trên hệ thống đã có sẵn wget chưa với command
wget -V
(hoặcwget --version
) - Vấn đề cài cắm trên Debian Distro với apt/apt-get tôi có đề cập chi tiết trong Giải ngố Kali Linux – Phần 3: Quản lý package và vấn đề Kali Linux update với Advanced Package Tool – apt. Bạn có thể xem thêm nếu cần.

Rồi, vậy là xong phần dạo đầu, vô phần chính, wget có thể được sử dụng với cú pháp đơn giản như sau:
wget [option] [url]
Nhìn cú pháp đơn sơ thế thôi chứ bạn thử chạy với option -h thì nó cũng hơi rối mắt đấy.

Bạn thấy đấy, tôi chỉ minh hoạ một phần cái output của của command wget -h
nhưng đã thấy cả đống option chi tiết. Điểm sáng là đầu ra của thằng wget -h
này được và trình bày khá rõ ràng và sắp xếp để có thể tham khảo nhanh theo các nhóm chức năng chính bao gồm:
- Nhóm Startup: liên quan đến quá trình khởi động wget, bao gồm 2 option -h, -V nói trên kèm theo vấn đề chạy nền và thực thi;
- Nhóm Logging and input file: ghi log xử lý file đầu ra;
- Nhóm Download: đám này có vẻ dài nhất (hiển nhiên rồi, chức năng chính mà ngắn hơn mấy cái râu ria thì giang hồ nó ném đá cho);
- Nhóm Directory: liên quan đến thư mục download;
- Nhóm liên quan đến HTTP/HTTPS/HSTS/FTP/FTPS và Warc (Web Archive)
- Cuối cùng là nhóm Recursive làm nên tai tiếng, à không, tên tuổi cho wget.
Với các đống option dài ngoằng nói trên thì hiển nhiên tôi sẽ không demo từ A đến Z hết mà chỉ có thể múa lửa mình họa vài nhát cho vui thôi. Rồi, tôi quất thử một cái đơn giản với:
wget https://www.gnu.org

Như bạn thấy, sau khi phân giải, kết nối và gửi HTTP request, tôi nhận được kết quả trả về lưu thành file index.html trong thư mục hiện hành.
Nếu không thích tên mặc định tôi có thể chỉ định lại tên mới với option -O (--output-document)
như sau:
wget https://www.gnu.org -O my_index.hmtl

Tuy nhiên, nãy giờ tôi chơi kiểu ăn tạp, cứ quất cái url vô ròi coi thằng wget nó hốt cái gì về thì tôi “ăn” cái đó. Nếu thuộc dạng “tinh tế” hơn, tôi có thể thực hiện trước bước thăm dò để tìm đúng thứ muốn ăn với option --spider
. Nói cho dễ hình dung, tùy chọn này thả cho “nhện” bò trên trang để kiểm tra coi có hàng không trước khi download, nếu có hàng ngon nó sẽ trả về “Remote file exist…” (còn nếu không có thì bạn sẽ thấy nó báo “Remote file does not exist — broken link!!!”.
Tôi thử tìm lại file index.html với command:
wget --spider https://www.gnu.org/index.html

Như nói trên, command này nó báo “Remote file exist…” vì file index.html hiện có tại vị trí tôi thả “nhện”. Nếu thử đổi tên file theo ví dụ sau tôi sẽ không tìm thấy gì.
wget --spider https://www.gnu.org/my_index.html

Ngoài ra, liên quan đến phần download, bạn cũng có thể sử dụng các tùy chọn hay ho khác như sau:
- Option
-i (--input-file)
: download theo danh sách chỉ định trong input file với cú phápwget -i input_file.txt
; - Option
-b (--background)
: download ở chế độ nền với cú pháp wget -b url; - Option
-c (--continue)
: phục hồi quá trình download đang dang dở với cú phápwget -c url
; - Option
--no-check-certificate
: hốt luôn hàng từ mấy trang không chạy https (cái này biết cho vui thôi, nếu thật sự muốn xài thì bạn phải thật sự hiểu rõ bạn đang làm gì nhé); - Option
--limit-rate
: giảm băng thông để tránh bị ăn gạch vì chiếm dụng hết tài nguyên với cú phápwget url --limit-rate rate_value
. Lưu ý rate_value là con số + k (kilobit) hoặc m (megabit). Ví dụ 1000m tương ứng set limit 1000 megabit (xài rate này thì đừng hỏi vì sao bị team cho ăn gạch).
Rồi đến đoạn giết trùm cuối với combo đỉnh của chóp – cào hết cả trang web về để đọc offline (rất phù hợp khi bạn sắp bị cắt Internet) nhờ vào khả năng xử lý đệ quy (recursive) như tôi nói ở phần đầu. Khả năng hốt hết cả trang web về và tạo định dạng “đẹp” tùy thuộc vào đặc thù riêng của từng trang và khả năng tùy chỉnh các option liên quan của bạn (chi tiết ở phần recusive và download trong wget help ở đầu bài). Phương án thô sơ thủ công mỹ nghệ nhất là chỉ dùng option -r (--recursive)
để bật chế độ đệ quy và -np (--no-parent)
để spider không bò lên thư mục cha. Ví dụ minh họa như sau:
wget -r -np https://www.gnu.org/doc/doc.html

Lưu ý: Quá trình này có thể rất mất thời gian nên bạn có thể phải sử dụng option -c để phục hồi khi cần. Trường hợp này tôi múa lửa mình họa nên có thể tắt với Ctrl + C ngay trong terminal đang chạy (hoặc pkill -9 wget
để giết nó ngay trong chế độ nền)
Lúc này bạn sẽ thấy kết quả hốt về lưu vào thư mục www.gnu.org như sau.

#2 Vài đường dạo đầu với curl
Cũng giống như wget, để biết coi hệ thống có curl chưa bạn có thể kiểm tra với:
curl -V
(hoặc curl --version
)

Tương tự, nếu chưa có, trên Debian, bạn có thể cài với
apt-get install curl
Cú pháp sử dụng curl cũng gần giống như wget:
curl [option] [url]
Bạn cũng sẽ có thể coi thông tin các option với:
curl -h

Ở cấp độ đơn giản nhất, bạn có thể dùng curl để đọc nội dung của url với cú pháp kiểu như:
curl https://www.gnu.org
Lưu ý lúc này nó sẽ hiển thị thông tin lấy được ngay trên terminal, nếu muốn lưu lại file thì bạn phải dùng option -o như sau:
curl -o output_curl.html https://www.gnu.org

Ngoài ra, nếu không thích option này thì bạn có thể kết hợp redirection như tôi đề cập ở nội dung Giải ngố Kali Linux – Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command với cú pháp như sau:
curl https://www.gnu.org > redirect_out.html

Nếu cần xúc nhiều url cùng lúc thì bạn dùng cú pháp:
curl -O https://www.gnu.org/gnu/gnu.html -O https://www.gnu.org/doc/doc.html

Lưu ý: Option -O cho phép curl lấy luôn tên file căn cứ theo cái url (doc.html và gnu.html trong ví dụ trên) nên bạn không cần cung cấp thông tin filename.
Ngoài ra, tương tự wget, bạn cùng có thể phục hồi quá trình download của curl với -C – và giới hạn tốc độ với limit-rate.
Thực sự đến đây thì tôi nghĩ còn chưa xong phần dạo đầu với curl chứ đừng nói chi đến các “bí thuật” của curl. Tuy nhiên, mục tiêu kỳ này không phải tập trung khai thác sức mạnh của curl nên tôi xin phép khất lại để trao đổi trong một dịp khác.
2 thoughts on “Giải ngố Kali Linux – Phần 8: Download file trên Linux với wget và curl”