Mỗi hệ thống máy tính đều được hưởng lợi từ việc quản trị và giám sát đúng cách. Việc theo dõi hoạt động của hệ thống sẽ giúp bạn phát hiện các vấn đề và khắc phục chúng một cách nhanh chóng. Các câu lệnh phổ biến là Top, Netstat, Du…
Có vô số tiện ích dòng lệnh được tạo ra nhằm mục đích này. Hướng dẫn này sẽ giới thiệu cho bạn một số ứng dụng hữu ích nhất để bạn có thể thêm vào “hộp công cụ” của mình.
Yêu Cầu
Để theo dõi hướng dẫn này, bạn cần có quyền truy cập vào một máy tính chạy hệ điều hành dựa trên Linux. Điều này có thể là một máy chủ ảo mà bạn đã kết nối qua SSH hoặc chính máy tính cá nhân của bạn. Lưu ý rằng bài hướng dẫn này đã được kiểm tra trên một máy chủ Linux chạy Ubuntu 20.04, nhưng các ví dụ được đưa ra nên hoạt động trên bất kỳ phiên bản nào của bất kỳ bản phân phối Linux nào.
Nếu bạn dự định sử dụng máy chủ từ xa để theo dõi hướng dẫn này, chúng tôi khuyến khích bạn hoàn thành hướng dẫn Thiết Lập Máy Chủ Ban Đầu trước. Việc này sẽ giúp bạn thiết lập một môi trường máy chủ an toàn — bao gồm một người dùng không phải root với quyền sudo và một tường lửa được cấu hình bằng UFW — từ đó nâng cao kỹ năng Linux của bạn.
Bước 1 – Cách Xem Các Quy Trình Đang Chạy Trong Linux
Bạn có thể xem tất cả các quy trình đang chạy trên máy chủ của mình bằng cách sử dụng lệnh top:
top
Output
top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers Swap: 0k total, 0k used, 0k free, 258976k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
Những dòng đầu tiên của kết quả hiển thị cung cấp các thống kê của hệ thống, chẳng hạn như tải CPU/bộ nhớ và tổng số các quy trình đang chạy.
Bạn có thể thấy rằng có 1 quy trình đang chạy và 55 quy trình đang ở trạng thái ngủ vì chúng không sử dụng chu kỳ CPU một cách tích cực.
Phần còn lại của kết quả hiển thị cho thấy các quy trình đang chạy cùng với các thông số sử dụng của chúng. Theo mặc định, top tự động sắp xếp các quy trình theo mức sử dụng CPU, giúp bạn dễ dàng nhận biết những quy trình bận rộn nhất. Lệnh top sẽ tiếp tục chạy trong shell cho đến khi bạn dừng nó bằng tổ hợp phím Ctrl+C để thoát khỏi quy trình. Tổ hợp phím này gửi tín hiệu kill, yêu cầu quy trình dừng lại một cách nhẹ nhàng nếu có thể.
Một phiên bản cải tiến của top, có tên là htop, có sẵn trong hầu hết các kho lưu trữ phần mềm. Trên Ubuntu 20.04, bạn có thể cài đặt nó bằng lệnh:
sudo apt install htop
Sau đó, lệnh htop sẽ có sẵn:
htop
Output
Mem[||||||||||| 49/995MB] Load average: 0.00 0.03 0.05 CPU[ 0.0%] Tasks: 21, 3 thr; 1 running Swp[ 0/0MB] Uptime: 00:58:11 PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init 311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid 314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae 389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys 407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5 408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5 406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5 553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br
htop cung cấp khả năng trực quan hóa tốt hơn các luồng CPU đa lõi, hỗ trợ màu sắc hiện đại và nhiều tùy chọn sắp xếp hơn, cùng với nhiều tính năng hữu ích khác. Không giống như top, htop không phải lúc nào cũng được cài đặt mặc định, nhưng nó có thể được coi là một sự thay thế trực tiếp. Bạn có thể thoát khỏi htop bằng cách nhấn Ctrl+C, tương tự như top.
Dưới đây là một số phím tắt giúp bạn sử dụng htop hiệu quả hơn:
● M: Sắp xếp các quy trình theo mức sử dụng bộ nhớ
● P: Sắp xếp các quy trình theo mức sử dụng CPU
● ?: Truy cập trợ giúp
● k: Kết thúc quy trình hiện tại/được chọn
● F2: Cấu hình htop. Tại đây bạn có thể lựa chọn các tùy chọn hiển thị.
● /: Tìm kiếm quy trình
Có rất nhiều tùy chọn khác mà bạn có thể khám phá thông qua phần trợ giúp hoặc cài đặt. Đây nên là bước khởi đầu của bạn khi tìm hiểu tính năng của htop. Trong bước tiếp theo, bạn sẽ học cách giám sát băng thông mạng của mình.
Bước 2 – Cách Giám Sát Băng Thông Mạng
Nếu kết nối mạng của bạn dường như bị sử dụng quá mức và bạn không chắc ứng dụng nào là nguyên nhân, chương trình có tên nethogs là một lựa chọn tốt để tìm ra vấn đề.
Trên Ubuntu, bạn có thể cài đặt nethogs bằng lệnh:
sudo apt install nethogs
Sau đó, lệnh nethogs sẽ có sẵn:
nethogs
Output
NetHogs version 0.8.0 PID USER PROGRAM DEV SENT RECEIVED 3379 root /usr/sbin/sshd eth0 0.485 0.182 KB/sec 820 root sshd: root@pts/0 eth0 0.427 0.052 KB/sec ? root unknown TCP 0.000 0.000 KB/sec TOTAL 0.912 0.233 KB/sec
nethogs liên kết mỗi ứng dụng với lưu lượng mạng của nó.
Chỉ có một vài lệnh bạn có thể sử dụng để điều khiển nethogs:
● M: Thay đổi hiển thị giữa “kb/s”, “kb”, “b” và “mb”.
● R: Sắp xếp theo lưu lượng nhận.
● S: Sắp xếp theo lưu lượng gửi.
● Q: Thoát
iptraf-ng là một cách khác để giám sát lưu lượng mạng. Nó cung cấp nhiều giao diện giám sát tương tác khác nhau.
Lưu ý: IPTraf yêu cầu kích thước màn hình ít nhất 80 cột và 24 dòng.
Trên Ubuntu, bạn có thể cài đặt iptraf-ng bằng lệnh:
sudo apt install iptraf-ng
iptraf-ng cần được chạy với quyền root, vì vậy bạn nên chạy nó bằng cách thêm sudo:
sudo iptraf-ng
Bạn sẽ được trình bày với một menu sử dụng khung giao diện dòng lệnh phổ biến có tên ncurses.
Với menu này, bạn có thể chọn giao diện mà bạn muốn truy cập. Ví dụ, để có cái nhìn tổng quan về toàn bộ lưu lượng mạng, bạn có thể chọn menu đầu tiên và sau đó chọn “All interfaces”. Nó sẽ hiển thị cho bạn một màn hình trông như sau:
Ở đây, bạn có thể thấy những địa chỉ IP mà bạn đang giao tiếp trên tất cả các giao diện mạng của mình.
Nếu bạn muốn chuyển đổi các địa chỉ IP đó thành tên miền, bạn có thể bật tính năng tra cứu DNS ngược bằng cách thoát khỏi màn hình lưu lượng, chọn Configure và sau đó bật tùy chọn Reverse DNS lookups.
Bạn cũng có thể bật hiển thị tên dịch vụ TCP/UDP để xem tên của các dịch vụ đang chạy thay vì số cổng.
Với cả hai tùy chọn này được bật, màn hình có thể trông như sau:
Lệnh netstat là một công cụ linh hoạt khác để thu thập thông tin mạng.
netstat được cài đặt mặc định trên hầu hết các hệ thống hiện đại, nhưng bạn có thể tự cài đặt nó bằng cách tải từ kho lưu trữ mặc định của máy chủ. Trên hầu hết các hệ thống Linux, bao gồm Ubuntu, gói chứa netstat là net-tools:
sudo apt install net-tools
Theo mặc định, lệnh netstat khi chạy riêng sẽ in ra danh sách các socket mở:
netstat
Output
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.241.187.204:ssh ip223.hichina.com:50324 ESTABLISHED tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 5 [ ] DGRAM 6559 /dev/log unix 3 [ ] STREAM CONNECTED 9386 unix 3 [ ] STREAM CONNECTED 9385 . . .
Nếu bạn thêm tham số -a, nó sẽ liệt kê tất cả các cổng, bao gồm cả cổng đang lắng nghe và không lắng nghe:
netstat -a
Output
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 6195 @/com/ubuntu/upstart unix 2 [ ACC ] STREAM LISTENING 7762 /var/run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 6503 /var/run/dbus/system_bus_socket . . .
Nếu bạn muốn lọc chỉ để xem các kết nối TCP hoặc UDP, hãy sử dụng các tham số -t hoặc -u tương ứng:
netstat -at
Output
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 192.241.187.204:ssh rrcs-72-43-115-18:50615 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN
Xem thống kê bằng cách truyền tham số -s:
netstat -s
Output
Ip: 13500 total packets received 0 forwarded 0 incoming packets discarded 13500 incoming packets delivered 3078 requests sent out 16 dropped because of missing route Icmp: 41 ICMP messages received 0 input ICMP message failed. ICMP input histogram: echo requests: 1 echo replies: 40 . . .
Nếu bạn muốn liên tục cập nhật kết quả hiển thị, bạn có thể sử dụng tham số -c. Có rất nhiều tùy chọn khác cho netstat mà bạn có thể tìm hiểu thêm bằng cách xem trang hướng dẫn của nó.
Trong bước tiếp theo, bạn sẽ học một số cách hữu ích để giám sát việc sử dụng ổ đĩa của mình.
Bước 3 – Cách Giám Sát Việc Sử Dụng Ổ Đĩa
Để có cái nhìn nhanh về dung lượng đĩa còn trống trên các ổ đĩa của bạn, bạn có thể sử dụng chương trình df.
Không có bất kỳ tham số nào, kết quả hiển thị của nó trông như sau:
df
Output
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda 31383196 1228936 28581396 5% / udev 505152 4 505148 1% /dev tmpfs 203920 204 203716 1% /run none 5120 0 5120 0% /run/lock none 509800 0 509800 0% /run/shm
Kết quả hiển thị dung lượng đĩa tính bằng byte, có thể hơi khó đọc.
Để khắc phục vấn đề này, bạn có thể chỉ định kết quả hiển thị ở định dạng dễ đọc hơn:
df -h
Output
Filesystem Size Used Avail Use% Mounted on /dev/vda 30G 1.2G 28G 5% / udev 494M 4.0K 494M 1% /dev tmpfs 200M 204K 199M 1% /run none 5.0M 0 5.0M 0% /run/lock none 498M 0 498M 0% /run/shm
Nếu bạn muốn xem tổng dung lượng đĩa có sẵn trên tất cả các hệ thống tập tin, bạn có thể sử dụng tham số –total. Điều này sẽ thêm một hàng ở dưới cùng với thông tin tổng hợp:
df -h --total
Output
Filesystem Size Used Avail Use% Mounted on /dev/vda 30G 1.2G 28G 5% / udev 494M 4.0K 494M 1% /dev tmpfs 200M 204K 199M 1% /run none 5.0M 0 5.0M 0% /run/lock none 498M 0 498M 0% /run/shm total 32G 1.2G 29G 4%
Chương trình df cung cấp một cái nhìn tổng quan hữu ích. Một lệnh khác, du, sẽ phân tích chi tiết theo từng thư mục.
Lệnh du sẽ phân tích mức sử dụng cho thư mục hiện tại và các thư mục con. Kết quả hiển thị mặc định của du khi chạy trong một thư mục home gần như trống trông như sau:
du
Output
4 ./.cache 8 ./.ssh 28 .
Một lần nữa, bạn có thể chỉ định kết quả hiển thị ở định dạng dễ đọc hơn bằng cách sử dụng tham số -h:
du -h
Output
4.0K ./.cache 8.0K ./.ssh 28K .
Để xem kích thước file cũng như thư mục, gõ lệnh sau:
du -a
Output
0 ./.cache/motd.legal-displayed 4 ./.cache 4 ./.ssh/authorized_keys 8 ./.ssh 4 ./.profile 4 ./.bashrc 4 ./.bash_history 28 .
Để có tổng cộng ở dưới cùng, bạn có thể thêm tham số -c:
du -c
Output
4 ./.cache 8 ./.ssh 28 . 28 total
Nếu bạn chỉ quan tâm đến tổng số và không cần chi tiết, bạn có thể gõ lệnh:
du -s
Output
28 .
Ngoài ra, còn có giao diện ncurses cho du, được gọi là ncdu, mà bạn có thể cài đặt:
sudo apt install ncdu
Lệnh này sẽ biểu diễn đồ họa việc sử dụng ổ đĩa của bạn:
ncdu
Output
--- /root ---------------------------------------------------------------------- 8.0KiB [##########] /.ssh 4.0KiB [##### ] /.cache 4.0KiB [##### ] .bashrc 4.0KiB [##### ] .profile 4.0KiB [##### ] .bash_history
Bạn có thể duyệt qua hệ thống tập tin bằng cách sử dụng phím mũi tên lên và xuống và nhấn Enter vào bất kỳ mục thư mục nào.
Trong phần cuối, bạn sẽ học cách giám sát việc sử dụng bộ nhớ của hệ thống.
Bước 4 – Cách Giám Sát Việc Sử Dụng Bộ Nhớ
Bạn có thể kiểm tra mức sử dụng bộ nhớ hiện tại trên hệ thống của mình bằng lệnh free.
Khi không sử dụng tham số nào, kết quả hiển thị trông như sau:
free
Output
total used free shared buff/cache available Mem: 1004896 390988 123484 3124 490424 313744 Swap: 0 0 0
Để hiển thị kết quả ở định dạng dễ đọc hơn, bạn có thể sử dụng tham số -m để hiển thị kết quả tính bằng megabyte:
free -m
Output
total used free shared buff/cache available Mem: 981 382 120 3 478 306 Swap: 0 0 0
Dòng Mem bao gồm bộ nhớ được sử dụng cho việc đệm và lưu vào bộ nhớ cache, mà sẽ được giải phóng ngay khi cần thiết cho các mục đích khác. Swap là bộ nhớ đã được ghi vào tệp swap trên đĩa nhằm bảo tồn bộ nhớ hoạt động.
Cuối cùng, lệnh vmstat có thể hiển thị nhiều thông tin khác nhau về hệ thống của bạn, bao gồm thông tin về bộ nhớ, swap, I/O đĩa và CPU.
Bạn có thể sử dụng lệnh này để có một góc nhìn khác về mức sử dụng bộ nhớ:
vmstat
Output
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 99340 123712 248296 0 0 0 1 9 3 0 0 100 0
Bạn có thể xem thông tin này tính bằng megabyte bằng cách chỉ định đơn vị với tham số -S:
vmstat -S M
Output
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 96 120 242 0 0 0 1 9 3 0 0 100 0
Để lấy một số thống kê chung về việc sử dụng bộ nhớ, gõ lệnh:
vmstat -s -S M
Output
495 M total memory 398 M used memory 252 M active memory 119 M inactive memory 96 M free memory 120 M buffer memory 242 M swap cache 0 M total swap 0 M used swap 0 M free swap . . .
Để lấy thông tin về việc sử dụng cache của từng quy trình hệ thống, gõ lệnh:
vmstat -m -S M
Output
Cache Num Total Size Pages ext4_groupinfo_4k 195 195 104 39 UDPLITEv6 0 0 768 10 UDPv6 10 10 768 10 tw_sock_TCPv6 0 0 256 16 TCPv6 11 11 1408 11 kcopyd_job 0 0 2344 13 dm_uevent 0 0 2464 13 bsg_cmd 0 0 288 14 . . .
Lệnh này sẽ cung cấp cho bạn chi tiết về loại thông tin được lưu trữ trong cache.
Kết Luận
Sử dụng những công cụ này, bạn sẽ bắt đầu có khả năng giám sát máy chủ của mình từ dòng lệnh. Có rất nhiều tiện ích giám sát khác được sử dụng cho các mục đích đa dạng, nhưng đây là điểm khởi đầu tốt để bạn làm quen với việc theo dõi tài nguyên hệ thống.