Sử dụng Wget căn bản

Nếu bạn là một người yêu thích các công cụ dòng lệnh trên hệ điều hành Linux và Windows. Và tự hỏi rằng có công cụ dòng lệnh nào giúp bạn tải các tập tin trên Internet xuống máy tính của bạn không? Vâng, có một công cụ sẽ giúp bạn làm công việc tải xuống các tập tin, đó chính là wget.

Wget là gì?

Wget là tiện ích mạng không tương tác (non-interactive) để tải các tập tin từ Internet bằng cách sử dụng các giao thức phổ biến nhất, đó là HTTP, HTTPS và FTP.

Wget là công cụ không tương tác bởi vì nó có thể hoạt động dưới chế độ nền (background) sau khi đăng xuất khỏi hệ thống. Ngược lại, nếu dùng các trình duyệt web để tải xuống các tập tin thì cần phải có người dùng tương tác.

Wget đi theo các liên kết (link) trong các trang HTML và XHTML. Và có thể tải xuống và tạo lại cấu trúc thư mục giống như website gốc, đây gọi là truy xuất đệ quy (recursive retrieval).

Vì vậy, wget thường dùng để tải xuống toàn bộ website nhằm tạo những bản sao lưu trữ và nó còn có thể dạo quanh website giống như những con robots của Google và Bing, tìm kiếm các liên kết gãy (broken links). Khi wget bò (crawl) khắp website thì nó lúc nào cũng tuân thủ theo chỉ dẫn của tập tin robots.txt.

Cài đặt wget

Trước khi dùng Wget thì bạn cũng cần phải cài đặt, điều này còn tùy thuộc vào hệ điều hành nào nữa.

Linux

Mặc định thì các bản phân phối của hệ điều hành Linux như Ubuntu, Fedora đều có sẵn Wget rồi. Nên bạn không cần phải cài đặt gì hết, hơn nữa lệnh wget rất phổ biến nên thường thì các bản phân phối này đều có. Còn nếu không có thì bạn chạy câu lệnh sau:

[code]apt-get install wget[/code]

hoặc

[code]yum install wget[/code]

Windows

Ngược lại, hệ điều hành Windows không có Wget nên bắt buộc bạn phải tự cài đặt. Tuy nói là cài đặt nhưng thực tế là bạn chỉ việc tải xuống rồi dùng thôi.

Đầu tiên, truy cập vào trang eternallybored.org để tải xuống. Trang này sẽ liệt kê các phiên bản gần đây của Wget, nó còn chia ra 2 phiên bản 32 bit hoặc 64 bit, nếu hệ điều hành của bạn là 32 bit thì hãy chọn 32 bit hoặc ngược lại.

Tải xuống wget

Trên trang eternallybored.org còn có cả mã nguồn của wget, nếu bạn là lập trình viên và quan tâm xem wget được viết như thế nào, bạn có thể tải xuống xem mã nguồn của wget.

Cú pháp của wget

Để sử dụng được wget thì trước tiên bạn cần phải biết cú pháp dòng lệnh của wget. Cú pháp như sau:

[code]wget [option]... [URL]...[/code]

Giải thích cú pháp:

  • Option: tùy chọn tham số của wget.
  • URL: bạn cần phải cung cấp URL thì wget mới có thể tải xuống các tập tin được.

Các tùy chọn và tham số của wget

Bạn hãy mở Terminal trên hệ điều hành Linux hoặc Command Prompt trên hệ điều hành Windows để xem tham số của lệnh wget, bằng cách dùng lệnh

[code]wget -h[/code]
Tham số của wget

Các tham số của wget được chia làm nhiều phần tùy chọn khác nhau, chẳng hạn như Startup, Logging, HTTPS, Directories và Recursive. Đặc biệt là phần Download có nhiều tham số nhất.

Tùy chọn Startup

Những tham số dùng để tùy chỉnh khởi động của wget.

Tùy chọn Startup của wget

Tùy chọn Logging

Những tham số dùng để tùy chỉnh nhập/xuất của wget.

Tùy chọn Logging của wget

Tùy chọn HTTPS

Những tham số dùng để tùy chỉnh SSL/TLS của wget.

Tùy chọn HTTPS của wget

Tùy chọn Directories

Những tham số dùng để tùy chỉnh thư mục của wget.

Tùy chọn Directories của wget

Tùy chọn Recursive

Những tham số dùng để tùy chỉnh truy xuất của wget.

Tùy chọn Recursive của wget

Cách sử dụng wget

#1 Kiểm tra phiên bản

