Linux中的lsof
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
选项
选项 | 描述 |
---|---|
-a | 列出打开文件存在的进程; |
-c<进程名> | 列出指定进程所打开的文件; |
-g | 列出GID号进程详情; |
-d<文件号> | 列出占用该文件号的进程; |
+d<目录> | 列出目录下被打开的文件; |
+D<目录> | 递归列出目录下被打开的文件; |
-n<目录> | 列出使用NFS的文件; |
-i<条件> | 列出符合条件的进程。(4、6、协议、:端口、 @ip ) |
-p<进程号> | 列出指定进程号所打开的文件; |
-u | 列出UID号进程详情; |
-h | 显示帮助信息; |
-v | 显示版本信息。 |
如果不带任何选项执行 lsof 命令,会输出系统中所有 active 进程打开的所有文件,结果就是我们被输出的信息所淹没,这没有任何的意义。由于输出内容太多,这里只取前十行作为示例,如下:
[root@centos7 ~]# lsof |sed -n '1,10p'
COMMAND PID TID 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 1632776 34111359 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 33612035 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 33930342 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 33612015 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 33612020 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 33612146 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 33612136 /usr/lib64/libattr.so.1.1.0
可以看到输出内容中都包含这些信息:
COMMAND | 进程的名称 |
---|---|
PID | 进程标识符 |
PPID | 父进程标识符(需要指定-R参数) |
USER | 进程所有者 |
PGID | 进程所属组 |
FD | 文件描述符,应用程序通过文件描述符识别该文件。 |
DEVICE | 指定磁盘的名称 |
SIZE | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
NAME | 打开文件的确切名称 |
下面简单介绍一下 FD 列和 TYPE 列中的常见内容。
FD 列中的常见内容有 cwd、rtd、txt、mem 和一些数字等等。其中 cwd 表示当前的工作目录;rtd 表示根目录;txt 表示程序的可执行文件;mem 表示内存映射文件;还有一部分 FD 是以数字表示的,比如标准输入输出文件:数字后面的字母表示进程对该文件的读写模式,比如上图中的 u 表示该文件被打开并处于读取/写入模式。除了 u,还有 r 表示只读模式,w 表示只写模式,还可以同时应用 W 表示该进程拥有对文件写操作的锁。下图是截取的 docker daemon 进程打开的文件列表,其中显示了 FD 的不同模式:
docker-co 19350 19941 root 0r CHR 1,3 0t0 7516 /dev/null
docker-co 19350 19941 root 1u unix 0xffff97f6356ed940 0t0 131546 socket
docker-co 19350 19941 root 2u unix 0xffff97f6356ed940 0t0 131546 socket
docker-co 19350 19941 root 3u unix 0xffff97f6356e9980 0t0 131548 /var/run/docker/libcontainerd/docker-containerd.sock
docker-co 19350 19941 root 4u a_inode 0,10 0 7512 [eventpoll]
docker-co 19350 19941 root 5u a_inode 0,10 0 7512 [eventpoll]
docker-co 19350 19941 root 6w REG 0,20 1604 102553 /run/docker/libcontainerd/containerd/events.log
docker-co 19350 19941 root 7u unix 0xffff97f62a61d0c0 0t0 131551 /var/run/docker/libcontainerd/docker-containerd.sock
FD文件描述符列表
cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn:library references (AIX)(库引用);
er:FD information error (see NAME column)(fd信息错误);
jld:jail directory (FreeBSD)(监控目录);
ltx:shared library text (code and data)(共享库文本);
mxx :hex memory-mapped type number xx(十六进制内存映射类型号xx);
m86:DOS Merge mapped file(DOS合并映射文件);
mem:memory-mapped file(内存映射文件);
mmap:memory-mapped device(内存映射设备);
pd:parent directory(父目录);
rtd:root directory(跟目录);
tr:kernel trace file (OpenBSD)(内核跟踪文件);
v86 VP/ix mapped file(VP/IX映射文件);
0:表示标准输出
1:表示标准输入
2:表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
u:表示该文件被打开并处于读取/写入模式。
r:表示该文件被打开并处于只读模式。
w:表示该文件被打开并处于。
空格:表示该文件的状态模式为unknow,且没有锁定。
-:表示该文件的状态模式为unknow,且被锁定。
同时在文件状态模式后面,还跟着相关的锁:
N:for a Solaris NFS lock of unknown type(对于未知类型的Solaris NFS锁);
r:for read lock on part of the file(用于对文件的一部分进行读取锁定);
R:for a read lock on the entire file(整个文件的读取锁定);
w:for a write lock on part of the file;(文件的部分写锁)
W:for a write lock on the entire file;(整个文件的写锁)
u:for a read and write lock of any length(对于任意长度的读写锁);
U:for a lock of unknown type(对于未知类型的锁);
x:for an SCO OpenServer Xenix lock on part of the file(对于文件的sco openserver xenix锁);
X:for an SCO OpenServer Xenix lock on the entire file(对于整个文件的sco openserver xenix锁);
space:if there is no lock(如果没有锁).
type列文件类型
TYPE 列中常见的 REG 和 DIR 分别表示普通文件和目录。而 CHR 和 BLK 则分别表示字符和块设备,unix、fifo 和 IPv4/IPv6 分别表示 UNIX domain 套接字、先进先出(FIFO)队列和 IPv4/IPv6 套接字。
DIR:表示目录。
CHR:表示字符类型。
BLK:块设备类型。
UNIX: UNIX 域套接字。
FIFO:先进先出 (FIFO) 队列。
IPv4:网际协议 (IP) 套接字。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
常见用法
查看哪些进程打开了某个文件
直接指定文件的名称作为 lsof 的参加就可以查看哪些进程打开了这个文件,下面的命令查询打开了 /bin/bash 文件的进程:
[root@centos7 ~]# lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1927 root txt REG 253,0 964536 7962 /usr/bin/bash
bash 123127 root txt REG 253,0 964536 7962 /usr/bin/bash
除了普通文件,也可以是设备等文件
[root@centos7 ~]# lsof /dev/sda1
查看哪些进程打开了某个目录及目录下的文件
这里分两种情况,+d 选项不执行递归查询,只查找那些打开了指定目录以及指定目录下文件和目录的进程,比如:
[root@centos7 ~]# lsof +d /var/log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
VGAuthSer 690 root 2w REG 253,0 2782 67727156 /var/log/vmware-vgauthsvc.log.0
VGAuthSer 690 root 4w REG 253,0 2782 67727156 /var/log/vmware-vgauthsvc.log.0
vmtoolsd 691 root 3w REG 253,0 4270806 67727158 /var/log/vmware-vmsvc-root.log
firewalld 717 root 3w REG 253,0 3477 67727162 /var/log/firewalld
rsyslogd 1043 root 6w REG 253,0 13887 67728289 /var/log/cron
rsyslogd 1043 root 7w REG 253,0 141042 67728290 /var/log/messages
rsyslogd 1043 root 8w REG 253,0 10753 67728291 /var/log/secure
rsyslogd 1043 root 9w REG 253,0 159 67148175 /var/log/maillog
而 +D 选项则会对指定的目录进行递归:
[root@centos7 ~]# lsof +D /var/log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
auditd 664 root 5w REG 253,0 628670 67727152 /var/log/audit/audit.log
VGAuthSer 690 root 2w REG 253,0 2782 67727156 /var/log/vmware-vgauthsvc.log.0
VGAuthSer 690 root 4w REG 253,0 2782 67727156 /var/log/vmware-vgauthsvc.log.0
vmtoolsd 691 root 3w REG 253,0 4270806 67727158 /var/log/vmware-vmsvc-root.log
firewalld 717 root 3w REG 253,0 3477 67727162 /var/log/firewalld
tuned 1037 root 3w REG 253,0 2847 34366713 /var/log/tuned/tuned.log
rsyslogd 1043 root 6w REG 253,0 13887 67728289 /var/log/cron
rsyslogd 1043 root 7w REG 253,0 141042 67728290 /var/log/messages
rsyslogd 1043 root 8w REG 253,0 10753 67728291 /var/log/secure
rsyslogd 1043 root 9w REG 253,0 159 67148175 /var/log/maillog
可以看到,加了+D后,不仅显示打开/var/log目录下文件的进程,该命令还列出了打开/var/log/audit/audit.log文件的进程。
在卸载文件系统时,如果有进程打开了该文件系统中的文件或目录,卸载操作就会失败。因此最好在卸载文件系统前通过 lsof +D 检查文件系统的挂载点,杀掉相关的进程然后再执行卸载操作。
查看某个进程打开的所有文件
通过 -p 选项并指定进程的 PID 可以输出该进程打开的所有文件。比如我们想要查看 sshd 程序打开的文件,可以先用 ps -C 命令查出进程的 PID:
[root@centos7 ~]# ps -C sshdPID TTY TIME CMD1039 ? 00:00:00 sshd
123123 ? 00:00:00 sshd
然后把该 PID 传递给 lsof 命令的 -p 选项:
[root@centos7 ~]# lsof -p 123123
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 123123 root cwd DIR 253,0 224 64 /
sshd 123123 root rtd DIR 253,0 224 64 /
sshd 123123 root txt REG 253,0 852856 34227119 /usr/sbin/sshd
sshd 123123 root mem REG 253,0 15488 67504525 /usr/lib64/security/pam_lastlog.so
sshd 123123 root mem REG 253,0 15648 34014874 /usr/lib64/libpam_misc.so.0.82.0
组合多个选项
如果为 lsof 命令指定多个选项,这些选项间默认是或的关系。也就是说满足任何一个选项的结果都会被输出。可以添加额外的 -a 选项,它的作用就是让其它选项之间的关系变为与,比如下面的命令:
[root@centos7 ~]# lsof -a -p $$ -d0,1,2 #也可以表示为-d0-2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 123127 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 123127 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 123127 root 2u CHR 136,0 0t0 3 /dev/pts/0
其中的 -p 选项指定了当前进程的 PID,而 -d 选项则用来指定进程打开的文件描述符(可以通过逗号分隔多个文件描述符)。添加 -a 选项后,结果输出为当前进程打开的文件描述符为 0-2 的文件。
查看指定名称的程序打开的文件
通过 -c 选项可以匹配进程运行的程序(可执行文件)名称。比如我们要查找以字母 cr 开头的程序打开的文件列表:
[root@centos7 ~]# lsof -c cr
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
crypto 38 root cwd DIR 253,0 224 64 /
crypto 38 root rtd DIR 253,0 224 64 /
crypto 38 root txt unknown /proc/38/exe
crond 98878 root cwd DIR 253,0 224 64 /
crond 98878 root rtd DIR 253,0 224 64 /
crond 98878 root txt REG 253,0 70216 34185366 /usr/sbin/crond
备注: -c 选项将会列出所有cr开头的程序的文件,其实你也可以写成lsof | grep cr,但是第一种方法明显比第二种方法要少打几个字符了
还可以同时指定多个 -c 选项,它们之间是或的关系。
[root@centos7 ~]# lsof -c cr -c ssh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
crypto 38 root cwd DIR 253,0 224 64 /
crypto 38 root rtd DIR 253,0 224 64 /
crypto 38 root txt unknown /proc/38/exe
sshd 1039 root cwd DIR 253,0 224 64 /
sshd 1039 root rtd DIR 253,0 224 64 /
sshd 1039 root txt REG 253,0 852856 34227119 /usr/sbin/sshd
如果想对 -c 选项的条件取反,只要在字符串前添加符号 ^ 就可以了,比如:
lsof -c ^cr
-c 选项也支持正则表达式,比如下面的命令可以过滤出以 cra 和 cro 开头的程序打开的文件:
[root@centos7 ~]# lsof -c /cr[ao]/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
crond 98878 root cwd DIR 253,0 224 64 /
crond 98878 root rtd DIR 253,0 224 64 /
crond 98878 root txt REG 253,0 70216 34185366 /usr/sbin/crond
anacron 125475 root cwd DIR 253,0 63 67575706 /var/spool/anacron
anacron 125475 root rtd DIR 253,0 224 64 /
anacron 125475 root txt REG 253,0 36448 34185364 /usr/sbin/anacron
查看被打开的与网络相关的文件
-i 选项用来查看被打开的和网络相关的文件,其参数的格式如下:
[46][protocol][@hostname|hostaddr][:service|port]
46 表示 IP 协议的版本
protocol 表示网络协议的名称,比如 TCP 或 UDP
hostname 或 hostaddr 表示主机地址
service 指 /etc/services 中的名称,比如 smtp 或多个服务的列表
port 表示端口号,可以指定一个或多个
-i 选项默认会同时输出 IPv4 和 IPv6 打开的文件:
[root@centos7 ~]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1039 root 3u IPv4 20294 0t0 TCP *:ssh (LISTEN)
sshd 1039 root 4u IPv6 20296 0t0 TCP *:ssh (LISTEN)
sshd 123123 root 3u IPv4 338066 0t0 TCP centos7:ssh->192.168.220.1:49880 (ESTABLISHED)
只列出 IPv4 或 IPv6 打开的文件:
[root@centos7 ~]# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1039 root 3u IPv4 20294 0t0 TCP *:ssh (LISTEN)
sshd 123123 root 3u IPv4 338066 0t0 TCP centos7:ssh->192.168.220.1:49880 (ESTABLISHED)[root@centos7 ~]# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1039 root 4u IPv6 20296 0t0 TCP *:ssh (LISTEN)
列出与 22 号端口相关的文件:
[root@centos7 ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1039 root 3u IPv4 20294 0t0 TCP *:ssh (LISTEN)
sshd 1039 root 4u IPv6 20296 0t0 TCP *:ssh (LISTEN)
sshd 123123 root 3u IPv4 338066 0t0 TCP centos7:ssh->192.168.220.1:49880 (ESTABLISHED)
列出指定范围内被打开的 TCP 端口
[root@centos7 ~]# lsof -i TCP:1-1024
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 743 rpc 8u IPv4 19722 0t0 TCP *:sunrpc (LISTEN)
rpcbind 743 rpc 11u IPv6 19725 0t0 TCP *:sunrpc (LISTEN)
sshd 1134 root 3u IPv4 27597 0t0 TCP *:ssh (LISTEN)
sshd 1134 root 4u IPv6 27599 0t0 TCP *:ssh (LISTEN)
cupsd 1138 root 10u IPv6 27613 0t0 TCP localhost:ipp (LISTEN)
cupsd 1138 root 11u IPv4 27614 0t0 TCP localhost:ipp (LISTEN)
master 1645 root 13u IPv4 30785 0t0 TCP localhost:smtp (LISTEN)
master 1645 root 14u IPv6 30786 0t0 TCP localhost:smtp (LISTEN)
sshd 91968 root 3u IPv4 1499391 0t0 TCP Hank:ssh->192.168.220.1:49879 (ESTABLISHED)
查看被打开的 UNIX domain socket 文件
-U 选项输出打开的 UNIX domain socket 文件,这里我们结合 -c 选项来查看 mysql服务打开的 UNIX domain socket 文件:
[root@centos7 ~]# lsof -a -c mysqld -U
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld_sa 94145 root 2u unix 0xffff9b23119ad500 0t0 773970 socket
mysqld 94297 mysql 26u unix 0xffff9b23119ab300 0t0 774047 /tmp/mysqld.sock
查看某个用户打开的所有文件
-u 选项可以指定用户名或 user ID,并且和 -c 选项一样,可以通过逗号分隔多个用户名称或 user ID,也可以通过符号 ^ 对条件取反。
查看某个用户打开的所有文件:
[root@centos7 ~]# lsof -u root
bash 123127 root cwd DIR 253,0 195 100663361 /root
bash 123127 root rtd DIR 253,0 224 64 /
bash 123127 root txt REG 253,0 964536 7962 /usr/bin/bash
...
查看用户 root 打开的网络相关的文件
[root@centos7 ~]# lsof -a -i -u root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1039 root 3u IPv4 20294 0t0 TCP *:ssh (LISTEN)
sshd 1039 root 4u IPv6 20296 0t0 TCP *:ssh (LISTEN)
sshd 123123 root 3u IPv4 338066 0t0 TCP centos7:ssh->192.168.220.1:49880 (ESTABLISHED
排除某个用户
[root@Hank ~]# lsof -i -u ^root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 743 rpc 6u IPv4 19720 0t0 UDP *:sunrpc
rpcbind 743 rpc 7u IPv4 19721 0t0 UDP *:915
rpcbind 743 rpc 8u IPv4 19722 0t0 TCP *:sunrpc (LISTEN)
rpcbind 743 rpc 9u IPv6 19723 0t0 UDP *:sunrpc
rpcbind 743 rpc 10u IPv6 19724 0t0 UDP *:915
rpcbind 743 rpc 11u IPv6 19725 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 782 avahi 12u IPv4 22968 0t0 UDP *:mdns
avahi-dae 782 avahi 13u IPv4 22969 0t0 UDP *:22582
注意:在有排除条件时,不需要指定 -a 选项。
杀掉某个用户打开了文件的所有进程
kill -9 $(lsof -t -u beyo)
该命令中的 -t 选项让 lsof 命令只输出进程的 PID:
[root@Hank ~]# lsof -t -i:22
1134
91968
统计系统打开的文件总数
[root@Hank ~]# lsof -P -n |wc -l
25571
命令中的 -P 选项表示不解析端口号,-n 选项表示不解析主机名,这两个选项主要的目的是为了提升 lsof 命令的执行速度。wc -l 命令则用来统计 lsof 命令输出的行数。
恢复删除的文件
如果我们一不小心删除了文件,而又知道这个文本被某个进程打开着,就可以通过 lsof 命令来恢复该文件。具体的原理为:
当进程打开了某个文件时,只要该进程保持打开该文件,即使将文件删除,它依然存在于磁盘中。进程并不知道文件已经被删除,它仍然可以通过打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。
进程打开的文件描述符就存放在 /proc/PID/fd 目录下。/proc 目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。lsof 程序就是使用这些信息和其他关于内核内部状态的信息来产生其输出。所以 lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是说我们通过访问进程的文件描述符可以找到该文件的相关信息。
下面的 demo 演示如何通过 lsof 命令恢复被误删的 /var/log/maillog 文件。
先删除日志文件 /var/log/maillog,记着要提前备份一下这个文件,以防万一:
[root@Hank log]# cp mysql.log mysql.log.bak
[root@Hank log]# ll | grep mysql
-rw-r-----. 1 mysql root 131355 Jul 7 08:14 mysql.log
-rw-r----- 1 root root 131355 Jul 7 09:43 mysql.log.bak
删除mysql.log文件:
[root@Hank log]# rm mysql.log
rm: remove regular file ‘mysql.log’? y
[root@Hank log]# lsof mysql.log
lsof: status error on mysql.log: No such file or directory
[root@Hank log]# lsof -u mysql | grep /var/log/mysql.log
mysqld 94297 mysql 1w REG 253,0 131355 106804394 /var/log/mysql.log (deleted)
mysqld 94297 mysql 2w REG 253,0 131355 106804394 /var/log/mysql.log (deleted)
从上面的信息可以看到 PID 为 94297 的进程打开着该文件,文件描述符为 1和2,并且显示该文件已经被删除了。接下来我们通过 95297号进程的文件文件描述符来查看该文件的内容:
[root@Hank log]# tail -n 5 /proc/94297/fd/1
2022-07-04T00:06:36.066023Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 223413816ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2022-07-05T02:07:12.244310Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 58279732ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2022-07-06T00:38:27.858214Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 51369381ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2022-07-06T07:41:06.422822Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 17003ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2022-07-07T00:14:24.309117Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 51373796ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
说明文件 /var/log/mysql.log 文件的内容还在,并且可以通过文件描述符访问,接下来通过 IO 重定向的方式重新创建 /var/log/mysql.log文件就可以了:
sh -c 'cat /proc/94397/fd/1 > /var/log/mysql.log'
然后修复文件的权限属性并重启 mysqld 服务:
[root@Hank log]# ll | grep mysql
-rw-r--r-- 1 root root 131355 Jul 7 09:50 mysql.log
-rw-r----- 1 root root 131355 Jul 7 09:43 mysql.log.bak
[root@Hank log]# chown mysql mysql.log
[root@Hank log]# ll | grep mysql
-rw-r--r-- 1 mysql root 131355 Jul 7 09:50 mysql.log
-rw-r----- 1 root root 131355 Jul 7 09:43 mysql.log.bak
[root@Hank log]# systemctl restart mysqld
这样就完成了 /var/log/mysql.log文件的恢复工作。对于许多应用程序,尤其是日志文件和数据库文件,都可以通过这种方式来恢复。
lsof 并不是一个简单的命令,还有更多强大的功能。从本文介绍的小 demo 入手,一步步的开始使用并最终掌握这个命令吧。
Linux中的lsof相关推荐
- linux中的lsof命令简介
我们都知道, 在linux中, 任何东西都是以文件形式存在的, 这句话貌似被大家说的太多次了, 下面仅仅举3个例子. 比如, ls命令其实也是个文件, 它对应一个可执行文件, 当敲入ls的时候, 实际 ...
- linux中time命令详解、脚本监控记录系统硬盘io值、定位linux系统中await值过高占用的盘、定位占用硬盘IO高的程序、iotop命令说明、lsof使用说明【可定位端口所占用程序等】
文章目录 文章说明 linux中的time命令 说明&常规用法 bash中使用time,将运行记录追加到文件中,-f后的参数说明 高阶用法 time 命令详细输出指标介绍 ime taken ...
- linux的lsof命令,Linux中lsof命令起什么作用呢?
摘要: 下文讲述Linux中lsof的功能说明,如下所示: lsof命令功能: 用于查看进程打开的文件 lsof命令的语法格式: lsof [参数] [文件] -----常用参数说明------ -a ...
- Linux操作系统上lsof命令详解
Linux操作系统上lsof命令详解 2011-10-08 18:31:31 http://xjsunjie.blog.51cto.com/999372/682865 标签:Linux lsof命令 ...
- Linux中检查本地系统上的开放端口列表的方法
在 Linux 中很少有用于此目的的实用程序.然而,我提供了四个最重要的 Linux 命令来检查这一点. 你可以使用以下四个命令来完成这个工作.这些命令是非常出名的并被 Linux 管理员广泛使用. ...
- linux中85379端口如何恢复,技术|如何在 Linux/Unix 系统中验证端口是否打开
在 Linux 或者类 Unix 中,我该如何检查某个端口是否被占用?我又该如何验证 Linux 服务器中有哪些端口处于监听状态? 验证哪些端口在服务器的网络接口上处于监听状态是非常重要的.你需要注意 ...
- Linux中常见命令和单词的缩写全称
Linux中常见命令和单词的缩写全称 文章目录: 参考 ls:list(列出目录内容)cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat ...
- linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法
Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...
- linux:进程占用的端口,在linux中查看进程占用的端口号
在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息. 可以使用以下六种方法查看端口信息. ss:可以用于转储套接字统计信息. netstat:可以显示打开的套接字列表 ...
最新文章
- RISC-V架构上的Debian和Fedora现状
- 每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?
- Adapterview和adapter的联系
- 【移动开发】EditText输入字数限制总结(包括中文输入内存溢出的解决方法)...
- mysql锁机制(Innodb引擎)
- linux perl telnet安装,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- RSA加密-解密以及解决超长内容加密失败解决
- ReactiveCocoa核心元素与信号流
- swagger2maven依赖_Maven + SpringMVC项目集成Swagger
- hive内置函数详解
- 40. 后台模块开发(5)
- 教训:LINUX复制文件到U盘丢失
- iSCSI远程块存储配置实验
- 高斯分布matlab程序,生成高斯分布的matlab程序
- Oracle 重置过期密码,Oracle重置过期的密码
- H3CSE路由-BGP属性
- 用xbuilder开发遇到的问题
- 漫威对决同位素实验室怎么玩
- 《咸鱼分享》DNS轮询
- JSON格式转MAP集合
热门文章
- ANTLR4入门(一):Windows安装antlr4命令行环境
- HM16.0之帧内模式——xCheckRDCostIntra()函数
- 如何快速记忆一副无规律扑克牌
- 前序、中序、后序。(中序最重要)
- 【机器学习基础】(一) 爬山算法 ( Hill Climbing )与模拟退火(SA,Simulated Annealing)
- 计算机配置的网关,电脑的默认网关怎么设置?
- 在Excel中调用Python脚本,实现数据自动化处理
- 学弟研一,有几篇SCI论文,做过前端,读博 or 走开发进国企?
- DoubleTake for Mac(全景拼图软件)
- Vue全家桶项目创建指南