Hướng dẫn sử dụng lệnh lsof Linux cho người mới bắt đầu (15 ví dụ)

theanh

Administrator
Nhân viên
Lệnh lsof của Linux hiển thị thông tin đầu ra về các tệp được mở bởi một quy trình. Trong bài viết này, chúng ta sẽ thảo luận về công cụ lsof của Linux bằng 15 ví dụ dễ hiểu. Xin lưu ý rằng tất cả các ví dụ được đề cập trong hướng dẫn này đã được thử nghiệm trên Ubuntu 22.04 LTS, nhưng chúng cũng sẽ hoạt động trên các bản phân phối Linux khác như Debian, Fedora và CentOS.

Giới thiệu về lệnh lsof​

Nếu bạn muốn nhanh chóng xem tên của các tệp đã được mở bởi một quy trình cụ thể (hoặc tất cả các quy trình), lệnh lsof cho phép bạn thực hiện điều đó. Một tệp đang mở có thể là một tệp thông thường hoặc một thư mục, một thư viện, một tệp đặc biệt hoặc thiết bị khối, một tệp ký tự đặc biệt, một tham chiếu văn bản đang thực thi hoặc thậm chí là một luồng hoặc một tệp mạng. Bạn cũng có thể liệt kê các quy trình theo số cổng. Nếu bạn không đăng nhập với tư cách là người dùng root, thì bạn có thể phải thêm 'sudo' vào trước các lệnh.

Cài đặt lệnh lsof của Linux​

Hầu hết các bản phân phối Linux đều có lsof được cài đặt sẵn. Nếu hệ thống của bạn chưa cài đặt lsof, hãy sử dụng các lệnh sau để cài đặt lsof:

Trên Ubuntu và Debian:
Mã:
$ sudo apt install lsof
Trên CentOS và Fedora:
Mã:
$ dnf install lsof

1. Cách liệt kê tất cả các tệp đang mở​

Để liệt kê tất cả các tệp đang mở, hãy chạy lệnh lsof mà không có bất kỳ đối số nào:
Mã:
lsof
Ví dụ: Đây là ảnh chụp màn hình một phần đầu ra của lệnh trên được tạo ra trên hệ thống của tôi:



Cột đầu tiên biểu thị quy trình trong khi cột cuối cùng chứa tên tệp. Để biết chi tiết về tất cả các cột, hãy truy cập trang hướng dẫn của lệnh.

2. Cách liệt kê các tệp được mở bởi các tiến trình thuộc về một người dùng cụ thể​

Công cụ này cũng cho phép bạn liệt kê các tệp được mở bởi các tiến trình thuộc về một người dùng cụ thể. Có thể truy cập tính năng này bằng cách sử dụng tùy chọn dòng lệnh -u.

lsof -u [user-name]

Ví dụ:

lsof -u administrator


3. Cách liệt kêcác tệp dựa trên địa chỉ Internet của chúng​

Công cụ này cho phép bạn liệt kê các tệp dựa trên địa chỉ Internet của chúng. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -i. Ví dụ, nếu muốn, bạn có thể hiển thị riêng các tệp IPv4 và IPv6. Đối với IPv4, hãy chạy lệnh sau:
Mã:
lsof -i 4
Ví dụ:



Tương tự, đối với IPv6, hãy chạy lệnh sau:
Mã:
lsof -i 6
Ví dụ:

lsof -i 6


4. Cách liệt kê tất cả các tệp theo tên ứng dụng​

Tùy chọn dòng lệnh -c cho phép bạn lấy tất cả các tệp được mở theo tên chương trình.
Mã:
$ lsof -c apache
Bạn không phải sử dụng tên chương trình đầy đủ vì tất cả các chương trình bắt đầu bằng từ 'apache' đều được hiển thị. Vì vậy, trong trường hợp của chúng tôi, nó sẽ liệt kê tất cả các tiến trình của ứng dụng 'apache2'.



Tùy chọn -c về cơ bản chỉ là một phím tắt cho hai lệnh:
Mã:
$ lsof | grep apache

5. Cách liệt kê các tệp cụ thể cho một tiến trình​

Công cụ này cũng cho phép bạn hiển thị các tệp đã mở dựa trên số nhận dạng tiến trình (PID). Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -p.
Mã:
lsof -p [PID]
Ví dụ:
Mã:
lsof -p 856


Tiếp theo, bạn cũng có thể loại trừ các PID cụ thể trong đầu ra bằng cách thêm ký hiệu ^ trước chúng. Để loại trừ một PID cụ thể, bạn có thể chạy lệnh sau:
Mã:
lsof -p [^PID]
Ví dụ:

lsof -p ^1



Như bạn có thể thấy trong ảnh chụp màn hình ở trên, quy trình có id 1 bị loại khỏi danh sách.

6. Cách liệt kê ID của các quy trình đã mở một tệp cụ thể​

