Lệnh lsof trong linux là một công cụ mạnh mẽ, giúp bạn liệt kê tất cả các file đang mở bởi các tiến trình. Nó cho phép bạn xác định tiến trình nào đang sử dụng một file cụ thể, rất hữu ích cho việc gỡ lỗi. Với lsof, bạn có thể dễ dàng tìm ra nguyên nhân gây ra lỗi "file đang được sử dụng" và giải phóng tài nguyên.
Lệnh lsof trong linux là gì?
Lệnh command lsof in linux là một công cụ dòng lệnh mạnh mẽ, giúp bạn liệt kê tất cả các tệp tin đang mở bởi các tiến trình trong hệ thống. Nó cho phép bạn xem tiến trình nào đang sử dụng một tệp tin cụ thể, ổ cắm mạng, hoặc thậm chí là một thư viện dùng chung. Với lsof, bạn có thể dễ dàng chẩn đoán các vấn đề liên quan đến việc sử dụng tài nguyên, ví dụ như khi một tệp tin bị khóa. Đây là một công cụ vô cùng hữu ích cho các nhà quản trị hệ thống và những người dùng muốn hiểu rõ hơn về hoạt động của hệ thống Linux. Bạn có thể sử dụng nó để tìm ra tiến trình nào đang gây ra xung đột cổng mạng.
```htmlTìm hiểu về lệnh lsof
Trong bước này, bạn sẽ làm quen với lệnh lsof, viết tắt của "list open files". Lệnh lsof là một công cụ mạnh mẽ trong Linux, giúp bạn xác định tiến trình nào đang mở file và kết nối mạng.
Để bắt đầu, hãy chạy lệnh lsof mà không có bất kỳ tham số nào để xem kết quả.
sudo lsof
Ví dụ về kết quả:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 8,1 4096 2 /
systemd 1 root rtd DIR 8,1 4096 2 /
systemd 1 root txt REG 8,1 1428176 655360 /usr/lib/systemd/systemd
systemd 1 root mem REG 8,1 2067688 655361 /usr/lib/x86_64-linux-gnu/libc-2.35.so
...
Lệnh lsof hiển thị rất nhiều thông tin về các file đang mở và kết nối mạng trên hệ thống của bạn. Hãy cùng phân tích các cột thông tin này.
COMMAND: Tên của tiến trình đang mở file.PID: ID của tiến trình (Process ID).TID: ID của luồng (Thread ID), nếu có.USER: Người dùng sở hữu tiến trình.FD: File descriptor, một số định danh cho file đang mở.TYPE: Loại file đang mở (ví dụ: file thông thường, thư mục, socket...).DEVICE: Số hiệu thiết bị của hệ thống file nơi file được lưu trữ.SIZE/OFF: Kích thước của file hoặc offset của file.NODE: Số inode của file.NAME: Tên của file hoặc kết nối mạng.
Kết quả trả về có thể rất dài, vì vậy bạn có thể sử dụng các tùy chọn để lọc kết quả. Ví dụ, để xem các file đang mở của một tiến trình cụ thể, bạn có thể dùng tùy chọn -p, theo sau là PID.
sudo lsof -p 1
Lệnh này sẽ hiển thị tất cả các file đang mở của tiến trình có PID là 1, thường là tiến trình systemd.
Bạn cũng có thể sử dụng lệnh lsof để tìm các file đang mở bởi một người dùng cụ thể.
sudo lsof -u labex
Lệnh này sẽ hiển thị tất cả các file đang mở thuộc sở hữu của người dùng labex.
Trong bước tiếp theo, bạn sẽ học cách sử dụng lệnh lsof để xác định các file đang mở bởi một tiến trình cụ thể.
Xác định các File đang Mở bởi một Process
Trong bước này, bạn sẽ học cách dùng lệnh lsof để xác định các file đang mở liên quan đến một process cụ thể.
Chúng ta hãy bắt đầu bằng việc tìm Process ID (PID) của một process đang chạy. Bạn có thể dùng lệnh ps để làm việc này.
sudo ps -ef | grep nginx
Ví dụ về kết quả:
root 825 1 0 14:32 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 826 825 0 14:32 ? 00:00:00 nginx: worker process
www-data 827 825 0 14:32 ? 00:00:00 nginx: worker process
Trong ví dụ này, process nginx có PID là 825, bạn hãy lưu ý thông tin này.
Bây giờ, bạn có thể dùng lệnh lsof để liệt kê tất cả các file đang mở liên quan đến process này.
sudo lsof -p 825
Ví dụ về kết quả:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 825 root cwd DIR 253,0 4096 1048576 /usr/sbin
nginx 825 root rtd DIR 253,0 4096 2 /
nginx 825 root txt REG 253,0 977528 1048577 /usr/sbin/nginx
nginx 825 root mem REG 253,0 2067688 1048578 /usr/lib/x86_64-linux-gnu/libc-2.35.so
nginx 825 root mem REG 253,0 169032 1048579 /usr/lib/x86_64-linux-gnu/ld-2.35.so
nginx 825 root 0u CHR 136,0 0t0 3 /dev/pts/0
nginx 825 root 1u CHR 136,0 0t0 3 /dev/pts/0
nginx 825 root 2u CHR 136,0 0t0 3 /dev/pts/0
Kết quả này hiển thị tất cả các file đang mở liên quan đến process nginx, bao gồm file thực thi, thư viện chia sẻ và các file descriptor tiêu chuẩn.
Bạn cũng có thể dùng lệnh lsof để tìm các file đang mở bởi một user cụ thể. Ví dụ, để tìm tất cả các file đang mở thuộc sở hữu của user labex:
sudo lsof -u labex
Điều này có thể hữu ích cho việc khắc phục sự cố hoặc hiểu rõ hoạt động của một user cụ thể trên hệ thống.
Trong bước tiếp theo, bạn sẽ học cách dùng lệnh lsof để định vị các kết nối mạng.
Tìm kiếm Kết nối Mạng bằng lsof
Trong bước này, bạn sẽ học cách sử dụng lệnh lsof để xác định các kết nối mạng trên hệ thống của bạn.
Để liệt kê tất cả các kết nối mạng trên hệ thống, bạn có thể dùng lệnh lsof với tùy chọn -i.
sudo lsof -i
Ví dụ về kết quả:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 824 root 3u IPv4 18620 0t0 TCP *:22 (LISTEN)
sshd 824 root 4u IPv6 18622 0t0 TCP *:22 (LISTEN)
nginx 825 root 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
nginx 826 www-data 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
nginx 827 www-data 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
Kết quả này hiển thị tất cả các kết nối mạng trên hệ thống, bao gồm tiến trình sshd đang lắng nghe trên cổng 22 (SSH) và nginx trên cổng 80 (HTTP).
Bạn cũng có thể lọc kết quả để chỉ hiển thị các loại kết nối mạng cụ thể, ví dụ, chỉ hiển thị kết nối TCP.
sudo lsof -i TCP
Ví dụ về kết quả:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 824 root 3u IPv4 18620 0t0 TCP *:22 (LISTEN)
sshd 824 root 4u IPv6 18622 0t0 TCP *:22 (LISTEN)
nginx 825 root 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
nginx 826 www-data 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
nginx 827 www-data 6u IPv4 18650 0t0 TCP *:80 (LISTEN)
Bạn cũng có thể lọc kết quả để chỉ hiển thị các kết nối cho một người dùng hoặc tiến trình cụ thể, ví dụ, kết nối mạng cho người dùng labex.
sudo lsof -i -u labex
Lệnh lsof là một công cụ mạnh mẽ để khắc phục sự cố mạng và hiểu rõ hoạt động mạng trên hệ thống của bạn.
Kết luận cho linux lsof command
Vậy là chúng ta đã cùng nhau khám phá những điều thú vị về lệnh lsof trong Linux rồi! Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về cách linux lsof command hoạt động và ứng dụng của nó trong thực tế. Lệnh này thực sự là một công cụ mạnh mẽ giúp bạn kiểm soát hệ thống một cách hiệu quả. Đừng ngần ngại thử nghiệm các tùy chọn khác nhau để làm quen với lệnh này nhé. Việc thực hành thường xuyên sẽ giúp bạn ghi nhớ và sử dụng lsof một cách thành thạo hơn đấy. Chúc bạn thành công trên con đường chinh phục Linux và khám phá thêm nhiều lệnh hữu ích khác! Hãy nhớ rằng, việc tìm hiểu và sử dụng thành thạo các công cụ như lsof sẽ giúp bạn trở thành một người quản trị hệ thống giỏi hơn.