Computer >> Máy Tính >  >> Hệ thống >> Linux

Cách sử dụng lệnh lsof trong Linux để liệt kê các tệp đang mở

Cách sử dụng lệnh lsof trong Linux để liệt kê các tệp đang mở

Ư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 Nú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 đượ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
Cách sử dụng lệnh lsof trong Linux để liệt kê các tệp đang mở

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

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 sử dụng lệnh lsof trong Linux để liệt kê các tệp đang mở

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

Ở 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.