Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
Nếu mọi thứ trong Linux là một file, bạn sẽ có nhiều thứ hơn ngoài file trên ổ cứng. Bài viết này sẽ hướng dẫn bạn cách sử dụng lệnh lsof xem tất cả các thiết bị và tiến trình khác được xử lý như 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 đó. Lệnh này 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.
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
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:
Các cột ngoài cùng bên phải:
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.
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à:
Ký tự node:
Ký tự khóa:
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à:
Để 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
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.
Để 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:
lsof trả lại một danh sách tất cả các file mở trong thư mục đó.
Để xem tất cả các file được mở từ thư mục /home, sử dụng lệnh sau:
sudo lsof +D /home
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.
Để 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
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.
Để 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
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.
Để 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
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ở.
Để 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
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.
Để 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
ID tiến trình được hiển thị trong danh sách đơn giản.
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
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.
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
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.
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ấnCtrl
+C
.
sudo lsof -u mary -c ssh -a -r5
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.
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
Tất cả các file được mở do kết nối internet và mạng được hiển thị.
Để 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
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ị.
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
Tất cả các file được mở do tiến trình ssh được liệt kê.
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
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).
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.
sudo lsof -i tcp
Đây là kết quả đầu ra được mở bằng các tiến trình sử dụng giao thức TCP.
Trên đây là một số cách dùng lệnh lsoft bạn có thể sử dụng để tìm kiếm file trên Linux.
Chúc các bạn thực hiện thành công!
Nguồn tin: Quantrimang.com
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn