ln
是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
ln
可以创建两种不同类型的链接:
符号链接(或符号链接)以路径的形式存在。类似于Windows操作系统中的快捷方式。软链接可以跨文件系统 ,硬链接不可以。软链接可以对一个不存在的文件名进行链接。.软链接可以对目录进行链接。
硬链接以文件副本的形式存在。但不占用实际空间,不允许给目录创建硬链接,硬链接只有在同一个文件系统中才能创建。
ln
的用法跟cp
和mv
相似:
ln -s <from> <to>
注意
-s
标志指定软链接。如果省略此标志,则默认情况下会创建硬链接。
您可以为文件和目录创建符号链接。例如,要创建从目录/var/www/html
到主目录的链接:
ln -s /var/www/html/example.com ~/example.com
如果未指定第二个参数,ln
则会链接到当前目录。以下命令与上一个命令的结果相同:
ln -s /var/www/html/example.com
该链接将出现在ls
等命令的输出中,在大多数情况下,可以将其视为原始目录。使用cp test.txt ~/example.com/
进行文件的复制或者移动连接最终都会反应在/var/www/html/
。但是,符号链接的权限是从它们的源继承的,所以如果不使用sudo
,您就不能在这个目录中写入或删除文件。
符号链接可以与其链接的文件或目录有不同的名称
ln -s /srv/file.txt /usr/bin/different-file.txt
如果您的网站的公共文件位于/srv/www/example.com/public_html/
目录中,但您希望许多用户能够在/home/
目录中访问此目录,则可以在/home/
目录中创建指向的多个符号链接至/srv/www/example.com/public_html/
。
如果您希望将Web
服务器配置文件保留在版本控制中,以便可以在项目和服务器之间轻松更新和共享它们,则可以将文件保存在主目录中的Git
存储库中,并为NGINX
或Apache配置创建符号链接目录:
mkdir ~/nginx-configs
sudo mv /etc/nginx/conf.d/* ~/nginx-configs
cd ~/nginx-configs && git init && git add --all && git commit
sudo ln -s /home/username/nginx-configs/ /etc/nginx/conf.d/
sudo systemctl restart nginx
符号链接可以在任何时候移动、重命名和删除。当使用指定的相对路径创建链接并随后移动该链接时,也希望移动该链接的目标。如果没有,链接将指向一个不存在的对象。如果一个符号链接被复制或转移到另一个系统,或者链接对象被移动,目标被恶意内容取代,这可能导致潜在的安全缺陷。
$ ls -l
total 0
-rw-r--r-- 1 username username 0 Aug 27 10:35 foo
$ ln -s foo bar
$ ls -l
total 0
lrwxrwxrwx 1 username username 3 Aug 27 10:35 bar -> foo
-rw-r--r-- 1 username username 0 Aug 27 10:35 foo
bar
对象上的第一列元数据是l
,表示bar
是一个链接。另外,ls
会打印符号链接的位置。上面的链接是相对的:bar
链接到同一个目录中的对象foo
。
相对符号链接总是保留它们在第一次创建链接时使用的路径。如果将链接移动到与目标文件有不同关系的位置,链接将会中断。例如,使用以下目录结构::
/home/username
├── example.txt
├── foo/
│ └── baz/
└── bar/
将内容添加到示例文件并创建相对符号链接:
echo "Test file" >> example.txt
cd foo
ln -s ../example.txt exampleLink
这将创建一个链接,该链接的目标应该恰好比链接本身高一个目录。如果您将链接移动到另一个共享此关系的目录,例如bar
, exampleLink
仍然会起作用。但是如果您将链接移动到baz
,在目录结构的下面一层,链接仍然会查找../example.txt
,但是会链接将中断:
mv exampleLink ../bar
cat ../bar/exampleLink
Test file
mv ../bar/exampleLink baz/
cat baz/exampleLink
cat: baz/example.txt: No such file or directory
为了避免指定相对符号链接目标的缺陷,您可以创建指向绝对路径的符号链接:
$ ln -s /srv/www/example.com/public_html /home/username/public
$ ls -l /home/username
total 0
lrwxrwxrwx 1 username username 3 Aug 27 11:43 public -> /srv/www/example.com/public_html
$ ls -l /home/username/public
total 48K
-rw-r--r-- 1 username username 355 2010-06-10 14:50 index.htm
-rw-r--r-- 1 username username 38K 2010-06-10 12:37 logo.png
怎样,你学会了嘛?赶快购买服务器尝试下吧! 想要学习更多相关知识,请访问腾讯云云+社区。
参考文献:《Create File System Links with ln 》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。