Lệnh Netstat: Tổng Hợp Các Cú Pháp & Cách Dùng Chi Tiết
Lệnh netstat là công cụ dòng lệnh kinh điển trong quản trị mạng Linux, hỗ trợ kiểm tra cổng mạng đang mở, rà soát kết nối TCP/UDP và xác định chính xác tiến trình nào đang chiếm dụng tài nguyên trên hệ thống. Khi vận hành máy chủ tại ThueVPSGiaRe.vn, việc làm chủ tiện ích […]
Lệnh netstat là công cụ dòng lệnh kinh điển trong quản trị mạng Linux, hỗ trợ kiểm tra cổng mạng đang mở, rà soát kết nối TCP/UDP và xác định chính xác tiến trình nào đang chiếm dụng tài nguyên trên hệ thống. Khi vận hành máy chủ tại ThueVPSGiaRe.vn, việc làm chủ tiện ích này giúp bạn chẩn đoán nhanh sự cố xung đột cổng dịch vụ, kiểm soát an toàn kết nối và xử lý dứt điểm lỗi thường gặp khi cấu hình website.
Lệnh netstat là gì? Dùng để làm gì?
Lệnh netstat (viết tắt của Network Statistics) là tiện ích dòng lệnh đa nền tảng dùng để hiển thị các kết nối mạng TCP/UDP đang hoạt động, danh sách cổng đang lắng nghe (listening ports), bảng định tuyến (routing table) và số liệu thống kê giao diện mạng trên hệ điều hành Linux.
Về mặt kỹ thuật, netstat nằm trong bộ công cụ truyền thống net-tools. Chương trình hoạt động bằng cách đọc thông tin trực tiếp từ hệ thống tệp ảo /proc/net/ của nhân Linux (kernel) rồi định dạng lại thành bảng trực quan cho quản trị viên. Dù các bản phân phối Linux hiện đại đang chuyển dịch sang sử dụng công cụ ss (nằm trong gói iproute2), netstat vẫn là tiêu chuẩn chẩn đoán quen thuộc trong nhiều tài liệu kỹ thuật và kịch bản tự động hóa máy chủ.
Các tác vụ chính của netstat trên VPS Linux bao gồm:
- Rà soát cổng mở: Liệt kê danh sách các cổng TCP/UDP đang chờ nhận dữ liệu từ bên ngoài hoặc mạng nội bộ.
- Xác định tiến trình (Process): Tìm mã định danh tiến trình (PID) và tên dịch vụ (ví dụ: Nginx, Apache, MySQL) gắn liền với từng socket mạng.
- Giám sát kết nối thời gian thực: Theo dõi các phiên truy cập đang ở trạng thái
ESTABLISHED,TIME_WAIThoặcSYN_SENT. - Kiểm tra định tuyến và giao diện: Xem bảng đường đi của gói tin mạng và các chỉ số truyền nhận (TX/RX packets, lỗi gói tin).

Cài đặt netstat trên Linux (Khắc phục lỗi command not found)
Tại sao netstat báo “command not found” trên Ubuntu 22.04 và Ubuntu 24.04?
Trên các hệ điều hành Ubuntu từ phiên bản 20.04, 22.04 LTS đến 24.04 LTS cũng như Debian 11/12, gói phần mềm net-tools đã bị đánh dấu lỗi thời (deprecated) và không còn được cài sẵn trong bản phân phối mặc định. Khi gõ netstat trên máy chủ mới khởi tạo, hệ thống sẽ trả về thông báo lỗi:
-bash: netstat: command not found
Để tiếp tục sử dụng netstat theo thói quen quản trị, bạn chỉ cần cài đặt bổ sung gói net-tools bằng trình quản lý gói của hệ điều hành.
Cài đặt net-tools trên Ubuntu và Debian
Đăng nhập vào VPS qua SSH với quyền root hoặc người dùng có đặc quyền sudo, sau đó thực hiện hai lệnh sau:
sudo apt update
sudo apt install -y net-tools
Sau khi quá trình cài đặt hoàn tất, hãy kiểm tra lại bằng lệnh netstat -V để xác nhận phiên bản.

