Ưu điểm của Linux là bạn có thể dễ dàng xem và quản lý mọi thứ, từ quá trình khởi động đến cài đặt các gói phần mềm. Ở đây chúng tôi thảo luận về cách bạn có thể sử dụng lệnh lsof trong Linux để xem các tệp đang mở và các quy trình sử dụng chúng. Biết cách xem thông tin này có thể giúp bạn hiểu cách hệ thống hoạt động và thậm chí thực hiện các hành động cần thiết cho các quy trình cụ thể.
Lệnh Lsof
Để xem các tệp đang mở và người dùng hoặc quy trình chịu trách nhiệm về chúng, chúng tôi sử dụng lsof
tính thiết thực. Theo mặc định, lsof
được cài đặt sẵn trong hầu hết các bản phân phối.
Tuy nhiên, nếu bạn chưa cài đặt nó, bạn có thể sử dụng trình quản lý gói để cài đặt nó trên hệ thống của mình.
Debian / Ubuntu
Trên Debian, chạy lệnh:
sudo apt-get install lsof
Arch / Manjaro
Trên Manjaro và các bản phân phối dựa trên Arch khác, sử dụng pacman bằng cách chạy lệnh:
sudo pacman -S lsof
CentOS / REHL / Fedora
Đối với CentOS và họ REHL, bạn có thể sử dụng dnf:
sudo dnf install lsof
Sử dụng lệnh lsof để liệt kê các tệp đang mở cho một quy trình Linux
Giống như hầu hết các lệnh Linux, tiện ích lsof cực kỳ đơn giản để sử dụng. Bắt đầu bằng cách gõ lệnh lsof
:
sudo lsof
Sau khi bạn chạy lệnh trên, lsof sẽ trả về thông tin về các tệp đang 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ó đặc quyền sudo, hãy chạy lệnh với sudo
để tránh lỗi "quyền bị từ chối" trên các tệp cụ thể.
Như được hiển thị trong đầu ra ở trên, đầu ra lsof có các cột sau:
CộtĐại diện | |
---|---|
Lệnh | Hiển thị tên của quá trình sử dụng tệp đích. |
PID | Số nhận dạng duy nhất cho quá trình sử dụng tệp. |
TID | Cột hiển thị mã định danh chuỗi. |
TASKCMD | Tên của lệnh tác vụ. |
NGƯỜI DÙNG | Tên người dùng hoặc UID của người dùng đang chạy quy trình. |
FD | Bộ mô tả tệp của tệp và các chế độ. |
LOẠI | Nútđược liên kết với tệp đích. |
THIẾT BỊ | Số thiết bị được phân tách bằng dấu phẩy. |
KÍCH THƯỚC / TẮT | Kích thước tệp tính bằng byte kích thước bù đắp tệp |
NODE | Giá trị inode của tệp cục bộ. Bạn có thể sử dụng lệnh stat để hiển thị inode thông tin cho tệp. |
TÊN | Điểm gắn của tệp. |
Bây giờ bạn đã hiểu nội dung của bản in lệnh lsof đại diện cho điều gì, chúng ta hãy sử dụng lệnh để lọc thông tin cụ thể.
Cách lọc cho quy trình cụ thể
Để chỉ lọc các tệp cụ thể được mở bởi quy trình cụ thể, chúng tôi có thể sử dụng tên quy trình hoặc giá trị PID.
Ví dụ:để hiển thị các tệp được sử dụng bởi quá trình firefox, chúng ta có thể sử dụng lệnh:
sudo lsof -c firefox
Lệnh sẽ hiển thị tất cả các tệp được mở bởi quá trình firefox.
Để lọc theo ID quy trình, chúng ta có thể sử dụng -p
và chuyển ID quy trình. Bạn có thể sử dụng top
lệnh để lấy ID tiến trình của tiến trình đích.
Ví dụ, để lấy PID của quá trình firefox, chúng ta có thể sử dụng lệnh:
sudo ps aux | grep firefox
Khi bạn có PID của quy trình đích, hãy sử dụng lsof để hiển thị các tệp đang mở:
sudo lsof -p 2121
Lệnh trên sẽ in các tệp được mở bởi quá trình với PID được chỉ định.
Cách lọc cho một người dùng cụ thể
Để chỉ xem các tệp được mở bởi một người dùng cụ thể, chúng tôi có thể sử dụng -u
lá cờ. Ví dụ, để lọc người dùng Debian, hãy sử dụng lệnh:
sudo lsof -u debian
Cách lọc cho một tệp cụ thể
Giả sử bạn chỉ muốn biết quy trình và người dùng đã mở một tệp cụ thể. Để thực hiện việc này, hãy chuyển tên của tệp cho lsof:
sudo lsof /bin/sleep
Ở trên sẽ chỉ lọc tệp cụ thể và trả lại thông tin liên quan, bao gồm người dùng, ID quy trình, v.v.
Kết thúc
Trong hướng dẫn đơn giản này, chúng ta đã thảo luận về cách truy vấn hệ thống để biết thông tin về các tệp đang mở bằng lệnh lsof trong Linux. Dưới đây là một số lệnh bổ sung để bạn liệt kê nội dung của một thư mục trong terminal.