zoukankan      html  css  js  c++  java
  • inode、软硬链接

    关于inode是什么,可以看这篇文章:http://www.cnblogs.com/adforce/p/3522433.html

    如何查看inode

    ll -di /boot / /app
    查看文件和文件夹的inode号

    df -i
    查看挂载点文件夹的inode号


    做inode增长实验

    创建60万个文件的方法1(效率不高):
    for i in {1..600000}; do touch file$1; echo file$i is created;done
    创建60万个文件的方法2(效率高):
    echo file{1..600000} | touch
    删除前20万个文件:echo file{1..200000} |args rm

    在创建的过程中,可以另开一个窗口,用下面命令,每隔1秒运行df -hi命令,可以查看inode的增长情况:
    watch -n1 df -hi

    tips:文件粉碎工具shredshred -uzvn10 FILE重复随机写入10次覆盖源文件,然后最后删除此文件。


    硬链接、软链接

    软链接就相当于Windows的快捷方式,删掉源文件,快捷方式和就失效了,软链接就找不到源文件了。

    硬链接相当于多个链接指向同一份数据存储区域,每多一个硬链接,硬链接数+1,如果一个文件,有n个硬链接,删除n-1个硬链接,源文件还在,直到删除所有硬链接,才会删除源文件。

    1. 复制(cp

    复制过程中,复制软连接相当于复制了快捷方式,速度很快,而且可以跨分区。

    复制过程中,复制硬链接分为两种情形:

    • 同一分区复制,相当于多创建一个链接指向原数据存储位置,速度很快。
    • 不同分区复制,相当于把原来分区的数据拷贝过去存储,同时创建一个指向新数据区域的指针,速度比较慢。

    2. 删除(rm
    删除过程中,删除软连接相当于删除了快捷方式,源文件还在。
    删除过程中,删除硬连接相当于删除了一个到数据块的指针,,除非删除所有硬链接文件,源文件才删除。

    3. 移动(mv
    移动过程中,移动软连接相当于移动了快捷方式而已。
    移动过程中,移动硬连接分为两种情形:

    • 同一分区移动,相当于创建了一个新inode,指向数据块,并把原来的inode删掉
    • 不同分区移动,要把数据块复制到新分区,然后在新分区创建新的inode号指向新的数据块,并且把原来分区的inode号和数据块都删掉。

    4. 软连接支持对目录创建,硬链接不支持

    ln dir1 dir2不成功

    ln /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/ens33成功

    tips1:当我们看到一个磁盘,使用空间没满,但是却提示”no space left on device”,那可能是inode用完了。

    tips2:如何删除数量很多的文件(比如前面做实验创建的60万个文件。):
    技巧是使用管道|xargs,管道|后面会讲,管道是指的是前面命令的输出作为后面命令的输入。xargs,前面命令多个输出,可以用xargs一个个的传给后面的命令,而不是已下载全传给后面命令,可以解决参数太长的情况。

    ls | xargs rm

    5. 如何写软连接相对路径

    软连接写相对路径,要根据软连接文件的路径来写。

    例如要在把/etc/issue 软连接到/app/d1/d2/d3/ilink

    1
    ln -s ../../../../../etc/issue /app/d1/d1/d3/ilink

    6. 如何软链接设备文件

    设备文件比较特殊,如果要创建设备文件的链接,需要用到mknod命令:

    1
    2
    3
    4
    5
    [root@centos7 etc]# ll /dev/sda
    brw-rw----. 1 root disk 8, 0 May 22 09:06 /dev/sda #得到主设备号和复设备号。
    mknod /app/sda b 8 0
     
    ll -i /dev/sda /app/sda

    软链接练习:

    1. 创建一个目录tomcat-8.5.23,创建一个软连接tomcat到这个目录;在创建一个目录tomcat-9.0.1, 把tomcat的软连接指向新的tomcat-9.0.1目录。
    1
    2
    3
    ln -sv tomcat-8.5.23 tomcat
    rm -rf tomcat
    ln -sv tomcat-9.0.1 tomcat
    1. 创建一个目录/mnt/lfs/tools, 然后创建/mnt/lfs/tools的软连接/tools,一般有这样的命令:ln -sv /mnt/lfs/tools /tools,如何可以更短?
    1
    2
    mkdir -v /mnt/lfs/tools
    ln -sv /mnt/lfs/tools /

    file命令

    常用选项:

    -b 列出文件辨识结果时,不显示文件名称

    -f 列出文件中文件名的文件类型

    -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符

    -L 查看对应软链接对应文件的文件类型

    --help 显示命令在线帮助

    file /etc/system-relase

    file命令就是查看的文件头部的信息,可以用hexdump查看源文件源码信息 (也可以用xxd命令看)。

    如果是二进制文件,会显示二进制的头信息。

    如果是文本文件,就直接是文本。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@centos7 ~]# hexdump -C -n 100 /bin/ls
    00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
    00000010 02 00 3e 00 01 00 00 00 48 4b 40 00 00 00 00 00 |..>.....HK@.....|
    00000020 40 00 00 00 00 00 00 00 18 c4 01 00 00 00 00 00 |@...............|
    00000030 00 00 00 00 40 00 38 00 09 00 40 00 1e 00 1d 00 |....@.8...@.....|
    00000040 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
    00000050 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 |@.@.....@.@.....|
    00000060 f8 01 00 00 |....|
    00000064
     
    [root@centos7 ~]# hexdump -C -n 100 /etc/issue
    00000000 5c 53 0a 4b 65 72 6e 65 6c 20 5c 72 20 6f 6e 20 |S.Kernel on |
    00000010 61 6e 20 5c 6d 0a |an m.|
    00000016

    readlink命令

    读取软连接指向的真实路径

    1
    2
    [root❄centos7 ~]☭ readlink /etc/redhat-release
    centos-release
  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/momenglin/p/8530671.html
Copyright © 2011-2022 走看看