day 15 Linux文件和目录属性知识

Linux 文件和目录属性知识

第1章 文件属性

[root@ss ~]# ls -lhi

total 52K

790011   -    rw-------.    1    root   root    1.2K     Jul 22  2018    anaconda-ks.cfg

790817       drwxr-xr-x.   78     root   root    4.0K     May 21 04:31    etc

784899   -   rw-r--r--.      1   root   root    22K     Jul 22  2018    install.log

784900   -   rw-r--r--.      1   root   root    5.8K    Jul 22  2018    install.log.syslog

791507   -   rw-r--r--.      1   root   root    60     Jul 22  2018    nginx.conf

791505   -   rw-r--r--.      1   root   root    32     Jul 22  2018    oldboy.tx

1          2      3          4    5     6      7         8         9             

1.inode号码  2文件类型  3.权限  4.硬链接数 5.属主  6.属组 7.大小  8修改时间

9.文件名(不是文件属性)

                                                               blob.png 

第2章 故障案例:no space left on device

2.1  inodeblock

inode  索引节点 ×××号码    文件属性信息 (大小 权限 时间 文件类型 硬连接数)

                              block的位置

                              没有文件名

block  数据块                    文件的内容

 

2.2 cat oldboy.txt inodeblock的关系

blob.png

2.3 inodeblock的特点

2.3.1 inode

1.   创建一个非空文件就要占用一个inode和至少一个block

2.   Inode空间,大小centos 6 且分区 》500M  256字节

3.   在同一个分区中,如果两个文件的inode号码相同,那么这两个文件互为硬链接

2.3.2  Block

1.    存放数据的地方

2.    大小centos 6 且分区 》500M  4k

3.    如果大文件占用多个block,如果小文件1k,block剩余的空间无法继续使用

4.    磁盘读取数据是按block为单位读取的

5.    每读取一个block,就会消耗一次磁盘I/O(input/output)磁盘读写

 

 

 

2.4 企业案例:

如果向磁盘写入数据提示如下错误:No space left on device(磁盘空间不足),通过df -h查看磁盘空间,发现没满,请问可能原因是什么?     企业场景什么情况下会导致这个问题发生?

2.4.1 原因:

inode用光了

有大量的小文件(定时任务)

2.4.2 模拟磁盘空间不足

实例2-1 #1.block满了

seq 500000000   >>/var/log/nt.avi

 

[root@oldboyedu50-lnb ~]# du -sh /

du: cannot access `/proc/2217/task/2217/fd/4': No such file or directory

du: cannot access `/proc/2217/task/2217/fdinfo/4': No such file or directory

du: cannot access `/proc/2217/fd/4': No such file or directory

du: cannot access `/proc/2217/fdinfo/4': No such file or directory

16G   /

 

 blob.png

[root@oldboyedu50-lnb ~]# du -sh /*

8.0K   /app

8.0K   /backup

7.6M   /bin

38M /boot

68K /data

220K   /dev

30M /etc

24K /home

214M   /lib

27M /lib64

16K /lost+found

4.0K   /media

4.0K   /mnt

52K /oldboy

32K /opt

du: cannot access `/proc/2218/task/2218/fd/4': No such file or directory

du: cannot access `/proc/2218/task/2218/fdinfo/4': No such file or directory

du: cannot access `/proc/2218/fd/4': No such file or directory

du: cannot access `/proc/2218/fdinfo/4': No such file or directory

0   /proc

372K   /root

16M /sbin

4.0K   /selinux

4.0K   /srv

0   /sys

99M /tmp

1.1G   /usr

14G /var

blob.png

[root@oldboyedu50-lnb ~]# du -sh /var/*|grep G

14G   /var/log

[root@oldboyedu50-lnb ~]# du -sh /var/log/*|grep G

14G   /var/log/lidao.mp4

[root@oldboyedu50-lnb ~]# ls -lh /var/log/lidao.mp4

-rw-r--r-- 1 root root 14G Jul 27 10:16 /var/log/lidao.mp4

df -h 磁盘空间不足

1  .df -h哪里满了