Cài đặt trên RHEL, CentOS, Rocky Linux và AlmaLinux
Đối với các hệ điều hành họ Red Hat sử dụng trình quản lý gói DNF hoặc YUM, hãy chạy lệnh tương ứng:
sudo dnf install -y net-tools
# Hoặc trên CentOS 7 cũ:
# sudo yum install -y net-tools
Cú pháp lệnh netstat và các tùy chọn quan trọng
Cú pháp cơ bản của lệnh netstat được cấu trúc như sau:
netstat [tùy_chọn]
Thay vì chạy lệnh đơn lẻ, người quản trị thường kết hợp các cờ (flags) để trích xuất đúng thông tin cần thiết. Bảng dưới đây liệt kê các tùy chọn thường gặp nhất trong thực tế quản trị VPS:
| Tùy chọn | Tên đầy đủ | Ý nghĩa kỹ thuật |
|---|---|---|
-t |
--tcp |
Lọc và chỉ hiển thị các kết nối/socket thuộc giao thức TCP. |
-u |
--udp |
Lọc và chỉ hiển thị các kết nối thuộc giao thức UDP. |
-l |
--listening |
Chỉ liệt kê các socket đang ở trạng thái LISTEN (chờ kết nối). |
-n |
--numeric |
Hiển thị địa chỉ IP và port dưới dạng số, bỏ qua phân giải tên miền (DNS) để tăng tốc độ phản hồi. |
-p |
--program |
Hiển thị mã định danh tiến trình (PID) và tên ứng dụng sở hữu socket (cần quyền root/sudo). |
-a |
--all |
Hiển thị toàn bộ socket ở cả trạng thái listening và non-listening. |
-r |
--route |
Hiển thị bảng định tuyến hạt nhân của máy chủ (tương đương lệnh route -e). |
-i |
--interfaces |
Hiển thị bảng thống kê lưu lượng trên các giao diện mạng mạng (eth0, ens3, lo…). |
-s |
--statistics |
Xuất dữ liệu thống kê chi tiết theo từng giao thức mạng (IP, ICMP, TCP, UDP). |
Các lệnh netstat thực tế nhất trên VPS Linux
1. Kiểm tra toàn bộ cổng mạng đang mở với netstat -tulpn
Đây là tổ hợp cờ phổ biến nhất trong quản trị máy chủ. Lệnh này tổng hợp toàn bộ các cổng TCP và UDP đang mở, chuyển đổi số và xác định PID quản lý:
sudo netstat -tulpn

Dưới đây là mẫu kết quả thực tế trả về trên máy chủ Ubuntu:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 842/sshd: /usr/sbin
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1420/nginx: master
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 950/mysqld
tcp6 0 0 :::22 :::* LISTEN 842/sshd: /usr/sbin
tcp6 0 0 :::443 :::* LISTEN 1420/nginx: master
udp 0 0 0.0.0.0:53 0.0.0.0:* 620/named
Ý nghĩa chi tiết từng cột trong bảng kết quả:
- Proto: Giao thức của socket (TCP, TCP6, UDP, UDP6).
- Recv-Q / Send-Q: Hàng đợi nhận (Receive Queue) và gửi (Send Queue). Nếu số byte ở đây duy trì ở mức cao liên tục, dịch vụ có thể đang bị nghẽn mạng hoặc quá tải xử lý.
- Local Address: Địa chỉ IP và số cổng mà dịch vụ đang lắng nghe.
0.0.0.0:80nghĩa là Nginx đang lắng nghe trên cổng 80 của tất cả các card mạng IPv4. Trong khi đó,127.0.0.1:3306chỉ cho phép kết nối nội bộ từ chính máy chủ đến MySQL. - Foreign Address: Địa chỉ của máy khách ở đầu bên kia kết nối (với socket LISTEN, giá trị hiển thị là wildcard
0.0.0.0:*). - State: Trạng thái kết nối. Giá trị
LISTENbiểu thị dịch vụ đang sẵn sàng tiếp nhận yêu cầu. Socket UDP không có trạng thái kết nối hướng phiên nên cột này thường để trống. - PID/Program name: Cột đặc biệt quan trọng thể hiện Process ID và tên chương trình điều khiển. Ví dụ
1420/nginx: mastercho biết tiến trình 1420 của Nginx đang quản lý cổng 80 và 443.
2. Tra cứu một cổng cụ thể xem có đang bị chiếm dụng
Khi khởi động web server hoặc database bị báo lỗi cổng đã được sử dụng (Address already in use), bạn có thể lọc nhanh bằng cách kết hợp với lệnh grep:
# Kiểm tra cổng 80 (HTTP)
sudo netstat -tulpn | grep :80
# Kiểm tra cổng 3306 (MySQL/MariaDB)
sudo netstat -tulpn | grep :3306
# Kiểm tra cổng 22 (SSH)
sudo netstat -tulpn | grep :22

