Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách dùng lệnh lsof trong Linux để liệt kê file đang mở

Đ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
CommandTên tiến trình dùng file đích.
PIDID duy nhất cho tiến trình dùng file.
TIDCột hiển thị thread identifier.
TASKCMDTên task command.
USERUsername hoặc UID của user chạy tiến trình.
FDFile descriptor của file và modes.
TYPENode liên kết với file đích.
DEVICESố thiết bị phân cách bằng dấu phẩy.
SIZE/OFFKích thước file tính bằng byte hoặc offset size.
NODEGiá trị inode của file cục bộ. Dùng lệnh stat để xem thông tin inode cho file.
NAMEMount 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
Cách dùng lệnh lsof trong Linux để liệt kê file đang mở

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
Cách dùng lệnh lsof trong Linux để liệt kê file đang mở

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 dùng lệnh lsof trong Linux để liệt kê file đang mở

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
Cách dùng lệnh lsof trong Linux để liệt kê file đang mở

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.