Linux 文件属性-上
一 硬盘
硬盘的使用过程:
硬盘要存储数据,手写要分区,然后格式化创建文件系统,最后挂载.
二 linux 文件属性
[root@oldboyedu-39 ~]# ls -lhi /etc/hosts
392476 -rw-r--r--. 2 root root 158 Jul 15 11:13 /etc/hosts

文字解释:
第一列:inode索引节点编号(相当于人的身份证号码,唯一),系统读取 文件时首先通过文件名找到inode号码,然后才能读取到文件内 容.
第二列:文件类型及权限.
第三列:共11个字符:其中第一个字符为文件类型,随后9个字 符为文件 的对应权限,最后一个字符号"."是SElinux有关的一个标识.
第四列:硬链接个数,相当于超市的多个入口,可以从不同的文件入口进 入文件,还可以互为备份.
第五列:文件或目录所属的用户 文件的所有所有者(属主).linux里面 文件和程序的存在必须要有用户和组满足相应的存在需求.
第六列:文件或目录所属的组(属组).
第七列:文件或目录的大小;
第八列:文件的修改时间
第九列:文件名(不属于文件属性)
三 文件访问过程

ls 查看某个目录或文件时,如果加上-i 参数,就可以看到inode节点了
[root@oldboyedu-39 ~]# ls -lhi
total 40K
136871 -rw-------. 1 root root 1.1K Jul 14 23:27 anaconda-ks.cfg
130819 -rw-r--r--. 1 root root 22K Jul 14 23:27 install.log
130820 -rw-r--r--. 1 root root 5.8K Jul 14 23:26 install.log.syslog
[root@oldboyedu-39 ~]# stat /etc/hosts
File: `/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 392476 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-15 11:47:34.174275837 +0800
Modify: 2019-07-15 11:13:40.617272242 +0800
Change: 2019-07-15 11:13:40.618272221 +0800
因为inode 要存放文件的属性信息,所以每个inode是有大小的,Centos5系列inode的默认大小是128字节,而Centos6系列inode的默认大小是256字节,inode的大小在区分被格式化创建文件系统之后定下来的,格式化以后就无法更改inode大小,格式化前可以通过参数指定inode的大小,但是一般企业工作环境没有这个需求.
四 inode 的小结:
来源
- 磁盘被分区并格式化为ext4文件系统,后会生成一定数量的inode和block.
意义
- inode称为index node索引(目录)节点,它的作用是存放文件的属性信息以及block的位置(指向文件的实体指针).
特色
- ext3/ext4 文件系统(Centos 5.x/6.x 默认的文件系统下),一个非空文件占用一个inode和block.(文件size比较大)
- inode 节点号相同的文件,互为硬链接文件,可以认为足一个文件不同入口.
- inode 在某一个文件系统(分区),是唯一的.
查看
ls -i(看某些文件的inode号码) 或者df -i (系统里面inode 用了多少剩余多少)
[root@oldboyedu-39 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1250928 55374 1195554 5% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
四 block的知识小结
block是用老存储实际数据的,每个block的大小一般有1k,2k,4k几种.其中引导分区等为1K,其他普通分区多为4K(C6)
- 特点:
- 磁盘读取数据是按block为单位读取的.
- 每读取一个block就会消耗一次磁盘I/O(input/output 磁盘读写)
- 文件比较大:一个文件可能占用多个block
- 文件比较小:一个block剩余空间会被浪费,无论内容有多少
- 查看:
- dumpe2fs /dev/sda3|grep -i "block size"(block 大小 block用了多少 剩下多少)
- df -h(磁盘block使用情况)
- ls -lh
磁盘使用情况:
[root@oldboyedu-39 ~]# ls -lh /etc/hosts /etc/services
-rw-r--r--. 2 root root 158 Jul 15 11:13 /etc/hosts
-rw-r--r--. 1 root root 626K Mar 22 2017 /etc/services
[root@oldboyedu-39 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.5G 17G 9% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
五 inode 与 block
Inode,中文意思是索引节点(index node).在每个linux存储设备或存储设备(磁盘或硬盘)的分区两部分:第一部分是Inode,第二部分是Block.
Inode:存放的是文件/目录属性信息,没有文件名但是,inode里面唯独不包含文件名本身(文件的名字不是文件的属性)
Block:实际存放数据的位置/空间
而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode属性信息包括不限文件大小\属主(用户),归属的用户组,文件权限,文件类型,[修改]时间,还包含指向文件实体的指针的功能(block的位置,inode节点--block的对应关系)等.但是,inode里面唯独不包含文件本身.(文件的名字不是文件的属性)
Inode(属性信息的)+数据位置
Inode 除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值.操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体.
inode,block之间的关系图:
六【企业案例】磁盘空间满了,no space lsft on device(磁盘空间不足)
1.4企业案例:磁盘空间满了如何解决
系统报错(no space left on device)磁盘空间不足
环境模拟:
[root@oldbouedu-39 ~]# mkdir -p /app/logs
[root@oldbouedu-39 ~]# dd if=/dev/zero of=/dev/sdc bs=8K count=10
10+0 records in
10+0 records out
81920 bytes (82 kB) copied, 0.000131201 s, 624 MB/s
[root@oldbouedu-39 ~]# ls -l /dev/sdc
-rw-r--r-- 1 root root 81920 Apr 17 08:57 /dev/sdc
[root@oldbouedu-39 ~]# mkfs.ext4 /dev/sdc
mke2fs 1.41.12 (17-May-2010)
/dev/sdc is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 80 blocks
4 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group
Writing inode tables: done
Filesystem too small for a journal
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@oldbouedu-39 ~]# mount -o loop /dev/sdc /app/logs
[root@oldbouedu-39 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1250928 55447 1195481 5% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
/dev/sdc 16 11 5 69% /app/logs
##############磁盘空间满了block满了##############
[root@oldbouedu-39 logs]# ls -lh /bin/ls
-rwxr-xr-x. 1 root root 115K Mar 23 2017 /bin/ls
[root@oldbouedu-39 logs]# cp /bin/ls .
cp: writing `./ls': No space left on device
[root@oldbouedu-39 logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.5G 17G 9% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sdc 73K 70K 0 100% /app/logs
[root@oldbouedu-39 logs]# rm ls –f
[root@oldbouedu-39 logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.5G 17G 9% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sdc 73K 14K 55K 21% /app/logs
################磁盘空间 inode满了########################
[root@oldbouedu-39 logs]# touch {1..6}.txt
touch: cannot touch `6.txt': No space left on device
[root@oldbouedu-39 logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.5G 17G 9% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sdc 73K 14K 55K 21% /app/logs
[root@oldbouedu-39 logs]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1250928 55447 1195481 5% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
/dev/sdc 16 16 0 100% /app/logs
[root@oldbouedu-39 logs]# rm *.txt -f
[root@oldbouedu-39 logs]# ll
total 12
drwx------ 2 root root 12288 Apr 17 08:58 lost+found
[root@oldbouedu-39 logs]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1250928 55447 1195481 5% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
/dev/sdc 16 11 5 69% /app/logs
七 文件类型及文件扩展名
文件扩展名:
windows --- 通过扩展名区分文件的类型 .txt .avi
linux --- 扩展名----主要是是给别看的,并不影响.
文件类型
linux系统中,可以说一切(包括目录\普通文件\设备文件等)皆为文件.文件类型包含有普通文件,目录,字符设备文件,块设备文件,符号,软连接文件,管道文件等等;
| 文件类型标识符 | 文件类型说明 |
|---|---|
| d(directory) | 表示这是一个目录,如上文ext,z ext2fs中,目录是一个特殊的文件. |
| -(regula file) | 表示这是一个普通的文件,入上文的oldboy. |
| l(小写字母) | 表示这是一个符号/软连接文件,实际上它指向另一个文件. |
| b(block) | 表示块设备和其他的外围设备,是特殊类型文件 |
| c(character) | 表示字符设备文件 |
| s(socket) | 表示Socket(套接字)文件 |
| p(named pipe) | 表示管道文件 |
find 命令 -type 的文件类型的参数
b block(buffered) special
c character(unbuffered) special
d directory
p named pipe(FIFO)
f regular file
l symboli link
s socket
D door(Solaris)
范例:
[root@oldboyedu-39 ~]# find /root/ -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 5890 Jul 14 23:26 /root/install.log.syslog
-rw-r--r--. 1 root root 21736 Jul 14 23:27 /root/install.log
-rw-------. 1 root root 1073 Jul 14 23:27 /root/anaconda-ks.cfg
-rw-r--r--. 1 root root 176 May 20 2009 /root/.bash_profile
-rw-r--r--. 1 root root 129 Dec 4 2004 /root/.tcshrc
-rw-r--r--. 1 root root 176 Sep 23 2004 /root/.bashrc
-rw-r--r--. 1 root root 100 Sep 23 2004 /root/.cshrc
-rw-------. 1 root root 125 Jul 16 05:42 /root/.bash_history
-rw-------. 1 root root 719 Jul 15 10:46 /root/.viminfo
-rw-r--r--. 1 root root 18 May 20 2009 /root/.bash_logout
1.7.1 文件类型分别介绍
普通文件(regular file):
[root@oldboyedu-39 ~]# ls -l oldboy.sql
-rw-r--r--. 1 root root 0 Jul 16 07:15 oldboy.sql
通过用ls -l 来查看oldboy.sql的属性,可以看到第一列内容-rw-r--,注意的是第一个符号是-(英文字符减号),在Linux中,以这样的字符开头的文件就表示普通文件.
这些文件一般是用相关的应用程序或系统命令创建,比如图:touch,cp ,tar,echo,cat ,>,>>等工具命令... ... 普通文件的删除方式可以使用rm命令:
[root@oldboyedu-39 ~]# ls -l oldboy.sql
-rw-r--r--. 1 root root 0 Jul 16 07:15 oldboy.sql
提示:从上面测试可以看出,windows下的doc,ppt,zip,jpg等格式的文档在linux下都属于普通文件.Linux下的二进制文件,各种服务的配置文件如:/etc/exports,/etc/rc.local等都是纯文本文件.
普通文件(regular file):第一个属性为 "-" ,按照文件内容,又大略可分为:
1) (纯)文本文件(ASCII):文件内容可以直接读到数据,例如:字母,数字,特殊符号等.可以用cat命令读文件,比如配置文件几乎都是这种类型的.
2)二进制文件(bianary):linux中的命令程序就是属于这种格式.例如cat 命令就是一个二进制文件.
3) 数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件.例如:Linux在用户登录是,都会将登录的数据记录在/var/log/wtmp(last 命令的数据库文件)那个lastlog(/var/log/lastlog)
补充:通过file命令可以查看文件类型
[root@oldboyedu-39 tmp]# ls -l /etc/hosts /tmp/etc.tar.gz /bin/ls
-rwxr-xr-x. 1 root root 117048 Mar 23 2017 /bin/ls
-rw-r--r--. 2 root root 158 Jul 15 11:13 /etc/hosts
-rw-r--r--. 1 root root 0 Jul 16 07:38 /tmp/etc.tar.gz
[root@oldboyedu-39 tmp]# file /etc/hosts
/etc/hosts: ASCII text
[root@oldboyedu-39 tmp]# file /tmp/etc.tar.gz
/tmp/etc.tar.gz: empty
[root@oldboyedu-39 tmp]# 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
八 文件的权限
Linux中的文件或目录的权限和用户及用户组关联很大,要理解这部分内容,需要先了解Linux系统中管理方面的知识.在我们的课程中已经详细讲解过这部分内容,具体用户管理.
Linux中每个文件或目录都有一组共9个基础权限位,每三位字符被分一组,他们分别是属主权限位(占三个字符),用户组权限位(占三个字符),其它用户权限位(占三个字符).在linux中正是这9个权限(更多权限位后面会提到)位来控制文件属主,用户组以及其它用户的权限.
软连接与硬链接
在linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符合链接(Symbolic Link or Soft link or symlink).通过ln这个命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的链接是硬链接.
硬链接
在同一个分区/文件系统中inode号码相同是硬链接.
硬链接是指通过索引节点(Inode)来进行衔接.在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称位索引节点编号(Index Inode)简称Inode,即在系统中文件的编号.
在Linux同一个文件系统中,多个文件指向同一个索引节点(inode号相同)(Inode)是正常且允许的.这种情况的文件就称位硬链接.
在同一个文件系统中(分区,装修风格),多个文件的inode号码相同,这些文件就互为硬链接文件.
提示:硬链接文件就相当于文件的另外一个入口.硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止"误删除"源数据(很多硬件存储,netapp存储中的快照功能就应用了这个原理,增加一个快照就多个硬链接)
因为文件系统(ext2)的原理是,只要文件的索引节点(Inode Index)还有一个个以上的硬链接.只删除其中一个硬链接(即仅仅删除了改文件的链接指向),并不影响索引节点本身和其它的链接(即数据文件实体并未被删除),只有当文件的最后一个链接呗删除后,此时如果有新数据要存储到硬盘上时,文件实体并未被删除,值有当文件最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过类似fsck做磁盘检查的时候.被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖/此时.数据就再也无法找回.
也就是说,在linux系统中,删除静态文件(没有进程调用)(目录页是文件)的条件是与之相关的所有硬链接文件均被删除.
一个文件被彻底删除条件:改文件的硬链接数量为零.

硬链接的创建:
直接执行命令 "ln 源文件-----链接文件"
[root@oldboyedu-39 tmp]# echo oldboyedu.com > oldboy.txt
[root@oldboyedu-39 tmp]# cat oldboy.txt
oldboyedu.com
[root@oldboyedu-39 tmp]# ls -l oldboy.txt
-rw-r--r--. 1 root root 14 Jul 16 10:29 oldboy.txt
[root@oldboyedu-39 tmp]# #创建硬链接
[root@oldboyedu-39 tmp]# ln oldboy.txt oldboy.txt-hard
[root@oldboyedu-39 tmp]# ls -l oldboy.txt
-rw-r--r--. 2 root root 14 Jul 16 10:29 oldboy.txt
[root@oldboyedu-39 tmp]# echo oldboy >> oldboy.txt
[root@oldboyedu-39 tmp]# ls -l oldboy.txt oldboy.txt-hard
-rw-r--r--. 2 root root 21 Jul 16 10:36 oldboy.txt
-rw-r--r--. 2 root root 21 Jul 16 10:36 oldboy.txt-hard
[root@oldboyedu-39 tmp]# cat oldboy.txt oldboy.txt-hard
oldboyedu.com
oldboy
oldboyedu.com
oldboy
硬链接小结:
-
硬链接是如何来的.
a) 通过执行命令"ln 源文件 硬链接文件",即可完成创建硬链接. b) 在同一文件系统/分区中,具有相同inode节点号的多个文件是互为硬链接文件. -
特点:
a) 硬链接与删除 删除源文件或硬链接如何一个,文件还存在. 把源文件和硬链接都删除,文件被彻底删除 文件被删除条件之一:硬连接数为0 删除硬链接文件或者删除源文件任意之一,文件实体(block数据 文件内容)并未被删除. 只有删除了源文件及所有对应的硬链接文件(硬链接数量为0),文件实体(block 数据 文件内容)才会被删除. 当所有的硬链接接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fasc检查的时候,删除的数据也会被系统回收(养成删除及多套环境测试的好习惯) 硬链接文件就是文件的另一个入口. 可以通过给文件设置硬链接文件,来防止重要文件被误删. 硬链接文件是普通文件,因此可以用rm 命令删除 文件彻底删除: 对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除 -
查看文件的硬链接数
a) ls -lhi /stat,i_link的查看方法(ls -lhi结果的第三列就是)硬链接.
软连接
软链接(Soft Link)也称为符号链接(Symbolic Link symlink).linux里的软链接文件就类似于windows系统中的快捷方式.linux里的软链接文件实际上是一个特殊的文件,文件类型是l,软链接文件实际上为一个文本文件,这个文件中包含有软链接指向另一源文件的位置信息内容,因此,通过访问这个"快捷方式"就可以迅速定位到软链接所指向的源文件实体.
软链接原理图:

[root@oldboyedu-39 tmp]# ln -s oldboy.txt oldboy.txt-soft
[root@oldboyedu-39 tmp]# ls -l oldboy.txt oldboy.txt-soft
-rw-r--r--. 2 root root 21 Jul 16 10:36 oldboy.txt
lrwxrwxrwx. 1 root root 10 Jul 16 11:10 oldboy.txt-soft -> oldboy.txt
【Y软硬链接总结】描述linux下软链接和硬链接的区别
在Linux系统中,链接分两种:硬链接和符号链接(软链接)
1)默认情况不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接.
2)含义:硬链接文件与源文件的inode节点号相同,而软链接文件相当于windows下面的快捷方式(inode节点号与源文件不同)
3)特点:
a)不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到.
b)软链接可以跨文件系统,硬链接不可以跨文件系统
4)源文件,软链接,硬链接与删除
a)删除软链接文件,对源文件及硬链接文件无任何影响
b)删除文件的硬链接文件,对源文件及软链接文件无任何影响
c)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效.(红底白字闪烁状)
d)同时删除源文件及其硬链接文件,整个文件才会被清除

浙公网安备 33010602011771号