摘录来自: [中] 赵鑫磊, [加] Jie Zhang(张洁). “Linux就是这个范儿。” Apple Books.

文件属性的展现结构

drwxrwxr-x 12(连接数) mirsery(拥有者) mirsery(用户组)     4096(文件大小) Sep 17 16:49(最后修改日期) reps
-rw-r-----  1(连接数) redis   redis      58835 Mar  5  2019 redis.conf

第一个字符用于描述文件类型,可取的值有: -、d、l、b、c、s和p。

  • ` 代表这是一个普通文件
  • d 代表这是一个目录
  • l 代表这是一个软链接,硬链接没有特殊标记
  • b 块设备,如磁盘等保存大块数据的设备
  • c 字符设备,如鼠标、键盘等需要连续串行读写的设备
  • s 代表套接字socket文件,一般使用Unix domain socket的时候回创建这种类型的文件
  • p 命名管道文件
    剩下的代表拥有者、所属组、其他 的权限。
  • r 可读 4
  • w 可写 2
  • x 可执行 1

文件连接数

Linux系统使用的文件系统是一种基于inode的文件系统。每一个新创建的文件都会被分配一个inode,且每一个文件都有一个唯一的inode编号。系统是通过inode定位每一个文件,通常情况下为了提高文件系统的执行效率,访问过的文件的inode会被缓存在内存中。那么这个连接数属性其实就是inode的引用计数。
In 命令可以创建2中文件链接-硬链接和软链接。其中软链接也叫做符号链接,只是一个普通的文件需要额外增加一个**-s**命令选项来创建。
###软连接

ln -s /bin/bash sh

上面的命令会创建一个新的软链接 sh指向 /bin/bash,此时执行ls -l可以看到:

lrwxrwxrwx  1 mirsery mirsery        9 Sep 19 10:46 sh -> /bin/bash

软连接的文件属性和目标属性完全不同,按照系统设计,软链接也要占据一个新的inode,也就是说软连接是一个新的文件,不影响inode的引用计数。
###硬连接

ln /bin/bash bash

上面的命令会创建一个名为bash的硬连接到**/bin/bash。使用ls -l**命令可以看到:

-rwxr-xr-x  2 root    root     1113504 Apr  5  2018 bash

硬连接的属性和目标文件的属性完全相同,因为引用的是相同的inode,仅仅将inode的引用计数进行了**+1**操作。

软连接和硬连接的区别

  • 输入删除文件连接的目标文件,则软连接会失效,而硬连接则仅是“连接数”-1。
  • 软连接可以创建在任何位置,包括网络,而硬连接则不行,目标文件与连接文件必须在同一磁盘分区内。
  • 软硬连接在使用的时候区别不大,都相当于是一个文件具有不同的路径和文件名。