• linux Maintaining disk 问题


    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命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

    在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

    -a:列出打开文件存在的进程;
    -c<进程名>:列出指定进程所打开的文件;
    -g:列出GID号进程详情;
    -d<文件号>:列出占用该文件号的进程;
    +d<目录>:列出目录下被打开的文件;
    +D<目录>:递归列出目录下被打开的文件;
    -n<目录>:列出使用NFS的文件;
    -i<条件>:列出符合条件的进程。(46、协议、:端口、 @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;
    wfor 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(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 # 
  • 相关阅读:
    64位操作系统下IIS报“试图加载格式不正确的程序”错误(转)
    Web编程前端之7:web.config详解
    基于.net的加密汇总(1)
    基于.net的加密汇总(2)
    Web编程前端之6:js刷新页面大全
    SQL Server之3:全文搜索(3)
    Web编程前端之4:css+div多样式可定制完美分页全攻略
    SQL Server之1:全文搜索(1)
    处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”(转)
    SQL Server之8:sql查询每个学生得分最高的两门课
  • 原文地址:https://www.cnblogs.com/zy09/p/13386806.html
Copyright © 2020-2023  润新知