Linux 文件类型与软链接硬链接(服务器技巧篇)

操作系统文件类型介绍:

Linux系统不同于Windows系统,两者文件类型和文件扩展名也有很大的差异。

Linux中的文件类型和Linux文件的文件扩展名所代表的意义和Windows系统完全不同。用户一般通过应用程序或命令创建的文件,比如file.txt,file.tar.gz,这些文件虽然用不同的程序或命令来打开,但在Linux中,都是常规文件,即普通文件。扩展名只是人为的进行标识,区分;对Linux内核而言没有意义。

而在Windows系统中,文件扩展名就有实实在在意义,即表明文件类型。如:Windows图片文件扩展名:jpg,jpeg,png,bmp,gif等,内容文件扩展名:doc,docx,txt,pdf等,视频文件:avi,wmv,MP4,rmvb等

Linux中的文件类型:

在Linux系统中,可以说一切皆文件。包括:普通文件,目录文件,字符设备文件,块设备文件,符号链接文件等等,下面将分别说明:

  1. 普通文件类型

Linux中最多的一种文件类型,包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]

  1. 目录文件

就是目录, 能用cd命令进入的。第一个属性为 [d],例如 [drwxrwxrwx]

  1. 块设备文件

块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]

  1. 字符设备

字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]

5 .套接字文件

这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型

  1. 管道文件

FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]

  1. 链接文件

类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]

Linux下扩展名的作用:

在Linux中,扩展名对Linux内核没有实际意义,但是可以用来人为区分不同的文件,方便用户使用。

  (1).tar, .tar.gz, .tgz, .zip, .tar.bz表示压缩文件,创建命令为tar, gzip, unzip等

  (2).sh文件表示shell脚本文件

  (3).pl表示perl语言文件

  (4).py表示python语言文件

  (5).html, .htm, .php, .jsp, .do表示网页语言文件

  (6).conf表示系统服务的配置文件

  (7)rmp表示rmp安装包文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[thinktik@thinkcent /]$ ls -lhi
total 16K
1579 lrwxrwxrwx. 1 root root 7 Nov 6 21:28 bin -> usr/bin
96 dr-xr-xr-x. 5 root root 4.0K Nov 6 21:50 boot
1025 drwxr-xr-x. 20 root root 3.3K Nov 6 21:50 dev
67160161 drwxr-xr-x. 73 root root 8.0K Nov 8 21:03 etc
96 drwxr-xr-x. 3 root root 22 Nov 6 21:35 home
113 lrwxrwxrwx. 1 root root 7 Nov 6 21:28 lib -> usr/lib
115 lrwxrwxrwx. 1 root root 9 Nov 6 21:28 lib64 -> usr/lib64
117 drwxr-xr-x. 2 root root 6 Apr 11 2018 media
33556016 drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
67165851 drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
1 dr-xr-xr-x. 143 root root 0 Nov 6 21:50 proc
100663393 dr-xr-x---. 2 root root 135 Nov 6 21:50 root
9226 drwxr-xr-x. 22 root root 640 Nov 8 21:03 run
1583 lrwxrwxrwx. 1 root root 8 Nov 6 21:28 sbin -> usr/sbin
100664328 drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
1 dr-xr-xr-x. 13 root root 0 Nov 6 21:50 sys
67160168 drwxrwxrwt. 7 root root 132 Nov 8 03:14 tmp
100663761 drwxr-xr-x. 13 root root 155 Nov 6 21:28 usr
101 drwxr-xr-x. 19 root root 267 Nov 6 21:36 var

115 lrwxrwxrwx. 1 root root 9 Nov 6 21:28 lib64 -> usr/lib64

  • inode 索引节点编号:115
  • 文件类型 :文件类型是l,表示这是一个软连接
  • 文件权限 :rwxrwxrwx
  • 硬链接个数 : 表示lib64这个文件没有其他的硬链接,因为连接数是1,就是他本身
  • 文件属主 :表示这个文件所属的用户,这里的意思是lib64文件被root用户拥有,是第一个root
  • 文件属组 : 表示这个文件所属的用户组,这里表示lib64文件属于root用户组,是第二个root
  • 文件大小 : 文件大小是9个字节
  • 文件修改时间 :这里的时间是该文件最后被更新(包括文件创建、内容更新、文件名更新等)的时间可用如下命令查看文件的修改、访问、创建时间
