前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中ln的用法

Linux中ln的用法

原创
作者头像
小皇帝James
发布2018-08-17 10:59:39
3.3K0
发布2018-08-17 10:59:39
举报

ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

ln 可以创建两种不同类型的链接:

符号链接(或符号链接)以路径的形式存在。类似于Windows操作系统中的快捷方式。软链接可以跨文件系统 ,硬链接不可以。软链接可以对一个不存在的文件名进行链接。.软链接可以对目录进行链接。

硬链接以文件副本的形式存在。但不占用实际空间,不允许给目录创建硬链接,硬链接只有在同一个文件系统中才能创建。

推荐您使用免费的腾讯云开发者实验室进行试验,学会后在购买服务器

文件系统链接

基本语法

ln的用法跟cpmv相似:

代码语言:javascript
复制
ln -s <from> <to>

注意 -s标志指定软链接。如果省略此标志,则默认情况下会创建硬链接。

您可以为文件和目录创建符号链接。例如,要创建从目录/var/www/html到主目录的链接:

代码语言:javascript
复制
ln -s /var/www/html/example.com ~/example.com

如果未指定第二个参数,ln则会链接到当前目录。以下命令与上一个命令的结果相同:

代码语言:javascript
复制
ln -s /var/www/html/example.com

该链接将出现在ls等命令的输出中,在大多数情况下,可以将其视为原始目录。使用cp test.txt ~/example.com/ 进行文件的复制或者移动连接最终都会反应在/var/www/html/ 。但是,符号链接的权限是从它们的源继承的,所以如果不使用sudo,您就不能在这个目录中写入或删除文件。

符号链接可以与其链接的文件或目录有不同的名称

代码语言:javascript
复制
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配置创建符号链接目录:

代码语言:javascript
复制
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

安全问题

符号链接可以在任何时候移动、重命名和删除。当使用指定的相对路径创建链接并随后移动该链接时,也希望移动该链接的目标。如果没有,链接将指向一个不存在的对象。如果一个符号链接被复制或转移到另一个系统,或者链接对象被移动,目标被恶意内容取代,这可能导致潜在的安全缺陷。

示例

使用相对路径创建符号链接

代码语言:javascript
复制
$ 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

相对符号链接总是保留它们在第一次创建链接时使用的路径。如果将链接移动到与目标文件有不同关系的位置,链接将会中断。例如,使用以下目录结构::

代码语言:javascript
复制
/home/username
├── example.txt
├── foo/
│ └── baz/
└── bar/

将内容添加到示例文件并创建相对符号链接:

代码语言:javascript
复制
echo "Test file" >> example.txt
cd foo
ln -s ../example.txt exampleLink

这将创建一个链接,该链接的目标应该恰好比链接本身高一个目录。如果您将链接移动到另一个共享此关系的目录,例如bar, exampleLink仍然会起作用。但是如果您将链接移动到baz,在目录结构的下面一层,链接仍然会查找../example.txt,但是会链接将中断:

代码语言:javascript
复制
mv exampleLink ../bar
cat ../bar/exampleLink
代码语言:javascript
复制
Test file
代码语言:javascript
复制
mv ../bar/exampleLink baz/
cat baz/exampleLink
代码语言:javascript
复制
cat: baz/example.txt: No such file or directory

使用绝对路径创建符号

为了避免指定相对符号链接目标的缺陷,您可以创建指向绝对路径的符号链接:

代码语言:javascript
复制
$ 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件系统链接
    • 基本语法
      • 符号链接的用例
        • 安全问题
        • 示例
          • 使用相对路径创建符号链接
            • 使用绝对路径创建符号
            • 总结
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档