Công cụ này cho phép bạn liệt kê ID của các tiến trình đã mở một tệp cụ thể. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -t.
Mã:
$ lsof -t [file-name]
Ví dụ:
Mã:
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0

7. Cách liệt kê tất cả các tệp đang mở trong một thư mục​

Nếu muốn, bạn cũng có thể tạo lsofsearch cho tất cả các phiên bản đang mở của một thư mục (bao gồm tất cả các tệp và thư mục mà thư mục đó chứa). Có thể truy cập tính năng này bằng tùy chọn dòng lệnh +D.

$ lsof +D [directory-path]

Ví dụ:

$ lsof +D /usr/lib/locale


8. Cách liệt kê tất cả các tệp mạng Internet và x.25 (HP-UX)​

Điều này có thể thực hiện được bằng cách sử dụng tùy chọn dòng lệnh -i mà chúng tôi đã mô tả trước đó. Chỉ cần bạn phải sử dụng nó mà không có bất kỳ đối số nào.

$ lsof -i


9. Tìm ra chương trình nào đang sử dụng một cổng​

Công tắc -i của lệnh cho phép bạn tìm một quy trình hoặc ứng dụng lắng nghe một số cổng cụ thể. Trong ví dụ bên dưới, tôi đã kiểm tra chương trình nào đang sử dụng cổng 80.
Mã:
$ lsof -i :80
Thay vì số cổng, bạn có thể sử dụng tên dịch vụ như được liệt kê trong tệp /etc/services. Ví dụ để kiểm tra ứng dụng nào lắng nghe trên cổng HTTPS (443):
Mã:
$ lsof -i :https
Kết quả:



Các ví dụ trên sẽ kiểm tra cả TCP và UDP. Nếu bạn chỉ muốn kiểm tra TCP hoặc UDP, hãy thêm từ 'tcp' hoặc 'udp' vào trước. Ví dụ, ứng dụng nào đang sử dụng cổng 25 TCP:
Mã:
$ lsof -i tcp:25
hoặc ứng dụng nào sử dụng cổng UDP 53:
Mã:
$ lsof -i udp:53

10. Cách liệt kê các tệp đang mở dựa trên phạm vi cổng​

Tiện ích này cũng cho phép bạn liệt kê các tệp đang mở dựa trên một cổng hoặc phạm vi cổng cụ thể. Ví dụ: để hiển thị các tệp đang mở cho cổng 1-1024, hãy sử dụng lệnh sau:

$ lsof -i :1-1024


11. Cách liệt kê các tệp đang mở dựa trên loại kết nối (TCP hoặc UDP)​

Công cụ này cho phép bạn liệt kê các tệp dựa trên loại kết nối. Ví dụ, đối với các tệp cụ thể của UDP, hãy sử dụng lệnh sau:

$ lsof -i udp



Tương tự, bạn có thể yêu cầu lsof hiển thị các tệp cụ thể của TCP.

12. Cách yêu cầu lsof liệt kê PID cha của các tiến trình​

Ngoài ra còn có một tùy chọn buộc lsof liệt kê số Nhận dạng tiến trình cha (PPID) trong đầu ra. Tùy chọn đang đề cập là -R.
Mã:
$ lsof -R
Để lấy thông tin PPID cho một PID cụ thể, bạn có thể chạy lệnh sau:
Mã:
$ lsof -p [PID] -R
Ví dụ:
Mã:
$ lsof -p 3 -R



13. Cách tìm hoạt động mạng theo người dùng​

Bằng cách sử dụng kết hợp các tùy chọn dòng lệnh -i và -u, chúng ta có thể tìm kiếm tất cả các kết nối mạng của người dùng Linux. Điều này có thể hữu ích nếu bạn kiểm tra một hệ thống có thể đã bị hack. Trong ví dụ này, chúng tôi kiểm tra mọi hoạt động mạng của người dùng www-data:
Mã:
$ lsof -a -i -u www-data

14. Liệt kê tất cả các tệp được ánh xạ bộ nhớ​

Lệnh này liệt kê tất cả các tệp được ánh xạ bộ nhớ trên Linux.
Mã:
$ lsof -d mem

15. Liệt kê tất cả các tệp NFS​

Tùy chọn -N hiển thị cho bạn danh sách tất cả các tệp NFS (Hệ thống tệp mạng).
Mã:
$lsof -N

Kết luận​

Mặc dù lsof cung cấp rất nhiều tùy chọn, nhưng những tùy chọn mà chúng tôi đã thảo luận ở đây sẽ đủ để bạn bắt đầu. Sau khi bạn thực hành xong những điều này, hãy đến trang hướng dẫn của công cụ để tìm hiểu thêm về nó. À, và trong trường hợp bạn có bất kỳ thắc mắc và câu hỏi nào, hãy để lại bình luận bên dưới.
 
Back
Bên trên