Bạn cần kiểm tra phiên bản wget của mình có phải là mới nhất không? Bằng cách dùng tham số -V hoặc --version.

[code]wget –V[/code]

hoặc

[code]wget --version[/code]
Phiên bản của wget

#2 Tải xuống tập tin

Muốn dùng wget tải xuống được các tập tin thì bạn cần phải cung cấp cho wget một địa chỉ trực tiếp. Bạn không thể nào đưa cho wget tải xuống các địa chỉ gián tiếp như Mediafire, Dropbox và Box. Giả sử muốn tải xuống Autohotkey có địa chỉ trực tiếp như https://autohotkey.com/download/ahk.zip thì ta dùng lệnh sau:

[code]wget https://autohotkey.com/download/ahk.zip[/code]
wget - tải một tập tin

#3 Không hiển thị các thông tin dài dòng

Mặc định thì wget sẽ hiển thị các thông tin dài dòng (verbose) ra ngoài màn hình với tham số -v hoặc --verbose. Bạn tắt được những thông tin bằng tham số -nv hoặc --no-verbose.

[code]wget -nv https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget –no-verbose https://autohotkey.com/download/ahk.zip[/code]
wget không hiển thị dài dòng

#4 Tải tập tin một cách im lặng

Tải xuống tập tin một cách im lặng nghĩa là nó sẽ không xuất một thông báo nào ra màn hình hết. Bằng cách dùng tham số --quiet hoặc –q.

[code]wget –q https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget –-quiet https://autohotkey.com/download/ahk.zip[/code]
wget tải tập tin trong chế độ im lặng

#5 Kiểm tra sự tồn tại của tập tin

Với wget, bạn còn có thể kiểm tra được sự tồn tại của tập tin trước khi tải xuống. Bạn chỉ việc khai báo tham số --spider với wget.

[code]wget–spider https://autohotkey.com/download/ahk.zip[/code]

Nếu tập tin đó tồn tại thì bạn sẽ nhận được dòng chữ Remote file exists.

wget tập tin tồn tại

Ngược lại, với một URL không có thực thì nhận được Remote file does not exist -- broken link!!!.

wget tập tin không tồn tại

#6 Tải tập tin và lưu lại với tên khác

Thông thường khi tải xuống thì tên tập tin đều là tên mặc định trên máy chủ (server). Chỉ cần dùng tham số -O (chữ o viết in hoa) hoặc --output-document và đi theo sau những tham số này là cái tên mà bạn muốn đặt lại. Tham số này còn được dùng để ghi đè (overwrite) tập tin.

[code]wget https://autohotkey.com/download/ahk.zip –O AutoHotkey.zip[/code]

hoặc

[code]wget https://autohotkey.com/download/ahk.zip --output-document Autohotkey.zip[/code]
wget lưu tập tin dưới tên khác

#7 Tải xuống và lưu tại một thư mục khác

Thông thường khi tải xuống một tập tin nào đó thì tập tin đó thường nằm trong cùng một thư mục với wget. Bạn có thể chỉ định được tập tin đó sẽ nằm ở một thư mục khác sau khi tải xuống. Dùng tham số -P hoặc --directory-prefix và theo sau tham số là một đường dẫn (path) hợp lệ.

[code]wget -P d:\ https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget --directory-prefix d:\ https://autohotkey.com/download/ahk.zip[/code]
wget lưu tập tin vào thư mục khác

#8 Tiếp tục tải xuống khi chưa hoàn thành

Nếu mạng chậm hoặc rớt mạng sẽ khiến bạn không thể nào hoàn thành việc tải xuống của mình, bắt buộc bạn phải dừng lại quá trình tải xuống. Nhưng sau khi mạng trở lại bình thường thì bạn có thể dùng wget để tải xuống tiếp những gì còn đang dở dang bằng tham số -c hoặc --continue.

[code]wget –c https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget –-continue https://autohotkey.com/download/ahk.zip[/code]
wget tiếp tục tải phần còn lại

#9 Bỏ qua chứng chỉ số SSL không hợp lệ

Giao thức HTTPS khá phổ biến trên Internet, nếu một website có HTTPS thì sẽ được người truy cập tin hơn vào độ bảo mật của website đó. Nhưng nếu truy cập vào một website có chứng chỉ số SSL không hợp lệ thì các trình duyệt web như Chrome và Firefox sẽ ngăn cản và không cho bạn truy cập.

Với wget, bạn có thể phớt lờ đi những chứng chỉ số không hợp lệ bằng cách dùng tham số --no-check-certificate.

[code]wget --no-check-certificate https://autohotkey.com/download/ahk.zip[/code]
wget bỏ kiếm tra SSL

