zoukankan      html  css  js  c++  java
  • linux命令详解——ln

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。
      当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln -s /bin/less /usr/local/bin/less
      -s 是代号(symbolic)的意思。
      这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性(无论软连接还是硬链接),也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又 软链接和硬链接两种,软链接就是ln –s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

      如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls –l命令去察看,就可以看到显示的link的路径了。


    【指令详细说明】
      指令名称 : ln
      使用权限 : 所有使用者
      使用方式 : ln [options] source dist,其中 option 的格式为 :
      [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
      [--help] [--version] [--]
      说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档 案系统中,而软连结却可以跨越不同的档案系统。
      ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
      不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
      -f : 链结时先将与 dist 同档名的档案删除
      -d : 允许系统管理者硬链结自己的目录
      -i : 在删除与 dist 同档名的档案时先进行询问
      -n : 在进行软连结时,将 dist 视为一般的档案
      -s : 进行软链结(symbolic link)
      -v : 在连结之前显示其档名
      -b : 将在链结时会被覆写或删除的档案进行备份
      -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
      -V METHOD : 指定备份的方式
      --help : 显示辅助说明
      --version : 显示版本
      范例 :
      1、将档案 yy 产生一个 symbolic link : zz
      ln -s yy zz
      2、将档案 yy 产生一个 hard link : xx

      ln yy xx

          3、将目录/aaa/下的所有文件软连接到目录/bbb下:

    ln -s /aaa/* /bbb/

    注意:软连接建立时,要指定 source和dist的完整路径,否则创建连接即使成功也是个无效的连接。


    1.对某个文件创建一个连接

    [root@A ~]# ln -s /home/kk/ss.sh ~   #如果不写目标地址,即在当前目录建接立链接

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  anaconda-ks.cfg  install.log  install.log.syslog  ss.sh此命令表示在家目录下创建与源文件同名的链接到/home/kk/ss.sh 符号连接

     

    [root@A ~]# ln -s /home/kk/ss.sh ~/dd

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  anaconda-ks.cfg  dd  install.log  install.log.syslog

    此命令表示在家目录下建立链接到/home/kk/ss.sh 并且名字为dd的符号连接(前提是在家目录下没有abc这个目录)

     

    2.对某个目录创建符号连接

    [root@A home]# ln -s /home/kk /home/abc

    [root@A home]# ls

    abc  apache  kk  oldboy

    [root@A home]# cd abc

    [root@A abc]# ls

    ss.sh

    此命令表示在/home目录下创建一个链接到/home/kk目录的名字为abc的符号连接。

     

    [root@A home]# rm abc

    rm: remove symbolic link `abc'? y    #删除所作目录链接时的提示

    [root@A ~]# ln -s /tmp ~/

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  anaconda-ks.cfg  install.log  install.log.syslog  tmp

    此命令表示在家目录下创建一个与源文件夹同名的符号连接

     

    3.对某个文件创建一个硬连接

    [root@A ~]# ln /home/kk/ss.sh ~/

    [root@A ~]# ls -l

    total 60

    -rw-r--r-- 1 root root  2239 Oct 24 09:30 CentOS-Base.repo.oldboy

    -rw------- 1 root root  1074 Nov 10 12:28 anaconda-ks.cfg

    -rw-r--r-- 1 root root 26403 Nov 10 12:28 install.log

    -rw-r--r-- 1 root root  4378 Nov 10 12:28 install.log.syslog

    -rw-r--r-- 2 root root    82 Dec 26 14:31 ss.sh

    此命令表示在家目录下创建与源文件同名的链接到/home/kk/ss.sh硬链接,而且目标文件的颜色和原来一样,

    ls –l也无法显示链接的路径

     

    [root@A ~]# ln /home/kk/ss.sh ~/abc

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  abc  anaconda-ks.cfg  install.log  install.log.syslog

    此命令表示在家目录下建立链接到/tmp/abc.txt 并且名字为abc的硬链接(前提是在家目录下没有abc这个目录)

     

    abc目录己存在的情况

    [root@A ~]# mkdir abc

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  abc  anaconda-ks.cfg  install.log  install.log.syslog

    [root@A ~]# ln /home/kk/ss.sh ~/abc    #做硬链接    

    [root@A ~]# ls

    CentOS-Base.repo.oldboy  abc  anaconda-ks.cfg  install.log  install.log.syslog

    [root@A ~]# cd abc

    [root@A abc]# ls

    ss.sh

     

    源文件是目录不可以做硬链接

    [root@A ~]# ln /home/kk ~/abc

    ln: `/home/kk': hard link not allowed for directory

    4.参数 -v的用法

    硬链接:

    [root@A home]# ln -v /home/kk/ss.sh /home    #加上参数v后,

    create hard link `/home/ss.sh' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

    [root@A home]# ls

    apache  kk  oldboy  ss.sh

    [root@A home]# ln -vs /home/kk/ss.sh /home  #创建名子相同的软链接

    create symbolic link `/home/ss.sh' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

    ln: creating symbolic link `/home/ss.sh' to `/home/kk/ss.sh': File exists  #同时也出现了己存在提示

    软链接

    [root@A home]# ln -vs /home/kk/ss.sh /home/dd  #加上参数v后的软链接

    create symbolic link `/home/dd' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

    [root@A home]# ls

    apache  dd  kk  oldboy  ss.sh

    青绿色的软链接,跟原来颜色一样的是硬链接

    5.-f的用法

    [root@A home]# ls

    apache  dd  kk  oldboy  ss.sh        #dd 是己存在软链接;ss.sh是己存在硬链接

    [root@A home]# ln -s -f /home/kk/ss.sh /home    #创建/home/kk/ss.sh的软链接

    [root@A home]# ls

    apache  dd  kk  oldboy  ss.sh              #上面加了f参数,ss.sh现在是软链接

     

    [root@A home]# ln /home/kk/ss.sh /home/dd    #创建/home/kk/ss.sh 的硬链接,名子同样是dd

    ln: creating hard link `/home/dd' to `/home/kk/ss.sh': File exists     #提示出现了,己存在

    [root@A home]# ln -f /home/kk/ss.sh /home/dd  #加上f参数后,提示没有了

    [root@A home]# ls

    apache  dd  kk  oldboy  ss.sh             #dd变成链接了,

    -f的主要过程:先将同名的软链接dd删除,然后再创建硬链接dd

    6.-d和-b的用法

    [root@A home]# ln /home/kk /home/dd        #创建硬链接不允许

    ln: `/home/kk': hard link not allowed for directory #不允许对目录创建硬链接

    [root@A home]# ln -F /home/kk /home/dd      #加上-d参数

    ln: creating hard link `/home/dd' to `/home/kk': Operation not permitted    #为什么还是不行呀?

    7.-i的用法

    [root@A home]# ln -s /home/kk/ss.sh   #创建软链接

    [root@A home]# ls                  #查看

    apache  kk  oldboy  ss.sh

    [root@A home]# ln -fi /home/kk/ss.sh   #加上-f参数删除同名的,加上-i参数-在删除之前给出提示

    ln: replace `./ss.sh'?   #提示

     

    [root@A home]# ln -fi /home/kk/ss.sh

    ln: replace `./ss.sh'? n                  #我选择了n

    [root@A home]# ls                    #查看

    apache  kk  oldboy  ss.sh             #还存在

    [root@A home]# ln -fb /home/kk/ss.sh     #加上参数b

    [root@A home]# ls                    #查看

    apache  kk  oldboy  ss.sh  ss.sh~     #之前存在的软链接被更名备份了,然后创建同名的硬链接


  • 相关阅读:
    Jenkins 构建自动化 .NET Core 发布镜像
    浅入Kubernetes(13):dashboard、api、访问配置
    浅入Kubernetes(12):Deployment 的升级、回滚
    浅入Kubernetes(11):了解 Service 和 Endpoint
    浅入Kubernetes(8):外网访问集群
    浅入Kubernetes(10):控制节点的部署,选择器、亲和性、污点
    浅入Kubernetes(9):了解组件
    浅入Kubernetes(7):应用部署实例,Deployment、Service、ReplicaSet
    浅入kubernetes(5):尝试kubeadm
    《MySQL技术内幕-InnoDB存储引擎》整理6-事务
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5571043.html
Copyright © 2011-2022 走看看