Nếu muốn tìm hiểu thêm về hiệu suất tiêu thụ tài nguyên của tiến trình vừa tìm thấy, bạn có thể kết hợp lệnh htop để theo dõi tiến trình theo thời gian thực nhằm kiểm tra mức độ chiếm dụng phần cứng cụ thể.
3. Xem tất cả các phiên kết nối mạng đang hoạt động
Để rà soát toàn bộ kết nối hiện hữu (bao gồm cả các kết nối từ client truy cập vào và kết nối từ máy chủ đi ra ngoài), lệnh netstat -an hoặc lọc theo kết nối đã thiết lập sẽ cung cấp bức tranh đầy đủ:
# Hiển thị toàn bộ kết nối ở dạng số
netstat -an

# Chỉ lọc các kết nối TCP đang ở trạng thái ESTABLISHED
netstat -ant | grep ESTABLISHED

Nếu bạn muốn thống kê tổng số lượng kết nối đồng thời trên từng cổng để đánh giá dung lượng chịu tải, hãy dùng cú pháp đếm:
netstat -ant | grep ':80 ' | grep ESTABLISHED | wc -l

Khi số lượng kết nối tăng đột ngột dẫn đến tải hệ thống tăng cao, việc sử dụng thêm lệnh top để xem toàn bộ tài nguyên hệ thống kết hợp cùng việc kiểm tra mức sử dụng RAM trên Linux sẽ giúp bạn nhận diện nhanh nguy cơ cạn kiệt bộ nhớ đệm.
4. Kiểm tra bảng định tuyến hệ thống với netstat -r
Bảng định tuyến (routing table) quyết định đường đi của gói tin từ VPS ra Internet hoặc tới mạng nội bộ private network. Để kiểm tra gateway mặc định:
netstat -rn
Tùy chọn -n ngăn máy chủ thực hiện reverse DNS lookup, giúp hiển thị địa chỉ gateway ở dạng IP thuần túy ngay lập tức mà không bị trễ.

5. Thống kê dữ liệu giao thức và lỗi giao diện mạng
Để chẩn đoán các sự cố rớt gói tin hoặc lỗi phân mảnh TCP, hai lệnh thống kê dưới đây cung cấp các chỉ số vận hành hữu ích:
# Xem thống kê tổng hợp các giao thức (hiển thị 30 dòng đầu)
netstat -s | head -n 30
# Xem số lượng gói tin truyền nhận (TX/RX) và gói lỗi trên các card mạng
netstat -i

