Linux基礎(chǔ)命令-uptime查看系統(tǒng)負(fù)載
Linux基礎(chǔ)命令-top實時顯示系統(tǒng)狀態(tài)
Linux基礎(chǔ)命令-ps查看進(jìn)程狀態(tài)
文件目錄
前言
一 命令的介紹
二 語法及參數(shù)
2.1 使用help查看命令的語法信息
2.2 常用參數(shù)
2.2.lsof命令-i參數(shù)的條件
三 命令顯示內(nèi)容的含義
3.1 FD 文件描述符的類型
3.2 文件描述符后內(nèi)容的含義
3.3 TYPE的文件類型
四 參考實例
3.1列出文件存在的進(jìn)程
3.2 列出指定進(jìn)程打開的文件
3.3 列出指定端口號進(jìn)程
3.4 列出占用文件號的進(jìn)程
3.5 列出指定進(jìn)程號打開的文件
3.6 列出指定UID號的進(jìn)程詳情
3.7 列出目錄下打開的文件
3.8 列出遞歸目錄下打開的文件
3.9 顯示幫助信息
3.10?使用lsof恢復(fù)被刪除的文件
總結(jié)
前言
? ? ? ? lsof命令是個比較常用到的系統(tǒng)監(jiān)控命令,不管是用來查看文件的進(jìn)程,或者是查看進(jìn)程打開的文件都是能很好用的一個工具,那么一起來學(xué)習(xí)一下。
一 命令的介紹
? ? ? ? lsof命令來自于英文詞組“l(fā)ist opened files”的縮寫,主要功能是用來查看文件的進(jìn)程信息,此命令能夠能好的幫助用戶了解相關(guān)服務(wù)的運行狀態(tài),是個非常不錯的系統(tǒng)監(jiān)控工具。
? ? ? ? 小提示:只有root用戶可以使用這個命令或獲取超級權(quán)限的普通用戶才能使用。
二 語法及參數(shù)
2.1 使用help查看命令的語法信息
NAME
lsof - list open files
SYNOPSIS
lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D
D ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k
] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r
[t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x
[fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
語法:lsof 【參數(shù)】
2.2 常用參數(shù)
-a | 列出打開(二進(jìn)制文件)存在的進(jìn)程 |
-c<進(jìn)程名> | 列出指定進(jìn)程所打開的文件 |
-g | 列出GID號 進(jìn)程的詳情 |
-d<文件號> | 列出占用該文件號(FD)的進(jìn)程 |
+d<目錄> | 列出目錄下打開的文件 |
+D<目錄> | 遞歸列出目錄下打開的文件 |
-n<目錄> | 列出使用NFS的文件 |
-i <條件> | 列出符合條件的進(jìn)程 |
-p<進(jìn)程號> | 列出指定進(jìn)程號所打開的文件 |
-u | 列出UID號進(jìn)程詳情 |
-h | 顯示幫助信息 |
-v | 顯示版本信息 |
2.2.lsof命令-i參數(shù)的條件
- 協(xié)議? ? ? ? ? ? ? 例如: lsof -i tcp
- :端口? ? ? ? ? ? ?例如: lsof -i :22
- @+IP? ? ? ? ? ? 例如:lsof -i? @192.168.2.166
- IPv4? ? ? ? ? ? ? 例如:? lsof -i 4
- IPv6? ? ? ? ? ? ? 例如: lsof -i 6
三 命令顯示內(nèi)容的含義
lsof顯示打開的文件及其其它內(nèi)容解讀
圖上對應(yīng)的內(nèi)容以表格形式展現(xiàn):?
狀態(tài)欄 | 含義 |
COMMAND | 進(jìn)程的名稱 |
PID | 進(jìn)程的標(biāo)識符號 |
USER | 進(jìn)程的所有者 |
FD | 文件描述符 |
TYPE | 文件類型 |
DEVICE | 指定磁盤的名稱 |
SIZE/OFF | 文件的大小 |
NODE | 文件的索引 |
NAME | 打開文件的位置 |
3.1 FD 文件描述符的類型
- cwd ????????表示應(yīng)用程序當(dāng)前的工作目錄
- txt? ? ? ? ? ? 表示它是一個可執(zhí)行程序
- mem ???????指的是內(nèi)存的映射文件
- 0? ? ? ????????表示標(biāo)準(zhǔn)輸出
- 1? ? ? ????????表示標(biāo)準(zhǔn)輸入
- 2? ? ? ????????標(biāo)準(zhǔn)錯誤
- Lnn? ? ? ? ? 庫引用
- err? ? ? ? ? ?監(jiān)獄目錄(FreeBSD)
- ltx? ? ? ? ? ? 共享庫文本(代碼和數(shù)據(jù))
- Mxx? ? ? ? ?十六進(jìn)制內(nèi)存映射類型
- m86? ? ? ? ?DOS合并映射文件
- mmap? ? ?內(nèi)存映射設(shè)備
- pd? ? ? ? ? ? 父目錄
- rtd? ? ? ? ? ? 根目錄
- tr? ? ? ? ? ? ? 內(nèi)核跟蹤文件
- v86? ? ? ? ? ?VP/ix映射文件
3.2 文件描述符后內(nèi)容的含義
- ?r : 表示打開文件為只讀模式
- w : 表示打開文件為寫入模式
- u :? 表示打開文件是可讀可寫模式
- ?- :? 表示當(dāng)前狀態(tài)被鎖定
- 空格:表示當(dāng)前狀態(tài)未被鎖定
3.3 TYPE的文件類型
- DIR:表示目錄類型
- CHR:表示字符類型
- BLK:表示設(shè)備類型
- REG:表示注冊表文件
四 參考實例
3.1列出文件存在的進(jìn)程
[root@localhost ~]# lsof -a /usr/bin/vim
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vim
vim 11403 host txt REG 253,0 2337208 102492147 /usr/bin/vim
3.2 列出指定進(jìn)程打開的文件
[root@localhost ~]# lsof -c systemd | head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1632960 2630 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 78153 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 222563 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 1780 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 1788 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 78215 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 78205 /usr/lib64/libattr.so.1.1.0
3.3 列出指定端口號進(jìn)程
可以先用netstat查看服務(wù),再用這個查看端口號進(jìn)程。
[root@VM-12-17-centos ~]# netstat -antup |grep mysql
tcp6 0 0 :::3306 :::* LISTEN 3609/mysqld
[root@VM-12-17-centos ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 3609 mysql 29u IPv6 62681253 0t0 TCP *:mysql (LISTEN)
3.4 列出占用文件號的進(jìn)程
由于顯示的內(nèi)容實在太多,加上wc -l顯示一共有多少行
[root@localhost ~]# lsof -d mem |wc -l
7388
3.5 列出指定進(jìn)程號打開的文件
若要查看進(jìn)程號打開的文件信息,可以先用ps搜索指定的指令信息,復(fù)制進(jìn)程號后到這里使用-p參數(shù)查看進(jìn)程號存在的文件。
[root@localhost ~]# ps aux | grep vim
root 10065 0.0 0.1 149752 5448 pts/2 S+ 19:19 0:00 vim a.sh
host 11403 0.0 0.1 149568 5204 pts/3 S+ 20:05 0:00 vim 1.txt
root 11642 0.0 0.0 112824 968 pts/1 R+ 20:15 0:00 grep --color=auto vim
[root@localhost ~]# lsof -p 10065
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 10065 root cwd DIR 253,0 4096 67144897 /root
vim 10065 root rtd DIR 253,0 224 64 /
vim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vim
3.6 列出指定UID號的進(jìn)程詳情
lsof -u參數(shù)后接UID號和用戶名都是顯示一樣的內(nèi)容。
[root@localhost ~]# lsof -u 1000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
bash 11312 host rtd DIR 253,0 224 64 /
bash 11312 host txt REG 253,0 964536 100664820 /usr/bin/bash
[root@localhost ~]# lsof -u host
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
bash 11312 host rtd DIR 253,0 224 64 /
3.7 列出目錄下打開的文件
[root@localhost ~]# lsof +d /home/host
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
vim 11403 host cwd DIR 253,0 145 101340405 /home/host
vim 11403 host 3u REG 253,0 12288 101364386 /home/host/.1.txt.swp
3.8 列出遞歸目錄下打開的文件
[root@localhost ~]# lsof +D /root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-ses 1945 root cwd DIR 253,0 4096 67144897 /root
dbus-laun 1954 root cwd DIR 253,0 4096 67144897 /root
dbus-daem 1955 root cwd DIR 253,0 4096 67144897 /root
imsetting 1984 root cwd DIR 253,0 4096 67144897 /root
3.9 顯示幫助信息
[root@localhost ~]# lsof -h
lsof 4.87
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [-Z [Z]] [--] [names]
3.10?使用lsof恢復(fù)被刪除的文件
此命令的恢復(fù)原理是當(dāng)打開一個文件,這個文件就一直是打開狀態(tài)的,并且有存在于磁盤、內(nèi)存當(dāng)中的;直接刪除文件,但進(jìn)程是還在持續(xù)運行中的,在這個過程中可以嘗試使用文件描述符做文件的恢復(fù)。
思路步驟
- 1)創(chuàng)建一個文件
- 2)在另外一個窗口打開文件保持一直運行的狀態(tài)
- 3)刪除這個運行的文件
- 4)使用lsof進(jìn)行恢復(fù)
#測試環(huán)境centos7.6
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@localhost ~]# mkdir test #創(chuàng)建文件
[root@localhost ~]# cd test
[root@localhost test]# cp /etc/passwd ./
#在另外一個窗口打開文件
[root@localhost test]# vim passwd
#原窗口繼續(xù) 刪除文件
[root@localhost test]# rm -f passwd
[root@localhost test]# lsof | grep passwd #看到文件描述符為10r的信息
cupsd 6758 root 10r REG 253,0 2576 17470125 /etc/passwd
vim 13101 root 4u REG 253,0 12288 51866124 /root/test/.passwd.swp
#在proc目錄下查找PID 6758并且文件描述符為10的文件
[root@localhost test]# head -5 /proc/6758/fd/10
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#將文件導(dǎo)入一個新文件
[root@localhost test]# cat !$ > passwd.txt
cat /proc/6758/fd/10 > passwd.txt
[root@localhost test]# wc -l < passwd.txt #顯示行數(shù)
51
[root@localhost test]# md5sum /etc/passwd passwd.txt #inode與源文件一致,恢復(fù)成功
b1a03b88bac575860f616d09756f78d0 /etc/passwd
b1a03b88bac575860f616d09756f78d0 passwd.txt
?在文件的進(jìn)程還存在的情況下,文件恢復(fù)需要知道文件名或相關(guān)信息才有很大的把握可以進(jìn)行恢復(fù)。
總結(jié)
? ? ? ? 這個命令要記的參數(shù)是挺多的,用來監(jiān)控進(jìn)程打開的文件信息,亦可通過這個命令來了解相關(guān)服務(wù)的運行狀態(tài)等,若覺得以上內(nèi)容還不錯的,可以點贊支持一下!
????????文章來源:http://www.zghlxwxcb.cn/news/detail-578428.html
????????文章來源地址http://www.zghlxwxcb.cn/news/detail-578428.html
到了這里,關(guān)于Linux基礎(chǔ)命令-lsof查看進(jìn)程打開的文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!