Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
在Linux系统中存在两种链接文件方式:
如果文件被删除,则软链接文件失去指向,变为不可用
如果文件被删除,由于硬链接文件直接指向内容,因此不受影响
ln [源文件/目录] [目标软链接]
ln -s [源文件/目录] [目标软链接]
[root@asd test]# mkdir data-directory-test1 [root@asd test]# touch data-file-test2 [root@asd test]# ln -s data-directory-test1/ test1 [root@asd test]# ln -s data-file-test2 test2 [root@node02 test]# ll total 4 drwxr-xr-x 2 root root 4096 Nov 10 16:24 data-directory-test1 -rw-r--r-- 1 root root 0 Nov 10 16:26 data-file-test2 lrwxrwxrwx 1 root root 21 Nov 10 16:27 test1 -> data-directory-test1/ lrwxrwxrwx 1 root root 15 Nov 10 16:28 test2 -> data-file-test2
删除软链接和删除文件/目录操作一样,使用rm命令。但是需要特别注意的是,如果只是删除软链接,不想误删除软链接目录真实文件数据,在rm目录时路径末尾一定不能带"/“。如果带了”/",会将链接到的路径下的文件全部删除。
[root@node02 test]# ll total 4 drwxr-xr-x 2 root root 4096 Nov 10 16:46 data-directory-test1 lrwxrwxrwx 1 root root 20 Nov 10 16:46 test1-1 -> data-directory-test1 lrwxrwxrwx 1 root root 20 Nov 10 16:46 test1-2 -> data-directory-test1 [root@node02 test]# ll data-directory-test1/ total 0 -rw-r--r-- 1 root root 0 Nov 10 16:47 file1 -rw-r--r-- 1 root root 0 Nov 10 16:47 file2 #末尾不带"/"删除,删除软链接,不删除目录下数据 [root@node02 test]# rm -rf test1-1 [root@node02 test]# ll total 4 drwxr-xr-x 2 root root 4096 Nov 10 16:47 data-directory-test1 lrwxrwxrwx 1 root root 20 Nov 10 16:46 test1-2 -> data-directory-test1 [root@node02 test]# ll data-directory-test1/ total 0 -rw-r--r-- 1 root root 0 Nov 10 16:47 file1 -rw-r--r-- 1 root root 0 Nov 10 16:47 file2 #末尾带"/"删除,删除目录下数据,但不删除软链接 [root@node02 test]# rm -rf test1-2/ [root@node02 test]# ll total 4 drwxr-xr-x 2 root root 4096 Nov 10 16:48 data-directory-test1 lrwxrwxrwx 1 root root 20 Nov 10 16:46 test1-2 -> data-directory-test1 [root@node02 test]# ll data-directory-test1/ total 0
ln -snf [新源文件/目录] [目标软链接]
[root@node02 test]# ll total 8 drwxr-xr-x 2 root root 4096 Nov 10 16:48 data-directory-test1 drwxr-xr-x 2 root root 4096 Nov 10 16:51 data-directory-test2 lrwxrwxrwx 1 root root 20 Nov 10 16:51 test-link -> data-directory-test1 [root@node02 test]# ln -snf data-directory-test2 test-link [root@node02 test]# ll total 8 drwxr-xr-x 2 root root 4096 Nov 10 16:52 data-directory-test1 drwxr-xr-x 2 root root 4096 Nov 10 16:52 data-directory-test2 lrwxrwxrwx 1 root root 20 Nov 10 16:52 test-link -> data-directory-test2