1
2
3
4
5
6
7
8
9
10
11
12
[thinktik@thinkcent test]$ file hlink1.txt 
hlink1.txt: ASCII text
[thinktik@thinkcent test]$ stat hlink1.txt
File: ‘hlink1.txt’
Size: 16 Blocks: 8 IO Block: 4096 regular file
Device: 805h/2053d Inode: 100663819 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/thinktik) Gid: ( 1000/thinktik)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2018-11-08 23:50:33.265542318 +0800
Modify: 2018-11-08 23:49:34.287540614 +0800
Change: 2018-11-08 23:50:26.529542124 +0800
Birth: -

Linux链接概念

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

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
41
#创建一个测试文件
[thinktik@thinkcent test]$ touch 1.txt
#创建一个硬连接
[thinktik@thinkcent test]$ ln 1.txt hlink1.txt
#创建一个软连接
[thinktik@thinkcent test]$ ln -s 1.txt hlink1.txt
ln: failed to create symbolic link ‘hlink1.txt’: File exists
[thinktik@thinkcent test]$ ln -s 1.txt slink.txt
[thinktik@thinkcent test]$ ll
total 0
-rw-rw-r--. 2 thinktik thinktik 0 Nov 8 23:44 1.txt
-rw-rw-r--. 2 thinktik thinktik 0 Nov 8 23:44 hlink1.txt
lrwxrwxrwx. 1 thinktik thinktik 5 Nov 8 23:45 slink.txt -> 1.txt

# 注意软连接最前面有一个l(lrwxrwxrwx 前面),硬链接没有


[thinktik@thinkcent test]$ ll -li
total 0
100663819 -rw-rw-r--. 2 thinktik thinktik 0 Nov 8 23:44 1.txt
100663819 -rw-rw-r--. 2 thinktik thinktik 0 Nov 8 23:44 hlink1.txt
100663820 lrwxrwxrwx. 1 thinktik thinktik 5 Nov 8 23:45 slink.txt -> 1.txt
# 硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同

# 修改
[thinktik@thinkcent test]$ echo "I am 1.txt file" >1.txt
[thinktik@thinkcent test]$ cat 1.txt
I am 1.txt file
[thinktik@thinkcent test]$ cat hlink1.txt
I am 1.txt file
[thinktik@thinkcent test]$ cat slink.txt
I am 1.txt file
# 删除原文件
[thinktik@thinkcent test]$ rm 1.txt
[thinktik@thinkcent test]$ ls
hlink1.txt slink.txt
[thinktik@thinkcent test]$ cat hlink1.txt
I am 1.txt file
[thinktik@thinkcent test]$ cat slink1.txt
cat: slink1.txt: No such file or directory
# 当删除原始文件1.txt后,硬连接hlink1.txt不受影响,但是符号连接slink1.txt文件无效
  • 删除软连接,对原文件,硬链接无影响;
  • 删除硬连接,对软连接,原文件也无影响;
  • 删除原文件,对硬连接没有影响,导致软连接失效;
  • 同时删除原文件,硬连接,整个文件会真正的被删除。

彩蛋:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 删除原文件
[thinktik@thinkcent test]$ rm 1.txt
[thinktik@thinkcent test]$ ls
hlink1.txt slink.txt
[thinktik@thinkcent test]$ cat hlink1.txt
I am 1.txt file
[thinktik@thinkcent test]$ cat slink1.txt
cat: slink1.txt: No such file or directory

# 下面的会闪烁提示软连接失效
[thinktik@thinkcent test]$ ll
total 4
-rw-rw-r--. 1 thinktik thinktik 16 Nov 8 23:49 hlink1.txt
lrwxrwxrwx. 1 thinktik thinktik 5 Nov 8 23:45 slink.txt -> 1.txt

https://blog.csdn.net/rong09_13/article/details/79233956

http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html

https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

写的不错?请我喝杯可乐!!!
0%