Giới thiệu về lệnh curl trong Linux
Bạn đã từng nghe đến lệnh curl nhưng chưa thực sự rõ cách dùng và ứng dụng của nó trên hệ thống Linux là gì? Đây là một công cụ cực kỳ mạnh mẽ nhưng không phải ai cũng biết cách khai thác hết tiềm năng của nó. Đối với nhiều người dùng Linux, đặc biệt là những người mới bắt đầu, việc sử dụng curl để lấy dữ liệu từ một trang web hay tương tác với các API có thể còn khá bỡ ngỡ và phức tạp.
Vấn đề này thường dẫn đến việc bỏ lỡ một công cụ hiệu quả để tự động hóa công việc và quản lý hệ thống. Đừng lo lắng, bài viết này sẽ là người bạn đồng hành, giúp bạn tháo gỡ từng nút thắt. Chúng tôi sẽ hướng dẫn bạn từ những khái niệm cơ bản nhất như Bash là gì, Linux là gì, cách cài đặt, cho đến cú pháp và các ví dụ thực tiễn. Qua đó, bạn sẽ tự tin sử dụng curl để truy xuất dữ liệu một cách chuyên nghiệp và hiệu quả.
Giới thiệu và cài đặt lệnh curl trên Linux
H3: Curl là gì? Ứng dụng trong Linux
Curl, viết tắt của “Client for URLs”, là một công cụ dòng lệnh mã nguồn mở mạnh mẽ dùng để truyền dữ liệu với cú pháp URL. Về cơ bản, nó cho phép bạn gửi yêu cầu và nhận dữ liệu từ các máy chủ trên mạng. Bạn có thể coi curl như một trình duyệt web không có giao diện đồ họa, hoạt động trực tiếp từ cửa sổ terminal.
Mục đích chính của curl là tương tác với các URL. Nó hỗ trợ rất nhiều giao thức phổ biến như HTTP, HTTPS, FTP, FTPS, và nhiều hơn nữa. Điều này làm cho curl trở thành một công cụ cực kỳ linh hoạt. Trong môi trường Linux, curl được sử dụng rộng rãi trong nhiều tình huống thực tế. Các nhà phát triển dùng nó để kiểm tra các điểm cuối API, gửi dữ liệu lên máy chủ, hoặc tải xuống các tài nguyên cần thiết. Các quản trị viên hệ thống lại dùng curl để tự động hóa các tác vụ, kiểm tra tình trạng của dịch vụ web, hoặc tải về các gói phần mềm từ kho lưu trữ. Ví dụ, bạn có thể viết một script đơn giản sử dụng curl để kiểm tra xem website của mình có đang hoạt động hay không và nhận thông báo nếu có sự cố.

H3: Cách cài đặt curl và kiểm tra phiên bản
Hầu hết các bản phân phối Linux hiện đại như Ubuntu là gì đều đã cài đặt sẵn curl. Tuy nhiên, nếu hệ thống của bạn chưa có hoặc bạn muốn chắc chắn, việc cài đặt rất đơn giản. Bạn chỉ cần mở terminal và sử dụng trình quản lý gói của hệ thống.
Đối với các hệ thống dựa trên Debian như Ubuntu, bạn có thể dùng lệnh Debian. Đầu tiên, hãy cập nhật danh sách gói của bạn, sau đó tiến hành cài đặt curl.
sudo apt update
sudo apt install curl
Đối với các hệ thống dựa trên Red Hat như CentOS hoặc Fedora, bạn sẽ sử dụng `yum` hoặc `dnf`.
sudo yum install curl
Hoặc trên các phiên bản mới hơn:
sudo dnf install curl
Sau khi cài đặt xong, bạn có thể dễ dàng kiểm tra xem curl đã hoạt động chưa và xem phiên bản hiện tại của nó. Việc này giúp xác nhận quá trình cài đặt đã thành công. Chỉ cần gõ lệnh sau vào terminal:
curl --version
Lệnh này sẽ trả về thông tin chi tiết về phiên bản curl, các giao thức được hỗ trợ và các tính năng đi kèm. Việc nắm rõ phiên bản giúp bạn biết được những tùy chọn nào có sẵn để sử dụng.

