zoukankan      html  css  js  c++  java
  • linux文件管理

    系统目录结构

    存放命令相关的目录

    • /bin, 普通用户使用的命令 /bin/ls, /bin/date
    • /sbin,管理员使用的命令 /sbin/service,poweroff,useradd…

    只要看到bin路径,就应该意识到放的是可执行文件

    存放用户相关数据的家目录

    • /home,普通用户的家目录, 默认为/home/username

    • /root,超级管理员root的家目录, 普通用户无权操作

    系统文件目录

    • /usr,相当于C:Windows
    • /usr/local,软件安装的目录,相当于C:Program
    • /usr/bin/,普通用户使用的应用程序(重要)
    • /usr/sbin,管理员使用的应用程序(重要)
    • /usr/lib,库文件Glibc 32bit
    • /usr/lib64,库文件Glibc 64bit
    df -h # df -h查看系统中文件的使用情况
    Size 分割区总容量
    Used 已使用的大小
    Avail 剩下的大小
    Use% 使用的百分比
    Mounted on 路径地址
    
    
    du -sh * 查看当前目录下各个文件及目录占用空间大小
    du -sh /usr/
    
    #标准是实现自动化的基础
    不通主机的相同的软件,都放在相同路径下,便于管理,实现自动化
    现在一般安装的软件,不放在/usr/local下了
    
    #总共有一千来个命令
    ls /usr/bin/ | wc -l
    ls /usr/sbin/ | wc -l
    
    #查看命令依赖那些库文件
    ldd /bin/ls
    

    启动目录

    /boot 存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)

    ls /boot
    # linux内核
    # 启动机器时可以选择的启动模式
    
    

    配置文件目录

    • /etc,极其重要,后续所有服务的配置都在这个目录中
    • /etc/sysconfig/network-script/ifcfg-,网络配置文件
    • /etc/hostname,系统主机名配置文件,主机名很重要,有些特殊服务要依赖主机名,没有主机名会报错起不来;修改了要重启:reboot
    • /etc/resolv.conf,dns客户端配置文件,域名解析服务器,一般我们不配置,因为网卡的配置好了,会覆盖掉它,网卡的优先级高
    • /etc/hosts,本地域名解析配置文件,域名解析,先找自己的hosts,再去域名解析
    /etc/hosts 对应 windows C:windows/system32/drivers/etc/hosts
    
    yum install httpd -y
    systemctl stop firewalld
    echo "lqz NB" >/var/www/html/index.html
    systemctl start httpd
    

    可变的目录与临时目录

    • /var,存放一些变化文件,比如/var/log/下的日志文件,登陆日志
    • /var/tmp,进程产生的临时文件
    • /tmp,系统临时目录(类似于公共厕所),谁都可以使用
    # 1 查看登陆日志
    cat /var/log/secure #查看登陆时间
    # 2 进程产生的临时文件(360清理垃圾,就是会清理)
    

    设备目录文件

    • /dev,存放设备文件,比如硬盘,硬盘分区,光驱,等等
    • /dev/sd 硬盘设备
    • /dev/null,黑洞设备,只进不出。类似于垃圾回收站
    • /dev/random,生成随机数的设备
    • /dev/zero,能远远不断的产生数据,类似于取款机,随时随地取钱
    # 1 sda sdb sdc sda1 sdb4
    linux中磁盘文件叫sd,第一个硬盘叫a,第二个叫b,sda1表示第一个磁盘的第一个分区,sdb4:第二个硬盘的第四个分区(服务可以插很多硬盘)
    # 2 /dev/null 
    ls >/dev/null
    # 3 /dev/random 生成随机数
    echo $RANDOM
    echo lqz_$RANDOM
    批量创建随机用户,批量设置密码
    # 4 源源不断取数据
    dd if=/dev/zero of=/opt/test.txt bs=1M count=1024
    '''
    dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
    if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
    of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
     bs=bytes:同时设置读入/输出的块大小为bytes个字节。
     count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
    '''
    
    ll /opt/test.txt
    ll -h /opt/test.txt
    

    虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)

    /proc,反映系统当前进程的实时状态 :process

    ls /proc # 可以看到很多id号,pid号,进程号,唯一
    ls 进程id号的文件夹
    如果进程被关闭,id号的文件夹就没了
    id号每次启动都不唯一,只有一个进程唯一,systemd 是进程号1的进程,所有进程都是基于它派生出来的
    
    

    其他

    #1 media:提供设备的挂载点,媒体文件
    # linux 新增了盘符,需要手动挂载
    # 把光盘里的数据,挂载到media目录
    mount  /dev/cdrom /media/
    
    # 2 mnt:提供设备的挂载点(同上)
    
    # 3 opt:第三方工具,第三方软件默认安装的(mysql...)
    
    # run :下有pid,log结尾的文件
    ls /run
    cat sshd.pid  # 进程运行的pid号,放在文件中
    ps aux |grep sshd
    
    # .lock文件的作用,锁机制
    # 假设现在执行
    yum install tree
    # 再开一个窗口执行相同命令
    yum install tree
    '''
    Another app is currently holding the yum lock; waiting for it to exit...
      The other application is: yum
        Memory :  71 M RSS (470 MB VSZ)
        Started: Tue Aug 18 00:26:31 2020 - 00:24 ago
        State  : Sleeping, pid: 6191
    '''
    cat /run/yum.pid
    

    PS: 在Linux7系统中

    /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下

    /bin –> /usr/bin
    /sbin –> /usr/sbin
    lib -> usr/lib
    lib64 -> usr/lib64

    文件路径定位

    目录下的.和..

    一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。
    假设当前目录在/usr/下, 那么它的上层(/)目录用../表示, 而/usr/的下层(local)目录则用./local表示。

    绝对路径和相对路径

    绝对路径: 只要从/开始的路径,比如/home/alice/file
    相对路径: 相对于当前目录来说,比如 a.txt ./a.txt ../bob/a.mp3 [加入: 此时在目录/home/alice]
    小结: 所谓的(.)和(..)目录实际上属于相对路径的一种表示形式。

    #绝对路径
    [root@bgx /]# useradd alice
    [root@bgx /]# touch /home/alice/file1
    [root@bgx /]# touch ~/file2
    [root@bgx /]# touch ~alice/file3
    
    #相对路径
    [root@bgx /]# mkdir abc
    [root@bgx /]# touch ../file3
    [root@bgx /]# touch file4
    [root@bgx /]# touch abc/file5
    

    cd 命令

    # cd 绝对路径 cd /etc/hostname
    # cd 相对路径 cd test/abc cd . cd ..
    
    
    # cd      #切换目录,例: cd /etc
    # cd -    #切换回上一次所在的目录
    # cd ~    #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?
    # cd .    #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./
    # cd ..   #切换回当前目录的上级目录
    

    系统文件管理

    文件创建命令touch

    touch file                    #无则创建,有则修改时间
    touch file2 file3
    touch /home/od/file4 file5
    touch file{a,b,c}             #{}集合,等价 touch a b c
    touch file{1..10}
    touch file{a..z}
    

    目录创建命令mkdir

    # 选项:-v 显示详细信息  -p 递归创建目录
    mkdir dir1
    mkdir /home/od/dir1 /home/od/dir2
    mkdir -v /home/od/{dir3,dir4} 
    mkdir -pv /home/od/dir5/dir6
    mkdir -pv /home/{od/{diu,but},boy}
    
    

    cp复制

    #选项: -v:详细显示命令执行的操作 -r: 递归处理目录与子目录 -p: 保留源文件或目录的属性
    
    cp file /tmp/file_copy
    cp name /tmp/name         #不修改名称
    cp file /tmp/             #不修改名称
    cp name /tmp/name1        #修改名称
    cp -p file /tmp/file_p    #-p保持原文件或目录的属性
    cp -r  /etc/ /tmp/        #复制目录需要使用-r参数, 递归复制
    cp -rv /etc/hosts /etc/hostname /tmp  #拷贝多个文件至一个目录
    cp -rv /etc/{hosts,hosts.bak}
    cp -rv /etc/hosts{,-org}
    

    mv移动

    mv file file1             #原地移动算改名
    mv file1 /tmp/            #移动文件至tmp目录
    mv /tmp/file1 ./          #移动tmp目录的文件至当前目录
    mv dir/ /tmp/             #移动目录至/tmp目录下
    
    touch file{1..3}
    mv file1 file2 file3 /opt/    #移动多个文件或至同一个目录
    
    mkdir dir{1..3}
    mv dir1/ dir2/ dir3/ /opt     #移动多个目录至同一个目录
    

    rm删除

    #选项:-r: 递归 -f: 强制删除 -v: 详细过程
    rm  file.txt      #删除文件, 默认rm存在alias别名,rm -i所以会提醒是否删除文件
    rm -f file.txt    #删除文件, 不提醒
    
    
    rm -r dir/        #递归删除目录,会提示
    rm -rf dir/       #强制删除目录,不提醒(慎用)
    
    
    #1.rm删除示例
    mkdir /home/dir10
    touch /home/dir10/{file2,file3,.file4}
    rm -f /home/dir10/  //不包括隐藏文件 
    ls /home/dir10/ -a
    . .. .file4
    
    
    #2.rm删除示例2
    touch file{1..10}
    touch {1..10}.pdf
    rm -rf file 
    rm -rf .pdf
    

    以树状显示目录结构命令tree

    # 选项: -L: 显示目录树的层级
    # tree /home/od/    #显示当前目录下的结构
    /home/od/
    ├── but
    ├── dir1
    ├── dir2
    ├── dir3
    ├── dir4
    ├── dir5
    │   └── dir6
    └── diu
    

    查看文件内容

    1.cat
    # cp /etc/passwd ./pass
    # cat pass      #正常查看文件方式
    # cat -n pass   #-n显示文件有多少行
    # cat -A pass   #查看文件的特殊符号,比如文件中存在tab键
    # tac pass      #倒序查看文件
    cat >> test2.txt <<EOF
    ads
    adf
    EOF
    
    2.less、more
    # less /etc/services    #使用光标上下翻动,空格进行翻页,q退出
    # more /etc/services    #使用回车上下翻动,空格进行翻页,q退出(有百分比)
    
    #------head
    # head pass     #查看头部内容,默认前十行
    # head -n5 pass #查看头部5行,使用-n指定
    # ps aux | head -5 # 只看头部5个进程
    
    3.tail
    # tail pass  # 查看文件尾部,默认10行
    # tail -20 /var/log/secure  # 查看文件尾部20行
    # tail -f /var/log/messages #-f动态查看文件尾部的变化
    # tailf /var/log/messages   #查看文件尾部的变化
    # ps aux | tail -2
    
    4.grep过滤文件内容
    # grep "^root" pass     #匹配以root开头的行
    # grep "bash$" pass     #匹配以bash结尾的行
    # grep -i "ftp" pass    #忽略大小写匹配
    # grep  -Ei "sync$|ftp" pass    #匹配文件中包含sync结尾或ftp字符串
    # grep -n -A 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的下2行
    # grep -n -B 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上2行
    # grep -n -C 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行
    
    # 上翻,下翻
    control+b:下翻
    control+f:上翻
    

    wget、curl

    yum install wget -y
    #选项: -O: 指定下载地址
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # crul:浏览网络上资源,-o保存到本地
    #选项: -o: 指定下载地址
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    

    rz、sz上传下载文件

    yum install lrzsz -y  #不安装软件则无法执行该命令
    
    # rz            #只能上传文件文件上传(不能大于4g)
    # sz /path/file #只能下载文件
    

    文件或命令查找(locate、which、whereis、find)

    文件查找

    # locate /etc/sh       #搜索etc目录下所有以sh开头的文件
    # locate -i /etc/sh    #搜索etc目录下,所有以sh开头的文件,忽略大小写
    

    find

    Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
    find path -option [ -print ] [ -exec -ok command ] {} ;

    参数说明
    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

    -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    -amin n : 在过去 n 分钟内被读取过
    -anewer file : 比文件 file 更晚被读取过的文件
    -atime n : 在过去n天内被读取过的文件
    -cmin n : 在过去 n 分钟内被修改过
    -cnewer file :比文件 file 更新的文件
    -ctime n : 在过去n天内被修改过的文件
    -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
    -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

    -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
    -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

    -type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket

    -print 将查找到的文件输出到标准输出
    -exec command {} ; —–将查到的文件执行command操作,{} 和 ;之间有空格

    -pid n : process id 是 n 的文件
    你可以使用 ( ) 将运算式分隔,并使用下列运算。
    exp1 -and exp2
    ! expr
    -not expr
    exp1 -or exp2
    exp1, exp2

    # find . -name "*.c" #将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
    # find . -type f #将目前目录其其下子目录中所有一般文件列出
    # find . -ctime -20 #将目前目录及其子目录下所有最近 20 天内更新过的文件列出
    # find /var/log -type f -mtime +7 -ok rm {} ; #查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
    # find . -type f -perm 644 -exec ls -l {} ; #查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
    # find / -type f -size 0 -exec ls -l {} ; #为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
    

    命令查找

    # which ls  #查找ls命令的绝对路径
    
    # whereis ls       //查找命令的路径、帮助手册、等
    # whereis -b ls    //仅显示命令所在的路径,仅看二进制
    
    # 对于内核相关的一些命令,用which whereis 是无法查询到的,需要使用type采查询
    # type -a ls        #查看命令的绝对路径(包括别名)
    # type -a for
    

    字符处理命令(sort、uniq、cut、sed、awk、wc、)

    sort排序

    sort [OPTION]... [FILE]...
    # -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1  3.1,3.3)
    
    #1.首先创建一个文件,写入一写无序的内容
    [root@lqz ~]# cat >> file.txt <<EOF
    b:3
    c:2
    a:4
    e:5
    d:1
    f:11
    EOF
    
    #2.使用sort下面对输出的内容进行排序
    [root@lqz ~]# sort file.txt
    a:4
    b:3
    c:2
    d:1
    e:5
    f:11
    
    #结果并不是按照数字排序,而是按字母排序。
    #可以使用-t指定分隔符, 使用-k指定需要排序的列。
    # -t 指定分隔符,-k指定列,按第二列排序
    [root@lqz ~]# sort -t ":" -k2 file.txt
    d:1
    f:11 #第二行为什么是11?不应该按照顺序排列?
    c:2
    b:3
    a:4
    e:5
    
    #按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。 
    #如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。
    [root@lqz ~]# sort -t ":" -n -k2 file.txt
    d:1
    c:2
    b:3
    a:4
    e:5
    f:11
    
    
    #测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序
    [root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt
    

    uniq去重

    如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用,相邻的才能去重,所以要配合sort)。

    uniq [OPTION]... [INPUT [OUTPUT]]
    #选项:-c  计算重复的行
    
    #1.创建一个file.txt文件:
    [root@lqz ~]# cat >>file2.txt <<EOF
    abc
    123
    abc
    123
    EOF
    
    #2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
    [root@lqz ~]# cat file.txt |sort
    123
    123
    abc
    abc
    
    #3.使用uniq去除相邻重复的行
    [root@lqz ~]# cat file.txt |sort|uniq
    123
    abc
    
    #4.-c参数能统计出文件中每行内容重复的次数
    [root@lqz ~]# cat file.txt |sort|uniq -c
          2 123
          2 abc
    

    cut截取字段

    cut OPTION... [FILE]...
    #选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算)
    #echo "Im lqz, is QQ 306334678" >file.txt   
    #过滤出文件里 lqz以及306334678
    
    #实现上述题目几种思路
    # cut -d " " -f2,5 file.txt
    # cut -d " " -f2,5 file.txt |sed 's#,##g'
    # sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
    # awk  '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
    # awk -F  "[, ]" '{print $2,$6}' file.txt
    # awk -F '[, ]+' '{print $2,$5}' file.txt
    
    # awk 取列
    awk '{print $2,$5}' file.txt
    # -F 指定分隔符
    awk '{print $2,$5}' file.txt | awk -F "," '{print $1,$2}'
    
    # sed 替换 sed 's###g'
    # sed 's###g' 固定写法
    # sed 's#,##g'  把逗号替换成空
    cut -d " " -f2,5 file.txt | sed 's#,##g'
    

    wc统计行号

    wc [OPTION]... [FILE]...
    #选项:-l显示文件行数 -c显示文件字节 -w显示文件单词
    
    # wc -l /etc/fstab      #统计/etc/fstab文件有多少行
    # wc -l /etc/services   #统计/etc/services 文件行号
    # ls |wc -l             #统计当前路径下有多少文件和文件夹
    
    #扩展方法
    # grep -n "." /etc/services  | tail -1
    # awk '{print NR $0}' /etc/services | tail -1
    # cat -n /etc/services  | tail -1
    

    习题: 分析如下日志,统计每个域名被访问的次数。

    [root@student tmp]# cat web.log 
    http://www.lqz.com/index.html
    http://www.lqz.com/1.html
    http://post.lqz.com/index.html
    http://mp3.lqz.com/index.html
    http://www.lqz.com/3.html
    http://post.lqz.com/2.html
    
    # awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
    # cut -d / -f3 web.log|sort -rn|uniq –c
    
    

    系统文件属性

    [root@lqz ~]# ls -l ks.cfg
    [root@lqz ~]# ll -h ks.cfg
    -rw-------. 1 root root 4434 May 30 13:58 ks.cfg
    
    #
    -rw-------. ①:第一个字符是文件类型,其他则是权限
    1           ②:硬链接次数
    root        ③:文件属于哪个用户
    root        ④:文件属于哪个组
    4434        ⑤:文件大小
    May30 13:58 ⑥⑦⑧:最新修改的时间与日期
    ks.cfg      ⑨:文件或目录名称
    

    系统文件类型

    [root@lqz ~]# ll -d /etc/hosts /tmp /bin/ls  /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
    -rwxr-xr-x.  1 root root 117656 Jun 30  2016 /bin/ls
    srw-rw-rw-.  1 root root      0 Jan 20 10:35 /dev/log
    brw-rw----.  1 root disk   8, 0 Jan 20 10:36 /dev/sda
    crw--w----.  1 root tty    4, 1 Jan 20 10:36 /dev/tty1
    lrwxrwxrwx.  1 root root     22 Jan 13 11:31 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
    -rw-r--r--.  1 root root    199 Jan 20 11:03 /etc/hosts
    prw-------.  1 root root      0 Jan 20 10:36 /run/dmeventd-client
    drwxrwxrwt. 61 root root   8192 Jan 21 13:01 /tmp
    
    #说明
    -   #普通文件(文本, 二进制, 压缩, 图片, 日志等) 
    d   #目录文件
    b   #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
    c   #设备文件(字符设备),终端 /dev/tty1, /dev/zero
    s   #套接字文件, 进程间通信(socket)
    p   #管道文件
    l   #链接文件
    
    [root@lqz ~]# file /etc/hosts
    /etc/hosts: ASCII text
    
    [root@lqz ~]# file /bin/ls
    /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped
    
    [root@lqz ~]# file /dev/sda
    /dev/sda: block special
    
    [root@lqz ~]# file /dev/tty1
    /dev/tty1: character special
    
    [root@lqz ~]# file /etc/grub2.cfg
    /etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'
    
    [root@lqz ~]# file /home
    /home: directory
    
    [root@lqz ~]# file /run/dmeventd-client
    /run/dmeventd-client: fifo (named pipe)
    
    [root@lqz ~]# ll but
    -rw-r--r-- 1 root root 42125 Apr  1 12:26 but
    [root@lqz ~]# file but
    but: Zip archive data, at least v1.0 to extract
    

    PS: Linux文件扩展名不代表任何含义,仅为了我们能更好的识别该文件是什么类型。

    系统链接文件

    文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。
    用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方,我们将其称为Block
    元数据,即文件的附加属性,如文件大小、创建时间、所有者等信息。我们称其为Inode
    在Linux中,inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)
    文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1.展示了程序通过文件名获取文件内容的过程。

    Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)

    ll -i 查看inode

    软链接

    软链接相当于Windows的快捷方式,软链接文件会将inode指向源文件的block,当我们访问这个软链接文件时,其实访问的是源文件本身。那么当我们对一个文件创建多个软链接,其实就是多个inode指向同一个block。当我们删除软链接文件时,其实只是删除了一个inode指向,并不会对源文件源文件造成影响,但如果删除的是源文件则会造成所有软链接文件失效。

    #文件软链接示例
    touch /root/file
    ln -s /root/file /tmp/file_bak
    ll /tmp/file_bak  //root下file链接到/tmp下并重命名为file_bak
      
    
    #目录软链接示例
    mkdir /soft/nginx1.1 -p
    ln -s /soft/nginx1.1/ /soft/nginx
    ll /soft/nginx   //查看链接指向
    
    #软链接使用场景
    1.软件升级
    2.企业代码发布 
    3.不方便目录移动
    

    硬链接

    若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,如下图hard link 就是 file 的一个别名,他们有共同的 inode。

    #文件硬链接示例
    ln  /root/file /tmp/file_hard
    ll /tmp/file_hard
    
    #PS:目录不能创建硬链接,硬链接文件可以用rm命令删除
    
    

    硬链接与软链接区别

    1)ln命令创建硬链接,ln -s命令创建软链接。
    2)目录不能创建硬链接,并且硬链接不可以跨越分区系统。
    3)目录软链接特别常用,并且软链接支持跨越分区系统。
    4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。
    5)删除软链接文件,对源文件及硬链接文件无任何影响。
    6)删除文件的硬链接文件,对源文件及链接文件无任何影响。
    7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效。
    8)删除源文件及其硬链接文件,整个文件会被真正的删除。

  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/chenwenyin/p/13535211.html
Copyright © 2011-2022 走看看