`

【linux】lsof命令和{Linux下文件删除、句柄与空间释放问题}

阅读更多

导读:

一、用事实说话

二、关于LSOF命令的其它用法:

三、参考文档:

 

正文:

lsofFinding open files with lsof

作用:查看文件被哪些进程打开

一、用事实说话

【实验】Linux下文件删除、句柄与空间释放问题

窗口1:创建test文件,并用less命令打开它

[root@monitor monitor]# echo "zhengBin is Bkeep" >> test

 

[root@monitor monitor]# ls –sortk 

  8  -rw-r--r—1  root       1          Dec  9   16:02 error.txt

120  -rw-r--r—1  root       112         Dec  10  16:38 test

 

[root@monitor monitor]# less test

zhengBin is Bkeep

(END)

窗口2:使用lsof命令排查问题

[root@monitor monitor]# rm  –rf  test

 

[root@monitor monitor]# lsof |grep test          //注意,这里test文件已被标记为 “deleted”,但仍然被less进程锁定(pid23253

less      23253       root    4r      REG      253,0       18    2850936 /usr/monitor/test (deleted)

 

[root@monitor ~]# ps -ef |grep 23253         //查看less进程的系统用户,为root

root     23253 23042  0 17:16 pts/1    00:00:00 less test

root     23291 23256  0 17:17 pts/0    00:00:00 grep 23253

 

[root@monitor ~]# kill -9 23253   //杀掉该进程,系统才会释放test占用的磁盘空间。(重启系统或服务也行)

[root@monitor ~]# lsof |grep test

没有了,说明空间已被释放!

二、关于lsof命令的其它用法:

1,查看目录和文件正在被那些进程使用。

[root@monitor monitor]# umount /

umount: /: device is busy

umount: /: device is busy

[root@monitor monitor]# lsof  /

COMMAND     PID      USER   FD   TYPE DEVICE     SIZE    NODE NAME

init          1      root  cwd    DIR  253,0     4096       2 /

init          1      root  rtd    DIR  253,0     4096       2 /

init          1      root  txt    REG  253,0    38620 9306178 /sbin/init

init          1      root  mem    REG  253,0   125736 6686192 /lib/ld-2.5.so

init          1      root  mem    REG  253,0  1602128 6686193 /lib/libc-2.5.so

init          1      root  mem    REG  253,0    16428 6686196 /lib/libdl-2.5.so

init          1      root  mem    REG  253,0    93508 6686210 /lib/libselinux.so.1

init          1      root  mem    REG  253,0   242880 6686209 /lib/libsepol.so.1

migration     2      root  cwd    DIR  253,0     4096       2 /

migration     2      root  rtd    DIR  253,0     4096       2 /

ksoftirqd     3      root  cwd    DIR  253,0     4096       2 /

ksoftirqd     3      root  rtd    DIR  253,0     4096       2 /

2,查看远程ip调用了系统那些进程

[root@monitor monitor]# netstat -natp

tcp        0   1008 ::ffff:192.168.254.51:22    ::ffff:192.168.254.149:1066 ESTABLISHED 22779/0

 

[root@monitor monitor]# lsof -i @192.168.254.149

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

sshd    22779 root    3u  IPv6  98877       TCP 192.168.254.51:ssh->192.168.254.149:fpo-fns (ESTABLISHED)

3,根据端口号查看服务名

[root@monitor monitor]# lsof -i :25

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

sendmail 4653 root    4u  IPv4   9307       TCP monitor:smtp (LISTEN)

4,谁在打开sendmail.pid文件?

[root@monitor run]# lsof  /var/run/sendmail.pid

COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME

sendmail 4653 root    5wW  REG  253,0   33 9667079 /var/run/sendmail.pid

5,【重要】查看某个进程号所打开的所有系统文件

参数说明:

-a,所有参数都必须持有真实的文件显示

-p,进程号

-dtxt记录将被过滤掉;^ 排除的意思  (the carat [^] means exclude).

[root@monitor run]# lsof -a -p 4653 -d ^txt        //【重要】

COMMAND   PID USER   FD   TYPE     DEVICE   SIZE    NODE NAME

sendmail 4653 root  cwd    DIR      253,0   4096 9666678 /var/spool/mqueue

sendmail 4653 root  rtd    DIR      253,0   4096       2 /

sendmail 4653 root  mem    REG      253,0        6684758 /lib/libdb-4.3.so (path inode=6684892)

sendmail 4653 root  DEL    REG      253,0        2107155 /usr/lib/liblber-2.3.so.0.2.15.#prelink#.1kBcGu

sendmail 4653 root  DEL    REG      253,0        2107070 /usr/lib/libgssapi_krb5.so.2.2.#prelink#.Y8RNd8

sendmail 4653 root  mem    REG      253,0        2101464 /usr/lib/libz.so.1.2.3 (path inode=2117529)

sendmail 4653 root  mem    REG      253,0  46680 6684713 /lib/libnss_files-2.5.so

sendmail 4653 root  mem    REG      253,0  14596 2162994 /usr/lib/sasl2/libanonymous.so.2.0.22

sendmail 4653 root  mem    REG      253,0 905200 2164220 /usr/lib/sasl2/libsasldb.so.2.0.22

sendmail 4653 root  mem    REG      253,0        6684723 /lib/libresolv-2.5.so (path inode=6686208)

sendmail 4653 root  mem    REG      253,0        6684701 /lib/libcrypt-2.5.so (path inode=6686216)

sendmail 4653 root  mem    REG      253,0        6684759 /lib/libkeyutils-1.2.so (path inode=6686207)

sendmail 4653 root    2w   CHR        1,3           1449 /dev/null

sendmail 4653 root    3u  unix 0xd45eb740           9306 socket

sendmail 4653 root    4u  IPv4       9307            TCP monitor:smtp (LISTEN)

sendmail 4653 root    5wW  REG      253,0     33 9667079 /var/run/sendmail.pid

6ls命令参数解释

[root@monitor monitor]# ls –sortk 

  8  -rw-r--r—1  root       1          Dec  9   16:02 error.txt

120  -rw-r--r—1  root       112         Dec  10  16:38 test

参数说明:

s:第一列显示的块大小(个);o:类似l 但不显示group   S:按文件大小排序

r:倒序;  t:按时间排序   k:字节数按KB来显示

分享到:
评论

相关推荐

    Linux如何处理文件已删除但空间不释放的问题

    总之,理解Linux文件系统的运作方式以及如何处理已删除文件的空间释放问题是系统管理员必备的技能。通过监控、定位问题文件并采取适当的释放策略,可以有效地管理磁盘空间,确保系统的稳定运行。在日常运维中,应...

    Linux磁盘空间被未知资源耗尽的解决方法

    在linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。...

    linux的最大进程句柄数设置

    在 Linux 系统中,进程句柄数设置是一个重要的参数,它决定了单个进程能够打开的最大文件句柄数量,包括 socket 连接。系统默认值为 1024,这对于一般的应用来说已经足够使用。但是,对于需要处理大量请求的应用,如...

    linux 句柄

    ### Linux句柄知识点详解 #### 一、理解Linux句柄 在Linux系统中,“句柄”这个术语并不常见,但根据题目描述中的信息,这里提到的“句柄”可能是指进程标识符或文件描述符等资源标识符。在Linux和其他类Unix系统...

    Linux下查看进程打开的文件句柄数和如何修改方法

    修改文件句柄数在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象...

    磁盘满了,为啥du却显示还有很大空间

    磁盘空间管理和文件操作技巧 磁盘空间管理是 Linux 系统中一个非常重要的主题,今天我们将讨论磁盘空间管理相关的知识点,并探索磁盘满了却显示还有很大空间的原因。 磁盘空间管理命令 在 Linux 系统中,磁盘空间...

    Linux大文件已删除,但df查看已使用的空间并未减少解决 - BigBao的博客 - 博客园.pdf

    在Linux操作系统中,磁盘空间管理和文件删除涉及到文件系统的原理。当遇到大文件已被删除,但使用df命令查看磁盘空间没有减少的情况时,这通常指向了几个关键知识点。 首先,了解df命令的作用。df命令用于检查文件...

    linux打开文件数

    在Linux系统中,对文件的管理是其核心功能之一,其中...通过掌握上述命令和技巧,可以有效地监控和调整文件描述符及句柄的限制,从而优化系统资源利用。无论是开发人员还是系统管理员,熟悉这些知识都是必不可少的。

    Linux 误删文件恢复命令及方法.doc

    本文将详细介绍如何利用`lsof`和`extundelete`两个命令来恢复Linux中误删的文件。 首先,我们来看`lsof`命令。`lsof`(List Open Files)是一个强大的工具,能够列出系统中所有打开的文件,包括被进程占用但已被...

    linux常用命令脚本.txt

    Linux常用命令 # 按 VmSwap 使用量对进程排序,输出进程名称、进程 ID 以及 SWAP 用量 $ for file in /proc/*/status ; do awk '/VmSwap|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 3 -n -...

    linux 常用实用命令.docx

    - `cd /proc`,然后`ls`,找到对应进程的目录,进入`fd`子目录,`ls`列出句柄,闪烁的文件可能已被删除但句柄未释放。 7. **日志分析**: - `grep ERROR stdout.log | more -c`: 查看`stdout.log`中的错误日志。 ...

    linux下查看系统进程占用的句柄数方法

    总的来说,理解如何查看和管理Linux进程的句柄数对于优化系统性能、排查问题以及确保服务稳定运行至关重要。通过熟练掌握`ulimit`、`lsof`和`awk`等工具,系统管理员能够有效地监控和控制系统的资源使用,从而提高...

    LINUX命令汇总大全

    在Linux操作系统中,掌握一系列基础和高级命令是进行系统管理、网络调试、性能优化等工作的必备技能。以下是对标题“LINUX命令汇总大全”中提及的常用Linux命令的详细解释: 1. **查看内核信息**:`uname -a` 命令...

    toomanyopenfiles的原理和解决方案.docx

    Linux提供了`lsof`(list open files)命令,它可以列出系统中所有打开的文件及其相关信息,包括进程ID(PID)、文件描述符(FD)、文件类型等。文件描述符是系统用来标识已打开文件的数字,通常从0开始,表示标准输入、1...

    常用的linux系统监控命令整理.docx

    - `lsof -p pid` 查找特定进程打开的文件句柄,包括网络套接字。 - `lsof -i :80` 用来查看哪个进程正在监听或使用80端口。 - `lsof /tmp/1.txt` 则用于找出哪个进程占用了特定文件。 5. **JVM监控**: - `...

    运维常用工具和命令

    - **用途**: `du` (disk usage) 命令用于估计文件和目录所使用的磁盘空间。 - **常用选项**: `-h` 以易于阅读的格式显示大小; `-s` 显示指定目录的总大小。 - **应用场景**: 监控磁盘空间使用情况,帮助识别占用大量...

    Shell脚本实现Linux系统和进程资源监控

    监控进程句柄使用量通常需要使用`lsof`命令,它可以列出进程打开的文件、网络连接等信息。结合`wc`命令统计行数,可以了解进程打开的句柄数量。 5. **查看TCP/UDP端口监听状态** 使用`netstat`命令可以查看网络...

Global site tag (gtag.js) - Google Analytics