du命令
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
-a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 -k或--kilobytes 以KB(1024bytes)为单位输出。 -m或--megabytes 以MB为单位输出。 -s或--summarize 仅显示总计,只列出最后加总的值。 -h或--human-readable 以K,M,G为单位,提高信息的可读性。 -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 -L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。 --exclude=<目录或文件> 略过指定的目录或文件。 -D或--dereference-args 显示指定符号链接的源文件大小。 -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。 -l或--count-links 重复计算硬件链接的文件。
df命令
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
-a或--all:包含全部的文件系统; --block-size=<区块大小>:以指定的区块大小来显示区块数目; -h或--human-readable:以可读性较高的方式来显示信息; -H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes; -i或--inodes:显示inode的信息; -k或--kilobytes:指定区块大小为1024字节; -l或--local:仅显示本地端的文件系统; -m或--megabytes:指定区块大小为1048576字节; --no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值; -P或--portability:使用POSIX的输出格式; --sync:在取得磁盘使用信息前,先执行sync指令; -t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息; -T或--print-type:显示文件系统的类型; -x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息; --help:显示帮助; --version:显示版本信息。
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输出各列信息的意义如下: COMMAND:进程的名称 PID:进程标识符 PPID:父进程标识符(需要指定-R参数) USER:进程所有者 PGID:进程所属组 FD:文件描述符,应用程序通过文件描述符识别该文件。 文件描述符列表: cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改 txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序 lnn:library references (AIX); er:FD information error (see NAME column); jld:jail directory (FreeBSD); ltx:shared library text (code and data); mxx :hex memory-mapped type number xx. m86:DOS Merge mapped file; mem:memory-mapped file; mmap:memory-mapped device; pd:parent directory; rtd:root directory; tr:kernel trace file (OpenBSD); v86 VP/ix mapped file; 0:表示标准输出 1:表示标准输入 2:表示标准错误 一般在标准输出、标准错误、标准输入后还跟着文件状态模式: u:表示该文件被打开并处于读取/写入模式。 r:表示该文件被打开并处于只读模式。 w:表示该文件被打开并处于。 空格:表示该文件的状态模式为unknow,且没有锁定。 -:表示该文件的状态模式为unknow,且被锁定。 同时在文件状态模式后面,还跟着相关的锁: N:for a Solaris NFS lock of unknown type; 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; X:for an SCO OpenServer Xenix lock on the entire file; space:if there is no lock. 文件类型: DIR:表示目录。 CHR:表示字符类型。 BLK:块设备类型。 UNIX: UNIX 域套接字。 FIFO:先进先出 (FIFO) 队列。 IPv4:网际协议 (IP) 套接字。 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称
grep命令
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
-a 不要忽略二进制数据。 -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。 -c 计算符合范本样式的列数。 -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 -e<范本样式> 指定字符串作为查找文件内容的范本样式。 -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 -F 将范本样式视为固定字符串的列表。 -G 将范本样式视为普通的表示法来使用。 -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 -H 在显示符合范本样式的那一列之前,标示该列的文件名称。 -i 忽略字符大小写的差别。 -l 列出文件内容符合指定的范本样式的文件名称。 -L 列出文件内容不符合指定的范本样式的文件名称。 -n 在显示符合范本样式的那一列之前,标示出该列的编号。 -q 不显示任何信息。 -R/-r 此参数的效果和指定“-d recurse”参数相同。 -s 不显示错误信息。 -v 反转查找。 -w 只显示全字符合的列。 -x 只显示全列符合的列。 -y 此参数效果跟“-i”相同。 -o 只输出文件中匹配到的部分。
find命令
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-type<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
显示 inode 信息
[root@kube ~]# df -hi Filesystem Inodes IUsed IFree IUse% Mounted on devtmpfs 227K 366 227K 1% /dev tmpfs 230K 4 230K 1% /dev/shm tmpfs 230K 690 230K 1% /run tmpfs 230K 16 230K 1% /sys/fs/cgroup /dev/mapper/centos-root 3.5M 87K 3.4M 3% / /dev/sda1 512K 341 512K 1% /boot /dev/mapper/centos-home 2.0M 13 2.0M 1% /home tmpfs 230K 9 230K 1% /var/lib/kubelet/pods/16ef049e-eec3-4070-8862-06f517a9cef3/volumes/kubernetes.io~secret/kube-proxy-token-txd7d tmpfs 230K 1 230K 1% /run/user/0 [root@kube ~]#
显示最大的20 个文件, 以KB 为单位
[root@kube ~]# find /var/ -xdev -type f -exec du {} ; | sort -rn | head -20 624712 /var/lib/docker/containers/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3-json.log 376908 /var/lib/docker/containers/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c-json.log 160640 /var/lib/docker/overlay2/bea2bebe5fbe3bf2404a4c73f539f0aee5fbc445f052de6ea914b3e3e23d0ca4/diff/usr/local/bin/kube-apiserver 118788 /var/lib/mysql/zabbix/history_uint.ibd 115908 /var/lib/rpm/Packages 113668 /var/lib/docker/overlay2/390a7e6962bfd7c4885063e2ac655125d72a811b0768b2cd1bb04f1c532f6502/diff/usr/local/bin/kube-controller-manager 106496 /var/lib/mysql/employees/salaries.ibd 94212 /var/lib/mysql/zabbix/history.ibd 77824 /var/lib/mysql/ibdata1 71632 /var/cache/yum/x86_64/7/epel/gen/filelists_db.sqlite 62504 /var/lib/etcd/member/wal/00000000000001f9-0000000003007040.wal 62504 /var/lib/etcd/member/wal/00000000000001f8-0000000002ff0f33.wal 62504 /var/lib/etcd/member/wal/00000000000001f7-0000000002fdae01.wal 62504 /var/lib/etcd/member/wal/00000000000001f6-0000000002fc4b8a.wal 62500 /var/lib/etcd/member/wal/1.tmp 62500 /var/lib/etcd/member/wal/00000000000001fa-000000000301d280.wal 49152 /var/lib/mysql/ib_logfile1 49152 /var/lib/mysql/ib_logfile0 48008 /var/cache/yum/x86_64/7/base/gen/filelists_db.sqlite 37876 /var/lib/docker/overlay2/f920e6b7c8d6479f1a1dec3f4d3e09305664edd7b4de46369101fa13ea5dd2cd/diff/usr/local/bin/kube-scheduler [root@kube ~]#
检查/ var 分区中是否有大文件 。以下命令语法显示前20个最大的文件/文件夹,但不包括预期会很大的文件/文件夹:
[root@kube ~]# find /var/ -xdev -type f -exec du {} ; | sort -rn | grep -Ev $(mount | awk '//var// {print $3}' | sed -e :a -e N -e 's/ /|/' -e ta) | head -20 624712 /var/lib/docker/containers/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3-json.log 376908 /var/lib/docker/containers/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c-json.log 160640 /var/lib/docker/overlay2/bea2bebe5fbe3bf2404a4c73f539f0aee5fbc445f052de6ea914b3e3e23d0ca4/diff/usr/local/bin/kube-apiserver 118788 /var/lib/mysql/zabbix/history_uint.ibd 115908 /var/lib/rpm/Packages 113668 /var/lib/docker/overlay2/390a7e6962bfd7c4885063e2ac655125d72a811b0768b2cd1bb04f1c532f6502/diff/usr/local/bin/kube-controller-manager 106496 /var/lib/mysql/employees/salaries.ibd 94212 /var/lib/mysql/zabbix/history.ibd 77824 /var/lib/mysql/ibdata1 71632 /var/cache/yum/x86_64/7/epel/gen/filelists_db.sqlite 62504 /var/lib/etcd/member/wal/00000000000001f9-0000000003007040.wal 62504 /var/lib/etcd/member/wal/00000000000001f8-0000000002ff0f33.wal 62504 /var/lib/etcd/member/wal/00000000000001f7-0000000002fdae01.wal 62504 /var/lib/etcd/member/wal/00000000000001f6-0000000002fc4b8a.wal 62500 /var/lib/etcd/member/wal/1.tmp 62500 /var/lib/etcd/member/wal/00000000000001fa-000000000301d280.wal 49152 /var/lib/mysql/ib_logfile1 49152 /var/lib/mysql/ib_logfile0 48008 /var/cache/yum/x86_64/7/base/gen/filelists_db.sqlite 37876 /var/lib/docker/overlay2/f920e6b7c8d6479f1a1dec3f4d3e09305664edd7b4de46369101fa13ea5dd2cd/diff/usr/local/bin/kube-scheduler [root@kube ~]#
检查/ var分区中包含大量小文件的文件夹。以下命令语法返回最大的20个文件夹的列表:
[root@kube ~]# du -a /var | sort -rn | grep -Ev $(mount | awk '//var// {print $3}' | sed -e :a -e N -e 's/ /|/' -e ta) | head -n 20 3233540 /var 2901948 /var/lib 1682208 /var/lib/docker 1029916 /var/lib/docker/containers 700964 /var/lib/mysql 651000 /var/lib/docker/overlay2 624724 /var/lib/docker/containers/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3 624712 /var/lib/docker/containers/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3/c17f2510c0d8cd6158152e4c32fc434ae548759845d36ad3923c6dca9c5e07a3-json.log 378524 /var/lib/etcd/member 378524 /var/lib/etcd 376920 /var/lib/docker/containers/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c 376908 /var/lib/docker/containers/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c/acb97e676f5c2de7b4d5778c7aa9c3913a4aa0ca2fa3f2c0057fca8644d8b84c-json.log 375016 /var/lib/etcd/member/wal 331332 /var/cache 329516 /var/cache/yum/x86_64/7 329516 /var/cache/yum/x86_64 329516 /var/cache/yum 313064 /var/lib/mysql/zabbix 226580 /var/lib/docker/overlay2/3e1d84188d0611c206fb2f7716bf2a308e8aa50fa526052274cf385ba5a718b5 226572 /var/lib/docker/overlay2/3e1d84188d0611c206fb2f7716bf2a308e8aa50fa526052274cf385ba5a718b5/diff/usr/local/bin [root@kube ~]#
您可以在问题出现时检查最近修改的文件。以下命令语法返回不超过72小时(-3 * 24)且不少于24小时(+1 * 24)之前/ tmp中修改的文件的列表
[root@kube ~]# find /tmp -mtime -3 -mtime +1 -ls [root@kube ~]# find /var -mtime -3 -mtime +1 -ls 13020608 29920 -rw-r--r-- 1 root root 30638080 Jul 25 09:16 /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite 535785 8 -rw-r--r-- 1 root root 4849 Jul 25 09:36 /var/cache/yum/x86_64/7/epel/repomd.xml 535787 1044 -rw-r--r-- 1 root root 1065355 Jul 25 09:36 /var/cache/yum/x86_64/7/epel/e5aca45ab09936348dce205adb85612600c4bc8de015457e1230beb1125e610c-updateinfo.xml.bz2 1194090 7020 -rw-r--r-- 1 root root 7187666 Jul 25 09:16 /var/cache/yum/x86_64/7/epel/9667369dfa22dba112df1a8c5560234aa364a4ad594b94a985aac388043d19fa-primary.sqlite.bz2 [root@kube ~]#
以下命令语法返回最近48小时(-2 * 24)创建的/ tmp文件的列表 :
[root@kube ~]# find /var -ctime -2 -ls |head -5 17051825 172 -rw-r--r-- 1 root root 311296 Jul 27 17:51 /var/lib/rpm/__db.001 17051826 88 -rw-r--r-- 1 root root 90112 Jul 27 17:51 /var/lib/rpm/__db.002 17051827 1288 -rw-r--r-- 1 root root 1318912 Jul 27 17:51 /var/lib/rpm/__db.003 8579833 0 drwxr-xr-x 2 root root 30 Jul 27 17:37 /var/lib/logrotate 8625532 4 -rw-r--r-- 1 root root 937 Jul 27 17:37 /var/lib/logrotate/logrotate.status [root@kube ~]#
[root@F5-A:ModuleNotLicensed::Active:Standalone] config # lsof -ws | grep -i 'size|deleted' |grep 'httpd' #过滤状态为已删除的但是open file handle 句柄未释放的进程 httpd 745 apache 15w REG 0,22 0 90669 /var/run/httpd_ssl_mutex (deleted) httpd 4418 root 15w REG 0,22 0 90669 /var/run/httpd_ssl_mutex (deleted) httpd 5416 apache 15w REG 0,22 0 90669 /var/run/httpd_ssl_mutex (deleted) httpd 27545 apache 15w REG 0,22 0 90669 /var/run/httpd_ssl_mutex (deleted) httpd 27721 apache 15w REG 0,22 0 90669 /var/run/httpd_ssl_mutex (deleted) [root@F5-A:ModuleNotLicensed::Active:Standalone] config #