Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình

Giờ đây bạn có thể xem tất cả các thiết bị và tiến trình khác được xử lý như một file trên Linux chỉ bằng một lệnh lsof đơn giản. Cách sử dụng lệnh lsof ngay bên dưới đây.

Trên điều hành Linux, mọi thứ đều là một file

Nhận định mọi thứ trên Linux đều là một file khá đúng. Một file là tập hợp các byte. Khi được đọc trong một chương trình hoặc được gửi cho máy in, chúng tạo ra một luồng byte. Và khi được ghi, chúng chấp nhận một luồng byte.

Nhiều thành phần hệ thống khác chấp nhận hoặc tạo luồng byte như bàn phím, máy in, tiến trình giao tiếp. Bởi vì chúng vừa chấp nhận và vừa tạo luồng byte cho nên các thiết bị này có thể được xử lý như thể chúng là một file với mức độ rất thấp.

Khái niệm trên đã đơn giản hóa việc triển khai hệ điều hành Linux. Điều đó có nghĩa là một bộ xử lý các công cụ, API có thể được tạo để xử lý một loạt các tài nguyên khác nhau.

Dữ liệu và file chương trình nằm trên ổ cứng là các file hệ thống cũ. Bạn có thể sử dụng lệnh ls để liệt kê và tìm thông tin về chúng.

Vậy làm thế nào để chúng ta tìm ra tất cả các tiến trình và thiết bị khác được xem là file? Hãy để lệnh lsof xử lý việc đó. Nó sẽ liệt kê các file mở trên hệ thống và bất cứ thứ gì được xử lý như một file.

Lệnh lsof tìm ra tất cả các tiến trình và thiết bị khác được xem là file

Chúng ta cần sử dụng lệnh sudo với lệnh lsof vì nhiều tiến trình hoặc thiết bị thuộc về root hoặc được khởi chạy bởi root.

Danh sách lệnh lsof liệt kê rất dài, do đó bạn cũng nên sử dụng lệnh less để rút ngắn lại.

sudo lsof | less

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 1

Khi chạy lệnh lsoft trên GNOME, người dùng sẽ nhận cảnh báo trong cửa sổ terminal.

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

Lsoft cố gắng xử lý tất cả các hệ thống file. Cảnh báo này xuất hiện là do lsof gặp phải hệ thống GNOME Virtual file system (GVFS). Đây là trường hợp đặc biệt của hệ thống file trong không gian người dùng (FUSE). Nó hoạt động như một cầu nối giữa GNOME, API và nhân kernel. Không ai, thậm chí cả những người có quyền root có thể truy cập vào những hệ thống file này trừ người đã mount nó (trong trường hợp này là GNOME). Bạn có thể bỏ qua cảnh báo này.

Đầu ra của lsof rất dài và nhiều. Bạn có thể thấy các cột ngoài cùng bên trái ở hình dưới:

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 2

Các cột ngoài cùng bên phải:

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 3

Các cột trong lệnh lsof

Dưới đây là các cột đầy đủ của lệnh lsoft. Các file mở có thể không có đầy đủ các cột, một số sẽ bỏ trống.

  • Command: Tên của lệnh liên quan đến tiến trình mở file.
  • PID: Mã định danh tiến trình của tiến trình mở file.
  • TID: Mã định danh nhiệm vụ (luồng). Nếu thấy cột trống có nghĩa nó không phải là nhiệm vụ mà là tiến trình.
  • User: ID hoặc tên người dùng thuộc về tiến trình hoặc ID người dùng, thông tin đăng nhập của người sở hữu thư mục trong /proc mà lsoft tìm thấy thông tin về tiến trình.
  • FD: Hiển thị mô tả file.
  • Type: Loại nút liên kết với file.
  • Device: Chứa số thiết bị được tách nhau bằng dấu phẩy cho một ký tự đặc biệt, chặc file đặc biệt, thông thường, thư mục hoặc file NFS, địa chỉ tham chiếu kernel xác định file. Ngoài ra, nó còn hiển thị địa chỉ cơ sở hoặc tên thiết bị của thiết bị Linux AX.25 socket.
  • Size/Off: Hiển thị kích thước file hoặc khoảng cách đến đầu file (file offset) tính bằng byte.
  • Node: Hiển thị số node của file cục bộ hoặc số inode của file NFS trong máy chủ lưu trữ hoặc loại giao thức Internet. Nó có thể hiển thị STR cho một luồng hoặc số inode, IRQ cho thiết bị Linux AX.25 socket.
  • Name: Hiển thị tên của điểm mount và hệ thống file có các file nằm trên đó.

Cột FD

Mục cột FD có thể được tạo thành từ ba thành phần: mô tả file, ký tự node và ký tự khóa. Một số mô tả file phổ biến là:
  • cwd: Thư mục làm việc hiện tại.
  • err: Lỗi thông tin FD (xem cột NAME).
  • ltx: Văn bản thư viện dùng chung (mã và dữ liệu).
  • m86: Tập tin ánh xạ DOS Merge.
  • mem: Tập tin ánh xạ bộ nhớ.
  • mmap: Thiết bị ánh xạ bộ nhớ.
  • pd: Thư mục cha.
  • rtd: thư mục gốc.
  • txt: Văn bản chương trình (mã và dữ liệu).
