Điều tốt về Linux là bạn dễ dàng xem và quản lý mọi thứ, từ quy trình boot đến cài đặt gói phần mềm. Ở đây chúng ta thảo luận cách dùng lệnh lsof trong Linux để xem file đang mở và tiến trình dùng chúng. Biết cách xem điều này giúp hiểu cách hệ thống hoạt động và thậm chí thực hiện hành động cần thiết cho tiến trình cụ thể.
Lệnh Lsof
Để xem file đang mở và user hoặc tiến trình chịu trách nhiệm, chúng ta dùng tiện ích lsof. Mặc định, lsof được cài sẵn trong hầu hết distro.
Tuy nhiên, nếu bạn không có nó, có thể dùng trình quản lý gói cài trên hệ thống.
Debian/Ubuntu
Trên Debian, chạy lệnh:
sudo apt-get install lsof
Arch/Manjaro
Trên Manjaro và distro dựa trên Arch, dùng pacman:
sudo pacman -S lsof
CentOS/REHL/Fedora
Cho CentOS và họ REHL, dùng dnf:
sudo dnf install lsof
Dùng lệnh lsof liệt kê file mở cho tiến trình Linux
Giống hầu hết lệnh Linux, tiện ích lsof cực kỳ đơn giản. Bắt đầu bằng lệnh lsof:
sudo lsof
Sau khi chạy lệnh, lsof sẽ trả về thông tin về file mở trong hệ thống.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096 2 / init 1 root rtd DIR 8,48 4096 2 / init 1 root txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
Lưu ý: nếu bạn có quyền sudo, chạy lệnh với sudo để tránh lỗi "permission denied" trên file cụ thể.
Như đầu ra trên, output lsof có các cột:
| Cột | Ý nghĩa |
|---|---|
| Command | Tên tiến trình dùng file đích. |
| PID | ID duy nhất cho tiến trình dùng file. |
| TID | Cột hiển thị thread identifier. |
| TASKCMD | Tên task command. |
| USER | Username hoặc UID của user chạy tiến trình. |
| FD | File descriptor của file và modes. |
| TYPE | Node liên kết với file đích. |
| DEVICE | Số thiết bị phân cách bằng dấu phẩy. |
| SIZE/OFF | Kích thước file tính bằng byte hoặc offset size. |
| NODE | Giá trị inode của file cục bộ. Dùng lệnh stat để xem thông tin inode cho file. |
| NAME | Mount point của file. |
Bây giờ bạn hiểu nội dung printout lsof, hãy dùng lệnh lọc thông tin cụ thể.
Cách lọc cho tiến trình cụ thể
Để lọc chỉ file mở bởi tiến trình cụ thể, dùng tên tiến trình hoặc giá trị PID.
Ví dụ, để hiện file dùng bởi tiến trình firefox, dùng lệnh:
sudo lsof -c firefox
Lệnh sẽ hiện tất cả file mở bởi tiến trình firefox.
Để lọc bằng process ID, dùng tùy chọn -p và truyền PID. Dùng lệnh top để lấy PID tiến trình đích.
Ví dụ, lấy PID tiến trình firefox:
sudo ps aux | grep firefox
Sau khi có PID, dùng lsof hiện file mở:
sudo lsof -p 2121
Lệnh trên sẽ in file mở bởi tiến trình với PID chỉ định.
Cách lọc cho user cụ thể
Để xem chỉ file mở bởi user cụ thể, dùng cờ -u. Ví dụ, lọc cho user debian:
sudo lsof -u debian
Cách lọc cho file cụ thể
Giả sử bạn chỉ muốn biết tiến trình và user mở file cụ thể. Để làm vậy, truyền tên file cho lsof:
sudo lsof /bin/sleep
Lệnh trên chỉ lọc file cụ thể và trả về thông tin liên quan, bao gồm user, process ID, và hơn thế nữa.
Kết luận
Trong hướng dẫn đơn giản này, chúng ta thảo luận cách truy vấn hệ thống để lấy thông tin file mở dùng lệnh lsof trong Linux. Đây là một số lệnh thêm để liệt kê nội dung thư mục trong terminal.