So sánh netstat và ss: Nên dùng công cụ nào?
Lệnh ss (Socket Statistics) thuộc bộ công cụ iproute2 là giải pháp thay thế trực tiếp cho netstat trên các bản phân phối Linux hiện nay. Điểm khác biệt mấu chốt nằm ở cơ chế thu thập dữ liệu: trong khi netstat phân tích thủ công tệp tin văn bản trong /proc/net/ (vốn bị chậm khi hệ thống có hàng chục nghìn kết nối mở), ss giao tiếp trực tiếp với kernel qua giao thức Netlink socket nên cho tốc độ truy vấn vượt trội.
| Tiêu chí | Lệnh netstat | Lệnh ss (Hiện đại) |
|---|---|---|
| Gói cài đặt | net-tools (đã deprecated) |
iproute2 (tiêu chuẩn mới) |
| Tình trạng mặc định | Cần cài thêm trên Ubuntu 22.04+ | Cài sẵn trên hầu hết các distro |
| Cơ chế hoạt động | Đọc và parse /proc/net/* |
Truy vấn trực tiếp qua Netlink |
| Hiệu năng xử lý | Chậm khi có lượng kết nối lớn | Cực nhanh, tốn ít tài nguyên CPU |
| Cú pháp tương đương | netstat -tulpn |
ss -tulpn |
Đối với các máy chủ mới triển khai, người quản trị được khuyến khích làm quen dần với cú pháp của ss. Tuy nhiên, các tùy chọn cơ bản của ss được thiết kế tương thích gần như hoàn toàn với netstat (ví dụ: cờ -tulpn, -an vẫn giữ nguyên ý nghĩa), do đó bạn có thể áp dụng kiến thức lệnh linh hoạt giữa hai công cụ.
Ứng dụng thực tế của netstat trong quản trị VPS Linux
1. Xử lý xung đột cổng khi khởi chạy Web Server
Tình huống phổ biến nhất khi cấu hình VPS là lỗi xung đột cổng. Ví dụ: bạn khởi động Nginx nhưng nhận được thông báo bind() to 0.0.0.0:80 failed (98: Address already in use). Khi đó, hãy thực hiện quy trình sau:
- Chạy lệnh
sudo netstat -tulpn | grep :80để xác định PID đang giữ cổng 80 (ví dụ tìm thấy tiến trình Apachehttpdcó PID3142). - Kiểm tra tính cần thiết của tiến trình đó hoặc tắt dịch vụ cũ:
sudo systemctl stop apache2. - Nếu đó là tiến trình treo không thể dừng bằng systemctl, tắt tiến trình bằng PID:
sudo kill -9 3142. - Khởi động lại dịch vụ web chính:
sudo systemctl start nginx.
2. Phát hiện kết nối bất thường và tăng cường bảo mật
Khi nghi ngờ máy chủ bị tấn công dò quét mật khẩu (brute-force) hoặc kết nối trái phép, bạn có thể kiểm tra danh sách các địa chỉ IP đang duy trì kết nối đến cổng SSH (22):
sudo netstat -tnpa | grep ':22 '
Nếu phát hiện một địa chỉ IP lạ mở hàng loạt kết nối thử nghiệm liên tục, hãy cấu hình thêm Fail2ban để tự động chặn IP tấn công brute-force thông qua iptables/UFW. Trong trường hợp máy chủ nhận lượng request khổng lồ làm nghẽn băng thông dẫn đến dấu hiệu từ chối dịch vụ, bạn cần kích hoạt giải pháp chống DDoS bằng Cloudflare để lọc lưu lượng xấu tại tầng mạng trước khi chạm tới VPS. Đồng thời, việc rà soát mạng cũng giúp bạn phân tích rõ các nguyên nhân website chậm do server quá tải để có phương án tối ưu phù hợp.
3. Kiểm tra trạng thái kênh truyền VPN và Tunnel
Khi thiết lập các dịch vụ mạng riêng ảo như WireGuard VPN trên VPS Linux, giao thức mặc định được sử dụng là UDP (thường ở cổng 51820). Bạn có thể kiểm tra xem socket UDP của VPN server đã khởi tạo lắng nghe chuẩn xác hay chưa:
sudo netstat -ulpn | grep :51820
4. Kiểm tra cổng mạng trong môi trường Docker Container
Khi chạy ứng dụng trong Docker, netstat trên máy chủ host chỉ hiển thị tiến trình docker-proxy lắng nghe trên cổng được map ra ngoài (ví dụ 0.0.0.0:8080->80/tcp). Bạn sẽ không nhìn thấy trực tiếp PID nội bộ của ứng dụng bên trong container từ bảng netstat máy chủ:
# Kiểm tra cổng máy chủ do docker-proxy quản lý
sudo netstat -tulpn | grep docker-proxy
Để quản trị hiệu quả hệ sinh thái container song song với việc theo dõi mạng, hãy chủ động quản lý ổ đĩa và tài nguyên Docker trên VPS nhằm hạn chế tình trạng file log container phình to làm cạn kiệt dung lượng lưu trữ.
Xử lý sự cố thường gặp khi sử dụng lệnh netstat
| Hiện tượng / Lỗi | Nguyên nhân kỹ thuật | Cách khắc phục |
|---|---|---|
netstat: command not found |
Gói net-tools chưa được cài sẵn trên hệ điều hành. |
Chạy sudo apt install net-tools hoặc sudo dnf install net-tools. |
Cột PID/Program name hiển thị dấu gạch ngang - |
Người dùng thực thi không đủ quyền hạn đọc thông tin tiến trình của tài khoản khác. | Thêm tiền tố sudo trước lệnh netstat (ví dụ: sudo netstat -tulpn). |
| Port ở trạng thái LISTEN nhưng không truy cập được từ bên ngoài | Dịch vụ chỉ bind vào IP 127.0.0.1 hoặc bị tường lửa (UFW / iptables) chặn cổng. |
Đổi cấu hình bind sang 0.0.0.0 và mở cổng trên tường lửa: sudo ufw allow <port>. |
| Lệnh phản hồi rất chậm khi chạy | Netstat đang cố gắng phân giải tên miền (DNS lookup) cho từng địa chỉ IP. | Luôn thêm cờ -n vào câu lệnh (ví dụ: netstat -ntulp) để bỏ qua tra cứu DNS. |
Lưu ý quan trọng về Tường lửa (Firewall): Trạng thái LISTEN trong kết quả của netstat chỉ xác nhận dịch vụ trên VPS đã sẵn sàng nhận dữ liệu. Nếu bạn không thể kết nối từ máy tính cá nhân tới máy chủ, hãy luôn kiểm tra lại cấu hình tường lửa bằng lệnh sudo ufw status hoặc kiểm tra chính sách bảo mật Security Group của nhà cung cấp hạ tầng.
Câu hỏi thường gặp (FAQ)
1. Lệnh netstat dùng để làm gì trong quản trị Linux?
Lệnh netstat dùng để kiểm tra các cổng mạng đang mở, giám sát các kết nối TCP/UDP đang hoạt động, tra cứu bảng định tuyến và xem số liệu thống kê giao diện mạng. Đây là công cụ hữu ích để chẩn đoán xung đột cổng và kiểm tra an ninh máy chủ.
2. Tại sao gõ netstat trên Ubuntu 22.04 báo “command not found”?
Trên các bản phân phối Ubuntu hiện đại, bộ công cụ net-tools (chứa netstat) không còn được cài đặt mặc định do đã cũ. Bạn chỉ cần chạy lệnh sudo apt update && sudo apt install -y net-tools để cài đặt và sử dụng lại bình thường.
3. Lệnh nào thay thế netstat tốt nhất trên Linux hiện đại?
Lệnh ss (Socket Statistics) thuộc gói iproute2 là lựa chọn thay thế chính thức cho netstat. Lệnh ss được tích hợp sẵn trên hầu hết các distro Linux, có tốc độ truy xuất nhanh hơn nhờ giao tiếp trực tiếp với kernel qua Netlink.
4. Làm sao để biết cổng 80 có đang bị ứng dụng nào chiếm dụng không?
Bạn hãy sử dụng lệnh sudo netstat -tulpn | grep :80 (hoặc sudo ss -tulpn | grep :80). Cột cuối cùng của kết quả trả về sẽ hiển thị rõ mã tiến trình (PID) và tên ứng dụng (như Nginx, Apache) đang lắng nghe trên cổng 80.
5. Cú pháp netstat -tulpn và netstat -an khác nhau ở điểm nào?
Lệnh netstat -tulpn chỉ hiển thị các cổng TCP/UDP đang ở trạng thái chờ kết nối (LISTEN) kèm mã PID của tiến trình quản lý. Trong khi đó, netstat -an hiển thị tất cả các kết nối mạng bao gồm cả các kết nối đang hoạt động (ESTABLISHED) nhưng không kèm thông tin PID.
Kết luận
Nắm vững cách sử dụng lệnh netstat là kỹ năng cơ bản giúp bạn làm chủ hệ thống mạng trên máy chủ Linux, xử lý nhanh các vấn đề xung đột cổng và kiểm soát chặt chẽ các luồng dữ liệu ra vào VPS. Bằng việc kết hợp các cờ thông dụng như -tulpn hoặc linh hoạt chuyển đổi sang lệnh tương đương ss, công tác vận hành hệ thống sẽ trở nên chính xác và hiệu quả hơn.
Thực hành ngay hôm nay
Sở Hữu Ngay “Phòng Lab” Linux Cá Nhân Chỉ Với 1.600đ/Ngày
Đừng chỉ đọc lý thuyết! Khởi tạo ngay VPS riêng để tự tay thực hành lệnh netstat, triển khai Web Server và làm chủ quản trị mạng Linux với chi phí rẻ hơn một ly trà đá.
Cài đặt hệ điều hành tự động trong 30 giây • Toàn quyền Root • Hỗ trợ kỹ thuật 24/7
Nội dung bài viết mang tính tham khảo. Các lệnh và cấu hình trong bài được kiểm chứng trên Ubuntu 22.04 LTS và Ubuntu 24.04 LTS với quyền root/sudo. Tùy phiên bản hệ điều hành (Debian, CentOS, Rocky Linux, AlmaLinux), cú pháp cài đặt gói và một số tùy chọn lệnh có thể khác. Người đọc nên sao lưu dữ liệu, kiểm thử trên môi trường staging và đánh giá rủi ro trước khi áp dụng cho hệ thống production.