Ký tự node:
  • r: Truy cập đọc.
  • w: Truy cập ghi.
  • u: Quyền truy cập đọc và ghi.
  • '': Một ký tự khoảng trắng, nếu không xác định chế độ, không có ký tự khóa.
  • -: Chế độ không xác định và có một ký tự khóa.
Ký tự khóa:
  • r: Khóa đọc trên một phần của tập tin.
  • R: Khóa đọc trên toàn bộ tập tin.
  • w: Khóa ghi trên một phần của tập tin.
  • W: Khóa ghi trên toàn bộ tập tin.
  • u: Khóa đọc và ghi có độ dài bất kỳ.
  • U: Loại khóa không xác định.
  • '': Một ký tự khoảng trắng. Không khóa.

Cột TYPE

Có hơn 70 mục có thể xuất hiện trong cột TYPE. Một số mục phổ biến bạn sẽ thấy là:
  • REG: Tập tin hệ thống thường xuyên.
  • DIR: Thư mục.
  • FIFO: First In First Out.
  • CHR: File ký tự đặc biệt.
  • BLK: File bị chặn đặc biệt.
  • INET: Internet socket
  • unix: Socket tên miền UNIX

Xem các tiến trình mở file

Để xem các tiến trình mở một file nhất định, bạn cần cung cấp tên file làm tham số cho lsof. Ví dụ, để xem tiến trình mở file kern.log sử dụng lệnh sau:

sudo lsof /var/log/kern.log

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 4

Lsof trả lại bằng cách hiển thị tiến trình duy nhất, rsyslogd được khởi động bởi người dùng syslog.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 5

Xem tất cả các file được mở từ thư viện

Để xem các file được mở từ một thư viện và tiến trình mở chúng, cung cấp tên thư mục cho lsof làm tham số. Bạn phải sử dụng tùy chọn +D.

Để xem tất cả các file mở trong thư mục /var/log/ sử dụng lệnh sau:

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 6

lsof trả lại một danh sách tất cả các file mở trong thư mục đó.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 7

Để xem tất cả các file được mở từ thư mục /home, sử dụng lệnh sau:

sudo lsof +D /home

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 8

Bạn sẽ thấy tất cả các file được mở trong thư mục /home. Với mô tả ngắn trong một số cột, toàn bộ danh sách sẽ được thu hẹp.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 9

Liệt kê file được một tiến trình cụ thể mở

Để xem các file được mở bởi một tiến trình cụ thể, sử dụng tùy chọn -c. Lưu ý, bạn có thể cung cấp nhiều thuật ngữ tìm kiếm cho lsoft cùng một lúc.

sudo lsof -c ssh -c init

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 10

Lsoft cung cấp danh sách các file được mở bởi các tiến trình trong dòng lệnh.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 11

Xem các file người dùng mở

Để giới hạn hiển thị file được mở bởi người dùng cụ thể, bạn nên sử dụng tùy chọn -u. Trong ví dụ này, chúng ta sẽ tìm các file được mở bởi tiến trình thuộc sở hữu hoặc khởi chạy thay cho người dùng Mary.

sudo lsof -u mary

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 12

Tất cả các file được mở bởi người dùng Mary sẽ được liệt kê. Nó bao gồm các file được mở trong môi trường desktop hoặc đơn giản là kết quả của việc Mary đã đăng nhập vào hệ thống.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 13

Loại trừ file được người dùng mở

Để loại trừ file được người dùng mở, sử dụng toán tử ^ để loại trừ người dùng ra khỏi danh sách. Điều này sẽ giúp bạn tìm thấy thông tin dễ dàng hơn. Bạn phải sử dụng tùy chọn -u và thêm ký tự ^ trước tên người dùng.

sudo lsof +D /home -u ^mary

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 14

Bạn sẽ thấy danh sách liệt kê thư mục /home không có bất cứ file nào do người dùng Mary mở.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 15

Liệt kê file do tiến trình mở theo ID tiến trình

Để liệt kê file do tiến trình mở, sử dụng tùy chọn -p và cung cấp ID tiến trình làm tham số.

sudo lsof - p 4610

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 16

Tất cả các file được mở bởi ID tiến trình bạn cung cấp đều được liệt kê trong ảnh bên dưới.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 17

Liệt kê ID tiến trình mở file

Để xem ID tiến trình mở file cụ thể, sử dụng tùy chọn -t và cung cấp tên file cho dòng lệnh.

sudo lsof -t /usr/share/mime/mime.cache

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 18

ID tiến trình được hiển thị trong danh sách đơn giản.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 19

Sử dụng tìm kiếm AND và OR