Cú pháp cơ bản và các tùy chọn thường dùng của lệnh curl
H3: Cú pháp lệnh curl cơ bản
Hiểu rõ cú pháp là bước đầu tiên để làm chủ bất kỳ công cụ dòng lệnh nào, và curl cũng không ngoại lệ. May mắn là cú pháp của curl rất logic và dễ nhớ. Cấu trúc chung của một lệnh curl luôn tuân theo mẫu sau:
curl [tùy chọn] [URL]
Hãy cùng phân tích các thành phần này. `curl` là tên lệnh bạn cần gọi. `[tùy chọn]` (hoặc options/flags) là các tham số dùng để tùy chỉnh hành vi của lệnh. Chúng thường bắt đầu bằng một hoặc hai dấu gạch ngang (ví dụ `-o` hoặc `–output`). Bạn có thể sử dụng nhiều tùy chọn trong cùng một lệnh. Cuối cùng, `[URL]` là địa chỉ web mà bạn muốn tương tác. Đây là tham số bắt buộc và phải được đặt ở cuối lệnh.
Ví dụ, một lệnh đơn giản nhất là curl https://buimanhduc.com. Khi thực thi, curl sẽ gửi một yêu cầu GET đến địa chỉ này và in toàn bộ nội dung HTML của trang web ra màn hình terminal của bạn. Thật đơn giản phải không nào?

H3: Các tùy chọn quan trọng thường dùng
Để khai thác sức mạnh thực sự của curl, bạn cần làm quen với các tùy chọn của nó. Dưới đây là những tùy chọn phổ biến và hữu ích nhất mà bạn sẽ thường xuyên sử dụng trong công việc hàng ngày.
-
-o và -O: Lưu kết quả vào file. Mặc định, curl hiển thị kết quả ra terminal. Để lưu nội dung tải về vào một tệp, bạn có thể dùng `-o` (viết thường). Ví dụ: `curl -o trangchu.html https://buimanhduc.com` sẽ lưu mã nguồn của trang vào tệp `trangchu.html`. Tùy chọn `-O` (viết hoa) thì tiện lợi hơn, nó sẽ tự động lưu tệp với tên gốc từ URL. Ví dụ: `curl -O https://example.com/data.zip` sẽ tạo ra tệp `data.zip`.
-
-I: Chỉ lấy thông tin header. Đôi khi bạn không cần toàn bộ nội dung trang, mà chỉ muốn kiểm tra thông tin metadata như mã trạng thái HTTP, loại nội dung (Content-Type),… Tùy chọn `-I` giúp bạn làm điều đó một cách nhanh chóng.
-
-d: Gửi dữ liệu bằng phương thức POST. Đây là tùy chọn cực kỳ quan trọng khi bạn làm việc với API trong Bash. Nó cho phép bạn gửi dữ liệu đến máy chủ, ví dụ như khi điền vào một biểu mẫu. Ví dụ: `curl -d “user=admin&pass=123” https://api.example.com/login`.
-
-H: Thêm header tùy chỉnh. Khi tương tác với API, bạn thường cần phải gửi thêm các header, chẳng hạn như token xác thực hoặc chỉ định định dạng dữ liệu. Tùy chọn `-H` cho phép bạn làm điều này. Ví dụ: `curl -H “Authorization: Bearer mytoken” https://api.example.com/data`.
-
-L: Tự động theo các chuyển hướng (redirect). Nhiều URL sẽ chuyển hướng bạn đến một địa chỉ khác (mã trạng thái 3xx). Mặc định, curl sẽ không đi theo các chuyển hướng này. Sử dụng tùy chọn `-L` sẽ yêu cầu curl tự động truy cập vào URL mới cho đến khi nhận được phản hồi cuối cùng.

Ví dụ thực tế sử dụng curl để truy xuất dữ liệu
H3: Lấy dữ liệu trang web đơn giản
Hãy bắt đầu với ví dụ cơ bản nhất: lấy nội dung của một trang web. Đây là thao tác đơn giản nhất để bạn làm quen với cách curl hoạt động. Giả sử bạn muốn xem mã nguồn HTML của trang chủ Google. Bạn chỉ cần mở terminal và gõ lệnh sau:
curl https://www.google.com
Ngay lập tức, bạn sẽ thấy một luồng văn bản chứa mã HTML của trang Google được hiển thị trực tiếp trên màn hình. Mặc dù trông có vẻ lộn xộn, nhưng nó cho thấy curl đã truy cập thành công URL và trả về dữ liệu thô. Đây là bước đầu tiên để kiểm tra kết nối hoặc xem nhanh nội dung của một trang web mà không cần mở trình duyệt.
Thao tác này tương đương với việc bạn vào trình duyệt, truy cập trang web, sau đó nhấp chuột phải và chọn “View Page Source”. Với curl, bạn có thể thực hiện điều đó chỉ bằng một dòng lệnh ngắn gọn. Đây cũng là cách hữu ích để kiểm tra xem một trang web có đang hoạt động hay không từ môi trường máy chủ.