#10 Giới hạn tốc độ tải xuống

Đôi lúc bạn cần phải giới hạn tốc độ của wget khi tải xuống một tập tin với kết nối Internet chậm. Hoặc bạn đang dùng chung Internet với người khác nên không muốn wget sẽ chiếm hết băng thông. Chỉ cần dùng tham số --limit-rate là bạn sẽ giới hạn lại được tốc độ tải của wget.

[code]wget https://autohotkey.com/download/ahk.zip --limit-rate 100k[/code]
wget giới hạn tốc độ

Theo sau --limit-rate là tốc độ mà bạn muốn giới hạn, chữ k là viết tắt kilobit, còn m là megabit.

#11 Tải xuống các tập tin từ danh sách có sẵn

Bạn có một danh sách các tập tin cần tải xuống và muốn tải xuống hết trong một lần thì chỉ việc dùng tham số -i hoặc --input-file. Giả sử bạn có 2 URL là:

Chỉ việc lưu 2 URL vào một tập tin list.txt. Và sau đó đánh lệnh

[code]wget –i list.txt[/code]

hoặc

[code]wget --input-file list.txt[/code]

Lúc này, wget sẽ đi theo những địa chỉ có trong tập tin list.txt và nó sẽ tải xuống hết.

wget nhập danh sách từ tập tin
wget nhập danh sách từ tập tin

#12 Tải xuống dưới chế độ nền

Wget có thể tải xuống tập tin dưới chế độ nền (background), toàn bộ quá trình tải xuống sẽ được ghi vào tập tin wget-log. Tham số -b hoặc --background sẽ giúp cho wget hoạt động dưới chế độ nền.

[code]wget –b https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget --background https://autohotkey.com/download/ahk.zip[/code]
wget chế độ nền

Quá trình tải xuống được ghi lại vào tập tin wget-log.

wget-log của wget

#13 Lấy thông tin của HTTP Response

Ngoài việc tải xuống các dữ liệu trên Internet thì wget còn hiển thị được thông tin HTTP Response của HTTP Header. Để lấy được HTTP Response thì ta dùng 2 tham số --spider, -S hoặc --server-response.

Tham số -S dùng để lấy thông tin về HTTP Response, còn tham số --spider thì không cho wget tải xuống bất cứ cái gì. Nếu bạn không khai báo tham số --spider thì wget sẽ lấy thông tin HTTP Response và tải xuống tập tin index.html của website.

[code]wget --spider --server-response https://passionery.blogspot.com[/code]

hoặc

[code]wget --spider -S https://passionery.blogspot.com[/code]
wget lấy HTTP Response

#14 Hiển thị thông tin gỡ lỗi

Bạn có thể bắt wget hiển thị các thông tin gỡ lỗi (debug) về quá trình tải xuống, những thông tin gỡ lỗi hữu ích trong việc chẩn đoán wget nếu nó hoạt động sai. Dùng tham số -d hoặc --debug là wget sẽ hiển thị toàn bộ thông tin gỡ lỗi.

[code]wget -d --spider https://autohotkey.com/download/ahk.zip[/code]

hoặc

[code]wget --debug --spider https://autohotkey.com/download/ahk.zip[/code]
wget gỡ lỗi

#15 Tải xuống toàn bộ website

Wget còn có thể tải xuống toàn bộ website để khi nào không có Internet thì bạn vẫn đọc được nội dung của website của đó. Các tham số dùng để tải xuống bản sao của một website có lẽ sẽ nhiều hơn bình thường. Giả sử muốn lưu trữ website có địa chỉ http://www.darkside.com.au/snow/ thì đánh lệnh sau:

[code]wget --mirror --convert-links --domains www.darkside.com.au --no-parent --page-requisites --adjust-extension --execute robots=off --user-agent "Mozilla/5.0 (X11; U; Linux; en-US; rv:1.9.1.16) Gecko/20110929 Firefox/3.5.16" --wait 2 --random-wait http://www.darkside.com.au/snow/[/code]

hoặc

[code]wget -m -k -D www.darkside.com.au -np -p -E -e robots=off -U "Mozilla/5.0 (X11; U; Linux; en-US; rv:1.9.1.16) Gecko/20110929 Firefox/3.5.16" -w 2 --random-wait http://www.darkside.com.au/snow/[/code]
wget tải toàn bộ website
wget tải toàn bộ website

Giải thích các tham số