2.  du -sh 一层一层排查

    du -sh /* |grep G

3.排查到具体的文件或目录

4.确认之后再删除

2.5 排序

2.5.1 # seq 20 |sort

(将1-20进行排序   从第一个数字开始  )

blob.png

2.5.2 seq 20|sort -hr

-h 人类可读

-r 降序

 blob.png

du -sh /*|sort -h


blob.png

blob.png

实例2-2 #inode用光

环境准备

mkdir -p /app/logs 

dd if=/dev/zero of=/dev/sdc bs=8K  count=10

blob.png

ls -l /dev/sdc

mkfs.ext4 /dev/sdc

挂载:

mount -o loop /dev/sdc /app/logs

blob.png

#准备模拟 block 满了:

#df –h   查看磁盘空间的使用情况

[root@oldboyedu50-lnb ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        19G   16G  2.4G  87% /

tmpfs           931M     0  931M   0% /dev/shm

/dev/sda1       190M   40M  141M  22% /boot

/dev/sdc         73K   14K   55K  21% /app/logs

通过查看可以得知ls的大小比/app/logs的剩余空间大,所以如果将ls复制到/app/logs就会报磁盘空间不足的错误

[root@oldboyedu50-lnb ~]# ls -lh /bin/ls

-rwxr-xr-x. 1 root root 115K Mar 23  2017 /bin/ls

[root@oldboyedu50-lnb ~]# cp /bin/ls /app/logs/

cp: writing `/app/logs/ls': No space left on device

[root@oldboyedu50-lnb ~]# \rm -f /app/logs/ls 删除ls

[root@oldboyedu50-lnb ~]# df -h  查看磁盘使用情况

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        19G   16G  2.4G  87% /

tmpfs           931M     0  931M   0% /dev/shm

/dev/sda1       190M   40M  141M  22% /boot

/dev/sdc         73K   14K   55K  21% /app/logs

 

#解决 block满了

 

确认之后删除

实例2-3 #模拟inode用光

查看inode总数  # df -i

[root@oldboyedu50-lnb ~]# df -i

Filesystem      Inodes IUsed   IFree IUse% Mounted on

/dev/sda3      1250928 57431 1193497    5% /

tmpfs           238282     1  238281    1% /dev/shm

/dev/sda1        51200    39   51161    1% /boot

/dev/sdc            16    11       5   69% /app/logs

#创建多个小文件  touch

[root@oldboyedu50-lnb ~]# touch /app/logs/{1..7}.txt

touch: cannot touch `/app/logs/6.txt': No space left on device

touch: cannot touch `/app/logs/7.txt': No space left on device

[root@oldboyedu50-lnb ~]# touch  /app/logs/oldboy.txt

touch: cannot touch `/app/logs/oldboy.txt': No space left on device

#排查

[root@oldboyedu50-lnb ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        19G   16G  2.4G  87% /

tmpfs           931M     0  931M   0% /dev/shm

/dev/sda1       190M   40M  141M  22% /boot

/dev/sdc         73K   14K   55K  21% /app/logs

[root@oldboyedu50-lnb ~]# df -i

Filesystem      Inodes IUsed   IFree IUse% Mounted on

/dev/sda3      1250928 57431 1193497    5% /

tmpfs           238282     1  238281    1% /dev/shm

/dev/sda1        51200    39   51161    1% /boot

/dev/sdc            16    16       0  100% /app/logs

 

#解决

删除小文件

2.6 小结:磁盘空间不足

1.block    排查                               解决

          df -h;一层一层du -sh /              确认之后再删除

         

2.inode   df -i; 找出系统中目录大小大于1M     删除小文件

                 find / -type d   -size +1M 

2.6.1 删除大量小文件

准备(创建大量小文件)

[root@oldboyedu50-lnb ~]# mkdir  -p /tmp/test

[root@oldboyedu50-lnb ~]# cd /tmp/test

[root@oldboyedu50-lnb /tmp/test]# touch {1..500000}

-bash: /bin/touch: Argument list too long

[root@oldboyedu50-lnb /tmp/test]#

[root@oldboyedu50-lnb /tmp/test]# echo {1..500000}|xargs touch

 

[root@oldboyedu50-lnb /tmp/test]# echo {1..500000}|xargs touch

[root@oldboyedu50-lnb /tmp/test]# ls |wc -l

500000

2.6.2 ##故障:无法删除大量文件

[root@oldboyedu50-lnb /tmp/test]# \rm -f *

-bash: /bin/rm: Argument list too long

[root@oldboyedu50-lnb /tmp/test]# ls

 

2.6.3 ##解决:删除大量文件

[root@oldboyedu50-lnb /tmp/test]# ls |xargs rm

[root@oldboyedu50-lnb /tmp/test]# ls

[root@oldboyedu50-lnb /tmp/test]# ll

total 0

 

小结:删除大量小文件

1.ls/find +|xargs rm

2.缩小范围删除

  ls 1*  |xargs rm

  ls 2*  |xargs rm

3.删除文件所在目录 (记录好权限和属性)

2.6.4 扩展:

[root@oldboyedu50-lnb /tmp/test]# id

uid=0(root) gid=0(root) groups=0(root)

[root@oldboyedu50-lnb /tmp/test]# id oldboy

uid=500(oldboy) gid=500(oldboy) groups=500(oldboy)

[root@oldboyedu50-lnb /tmp/test]# id  nobody

uid=99(nobody) gid=99(nobody) groups=99(nobody)

[root@oldboyedu50-lnb /tmp/test]# su - oldboy

[oldboy@oldboyedu50-lnb ~]$ logout

[root@oldboyedu50-lnb /tmp/test]# su - nobody

This account is currently not available.

总结:

1.ls -lhi 每一列含义

2.inode与block含义 特点

3.故障案例:磁盘空间不足inode block 排查 解决过程

4.删除大量小文件

5.用户分类

6./etc/passwd


猜你喜欢

转载自blog.51cto.com/13859679/2151276