Như đã đề cập ở trên, bạn có thể sử dụng nhiều thuật ngữ tìm kiếm trong dòng lệnh. Ví dụ, để tìm các file do người dùng Mary mở và có liên quan đến tiến trình SSH sử dụng lệnh sau:

sudo lsof -u mary -c ssh

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 20

Dưới đây là đầu ra của lệnh trên, có thứ gì đó không đúng ở đây vì có những mục đầu ra được bắt đầu bằng root.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 21

Khi cung cấp nhiều thuật ngữ tìm kiếm lsoft sẽ trả lại bất cứ file nào phù hợp với thuật ngữ tìm kiếm đầu tiên, thứ hai, thứ ba, v.v… Nói một cách khác, nó thực hiện tìm kiếm OR.

Để khiến lsoft thực hiện tìm kiếm AND, sử dụng tùy chọn -a. Điều đó có nghĩa là chỉ file phù hợp với điều kiện đầu tiên và thứ hai mới được liệt kê.

sudo lsof -u mary -c ssh -a

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 22

Bây giờ, mọi file trong danh sách đều được mở bởi hoặc thay mặt bởi Mary và có liên quan đến lệnh SSH.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 23

Tự động làm mới kết quả

Chúng ta có thể sử dụng tùy chọn +|-r để đưa lsof vào chế độ lặp lại. Bạn có thể sử dụng tùy chọn lặp lại theo hai cách +r hoặc -r. Bạn cần thêm số giây muốn lsof chờ trước khi làm mới kết quả.

Sử dụng tùy chọn lặp lại với một trong hai định dạng khiến lsoft hiển thị kết quả như bình thường nhưng nó thêm đường nét đứt vào phía dưới màn hình. Nó sẽ chờ theo đúng số giây bạn cung cấp trong dòng lệnh và sau đó làm mới màn hình với một bộ kết quả mới.

Với tùy chọn -r nó sẽ tiếp tục lặp lại quá trình, muốn dừng, nhấn Ctrl+C. Với định dạng +r, nó sẽ tiếp tục cho đến khi không có kết quả nào được hiển thị hoặc nhấn Ctrl+C.

sudo lsof -u mary -c ssh -a -r5

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 24

Lưu ý, dòng gạch đứt ở cuối danh sách chia từng phần dữ liệu được hiển thị khi đầu ra được làm mới.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 25

Hiển thị file liên quan đến kết nối Internet

Tùy chọn -i cho phép bạn xem các file được các tiến trình liên quan đến kết nối mạng và Internet mở.

lsof -i

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 26

Tất cả các file được mở do kết nối internet và mạng được hiển thị.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 27

Hiển thị file được liên kết với kết nối Internet bằng ID tiến trình

Để xem các file được mở bởi tiến trình liên quan đến kết nối Internet bằng ID tiến trình trình cụ thể, hãy thêm tùy chọn -p và tùy chọn -a.

Chúng ta sẽ tìm các file liên quan đến kết nối Internet hoặc mạng do ID tiến trình 606 mở.

sudo lsof -i -a -p 606

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 28

Tất cả các file được mở bởi tiến trình ID 606 liên kết với Internet và mạng được hiển thị.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 29

Hiển thị tập tin liên kết với các lệnh và kết nối Internet

Chúng ta có thể sử dụng tùy chọn -c (lệnh) để tìm kiếm các file được mở bởi các tiến trình cụ thể. Để tìm các file đã được mở bằng các tiến trình liên quan đến kết nối Internet hoặc mạng được liên kết với tiến trình ssh, sử dụng lệnh sau:

lsof -i -a -c ssh

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 30

Tất cả các file được mở do tiến trình ssh được liệt kê.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 31

Hiển thị file liên quan đến kết nối Internet và cổng

Lsoft có thể báo cáo các file được mở bởi kết nối Internet và mạng trên cổng cụ thể. Để làm điều đó, sử dụng ký tự : theo sau số cổng.

Dưới đây lsoft liệt kê các file được mở bởi kết nối mạng hoặc Internet sử dụng cổng 22.

lsof -i :22

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 32

Tất cả các file được mở bởi tiến trình liên quan đến cổng 22 (đây là cổng mặc định cho kết nối SSH).

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 33

Hiển thị file liên quan đến kết nối Internet và giao thức

Bạn có thể yêu cầu lsof hiển thị file được mở bởi tiến trình liên quan đến kết nối mạng và Internet, sử dụng giao thức cụ thể. Bạn có thể chọn từ TCP, UDP và SMTP. Ở đây chúng ta tìm file sử dụng giao thức TCP.

Sự khác nhau giữa giao thức TCP và UDP

sudo lsof -i tcp

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 34

Đây là kết quả đầu ra được mở bằng các tiến trình sử dụng giao thức TCP.

Sử dụng lệnh Isof trên Linux để xem các thiết bị và tiến trình 35

Trên đây là hướng dẫn sử dụng một số cách dùng lệnh lsoft để tìm kiếm file trên Linux. Chúc bạn nhanh chóng làm quen với lsoft.

Nguồn bài: Quantrimang