文件的属性

文件字符类型 文件类型
- file 普通文件
d directory 目录
c char 字符设备
b block 块设备
l link 链接文件
s socket 安全 (套接字)文件
p pipe 管道文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 文件类型 文件权限r:read 读 w:write 写 x:execute执行 
硬链接数 所属用户 所属用户组 文件大小 时间 文件名
- rw-r--r--. 1 root root 289 Apr 7 16:40 11.txt
d rwxr-xr-x. 4 root root 41 Apr 3 18:04 zls
## 文件类型
[root@localhost ~]# ll /dev/null -d
crw-rw-rw-. 1 root root 1, 3 Apr 7 16:21 /dev/null
[root@localhost ~]# ll /dev/sda1
brw-rw----. 1 root disk 8, 1 Apr 7 16:21 /dev/sda1
[root@localhost ~]# ll /run/systemd/initctl/fifo
prw-------. 1 root root 0 Apr 7 16:21 /run/systemd/initctl/fifo
[root@localhost ~]# ll /dev/log
srw-rw-rw-. 1 root root 0 Apr 7 16:21 /dev/log
[root@localhost ~]# ll -d zls/
drwxr-xr-x. 4 root root 41 Apr 3 18:04 zls/
[root@localhost ~]# ll
-rw-r--r--. 1 root root 289 Apr 7 16:40 11.txt

使用file命令来鉴别文件类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# ll *.jpg
-rw-r--r--. 1 root root 20735 Mar 13 09:08 w700d1q75cms.jpg
-rw-r--r--. 1 root root 4 Apr 7 19:50 zls.jpg
[root@localhost ~]# file w700d1q75cms.jpg
w700d1q75cms.jpg: JPEG image data, EXIF standard
[root@localhost ~]# file zls.jpg
zls.jpg: empty
[root@localhost ~]# echo 111 > zls.jpg
[root@localhost ~]# file zls.jpg
zls.jpg: ASCII text
## 查看文件类型
[root@localhost ~]# file /dev/null
/dev/null: character special
[root@localhost ~]# file /dev/sda1
/dev/sda1: block special
[root@localhost ~]# file /run/systemd/initctl/fifo
/run/systemd/initctl/fifo: fifo (named pipe)
[root@localhost ~]# file /dev/log
/dev/log: socket
[root@localhost ~]# file /root/zls
/root/zls: directory
##注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别

系统链接文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
文件有文件名和数据,在Linux上被分成两个部分:用户数据(user data)与元数据(metadata)

用户数据:文件数据块(data block),数据块是记录文件真实内容的地方,我们将其称为#Block
元数据:文件的附加属性,例如:文件大小,创建时间,属组,属主等,我们称其为#Inode
在Linux中,inode是文件元数据的一部分,但其并不包含文件名,inode号即索引节点号
文件名仅是为了方便人们的记忆和使用,系统或者程序通过inode号寻找正确的文件数据块。

#inode描述
在Linux中,inode(索引节点)是文件系统中的一个数据结构,用于存储文件或目录的元数据信息,包括文件类型、权限、所有者、大小、数据块的位置等。它通过一个唯一的标识符来标识文件或目录,并且在文件系统中具有固定的位置。简而言之,inode是文件系统中用于描述文件或目录属性的数据结构。

#元数据:用来描述数据的数据
#真实数据:用户产生的数据(文件内容)
#inode:用于存储文件或目录元数据信息的数据结构。
#block:用于存放用户真实数据的部分
cat 1.txt
aaa
-rw-r--r--. 1 root root 583919 Oct 29 02:33 1.txt >>==元数据inode
aaa 真实数据 Block

文件读取流程

image-20240407164513997

block介绍

image-20240407164729805

1
2
3
4
5
6
7
block默认大小为4k

# 磁盘存储数据会被分为两个部分:
一部分存储元数据,存储元数据的部分叫做inode,每个文件都有一个自己的inode号,这个inode号可以理解为文件存储在磁盘上的房间号
一部分存储真实数据,存储真实数据的部分叫做block,一个block默认是4k

# 如上图,当存放的一个block不足4k时,再次存新文件不会占用上次不足4k的block

软链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 软链接的创建方式 ln(link)
软链接 ==> 符号链接
soft_link symbolic link
ln -s 源文件(要给谁创建快捷方式) 目标文件(快捷方式的位置)
[root@localhost ~]# ll -i zls111 1.txt
16803484 -rw-r--r--. 1 root root 279 Apr 7 17:55 1.txt
16799371 lrwxrwxrwx. 1 root root 11 Apr 7 22:34 zls111 -> /root/1.txt
[root@localhost ~]# ln -s /root/1.txt /opt
总结:
1)创建软链接时,直接接一个已存在的目录,以源文件名字来命名新的文件名创建到指定目录下
2)创建软链接时,指定一个目录下的文件,如果该文件不存在,则创建软链接并改名
2)创建软链接时,指定一个目录下的文件,如果该文件存在,则报错,无法创建
[root@localhost ~]# ln -s /root/1.txt /tmp/1.txt
ln: failed to create symbolic link ‘/tmp/1.txt’: File exists

硬链接

若一个 inode 号对应多个文件名,则称这些文件为硬链接。换句话说,硬链接就是同一个文件使用了多 个别名,如下图所示 hard link 就是file的一个别名,他们有共同的 inode

1
2
3
4
5
6
7
8
9
10
11
## 创建硬链接方式
ln 源文件(要给谁创建硬链接) 目标文件(硬链接的位置)
[root@localhost ~]# ll -i
total 24
16797812 lrwxrwxrwx. 1 root root 11 Apr 7 23:35 123 -> /root/1.txt
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 1.txt
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 abc
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 abc1
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 abc2
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 abc3
16797823 -rw-r--r--. 6 root root 4 Apr 7 23:37 abc4

image-20240407201426083

硬链接和软链接的区别

区别 硬链接 软链接
命令 ln ln -s
inode 和源文件inode号相同 和源文件inode号不同
源文件 删除源文件不影响链接文件 删除源文件影响链接文件
跨分区创建 不能 可以
目录创建 不能 可以
文件类型 普通文件 l 链接文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 查看磁盘命令
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 8913920 1609880 7304040 19% /
devtmpfs 487048 0 487048 0% /dev
tmpfs 497948 0 497948 0% /dev/shm
tmpfs 497948 7748 490200 2% /run
tmpfs 497948 0 497948 0% /sys/fs/cgroup
/dev/sda1 508580 122216 386364 25% /boot
tmpfs 99592 0 99592 0% /run/user/0
# -h以人类可读的方式显示,磁盘大小加上了单位
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.6G 1.6G 7.0G 19% /
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 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
# -i 查看inode可用空间
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 4462080 34791 4427289 1% /
devtmpfs 121762 380 121382 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 699 123788 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
[root@localhost ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 4.3M 34K 4.3M 1% /
devtmpfs 119K 380 119K 1% /dev
tmpfs 122K 1 122K 1% /dev/shm
tmpfs 122K 699 121K 1% /run
tmpfs 122K 16 122K 1% /sys/fs/cgroup
/dev/sda1 250K 326 250K 1% /boot
tmpfs 122K 1 122K 1% /run/user/0

1
2
CentOS 6:默认使用的是ext4的文件系统13。
CentOS 7:默认使用的是xfs(eXtended File System)文件系统类型

当前磁盘空间还剩余500G,但是就无法往里面写入数据,报错,磁盘空间满了。

1
2
1.inode号储存磁盘空间不足
2.block储存用户真实数据磁盘空间不足