Linux文件属性
一、Linux文件属性
文件属性是什么?
[root@luffy_boy-001 /]# ls -lhi /etc/hosts 129822 -rw-r--r--. 2 root root 198 Jan 11 2019 /etc/hosts
文件属性就是 ls -lhi 命令输出结果每一列的含义
l list one file per line i --inode print the index number of each file h --human-readable with -l, print sizes in human readable format (e.g., 1K 234M 2G)
129822 # inode号码 - # 文件类型 rw-r--r--. # 文件的权限.(.与selinux有关) 2 # 文件硬链接数量 root # 主人 root # 家人 198 # 文件大小 Jan 11 2019 # 最后修改时间 /etc/hosts # 文件名不是文件的属性
inod和block简介
我们从获得一个硬盘,到可以向硬盘中存放数据,都经历了哪些阶段?
做一个比喻,把硬盘比作房子的话。
有房子----------------->买了个硬盘
划分隔断-------------->分区
装修-不同风格-------->格式化创建文件系统
安装门窗--------------->挂载
住人--------------------->存数据
inode
1、inode的含义
index node索引节点,用来存放文件属性的空间,通过inode号码来找到这个空间的。
inode号码----家庭住址
inode空间----家
文件名不存放在inode中。
2、inode怎么出来的
通过格式化创建文件系统,得到
3、inode的特点
- inode存放文件属性
- 存放block的位置(指向block的指针)
- 创建一个文件要占用一个inode
- inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
- inode在某一个文件系统(分区),是唯一的
4、怎么使用inode和查看
[root@luffy_boy-001 /]# df -i (系统里面inode用了多少,剩余多少) Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 462384 55433 406951 12% / tmpfs 488562 1 488561 1% /dev/shm /dev/sda1 51200 39 51161 1% /boot /dev/sr0 0 0 0 - /mnt [root@luffy_boy-001 /]# df -ih (-h人类可读) Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 452K 55K 398K 12% / tmpfs 478K 1 478K 1% /dev/shm /dev/sda1 50K 39 50K 1% /boot /dev/sr0 0 0 0 - /mnt [root@luffy_boy-001 /]# ls -ilh (查看某些文件的inode) total 122K 143585 drwxr-xr-x. 3 root root 4.0K Jan 12 2019 app 29 dr-xr-xr-x. 2 root root 4.0K Jan 10 2019 bin 2 dr-xr-xr-x. 5 root root 1.0K Jan 10 2019 boot 143562 drwxr-xr-x. 2 root root 4.0K Jan 10 2019 data 143552 drwxr-xr-x. 3 root root 4.0K Jan 10 2019 data_bak 4 drwxr-xr-x. 20 root root 3.7K Jan 10 2019 dev 129795 drwxr-xr-x. 78 root root 4.0K May 20 01:08 etc 30 drwxr-xr-x. 3 root root 4.0K Jan 11 2019 home
block
1、block的含义
数据块,实际存放数据的位置
2、block是怎么来的
也是格式化创建文件系统
3、block的特点
- block是实际存放数据的位置
- block 默认4k(centos 6.x) 1k 8k
- 创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
- 创建一个非空文件要占用一个inode和至少1个block
- 每读取一个block就会消耗一次磁盘I/O(input/output 磁盘读写)。
4、怎么使用和查看
[root@luffy_boy-001 /]# df -h (查看磁盘block使用情况) Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.5G 5.1G 22% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sr0 3.7G 3.7G 0 100% /mnt
[root@luffy_boy-001 /]# ls -lh total 122K drwxr-xr-x. 3 root root 4.0K Jan 12 2019 app dr-xr-xr-x. 2 root root 4.0K Jan 10 2019 bin dr-xr-xr-x. 5 root root 1.0K Jan 10 2019 boot drwxr-xr-x. 2 root root 4.0K Jan 10 2019 data drwxr-xr-x. 3 root root 4.0K Jan 10 2019 data_bak drwxr-xr-x. 20 root root 3.7K Jan 10 2019 dev
经典案例:磁盘空间不足
no space left on device磁盘空间不足-因为block满了。 seq 100000000 >/tmp/big #第一个里程碑-看看到底哪里满了 [root@oldboyedu01-nb ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot #第二个里程碑-是哪一个目录占得空间大,最终定位到目录或文件 [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# du -sh /*|grep G 1.1G /usr 7.4G /var [root@oldboyedu01-nb ~]# du -sh /var/*|grep G 7.3G /var/log [root@oldboyedu01-nb ~]# du -sh /var/log/*|grep G 7.3G /var/log/messages [root@oldboyedu01-nb ~]# ls -lh /var/log/messages -rw------- 1 root root 7.3G Oct 16 19:20 /var/log/messages #第三个里程碑-问清楚是否可以删除,然后在操作。 【Y】企业案例:如果向磁盘写入数据提示如下错误:No space left on device(磁盘空间不足),通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发生? 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 [root@oldboyedu01-nb ~]# cd /app/logs/ [root@oldboyedu01-nb logs]# touch stu{1..6}.log touch: cannot touch `stu6.log': No space left on device [root@oldboyedu01-nb logs]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 1.6G 6.9G 19% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdc 73K 14K 55K 21% /app/logs [root@oldboyedu01-nb logs]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 593344 58530 534814 10% / tmpfs 488562 1 488561 1% /dev/shm /dev/sda1 51200 39 51161 1% /boot /dev/sdc 16 16 0 100% /app/logs
解决办法:删除一些不需要的文件,释放一些inode
linux文件类型和扩展名
常见文件类型的种类
- f file 普通文件
d directory 目录
l softlink 软链接(快捷方式)
普通文件的分类
普通文件 都显示的是 - ,但是也是有区别的,怎么查看不同类型的普通文件呢? [root@oldboyedu01-nb ~]# ls -l /tmp/etc.tar.gz /bin/ls /etc/hosts -rwxr-xr-x. 1 root root 117048 Mar 23 2017 /bin/ls -rw-r--r--. 2 root root 200 Sep 25 20:19 /etc/hosts -rw-r--r-- 1 root root 9744299 Oct 20 2017 /tmp/etc.tar.gz
用file 查看文件详细类型 ##二进制文件 命令 [root@oldboyedu01-nb ~]# file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped ##文本文件 [root@oldboyedu01-nb ~]# file /etc/hosts /etc/hosts: ASCII text ##数据文件 data [root@oldboyedu01-nb ~]# file /tmp/etc.tar.gz /tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Fri Oct 20 01:36:16 2017
Linux下面的扩展名
windows windows下通过扩展名区分不同类型的文件。
linux 扩展名是用来给我们自己看的。就算手动修改或者添加了扩展名,他的文件类型还是不会改变
# 创建压缩包文件 [root@luffy_boy-001 ~]# tar zcf /oldbo_y.txt /oldboy/alex.txt tar: Removing leading `/' from member names # 查看文件 [root@luffy_boy-001 ~]# cat /oldboy.txt Dz Y@P²'PؽF;MpM)´ê½吾43e¹ࠊR·ڝ¡osṅsL±ȵ¯gՐºµ¯}Ꮅ"( # 查看压缩包文件 [root@luffy_boy-001 ~]# tar tf /oldboy.txt oldboy/alex.txt
linux有以下常见的扩展名
.sh 脚本文件
.conf 配置文件
Linux里面用户角色分类
整体对于一个文件/目录来说:用户可以分为3类
主人 所有者的名字
家人 所有者属于的组的名字
陌生人
[root@oldboyedu01-nb tmp]# ll -hi /etc/hosts 390174 -rw-r--r--. 2 root root 200 Sep 25 20:19 /etc/hosts
假设我是pizza用户,如何查询我与这个文件有什么关系?
[root@luffy_boy-001 ~]# id pizza
uid=500(pizza) gid=500(pizza) groups=500(pizza) #id查询用户信息 #属于哪个用户组
linux中存在于系统中的用户如何分类
linux中存在于系统中的用户如何分类 UID user id 用户的id号码=====身份证号码 √√√√√ GID group id 用户组的id号码===户口本的号码 UID 1.皇帝 root 0 2.傀儡 虚拟用户 1-499 系统中每个进程要有一个对应的用户,无法使用的. 3.贫民百姓 普通用户 500+ 如何保护皇帝root 1.禁止root远程登录 2.修改ssh默认的端口号22 3.定期分析/var/log/secure 记录着用户的登录信息 #与用户有关的文件 /etc/passwd 存放的是用户的信息 /etc/shadow 用户密码的信息 /etc/group 用户组的信息
/etc/gshadow
/etc/passwd root :x:0 :0 :root:/root :/bin/bash oldboy:x:500:500: :/home/oldboy:/bin/bash 第一列:用户名字 第二列:存放密码的地方 第三列:UID 第四列:GID 第五列:用户的说明信息,默认为空 第六列:用户的家目录 ~ root ~ /root oldboy ~ /home/oldboy 第七列:用户使用的shell,用户使用的命令解释器 /bin/bash--------centos默认的命令解释器 /sbin/nologin----用户无法登陆系统,相当于是傀儡用户
Linux基础权限(9位权限)介绍
r 4 read可以读取文件内容
w 2 write修改文件内容
x 1 execute可以运行文件(命令 脚本)
- 0 什么权限都没有
[root@luffy_boy-001 ~]# ls -l total 40 -rw-------. 1 root root 1061 Jan 10 2019 anaconda-ks.cfg -rw-r--r--. 1 root root 21736 Jan 10 2019 install.log # 权限的显示,和查看方法,分割成三部分 # rw- --- --- # rw- r-- r-- # 主人 家人 陌生人
420 000 000
420 400 400
6 0 0
6 4 4
[root@oldboyedu01-nb ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117048 Mar 23 2017 /bin/ls
421401401
7 5 5
软链接--相当于win的快捷方式
也叫作,符号链接
如何创建软链接
[root@luffy_boy-001 oldboy]# ln -s alex.txt alex.txt-soft [root@luffy_boy-001 oldboy]# ll total 36 -rw-r--r--. 1 root root 0 Jan 10 2019 alex.txt lrwxrwxrwx. 1 root root 8 May 20 23:02 alex.txt-soft -> alex.txt
软链接的特点
1、存放着源文件的位置
2、源文件被删除,软链接会找不到原链接,并失效,显示为红色,并闪动
3、节约时间
硬链接
相当于,超市的前后门,通过不同的大门进入超市
在同一个分区中,两个文件或多个文件的inode号码相同,这些文件互为硬链接
如何创建硬链接
[root@luffy_boy-001 oldboy]# ln alex.txt alex.txt-hard [root@luffy_boy-001 oldboy]# ll total 44 -rw-r--r--. 2 root root 4 May 20 23:04 alex.txt -rw-r--r--. 2 root root 4 May 20 23:04 alex.txt-hard lrwxrwxrwx. 1 root root 8 May 20 23:02 alex.txt-soft -> alex.txt
观察到硬链接数量由 1 变成了 2
硬链接的特点
1.相当于是超市的前后门,硬链接数量就是超市一共有多少门
2.删除硬链接或源文件,文件还是可以使用的
3.把硬链接和源文件都删除,文件被删除====>硬链接数量为0
软链接和硬链接的区别
描述linux下软链接和硬链接的区别 解答: 1) 如何创建: a)默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接。 2) 含义: a)硬链接文件与源文件的inode节点号相同,而软链接文件相当于windows下面的快捷方式(inode节点号与源文件不同)
b)硬链接主要用来防止误删,因为备份会占大量空间 3) 特点: a)不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到 b)软链接可以跨文件系统,硬链接不可以跨文件系统。 4) 怎么没的(源文件,软链接,硬链接与删除) a)删除软链接文件,对源文件及硬链接文件无任何影响; b)删除文件的硬链接文件,对源文件及软链接文件无任何影响; c)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状); d)删除源文件及其硬链接文件,整个文件才会被"真正"的删除。
文件删除原理
什么情况,才是文件被删除了?
1、硬链接数为0,使用rm
2、进程调用数为0
3、当某个文件没有被彻底删除,会导致磁盘空间满了,因为只删除了硬链接数,而一直有进程调用,这个文件会越来越大
4、如何解决:查找机器自身的服务,然后重启apache和tomcat
模拟问题
模拟思路 向/var/log/secure 追加8亿行 seq 800000000 #首先收到报警 [root@oldboyedu01-nb oldboy]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdc 73K 14K 55K 21% /app/logs #正常的排错过程。 [root@oldboyedu01-nb oldboy]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdc 73K 14K 55K 21% /app/logs [root@oldboyedu01-nb oldboy]# du -sh /* |grep G du: cannot access `/proc/2904/task/2904/fd/4': No such file or directory du: cannot access `/proc/2904/task/2904/fdinfo/4': No such file or directory du: cannot access `/proc/2904/fd/4': No such file or directory du: cannot access `/proc/2904/fdinfo/4': No such file or directory 1.1G /usr 7.4G /var [root@oldboyedu01-nb oldboy]# du -sh /var/* |grep G 7.3G /var/log [root@oldboyedu01-nb oldboy]# du -sh /var/log/* |grep G 7.3G /var/log/secure [root@oldboyedu01-nb oldboy]# \rm -f /var/log/secure #磁盘空间满了 [root@oldboyedu01-nb oldboy]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdc 73K 14K 55K 21% /app/logs [root@oldboyedu01-nb oldboy]# du -sh /* |grep G du: cannot access `/proc/2914/task/2914/fd/4': No such file or directory du: cannot access `/proc/2914/task/2914/fdinfo/4': No such file or directory du: cannot access `/proc/2914/fd/4': No such file or directory du: cannot access `/proc/2914/fdinfo/4': No such file or directory 1.1G /usr 占用空间明明很小,空间却满了 这就是因为,系统中某个文件没有被彻底删除。
如何找出硬链接数量为0,进程调用数不为0 lsof 显示系统中所有的文件 [root@oldboyedu01-nb oldboy]# lsof |grep delete rsyslogd 1250 root 2w REG 8,3 7803924480 130420 /var/log/secure (deleted) 软件名称 文件大小 文件名 (deleted)---标记 这个文件的硬链接数量为0,进程调用数不为0。 ##重启对应的服务 [root@oldboyedu01-nb oldboy]# /etc/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@oldboyedu01-nb oldboy]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 1.6G 6.9G 19% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdc 73K 14K 55K 21% /app/logs 磁盘空间不足-no space left on device 1.block满了正常-500G 存放505G视频 2.inode满了,大量的小文件 3.block 硬链接数量为0 进程调用数不为零 文件没有被彻底删除磁盘空间不足
补充:删除大量堆积小文件
创建环境
[root@learn-Linux001 oldboy]# touch {1..500000}.txt -bash: /bin/touch: Argument list too long # 数量太多,无法运行,使用下面的方法 [root@learn-Linux001 oldboy]# echo {1..500000}.txt|xargs touch
最后导致no space left on device
[root@learn-Linux001 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.5G 5.1G 22% / tmpfs 926M 0 926M 0% /dev/shm /dev/sda1 190M 35M 146M 19% /boot [root@learn-Linux001 ~]# df -hi Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 452K 452K 0 100% / tmpfs 232K 1 232K 1% /dev/shm /dev/sda1 50K 38 50K 1% /boot
是因为inode满了
[root@learn-Linux001 ~]# cd /oldboy/ [root@learn-Linux001 oldboy]# rm -f * -bash: /bin/rm: Argument list too long 直接删除失败 [root@learn-Linux001 oldboy]# ls |xargs rm -f
[root@learn-Linux001 oldboy]# ll
total 0 这样删除,成功(删除小文件)
可能会遇到更多的文件,这样也不能删除
解决办法是,筛选后进行批量删除
磁盘空间不足问题小结(no space left on device)
1.block满了正常-500G 存放505G视频
2.inode满了,大量的小文件
3.block 硬链接数量为0 进程调用数不为0 ,文件没有被彻底删除磁盘空间不足
排查:
Linux文件属性之时间
mtime modified time 文件的修改时间 文件内容的变化时间 ctime change time 文件属性的改变时间 硬链接数量 文件大小 文件权限 atime access time 文件的访问时间 cat #文件的修改时间 [root@oldboyedu01-nb ~]# ls -l oldboy.txt -rw-r--r--. 1 root root 17 Sep 25 16:47 oldboy.txt #查看所有时间 [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 17 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-09-25 16:47:53.059040702 +0800 Change: 2017-09-25 16:47:53.101042388 +0800 [root@oldboyedu01-nb ~]#
#mtime [root@oldboyedu01-nb ~]# echo hello >>oldboy.txt [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:45:10.447937840 +0800
#ctime change time [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:45:10.447937840 +0800 [root@oldboyedu01-nb ~]# ln oldboy.txt oldboy.txt-hard [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800 #atime [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800 [root@oldboyedu01-nb ~]# cat oldboy.txt 爱生活 爱李 hello [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-10-17 21:50:13.969932450 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800