H3: Lưu kết quả curl vào file với tùy chọn -o và -O
Việc hiển thị nội dung ra terminal rất hữu ích để kiểm tra nhanh, nhưng trong hầu hết các trường hợp, bạn sẽ muốn lưu dữ liệu tải về vào một tệp tin. Curl cung cấp hai tùy chọn mạnh mẽ cho việc này: `-o` (viết thường) và `-O` (viết hoa).
Tùy chọn `-o` cho phép bạn chỉ định tên tệp tin đầu ra. Điều này rất linh hoạt khi bạn muốn đặt một tên cụ thể cho tệp tải về. Ví dụ, để tải trang chủ của Bùi Mạnh Đức và lưu vào tệp `bmd.html`, bạn dùng lệnh:
curl -o bmd.html https://buimanhduc.com
Sau khi lệnh hoàn tất, bạn sẽ thấy một tệp tin tên là `bmd.html` trong thư mục hiện tại của mình.
Trong khi đó, tùy chọn `-O` lại mang đến sự tiện lợi. Nó sẽ tự động lấy tên tệp từ chính URL mà bạn cung cấp. Điều này đặc biệt hữu ích khi bạn tải xuống các tệp có tên rõ ràng như tệp tin cài đặt, tài liệu PDF, hoặc tệp ZIP. Ví dụ, để tải một tệp có tên `wordpress-6.0.zip`:
curl -O https://wordpress.org/wordpress-6.0.zip
Lệnh này sẽ tự động tạo ra một tệp tin tên là `wordpress-6.0.zip` trong thư mục làm việc của bạn. Việc lựa chọn giữa `-o` và `-O` phụ thuộc vào nhu cầu của bạn: cần sự linh hoạt trong đặt tên hay sự tiện lợi và tự động.

Các lỗi thường gặp khi sử dụng curl trong shell Bash
H3: Lỗi không tìm thấy lệnh curl
Một trong những lỗi đầu tiên mà người dùng mới có thể gặp phải là thông báo “curl: command not found”. Khi bạn thấy lỗi này, đừng hoang mang. Nó chỉ đơn giản có nghĩa là hệ điều hành không thể tìm thấy chương trình curl để thực thi.
Nguyên nhân phổ biến nhất là do `curl` chưa được cài đặt trên hệ thống của bạn. Mặc dù hầu hết các bản phân phối Linux đều có sẵn, một số phiên bản tối giản hoặc môi trường container có thể không bao gồm nó. Cách khắc phục rất đơn giản: bạn chỉ cần quay lại phần hướng dẫn cài đặt ở trên và chạy lệnh tương ứng với hệ điều hành của bạn (ví dụ `sudo apt install curl` cho Ubuntu).
Một nguyên nhân khác ít gặp hơn là `curl` đã được cài đặt nhưng không nằm trong biến môi trường `PATH` của người dùng. `PATH` là danh sách các thư mục mà shell sẽ tìm kiếm khi bạn gõ một lệnh. Bạn có thể kiểm tra bằng lệnh `echo $PATH`. Tuy nhiên, trường hợp này rất hiếm khi trình quản lý gói thường tự động cấu hình đúng đường dẫn. Việc cài đặt lại thường sẽ giải quyết được vấn đề.

H3: Lỗi kết nối hoặc timeout khi truy cập URL
Một lỗi phổ biến khác là khi curl không thể kết nối đến URL bạn cung cấp. Bạn có thể thấy các thông báo như “Could not resolve host”, “Connection timed out”, hoặc “Failed to connect to…”. Những lỗi này cho thấy có vấn đề trong việc thiết lập kết nối mạng giữa máy của bạn và máy chủ đích.
Có nhiều nguyên nhân gây ra lỗi này. Đầu tiên, hãy kiểm tra lại URL bạn đã nhập. Một lỗi chính tả nhỏ trong tên miền cũng đủ để gây ra lỗi “Could not resolve host”. Hãy chắc chắn rằng bạn đã gõ đúng địa chỉ.
Tiếp theo, hãy kiểm tra kết nối mạng của bạn. Liệu máy chủ của bạn có thể truy cập internet không? Bạn có thể thử dùng lệnh ping google.com để kiểm tra kết nối cơ bản. Nếu không có kết nối, bạn cần xử lý vấn đề mạng trước.
Cuối cùng, một nguyên nhân khác có thể là do tường lửa (firewall). Tường lửa trên máy của bạn hoặc trên mạng công ty có thể đang chặn các kết nối ra ngoài qua cổng mà `curl` đang cố sử dụng (thường là cổng 80 cho HTTP và 443 cho HTTPS). Bạn cần kiểm tra cấu hình tường lửa để đảm bảo các kết nối này được cho phép.