--mirror (-m)
Tham số này dùng để tạo bản sao lưu trữ.
--convert-link (-k)
Sau khi hoàn tất việc tải xuống, wget sẽ chuyển đổi các liên kết trong HTML thành địa chỉ liên kết trong máy tính của bạn, điều này rất hữu ích khi bạn không có Internet nhưng muốn đọc những tài liệu đã tải xuống. Với ví dụ trên, nếu bạn không dùng tham số này thì những liên kết nằm trong trang HTML mà bạn tải xuống vẫn còn những địa chỉ như http:// và nó không phải là địa chỉ nội bộ trong máy tính của bạn. Chẳng hạn nếu bạn dùng tham số --convert-link thì địa chỉ http://www.darkside.com.au/snow/manual.html sẽ biến thành địa chỉ /snow/manual.html.
--domains (-D)
Chỉ cho phép wget đi theo danh sách tên miền đã chỉ định. Với ví dụ trên, wget chỉ đi theo tên miền www.darkside.com.au. Ngoài ra, nếu gặp một tên miền khác chẳng hạn như www.ece.villanova.edu thì nó sẽ bỏ qua và không đi theo. Vì bạn chỉ muốn tải những trang trong thư mục snow của www.darkside.com.au chứ không phải là www.ece.villanova.edu
--no-parent (-np)
Không cho wget leo lên thư mục cha (parent directory). Với ví dụ trên, wget sẽ không đi lên thư mục cha của www.darkside.com.auwww.darkside.com.au/ mà chỉ tải xuống những trang nằm trong thư mục snow (www.darkside.com.au/snow/). Nếu bạn muốn tải thư mục cha thì hãy bỏ qua tham số này.
--page-requisites (-p)
Khi dùng tham số này thì wget sẽ tải toàn bộ các tập tin cần thiết cho việc hiển thị các trang HTML. Những tập tin này bao gồm hình ảnh, âm thanh và CSS. Thông thường những tập tin này sẽ không được tải xuống cùng với những trang HTML.
--adjust-extension (-E)
Nếu một tập tin có kiểu là application/xhtml+xml hoặc text/html nhưng không phải là tên đuôi .html hoặc HTML (có chuỗi regex\.[Hh][Tt][Mm][Ll]?) thì nó sẽ thêm tiếp tố (suffix) .html trước tên đuôi của tập tin được tải xuống. Ví dụ, index.php sẽ biến thành index.php.html. Nếu không dùng tham số này thì bạn sẽ không thể mở được những tập tin .php sau khi đã tải xuống. Tuy là tên đuôi .php nhưng máy chủ web chỉ trả về các đoạn mã HTML thôi. Tên gọi cũ của tham số --adjust-extension--html-extension.
--user-agent (-U)
User agent mặc định của wget là Wget/version, version chính là số phiên bản hiện tại của wget. Có những website không cho wget tải xuống, vì vậy bạn cần phải giả mạo User agent. Theo sau tham số --user-agent (-U) chính là một chuỗi User agent.
--execute (-e)
Đối với những website có tập tin robots.txt không cho các cỗ máy tìm kiếm như Google và Bing bò trườn (crawl), bạn sẽ gặp khó khăn trong việc lưu trữ và tạo bản sao một website. Như từ đầu bài viết đã nói rằng, wget luôn tuân thủ các chỉ dẫn của tập tin robots.txt. Để tải xuống những website giống vậy thì bạn cần phải khai báo thêm tham số -e (--execute) có giá trị robots=off. Giả sử website ở ví dụ trên có chỉ dẫn robots.txt là không các robots truy cập thì bạn hãy thêm tham số -e (--execute) có giá trị robots=off để tải xuống. Theo --execute (-e) là một tập hợp lệnh nằm trong Wgetrc. Bạn có thể tham khảo thêm danh sách lệnh Wgetrc của wget để biết hết các các lệnh theo sau tham số --execute (-e).
--wait (-w)
Khoảng thời gian đợi giữa mỗi truy vấn gửi đến máy chủ. Với ví dụ trên, cứ khoảng 2 giây thì wget tiếp tục gửi truy vấn. Có một số máy chủ sẽ chặn lại wget vì liên tục gửi nhiều yêu cầu đến máy chủ.
--random-wait
Tham số này thường được kết hợp với --wait (-w).

Tổng kết

Qua bài viết trên, Passionery đã chia sẻ về cách việc tải xuống các tập tin hoặc thư mục trên mạng bằng wget. Những ví dụ ở trên chỉ là căn bản thôi, wget còn rất nhiều tham số khác nhau nữa phục vụ cho công việc tải xuống. Bạn có thể tham khảo đầy đủ các tham số của wget tại GNU Wget 1.18 Manual.

No comments:

Powered by Blogger.