zoukankan      html  css  js  c++  java
  • Linux文件系统——链接文件

    链接文件是Linux文件系统的一个特性。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接: 

    • 符号链接(软链接)
    • 硬链接

    符号链接

    符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。使用 ln -s 命令创建符号链接时,源文件必须存在,链接文件必须不存在。

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

    [root@localhost ~]# mkdir test
    [root@localhost ~]# cd test
    
    [root@localhost test]# touch test.txt 
    [root@localhost test]# ln -s test.txt test
    [root@localhost test]# ll
    total 4
    lrwxrwxrwx 1 root root    8 Aug 24 16:34 test -> test.txt
    -rw------- 1 root root 1672 Aug 24 16:33 test.txt

    上面的例子中,源文件test.txt是第一个参数,符号链接(目标文件)test是第二个参数,命令执行结果是创建一个由目标文件指向源文件的链接。

    注意:符号链接的文件大小与源文件的大小是不同的,符号链接test是8个字节,而test.txt是1672个字节,因为是一个链接指向,实际内容是不相同的,是两个完全不同的文件。证明链接文件与源文件是否相同,可以通过查看文件的inode(索引节点编号)号,如

    [root@localhost test]# ls -i test*
    34306370 test  34306369 test.txt

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

    当源文件使用相对路径,而符号链接使用绝对路径时,创建的符号链接文件是有问题的,但是执行结果($?)是0

    [root@localhost test]# ln -s test.txt /root/a
    
    [root@localhost test]# ll /root/a
    lrwxrwxrwx 1 root root 8 Aug 24 16:44 /root/a -> test.txt

    当源文件使用绝对路径,而符号链接使用相对路径时,是没有问题的

    [root@localhost test]# ln -s /root/test/test.txt b
    
    [root@localhost test]# ll 
    total 4
    lrwxrwxrwx 1 root root   19 Aug 24 16:48 b -> /root/test/test.txt
    lrwxrwxrwx 1 root root    8 Aug 24 16:34 test -> test.txt
    -rw------- 1 root root 1672 Aug 24 16:33 test.txt
    
    [root@localhost test]# ll /root/test/b 
    lrwxrwxrwx 1 root root 19 Aug 24 16:48 /root/test/b -> /root/test/test.txt

    所以,源文件使用相对路径时,链接文件必须使用相对路径;当源文件使用绝对路径的时候,链接文件可以是相对路径,也可以是绝对路径

    删除软连接时,不影响源文件,删除源文件后,软连接失效

    不要对软链接文件创建软链接,会形成易断裂的链接链

    硬链接

    硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在

    [root@localhost test]# ll
    total 4
    -rw------- 1 root root 1672 Aug 24 16:33 test.txt
    
    [root@localhost test]# ln test.txt test
    
    [root@localhost test]# ll -i test*
    34306369 -rw------- 2 root root 1672 Aug 24 16:33 test
    34306369 -rw------- 2 root root 1672 Aug 24 16:33 test.txt

    硬链接文件是共享inode编号的,因为硬链接文件是同一个文件,文件大小也一样。上面的例子中,显示这两个文件有两个链接,因为文件本身也是自己的硬链接。

    注意:不能对目录创建硬链接,因为会形成网状的链接关系。另外,不能对不同文件系统的文件创建硬链接。也就是说,只有同一文件系统中,inode号相同的文件互为硬链接

    [root@localhost test]# mkdir a 
    
    [root@localhost test]# ln a h_a
    ln: ‘a’: hard link not allowed for directory

    删除硬链接文件对源文件无影响,删除源文件也不影响链接文件

    [root@localhost test]# ll
    total 4
    -rw------- 1 root root 1672 Aug 24 16:33 test

    链接文件的复制

    如果使用cp命令复制一个文件,而该文件又已经被链接到了另一个源文件上,那么你得到的其实是源文件的一个副本。

    [root@localhost test]# ll
    total 4
    -rw------- 1 root root 1672 Aug 24 16:33 test
    
    [root@localhost test]# ln -s test s_test
    
    [root@localhost test]# ll
    total 4
    lrwxrwxrwx 1 root root    4 Aug 24 17:19 s_test -> test
    -rw------- 1 root root 1672 Aug 24 16:33 test
    
    [root@localhost test]# cp s_test s_test1
    
    [root@localhost test]# ll
    total 8
    lrwxrwxrwx 1 root root    4 Aug 24 17:19 s_test -> test
    -rw------- 1 root root 1672 Aug 24 17:19 s_test1              ## 此文件为源文件的副本
    -rw------- 1 root root 1672 Aug 24 16:33 test

    所以,当需要使用新的链接文件,一般都是重新创建

    [root@localhost test]# ln -s test s1_test
    
    [root@localhost test]# ll -i
    total 8
    34306372 lrwxrwxrwx 1 root root    4 Aug 24 17:28 s1_test -> test
    34306370 lrwxrwxrwx 1 root root    4 Aug 24 17:19 s_test -> test
    34306371 -rw------- 1 root root 1672 Aug 24 17:19 s_test1
    34306369 -rw------- 1 root root 1672 Aug 24 16:33 test

    软链接文件用于升级应用

    当应用升级后,目录名发生变化,可以将软链接文件指向新的目录

    [root@localhost opt]# tar xzf jdk-8u191-linux-x64.tar.gz 
    
    [root@localhost opt]# ll
    total 329372
    drwxr-xr-x 7    10   143       245 Oct  6  2018 jdk1.8.0_191
    -rw-r--r-- 1 root  root  191753373 Dec 16  2018 jdk-8u191-linux-x64.tar.gz
    
    [root@localhost opt]# ln -sv jdk1.8.0_191/ jdk
    ‘jdk’ -> ‘jdk1.8.0_191/’
    
    [root@localhost opt]# ll
    total 329372
    lrwxrwxrwx 1 root  root         13 Aug 24 17:32 jdk -> jdk1.8.0_191/
    drwxr-xr-x 7    10   143       245 Oct  6  2018 jdk1.8.0_191
    -rw-r--r-- 1 root  root  191753373 Dec 16  2018 jdk-8u191-linux-x64.tar.gz
    
    [root@localhost opt]# jdk/bin/java -version
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

    应用升级

    [root@localhost opt]# ll
    total 329372
    drwxr-xr-x 9 root  root        220 Aug 24 10:52 apache-tomcat-9.0.52
    lrwxrwxrwx 1 root  root         13 Aug 24 17:32 jdk -> jdk1.8.0_191/
    drwxr-xr-x 7    10   143       265 Aug 24 17:33 jdk1.8.0_191
    drwxr-xr-x 8 10143 10143       273 Jun  9 09:58 jdk1.8.0_301
    -rw-r--r-- 1 root  root  191753373 Dec 16  2018 jdk-8u191-linux-x64.tar.gz
    -rw-r--r-- 1 root  root  145520298 Aug 25  2021 jdk-8u301-linux-x64.tar.gz
    
    
    [root@localhost opt]# rm -f jdk
    
    [root@localhost opt]# ln -sv jdk1.8.0_301/ jdk
    ‘jdk’ -> ‘jdk1.8.0_301/’
    
    [root@localhost opt]# jdk/bin/java -version
    java version "1.8.0_301"
    Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

    软链接文件扩容磁盘

    当前有一个目录/home/weblogic没有空间了,新增加了一块盘,需要通过软链接的方式扩容

    1、创建一个新目录,将新增磁盘挂载到此目录

    # mkdir /home/app
    
    # mount /dev/sdb1 /home/app/

    2、将weblogic目录移动到这个app目录

    # mv /home/weblogic /home/app/

    3、做软链接,实现扩容

    # ln -s /home/app/weblogic /home

    这样,在home下就有一个weblogic的链接文件指向/home/app/weblogic,相当于扩容了

  • 相关阅读:
    Oracle exp/imp导出导入工具的使用
    导入导出数据语句小结
    改变一生的五句话
    给年轻工程师的十大忠告
    项目经理三步曲(项目经理成长版)
    写作、写程序的快乐和痛苦
    《Excel与VBA程序设计(mini版)》
    《3S新闻周刊》第三期发布: 解密Google Earth
    《Excel与VBA程序设计》进度(2006.3.8)
    Arc2Earth正式发布
  • 原文地址:https://www.cnblogs.com/zh-dream/p/15195975.html
Copyright © 2011-2022 走看看