Mẹo sử dụng hiệu quả lệnh curl trong Linux
Để nâng cao kỹ năng sử dụng curl từ mức cơ bản lên chuyên nghiệp, hãy áp dụng những mẹo sau đây. Chúng sẽ giúp bạn làm việc hiệu quả hơn, gỡ lỗi nhanh hơn và viết các script tự động hóa mạnh mẽ hơn.
-
Luôn kiểm tra mã phản hồi HTTP: Đôi khi yêu cầu của bạn vẫn thành công về mặt kỹ thuật, nhưng kết quả không như ý (ví dụ: lỗi 404 Not Found). Hãy dùng tùy chọn `-w “%{http_code}”` để in mã trạng thái HTTP ở cuối. Ví dụ: `curl -s -o /dev/null -w “%{http_code}” https://buimanhduc.com`. Lệnh này sẽ chỉ hiển thị mã trạng thái, giúp bạn kiểm tra nhanh trong các script.
-
Sử dụng `-L` để xử lý chuyển hướng: Rất nhiều trang web sử dụng chuyển hướng (redirect). Nếu không có tùy chọn `-L`, curl sẽ không đi theo và bạn sẽ chỉ nhận được thông tin của trang chuyển hướng. Hãy tập thói quen dùng `-L` khi bạn muốn lấy nội dung cuối cùng của một URL.
-
Đặt thời gian chờ (timeout) hợp lý: Khi viết script tự động, bạn không muốn một yêu cầu bị treo vô thời hạn. Sử dụng tùy chọn `–max-time` để giới hạn tổng thời gian thực thi của lệnh. Ví dụ, `curl –max-time 10 URL` sẽ hủy yêu cầu nếu nó kéo dài hơn 10 giây.
-
Đừng ngại đọc tài liệu: Kernel Linux có hàng trăm tùy chọn khác nhau. Khi bạn cần một tính năng nâng cao, hãy dùng lệnh `man curl` để mở trang hướng dẫn chi tiết. Đây là nguồn thông tin chính xác và đầy đủ nhất giúp bạn tận dụng mọi khả năng của công cụ.
-
Ưu tiên bảo mật: Tuyệt đối không gửi dữ liệu nhạy cảm như mật khẩu hoặc API key qua giao thức HTTP không mã hóa. Luôn đảm bảo bạn đang sử dụng HTTPS cho các kết nối quan trọng để bảo vệ thông tin trên đường truyền.

Tổng kết
Qua bài viết này, chúng ta đã cùng nhau khám phá lệnh `curl` – một công cụ dòng lệnh không thể thiếu trong hộp đồ nghề của bất kỳ quản trị viên hệ thống hay nhà phát triển nào làm việc trên Linux. Từ việc tìm hiểu `curl` là gì, cách cài đặt đơn giản, cho đến việc nắm vững cú pháp và các tùy chọn quan trọng, bạn đã có một nền tảng vững chắc để bắt đầu.
Vai trò của `curl` vượt xa việc chỉ tải một trang web. Nó là cầu nối giúp bạn tương tác với thế giới web ngay từ terminal, kiểm tra API, tự động hóa các tác vụ tải dữ liệu và gỡ lỗi kết nối mạng. Tầm quan trọng của nó trong việc quản trị và lập trình là không thể bàn cãi. Cách tốt nhất để thành thạo `curl` là thông qua thực hành. Đừng ngần ngại thử nghiệm với các ví dụ đã nêu và tự đặt ra những bài toán cho riêng mình.
Bây giờ, hãy thử áp dụng ngay lệnh `curl` để tương tác với một API công cộng hoặc tải về một tệp tin nào đó. Đây chính là bước đầu tiên để bạn phát triển kỹ năng shell scripting và tự động hóa công việc của mình. Bước tiếp theo cho bạn là gì? Hãy thử tìm hiểu cách kết hợp `curl` với các công cụ như `jq` để xử lý dữ liệu JSON, hoặc viết những script Bash phức tạp hơn để tự động hóa các quy trình công việc hàng ngày. Chúc bạn thành công!
