1 2 3
| cd /home/sosactwt ls 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda3 vscode
|
我们在里面放上各种文件。
1 2 3 4 5 6 7 8 9 10 11
| cd vscode ls a1 cpp file1 first p.py a.out cpp_s file1_symnoliclink first.cpp ls -l -rwxrwxrwx. 2 sosactwt sosactwt 21136 2月 19 12:33 a.out drwxrwxrwx. 1 sosactwt sosactwt 46 2月 22 18:15 cpp -rw-rw-r--. 2 sosactwt sosactwt 0 2月 22 18:08 file1 -rwxrwxrwx. 1 sosactwt sosactwt 38224 2月 19 12:30 first -rw-rw-rw-. 1 sosactwt sosactwt 94 2月 19 12:27 first.cpp -rwxrwxrwx. 1 sosactwt sosactwt 0 2月 20 00:07 p.py
|
下面的叙述皆基于此
pwd 与 软硬连接
【硬连接】
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除(当然了原文件肯定也要删除才算删干净啦)。
硬连接的2个限制:
- 不允许给目录创建硬链接
- 只有在同一文件系统中的文件之间才能创建链接。 即不同硬盘分区上的两个文件之间不能够建立硬链接。这是因为硬链接是通过结点指向原始文件的,而文件的结点在不同的文件系统中可能会不同。
1 2 3 4 5 6 7 8 9 10 11
| ln file1 file1_hardlink ls -l -rwxrwxrwx. 2 sosactwt sosactwt 21136 2月 19 12:33 a.out drwxrwxrwx. 1 sosactwt sosactwt 46 2月 22 18:15 cpp -rw-rw-r--. 2 sosactwt sosactwt 0 2月 22 18:08 file1 -rw-rw-r--. 2 sosactwt sosactwt 0 2月 22 18:08 file1_hardlink -rwxrwxrwx. 1 sosactwt sosactwt 38224 2月 19 12:30 first -rw-rw-rw-. 1 sosactwt sosactwt 94 2月 19 12:27 first.cpp -rwxrwxrwx. 1 sosactwt sosactwt 0 2月 20 00:07 p.py
|
【软连接】
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。
软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。
在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
因此可以从下面看到,硬连接和软连接的大小是不一样的,硬连接与原文件大小和节点信息都一样,而软连接的大小则只是一个文本文件的大小。
这就允许符号链接(经常简写为symlinks)指向位于其他分区、甚至是其他硬盘上的某个文件
1 2 3
| ln -s file1 file1_symboliclink ls -li
|
我们同样也创建一个a.out文件的硬连接a_hardlink,软连接a_symboliclink,以及 目录(文件夹)cpp的软连接cpp_s,我们不能对目录创建硬连接。最后如下所示:
1 2 3 4 5 6 7 8 9 10 11 12
| 102577 -rwxrwxrwx. 2 sosactwt sosactwt 21136 2月 19 12:33 a_hardlink 102577 -rwxrwxrwx. 2 sosactwt sosactwt 21136 2月 19 12:33 a.out 110906 lrwxrwxrwx. 1 sosactwt sosactwt 5 2月 22 18:54 a_symboliclink -> a.out 104775 drwxrwxrwx. 1 sosactwt sosactwt 46 2月 22 18:15 cpp 110826 lrwxrwxrwx. 1 sosactwt sosactwt 3 2月 22 18:19 cpp_s -> cpp 110797 -rw-rw-r--. 3 sosactwt sosactwt 0 2月 22 18:08 file1 110797 -rw-rw-r--. 3 sosactwt sosactwt 0 2月 22 18:08 file1_hardlink 110805 lrwxrwxrwx. 1 sosactwt sosactwt 5 2月 22 18:12 file1_symnoliclink ->file1 99486 -rwxrwxrwx. 1 sosactwt sosactwt 38224 2月 19 12:30 first 99040 -rw-rw-rw-. 1 sosactwt sosactwt 94 2月 19 12:27 first.cpp 110907 lrwxrwxrwx. 1 sosactwt sosactwt 1 2月 22 18:54 k -> k 105514 -rwxrwxrwx. 1 sosactwt sosactwt 0 2月 20 00:07 p.py
|
再来看
1 2 3 4 5 6
| (base) [sosactwt@localhost vscode]$ ln file1 file1 ln: 无法创建硬链接 'file1': 文件已存在
(base) [sosactwt@localhost vscode]$ ln -s file1 file1 ln: 无法创建符号链接 'file1': 文件已存在
|
可见我们没有办法直接为file1的连接取一个一样名字的连接
但是却可以对不存在的文件如下
但是我们却不能用硬连接命令这样做,
1 2
| ln -s j j ln: 访问j失败:没有那个文件或目录
|
pwd [-LP] 显示目前所在的目录
因为pwd是用来显示目录的,所用我们用cpp_s来做试验。
1 2 3 4 5 6 7
| cd cpp_s pwd /home/sosactwt/vscode/cpp_s pwd -L /home/sosactwt/vscode/cpp_s pwd -P /home/sosactwt/vscode/cpp
|
pwd默认采用pwd -L ,即当前工作路径 ,
但由于cpp_s是连结档,即目录cpp的软连接(如上面所示cpp_s -> cpp),故其路径与cpp的路径不一致
而pwd -P 则是撇开连结档的干扰,打印出原目录的路径