Linux文件的属性及类型
Linux文件属性及类型
1.Linux系统文件属性
Linux系统中文件或目录的属性主要包括:文件或目录的索引节点(inode)、类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容;在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
d rwxr-xr-x. 4 root root 71 Mar 25 19:01 one
- rw-r--r--. 1 root root 119 Mar 25 03:42 shi.txt
1| 2 |3|4| 5 | 6 | 7 | 8 | 9
在 Linux 中第一列字符代表这个文件是目录、文件或链接文件等等。
- 当为 d 则是目录(directory)
- 当为 - 则是普通文件;
- 若是 l 则表示为链接文档(Link File);
- 若是 b 则是设备文件(block块设备文件)和存储相关的设备,举例:硬盘,U盘,磁盘分区
- 若是 c 则表示为设备文件(char字符设备文件)和字符相关的设备,举例:打印机,终端
- 若是 s 则表示为socket安全套接字文件,网络编程
- 若是 p 则表示为pipe管道文件,父进程与子进程之间的通信文件
第二列字符表示用户权限
- r 代表可读(read)
- w 代表可写(write)
- x 代表可执行(execute)
- -该权限位上没有权限
第四列指该文件的硬链接数
第五列文件或目录所属的用户(属主)
chown:更改文件属主
语法:
chown [–R] 属主名 文件名
第六列文件或目录所属的用户所归属的组;
chgrp:更改文件属组
语法:
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
第七列文件或目录的大小;
其中大小默认单位为字节,想要转换储存单位可以用命令 ls -h
第八列文件或目录的修改时间
这里的时间是该文件的最后被更新(包括文件创建、内容更新、文件名更新等),可用如下命令查看文件的修改,访问,创建的时间
stat + 文件名.
第九列实际的文件名或目录名
2.文件类型查看命令file
语法:
file [选项] 文件...
举例:
[root@localhost ~]# file pikachupikachu: JPEG image data, JFIF standard 1.01
root@localhost ~]# file /dev/sda/dev/sda: block speci
[root@localhost ~]# file /dev/pts/0/dev/pts/0: character speci
注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别
3.系统链接文件
在Linux中,一个文件数据可分为两大类:数据和元数据
- 数据:泛指普通文件中的实际数据
- 元数据:用来描述一个文件的特征的系统数据
在Linux中,一个文件的存储也会被分为两部分:inode和block
- inode:用来存储文件的元数据
- block:用来存储文件的真实数据,一个block空间是4k
ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode (i 节点)信息;剩余的大部分用于保存 block 信息。
inode 的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。大家如果仔细查看,就会发现 inode 中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。
block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的。
由此,我们可以知道以下 2 个重要的信息:
1.每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;
2.如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块;
查看磁盘空间命令
查看磁盘空间命令:
df
选项:
-h:human人类可读
-i:查看inode空间
举例:
查看磁盘的block:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.2G 18G 7% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 473M 119M 355M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
查看磁盘的inode:
[root@localhost ~]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9.3M 29K 9.3M 1% /
devtmpfs 119K 373 119K 1% /dev
tmpfs 122K 1 122K 1% /dev/shm
tmpfs 122K 700 121K 1% /run
tmpfs 122K 16 122K 1% /sys/fs/cgroup
/dev/sda1 238K 326 238K 1% /boot
tmpfs 122K 1 122K 1% /run/user/0
4.硬链接与软连接
Linux系统引入了两种链接:
-
硬链接(hard link)
-
软链接(又叫:符号链接即soft link或symbolic lin)
软连接:
软链接相当于windows的快捷方式,软链接文件会将inode指向源文件的block
- 当我们访问这个软链接文件时,其实就是在访问源文件的本身
- 那么当我们对一个文件创建多个软链接时,其实就是多个inode指向同一个block
- 那么当我们删除软链接文件时,其实只是删除了一个inode的指向,并不会对源文件造成影响。
- 如果我们删除的是源文件,那么该文件的所有软链接文件都会失效
显示iNode编号命令
ls -i
创建软链接文件命令:
ln -s 源文件 链接文件的位置
一个文件创建多个软连接:
[root@localhost ~]# ln -s /root/1.txt /tmp/
[root@localhost ~]# ll /tmp/
total 196
lrwxrwxrwx 1 root root 11 Mar 2910:54 1.txt -> /root/1.tx
[root@localhost ~]# ln -s /root/1.txt /tmp/2.txt
[root@localhost ~]# ll /tmp/
total 196
lrwxrwxrwx 1 root root 11 Mar 2910:54 1.txt -> /root/1.txt
lrwxrwxrwx 1 root root 11 Mar 2910:55 2.txt -> /root/1.txt
软链接的应用场景
-
软件升级
-
代码发布
-
不方便移动的目录
-
数据回滚
-
程序读取
硬链接:
若一个inode号对应多个文件名,则称这些文件为硬链接。换句话说,硬链接就是同一个文件使用了多个别名
特性
-
硬链接文件,不会受到原文件的影响
-
所有硬链接文件的inode号与源文件相同
-
修改一个文件,其他文件都会改变
-
不允许给目录创建硬链接5.默认情况下,新创建的目录,有两个硬链接,一个是目录本身,一个是该目录下的.目录
1)创建命令不同
软链接:ln -s
硬链接:ln
2)目录不能创建硬链接,并且硬链接不可以跨越系统的分区,软链接可以
3)硬链接文件与源文件inode相同,软链接文件与源文件inode不同
4)删除软链接文件,对源文件无影响,但是删除软链接源文件对软链接文件有影响
5)删除硬链接文件,对源文件也无影响,并且删除源文件,对硬链接文件也无影响
拓展:企业面试题
当前磁盘空间还剩余500G,但是就无法往里面写入数据,报错,磁盘空间满了
回答:
1.首先磁盘存储被划分为两块
inode:存储文件的元数据
block:存储文件的真实数据
2.在问题当中剩余500G,这500G指的是block
3.应该是inode被占满了
4.这种情况,一般是系统中,小文件太多导致的
5.找到系统中的小文件(没用的),并删除