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. 软链接如果删除源文件,所有软链接文件失效,硬链接如果删除源文件,其他硬链接文件均可以使用
    
    
  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13269786.html
Copyright © 2011-2022 走看看