zoukankan      html  css  js  c++  java
  • Linux ll查看文件属性详解-软硬链接详解



    Linux文件属性及类型


    [root@localhost ~]# ll anaconda-ks.cfg
    
    文件类型    权限      硬连接数         文件的大小         文件的创建,修改时间
    -         rw-------.  1    root root   1379          3月  12 17:43 anaconda-ks.cfg
    
    [root@localhost ~]# ll -d zls
    文件类型  权限       硬连接数  所属用户  所属用户组 文件的大小    文件的创建修改时间     
    d        rwxr-xr-x.   2     root     root     6            3月  12 18:00 
     
    文件名
    zls
    
    -:普通文件
    d:目录文件
    
    rw- --- --- :权限
    rwx r-x r-x :权限
    
    r:读 read
    w:写 write
    x:执行权限  execute
    
    

    Linux系统文件的类型


    ll 查看
    file	# 查看文件类型
    
    -		普通文件
    d 		directory 目录文件
    c		char 字符设备文件
    b		block 块设备文件(用来存储数据的设备)
    s		socket,安全套接字文件
    l		link 软链接文件(快捷方式)
    p		pipe 管道文件
    
    注意:通过颜色或者后缀判断文件类型不一定准确.
    

    系统链接文件

    一个文件分为两部分:

    • 真实数据 block
    • 元数据 inode

    • block:真实数据占用的空间,默认一个block 4k,使用下面命令查看

      df -h
      
    • inode:元数据占用的空间,形容文件属性。

      df -i		# 查看inode使用情况
      ls -i		# 查看文件inode
      

    模拟inode占满场景


    [root@oldboy dev]# dd if=/dev/zero of=/opt/disk bs=1K count=1024
    1024+0 records in
    1024+0 records out
    1048576 bytes (1.0 MB) copied, 0.00210524 s, 498 MB/s
    [root@oldboy dev]# ll /opt/disk 
    -rw-r--r-- 1 root root 1048576 Mar 25 22:22 /opt/disk
    [root@oldboy dev]# mkfs.ext4 -i 1024 /opt/disk 
    
    mke2fs 1.42.9 (28-Dec-2013)
    /opt/disk is not a block special device.
    Proceed anyway? (y,n) [root@oldboy dev]# mkfs.ext4 -i 1024 /opt/disk
    mke2fs 1.42.9 (28-Dec-2013)
    /opt/disk is not a block special device.
    Proceed anyway? (y,n) y
    
    Filesystem too small for a journal
    Discarding device blocks: done                            
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    1024 inodes, 1024 blocks
    51 blocks (4.98%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=1048576
    1 block group
    8192 blocks per group, 8192 fragments per group
    1024 inodes per group
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Writing superblocks and filesystem accounting information: done
    
    [root@oldboy dev]# mkdir /data1
    [root@oldboy dev]# mount -t ext4 -o loop /opt/disk /data1
    [root@oldboy dev]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        28G  1.5G   27G   6% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.6M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sr0        4.3G  4.3G     0 100% /mnt
    /dev/loop0      891K   21K  799K   3% /data1
    [root@oldboy dev]# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      14423552 31519 14392033    1% /
    devtmpfs         121779   379   121400    1% /dev
    tmpfs            124487     1   124486    1% /dev/shm
    tmpfs            124487   704   123783    1% /run
    tmpfs            124487    16   124471    1% /sys/fs/cgroup
    /dev/sda1        256000   326   255674    1% /boot
    tmpfs            124487     1   124486    1% /run/user/0
    /dev/sr0              0     0        0     - /mnt
    /dev/loop0         1024    11     1013    2% /data1
    [root@oldboy dev]# cd /data1/
    
    # 尝试创建1024个文件到1014的时候就创建不了了。
    
    [root@oldboy data1]# touch file{1..1024}
    touch: cannot touch ‘file1014’: No space left on device
    touch: cannot touch ‘file1015’: No space left on device
    touch: cannot touch ‘file1016’: No space left on device
    touch: cannot touch ‘file1017’: No space left on device
    touch: cannot touch ‘file1018’: No space left on device
    touch: cannot touch ‘file1019’: No space left on device
    touch: cannot touch ‘file1020’: No space left on device
    touch: cannot touch ‘file1021’: No space left on device
    touch: cannot touch ‘file1022’: No space left on device
    touch: cannot touch ‘file1023’: No space left on device
    touch: cannot touch ‘file1024’: No space left on device
    
    # 磁盘空间未满
    [root@oldboy data1]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        28G  1.5G   27G   6% /
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.6M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda1       497M  120M  378M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sr0        4.3G  4.3G     0 100% /mnt
    /dev/loop0      891K   46K  774K   6% /data1
    
    # inode已经是%100
    [root@oldboy data1]# df -i
    Filesystem       Inodes IUsed    IFree IUse% Mounted on
    /dev/sda3      14423552 31519 14392033    1% /
    devtmpfs         121779   379   121400    1% /dev
    tmpfs            124487     1   124486    1% /dev/shm
    tmpfs            124487   704   123783    1% /run
    tmpfs            124487    16   124471    1% /sys/fs/cgroup
    /dev/sda1        256000   326   255674    1% /boot
    tmpfs            124487     1   124486    1% /run/user/0
    /dev/sr0              0     0        0     - /mnt
    /dev/loop0         1024  1024        0  100% /data1
    [root@oldboy data1]# 
    
    

    软链接


    创建方式:

    ln -s 文件或目录 链接名
    

    软链接相当于windows的快捷方式,软链接文件会将inode指向源文件的block

    1.那么当我们对一个文件创建多个软链接时,其实就是多个inode指向同一个block

    [root@oldboy opt]# ln -s /opt/a.txt a1_softl
    [root@oldboy opt]# ln -s /opt/a.txt a2_softl
    [root@oldboy opt]# ln -s /opt/a.txt a3_softl
    [root@oldboy opt]# ll a*_so*
    lrwxrwxrwx 1 root root 10 Mar 25 22:32 a1_softl -> /opt/a.txt
    lrwxrwxrwx 1 root root 10 Mar 25 22:32 a2_softl -> /opt/a.txt
    lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt
    [root@oldboy opt]# ll -i a1_softl a2_softl a3_softl a.txt
    16782001 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a1_softl -> /opt/a.txt
    16782002 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a2_softl -> /opt/a.txt
    16782003 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt
    17174724 -rw-r--r-- 1 root root 13 Mar 23 16:51 a.txt
    [root@oldboy opt]# cat a1_softl 
    aaabbbccc
    [root@oldboy opt]# cat a2_softl 
    aaabbbccc
    [root@oldboy opt]# cat a3_softl 
    aaabbbccc
    [root@oldboy opt]# 
    
    

    2.那么当我们删除软链接文件时,其实只是删除了一个inode的指向,并不会对源文件造成影响。

    [root@oldboy opt]# rm a1_softl 
    rm: remove symbolic link ‘a1_softl’? y
    [root@oldboy opt]# rm a2_softl 
    rm: remove symbolic link ‘a2_softl’? y
    [root@oldboy opt]# cat a.txt 
    aaabbbccc
    [root@oldboy opt]# 
    

    3.如果我们删除的是源文件,那么该文件的所有软链接文件都会失效。

    [root@oldboy opt]# ll
    total 264
    lrwxrwxrwx 1 root root      10 Mar 25 22:32 a3_softl -> /opt/a.txt
    [root@oldboy opt]# rm -rf a.txt 
    [root@oldboy opt]# ll a3*
    lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt # 变红
    
    

    软链接的应用场景


    1)软件升级
    2)代码发布
    3)不方便移动的目录

    4)数据回滚
    5)程序读取

    硬链接


    1)硬连接文件和元数据文件inode号相同并指向统一block

    [root@oldboy opt]# touch a.txt
    [root@oldboy opt]# ln a.txt a_hardl
    [root@oldboy opt]# ll -i
    total 0
    16782001 -rw-r--r-- 2 root root 0 Mar 25 22:47 a_hardl
    16782001 -rw-r--r-- 2 root root 0 Mar 25 22:47 a.txt
    

    2)删除源文件对硬连接没有影响,硬连接有备份的作用

    [root@oldboy opt]# echo 123tt >a_hardl 
    [root@oldboy opt]# ll
    total 8
    -rw-r--r-- 2 root root 6 Mar 25 22:49 a_hardl
    -rw-r--r-- 2 root root 6 Mar 25 22:49 a.txt
    [root@oldboy opt]# cat a_hardl 
    123tt
    [root@oldboy opt]# cat a.txt 
    123tt
    [root@oldboy opt]# echo bbb >> a.txt 
    [root@oldboy opt]# cat a.txt 
    123tt
    bbb
    [root@oldboy opt]# cat a_hardl 
    123tt
    bbb
    [root@oldboy opt]# rm -fr a.txt 
    [root@oldboy opt]# cat a_hardl 
    123tt
    bbb
    
    

    3)目录无法创建硬链接

    [root@oldboy opt]# ln /opt/ /aaa
    ln: ‘/opt/’: hard link not allowed for directory
    

    硬链接和软链接的区别


    # 1. 创建命令不同
    硬链接: ln
    软链接: ln -s
    # 2. 目录无法创建硬链接,可以创建软链接,硬链接不能跨系统的分区,软链接可以
    [root@oldboy ~]# ln /opt/a_hardl /boot/
    ln: failed to create hard link ‘/boot/a_hardl’ => ‘/opt/a_hardl’: Invalid cross-device link
    
    # 3. 硬链接文件与源文件的inode号相同,软链接不同
    # 4. 软链接如果删除源文件,所有软链接文件失效,硬链接如果删除源文件,其他硬链接文件均可以使用
    
    
  • 相关阅读:
    转char varchar nvarchar区别
    NHibernate和Spring.Net框架介绍(一)
    ASP.NET面试题(一)
    存储过程编写经验和优化措施
    软件工程师不可不知的10个概念
    优化数据库前问自己的10个问题
    ZOJ 1610 Count the Colors (线段树)
    POJ 3667 Hotel (线段树)
    HDU Best Reward (扩展KMP)
    POJ 3277 City Horizon (线段树)
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13269786.html
Copyright © 2011-2022 走看看