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.文件名(不是文件属性)
第2章 故障案例:no space left on device
2.1 inode与block
inode 索引节点 ×××号码 文件属性信息 (大小 权限 时间 文件类型 硬连接数)
block的位置
没有文件名
block 数据块 文件的内容
2.2 cat oldboy.txt 与inode和block的关系
2.3 inode与block的特点
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 /
[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
[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进行排序 从第一个数字开始 )
2.5.2 seq 20|sort -hr
-h 人类可读
-r 降序
du -sh /*|sort -h
实例2-2 #inode用光
环境准备
mkdir -p /app/logs
dd if=/dev/zero of=/dev/sdc bs=8K count=10
ls -l /dev/sdc
mkfs.ext4 /dev/sdc
挂载:
mount -o loop /dev/sdc /app/logs
#准备模拟 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