• 04.Linux文件管理


    1. 文件管理概述

    Linux文件管理, 无非是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等  
    
    • 1

    2. 系统目录结构

    2.1 目录结构
    几乎所有的计算机操作系统都是使用目录结构组织文件,具体来说就是在一个目录中存放子目录和文件,
    而在子目录中又会进一步存放子目录和文件, 以此类推形成一个树状的文件结构,
    由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”.  
    
    Windows:以多根的方式组织文件 C:D: 
    Linux:以单根的方式组织文件 /
    
    如下图为Centos7的目录结构(> 虚线表示软链接)  
    在Linux7系统中
    
    /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下
    
    /bin > /usr/bin  
    /sbin > /usr/sbin  
    lib -> usr/lib  
    lib64 -> usr/lib64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    img

    2.2 存放命令相关的目录
    /bin,  普通用户使用的命令 /bin/ls, /bin/date ...
    /sbin, 管理员使用的命令 /sbin/service, poweroff, useradd ...
    只要看到bin路径, 就应该意识到放的是可执行文件
    
    • 1
    • 2
    • 3
    2.3 存放用户相关数据的家目录
    不同的用户拥有自己单独的数据.
    
    • 1
    /home, 普通用户的家目录, 默认为/home/username
    /root, 超级管理员root的家目录, 普通用户无权操作  
    
    • 1
    • 2
    2.4 系统文件目录
    /usr, 相当于C:Windows  
    
    • 1
    [root@kid ~]# ls /usr
    bin  games    lib    libexec  sbin   src
    etc  include  lib64  local    share  tmp
    
    • 1
    • 2
    • 3
    /usr/etc, 存放.conf后缀的配置文件(目前空的...)
    
    • 1
    /usr/local, 内置软件安装的目录, 相当于C:Program  (现在一般安装的软件, 不放在/usr/local下了)
    标准实现自动化的基础: 不同主机的相同的软件, 都放在相同路径下, 便于管理, 实现自动化.
    
    • 1
    • 2
    [root@kid ~]# ls /usr/local
    bin  games    lib    libexec  share
    etc  include  lib64  sbin     src
    
    
    • 1
    • 2
    • 3
    • 4
    /usr/bin/, 普通用户使用的应用程序(重要)  
    /usr/sbin, 管理员使用的应用程序(重要)  
    
    • 1
    • 2
    # 普通用户命令
    [root@kid ~]# ls /usr/bin
    addr2line
    alias
    ...
    
    # 条数
    [root@kid ~]# ls -a /usr/bin | wc -l
    749
    
    # 超级用户命令
    [root@kid ~]# ls /usr/sbin
    accessdb             
    dmeventd  
    ...
    
    # 条数
    [root@kid ~]# ls -a /usr/sbin | wc -l
    427
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    /usr/lib, 库文件Glibc 32bit  (相当于windows的.dll动态链接库文件)
    /usr/lib64, 库文件Glibc 64bit
    
    • 1
    • 2
    # linux的库文件后缀.so.版本号
    [root@kid ~]# ls /usr/lib64
    libstdc++.so.6
    libstdc++.so.6.0.19
    ...
    
    # 查看命令依赖那些库文件  
    [root@kid ~]# ldd /bin/ls 
    	linux-vdso.so.1 =>  (0x00007ffc8d32f000)
    	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe1ef5b9000)
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2.5 磁盘占用率
    df -h查看系统中文件的使用情况  
    
    • 1
     [root@kid ~]f -h
    # 文件系统        分割区总容量 | 已使用的大小 | 剩下的大小 | 使用的百分比 | 路径地址 
    Filesystem               Size    Used        Avail      Use%           Mounted on
    devtmpfs                 475M       0         475M        0%           /dev
    tmpfs                    487M       0         487M        0%           /dev/shm
    tmpfs                    487M    7.5M         479M        2%           /run
    tmpfs                    487M       0         487M        0%           /sys/fs/cgroup
    /dev/mapper/centos-root  8.0G    1.3G         6.8G       16%           /
    /dev/sda1               1014M    138M         877M       14%           /boot
    tmpfs   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    du -sh * 查看当前目录下各个文件及目录占用空间大小  
    
    • 1
    # 查看当前目录下各个文件及目录占用空间大小  
    [root@kid ~]# du -sh * 
    4.0K	anaconda-ks.cfg
    
    
    # 查看指定目录的占用空间
    [root@kid ~]# du -sh /usr/  
    1.1G	/usr/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2.6 启动文件目录
    /boot 存放的系统启动相关的文件
    
    • 1
    [root@kid ~]# ls /boot  
    config-3.10.0-1160.el7.x86_64
    efi
    grub (引导装载程序)
    grub2
    initramfs-0-rescue-32dffdf5469a4d538f9b2c246727e087.img
    initramfs-3.10.0-1160.el7.x86_64.img
    symvers-3.10.0-1160.el7.x86_64.gz
    System.map-3.10.0-1160.el7.x86_64
    vmlinuz-0-rescue-32dffdf5469a4d538f9b2c246727e087
    vmlinuz-3.10.0-1160.el7.x86_64 (linux的内核, 系统启动是默认选择)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20220810154615184

    2.7 配置文件目录
    /etc, 极其重要, 后续所有服务的配置都在这个目录中  
    
    • 1
    /etc/hostname, 系统主机名配置文件, 主机名很重要, 有些特殊服务要依赖主机名,
    没有主机名会报错起不来;修改了要重启:reboot  
    
    • 1
    • 2
    # 查看主机名
    [root@kid ~]# cat /etc/hostname 
    kid
    
    • 1
    • 2
    • 3
    /etc/sysconfig/network-scripts/ifcfg-ens32 , 网络配置文件  (可能不叫ens32)
    
    • 1
    [root@kid ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens32 
    # 以太网网络类型:Ethernet,Static
    TYPE=Ethernet
    
    # 代理方式
    PROXY_METHOD=none
    
    # 只是浏览器
    BROWSER_ONLY=no
    
    #  网卡协议 获取网卡IP的方式
    #  dhcp:    动态主机配置协议
    #  static:  手动配置固定IP
    #  none:    手动配置固定IP
    BOOTPROTO=static
    
    
    #  默认路由:是  
    #  如果IP数据包中的目的地址找不到存在的其他路由时,
    #  路由器会默认的选择路由
    DEFROUTE=yes
    
    
    #  是否开启IPV4致命错误检测:否
    IPV4_FAILURE_FATAL=no
    
    #  IPV6初始化: 是
    IPV6INIT=yes
    
    
    #  IPV6是否自动配置:是
    IPV6_AUTOCONF=yes
    
    #  IPV6 默认路由:是
    IPV6_DEFROUTE=yes
    
    #  是否开启IPV6致命错误检测:否
    IPV6_FAILURE_FATAL=no
    
    #  IPV6地址生成模型  stable-privacy:一种生成IPV6的策略
    IPV6_ADDR_GEN_MODE=stable-privacy
    
    #  网卡名称
    NAME=ens32
    
    # 网卡的唯一标识
    UUID=fdfd5f3d-5f2e-432e-a5f8-161f831c7cd3
    
    # 网卡设备名称,物理设置名字,最终通信地址
    DEVICE=ens32
    #  系统启动时是否激活网卡
    ONBOOT=yes
    # ip地址
    IPADDR=10.0.0.200
    # 子网掩码的位数长度
    PREFIX=24
    # 网关
    GATEWAY=10.0.0.254
    # DNS解析服务器地址
    DNS1=8.8.8.8
    DNS2=8.8.8.4
    # 是否启用ipv6地址
    IPV6_PRIVACY=no
    
    # 最大传输单元
    MTU=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    # 修改网卡配置文件之后重启服务生效, 重启网卡服务命令
    [root@kid ~]# service network restart
    
    • 1
    • 2
    /etc/resolv.conf, dns客户端配置文件, 域名解析服务器, 
    一般我们不配置, 因为网卡的配置好了DNS解析服务器地址, 会覆盖掉这里的配置, 网卡的优先级高  
    在修改ifcfg-ens32的DNS配置, resolv.conf 会自动变化...
    
    • 1
    • 2
    • 3
    [root@kid ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 8.8.8.8
    nameserver 8.8.8.4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    /etc/hosts, 本地域名解析配置文件, 域名解析, 先从本地的hosts文件中查找, 没有找到再去域名解析服务器查找
    /etc/hosts 对应windows C:windows/system32/drivers/etc/hosts,   
    
    • 1
    • 2
    # 1. 下载httd(httpd是Apache超文本传输协议(HTTP)服务器的主程序)
    [root@kid ~]# yum install net-tool
    Loaded plugins: fastestmirror
    Determining fastest mirrors
     * base: mirrors.cn99.com
     * extras: mirrors.tuna.tsinghua.edu.cn
     * updates: mirrors.cn99.com
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 2. 关闭防火墙
    [root@kid ~]# systemctl stop firewalld  
    
    • 1
    • 2
    # 3. 创建index页面
    [root@kid ~]# echo "hello word" >/var/www/html/index.html  
    
    # 4. 重启httd服务
    [root@kid ~]# systemctl start httpd  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    * 5. windows浏览器中访问linux
    自己的ip:端口(固定80) 
    10.0.0.1.100:80
    
    • 1
    • 2
    • 3

    image-20220810194638730

    * 6. 到windows电脑的 C:\Windows\System32\drivers\etc 目录下找打hosts文件
    	 将hosts文件只读模式取消(需要获取管理员权限)
    
    • 1
    • 2

    image-20220810194957353

    image-20220810195453926

    image-20220810195214367

    * 7. 使用编辑器打开文件, 在末尾添加以下配置
    
    • 1
    # 自定义DNS解析 (格式: ip 域名)
    10.0.0.100 www.centos7.com
    
    • 1
    • 2
    # 8. 打开cmd提示符窗口, 刷新dns
    C:\Users\13600>ipconfig /flushdns
    
    Windows IP 配置
    
    已成功刷新 DNS 解析缓存。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20220810200110339

    * 9. windows浏览器中访问 www.centos7.com
         经过hosts文件将www.centos7.com解析为10.0.0.100, 再访问.
    
    • 1
    • 2

    image-20220810200411510

    2.8 可变的目录与临时目录
    /var,     存放一些变化文件, 比如/var/log/下的日志文件, 登陆日志  ...
    /var/tmp, 进程产生的临时文件  
    /tmp,     系统临时目录, 谁都可以使用
    
    • 1
    • 2
    • 3
    # 查看登陆日志  
    cat /var/log/secure # 查看登陆时间  
    Aug 11 03:41:00 kid polkitd[657]: Unregistered Authentication Agent for unix-process:1606:152514  
    (system bus name :1.45, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, 
    locale en_US.UTF-8) (disconnected from bus)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.9 设备目录文件
    /dev, 存放设备文件, 比如硬盘, 硬盘分区, 光驱, 等等  
    
    • 1
    /dev/sd* 硬盘设备  
    
    • 1
    [root@kid ~]# ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2
    
    # linux中磁盘文件叫sd, 第一个硬盘叫a, 第二个叫b, ...
    # sda1表示第一个磁盘的第一个分区, sda1表示第一个磁盘的第二个分区,
    # 服务可以插很多硬盘
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    /dev/null, 黑洞设备, 只进不出, 类似于垃圾回收站  
    
    • 1
    # 将输出的信息放入黑洞, 终端不在展示
    [root@kid ~]#  ls >/dev/null  
    
    • 1
    • 2
    /dev/random, 生成随机数的设备 
    
    • 1
     /dev/zero, 源源不断地产生数据
     
     dd:用指定大小的块拷贝一个文件, 并在拷贝的同时进行指定的转换,
     if=文件名:输入文件名, 缺省为标准输入, 即指定源文件, < if=input file >  
     of=文件名:输出文件名, 缺省为标准输出, 即指定目的文件, < of=output file >  
     bs=bytes:同时设置读入/输出的块大小为bytes个字节,
     count=blocks:仅拷贝blocks个块, 块大小等于ibs指定的字节数.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 查看当前目录下的文件
    [root@kid ~]#  ls 
    anaconda-ks.cfg
    
    # 获取一个1MB的文件
    [root@kid ~]# dd if=/dev/zero of=test.txt bs=1k count=1024  
    1024+0 records in
    1024+0 records out
    1048576 bytes (1.0 MB) copied, 0.00346809 s, 302 MB/s
    
    # 再次查看, 多出一个text.txt的文本文件
    [root@kid ~]# ls
    anaconda-ks.cfg  test.txt
    
    # du显示的是文件所占blok的大小,block默认是4k
    [root@kid ~]# du -sh ./*
    4.0K	./anaconda-ks.cfg
    1.0M	./test.txt
    
    # ll -h查看的是文件内容的实际大小
    [root@kid ~]# ll -h
    total 1.1M
    -rw-------. 1 root root 1.3K Aug 11 01:48 anaconda-ks.cfg
    -rw-r--r--. 1 root root 1.0M Aug 11 04:34 test.txt
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    2.10 虚拟的文件系统
    /proc, 反映系统当前进程的实时状态 :process  
    如对应的进程停止则/proc下对应目录则会被删除
    
    • 1
    • 2
    # 可以看到很多id号(pid号, 进程号, 唯一)
    [root@kid ~]#ls /proc 
    
    • 1
    • 2

    image-20220810204223233

    # ls 进程id号的文件夹  
    [root@kid ~]# ls /proc/1
    attr       clear_refs       cpuset   fd       limits     mem         net        oom_score     
    ...
    
    • 1
    • 2
    • 3
    • 4
    如果进程被关闭, id号的文件夹就没了  
    id号每次启动都不唯一, 只有一个进程唯一, systemd 是进程号1的进程, 所有进程都是基于它派生出来的.  
    
    • 1
    • 2
    2.11 其他
    media:提供设备的挂载点, 媒体文件  
    linux 新增了盘符, 需要手动挂载 , 把光盘里的数据, 挂载到media目录  
    mount  /dev/cdrom /media/  
    
    • 1
    • 2
    • 3
    mnt:提供设备的挂载点(同上) 
    
    • 1
    opt:第三方工具, 第三方软件默认安装的(mysql...)  
    
    • 1
    run :pid, log结尾的文件  
    
    • 1
    [root@kid ~]# ls /run 
    auditd.pid sshd.pid ...
    
    [root@kid ~]# cat /run/sshd.pid 
    891
    
    • 1
    • 2
    • 3
    • 4
    • 5
    打开两个xshell连接虚拟机, 在使用yum安装软件的使用, 会产生一个yum.pid的文件
    .pid文件是一个包含进程标识号(pid)的文件
    
    • 1
    • 2

    2022-08-20_00910

    两个用户连接一个终端, 且同时下载某一个软件时, 谁先获取到yum锁则先执行.
    
    • 1

    2022-08-20_00911

    3. 文件路径定位

    3.1 路径
    路径: 整个文件中包含文件名称以及文件所在的位置, 路径是对文件进行定位的一种方式.
    
    • 1

    img

    每个目录下都有一个...的目录
    . 一个点代表当的是当前目录
    .. 两个点代表的是当前目录的上层目录
    
    • 1
    • 2
    • 3
    3.3 绝对路径&相对路径呢
    相对路径呢绝对路径:只要从/开始的路径, 比如/home/alice/file  
    相对路径:相对于当前目录来说, 比如 a.txt ./a.txt  
    # 所谓的(.)(..)目录实际上属于相对路径的一种表示形式.
    
    • 1
    • 2
    • 3
    3.4 切换路径
    切换路径命令: cd [选项] [参数] 
    
    • 1
    # cd 绝对路径 
    cd /etc/hostname
    
    # cd 相对路径 
    cd test/abc 
    cd . 
    cd ..  
    
    
    # cd .        # 代表当前目录 
    # cd ..       # 切换回当前目录的上级目录 
    # cd -        # 切换回上一次所在的目录  
    # cd (回车)   # 等同于cd ~ 
    # cd ~        # 切换回当前用户的家目录, 注意:root和普通用户的家目录不同 
                    root的家目录是 /root
                    普通用户的家目录是 /home/用户名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4. 系统文件管理

    4.1 创建文件
    # 无则创建,有则修改创建时间 
    [root@kid ~]# touch file                     
    
    # 一次创建多个文件
    [root@kid ~]# touch file2 file3  
    
    # 指定目录创建文件
    [root@kid ~]# touch /home/od/file4 file5  
    
    # 批量创建文件
    [root@kid ~]# touch file{a,b,c}            
    
    [root@kid ~]# touch file{1..10}  
    
    [root@kid ~]# touch file{a..z}  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    4.2 创建目录
    命令: mkdir [选项] [参数]
    选项:-v 显示详细信息  -p 递归创建目录  
    
    • 1
    • 2
    # 创建目录
    [root@kid ~]#  mkdir dir1  
    
    # 指定位置创建目录
    [root@kid ~]#  mkdir /root/dir1 /root/dir2  
    
    # 创建多个目录并展现详情
    [root@kid ~]#  mkdir -v /root/{dir3,dir4}  
    
    # 递归创建目录并展现详情
    [root@kid ~]#  mkdir -pv /root/dir5/dir6  
    
    # 在root目录下创建a, b, 在a目录下创建1, 2
    [root@kid ~]# mkdir -pv /root/{a/{1,2},b}  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4.3 目录结构
    以树状显示目录结构命令: tree [选项] [参数]
    需要安装tree: yum install tree -y
    
    • 1
    • 2
    [root@kid ~]#  tree 
    .
    ├── a
    │   ├── 1
    │   └── 2
    ├── anaconda-ks.cfg
    ├── b
    ├── file
    ├── test.txt
    └── touch
    
    4 directories, 4 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    4.4 复制文件
    命令: cp [选项] [参数]
    选项:
        -v:详细显示命令执行的操作 
        -r:递归处理目录与子目录 
        -p:保留源文件或目录的属性  
        
    cp 文件 /路径/name         # 修改名称复制
    cp 文件 /路径/             # 不修改名称复制  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 将文件存放到临时存放目录tmp下
    [root@kid ~]# ls
    anaconda-ks.cfg  file
    [root@kid ~]# cp file /tmp/file_copy
    [root@kid ~]# ls /tmp/file_copy
    /tmp/file_copy
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 文件在复制之后属性可能会发生变化, 使用-p选项保持原文件的属性  
    [root@kid ~]# cp -p file /tmp/file_copy2
    
    • 1
    • 2
    # 复制目录需要使用-r参数, 递归复制  
    [root@kid ~]# mkdir  a
    [root@kid ~]# ls
    a  ...
    [root@kid ~]# cp -r a /tmp/
    [root@kid ~]# ls /tmp/
    a  ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 拷贝多个文件或目录至一个目录  
    [root@kid ~]# mkdir  目录1 目录2
    [root@kid ~]# ls
    目录1  目录2 ...
    [root@kid ~]# cp -rv 目录1 目录2 /tmp
    ‘目录1’ -> ‘/tmp/目录1’
    ‘目录2’ -> ‘/tmp/目录2’
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 移动文件并修改名称
    cp -rv /etc/{hosts,hosts.bak}  
    [root@kid ~]# cp -rv /etc/{hosts,hosts.bak}  
    ‘/etc/hosts’ -> ‘/etc/hosts.bak’
    
    # 移动文件并修改名称
    cp -rv /etc/hosts{,-org}  
    [root@kid ~]# cp -rv /etc/hosts{,-org}  
    ‘/etc/hosts’ -> ‘/etc/hosts-org’
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    4.4 移动文件
    命令: mv [选项] [参数]
    * 移动文件, 默认可以递归移动.
    
    • 1
    • 2
    # 原地移动算改名 
    [root@kid ~]# mv file file1      
    
    • 1
    • 2
    # 移动文件至tmp目录  
    [root@kid ~]# mv file1 /tmp/            
    
    • 1
    • 2
    # 移动tmp目录的文件至当前目录
    [root@kid ~]# mv /tmp/file1 ./           
    
    • 1
    • 2
    # 移动目录至/tmp目录下  
    [root@kid ~]# mv dir/ /tmp/             
    
    • 1
    • 2
    # 移动多个文件或至同一个目录  
    [root@kid ~]# touch file{1..3}  
    [root@kid ~]# mv file1 file2 file3 /tmp/    
    
    • 1
    • 2
    • 3
    # 移动多个目录至同一个目录             
    [root@kid ~]# mkdir dir{1..3}  
    [root@kid ~]# mv dir1/ dir2/ dir3/ /tmp      
    
    • 1
    • 2
    • 3
    4.6 删除文件
    命令: mv [选项] [参数]
    选项:
        -r:递归
        -f:强制删除
        -v:详细过程  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 删除文件, rm存在alias别名, rm -i所以会提醒是否删除文件 
    [root@kid ~]# rm file 
    rm: remove regular empty file ‘file’? (光标在则, 回复y回车即删除)
    
    • 1
    • 2
    • 3
    # 删除文件, 不提醒  
    [root@kid ~]#  rm -f 1.txt    
    
    • 1
    • 2
    # 递归删除目录, 会提示
    [root@kid ~]# rm -r 目录1
    rm: remove directory ‘目录1’? y
    
    • 1
    • 2
    • 3
    # 强制删除目录, 不提醒(慎用)  
    [root@kid ~]# rm -rf 目录2
    
    • 1
    • 2
    [root@kid ~]# mkdir dir1
    [root@kid ~]# touch dir1/file{1..10}.txt
    [root@kid ~]# touch dir1/.file
    [root@kid ~]# ls -a dir1
    .      file10.txt  file3.txt  file6.txt  file9.txt
    ..     file1.txt   file4.txt  file7.txt
    .file  file2.txt   file5.txt  file8.txt
    # 删除有前后缀的文件
    [root@kid ~]# rm -rf dir1/*.*
    [root@kid ~]# ls -a dir1
    .  ..  .file
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # 删除示例2  
    [root@kid ~]# mkdir dir2
    [root@kid ~]# touch dir2/file{1..10}  
    [root@kid ~]# touch dir2/{1..10}.pdf  
    [root@kid ~]# ls dir2
    10.pdf  3.pdf  6.pdf  9.pdf   file2  file5  file8
    1.pdf   4.pdf  7.pdf  file1   file3  file6  file9
    2.pdf   5.pdf  8.pdf  file10  file4  file7
    
    [root@kid ~]# rm -rf dir2/file*
    [root@kid ~]# ls dir2
    10.pdf  2.pdf  4.pdf  6.pdf  8.pdf
    1.pdf   3.pdf  5.pdf  7.pdf  9.pdf
    
    [root@kid ~]# rm -rf dir2/*.pdf
    [root@kid ~]# ls dir2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5. 查看文件内容

    查看文件内容(cat tac less more head tail tailf grep )
    
    • 1
    5.1 cat
    查看文本命令: cat  [选项] [参数]
    选项:
    	-n 显示行号
    	-A 查看文件的特殊符号
    
    • 1
    • 2
    • 3
    • 4
    # 将文件复制到当前目录中
    [root@kid ~]# cp /etc/passwd ./pass  
    # 查看文件内容
    [root@kid ~]# cat ./pass   
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 默认无行号
    [root@kid ~]# cat  pass  
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 显示行号
    [root@kid ~]# cat -n pass
         1	root:x:0:0:root:/root:/bin/bash
         2	bin:x:1:1:bin:/bin:/sbin/nologin
         ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 查看文件的特殊符号, $为结束符 
    [root@kid ~]# cat -A pass   
    root:x:0:0:root:/root:/bin/bash$
    bin:x:1:1:bin:/bin:/sbin/nologin$
    
    • 1
    • 2
    • 3
    • 4
    cat创建文件: cat >> 文件名 << 结束字符
    
    • 1
    [root@kid ~]# cat >> txt1.txt <
    > 123 (回车,到下一行)
    > 456 (回车,到下一行)
    > EOF (输入结束字符串, 停止输入)
    [root@kid ~]# cat txt1.txt 
    123
    456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    5.2 tac
    tac:  倒序查看文件  
    
    • 1
    [root@kid ~]# tac pass 
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ...
    
    • 1
    • 2
    • 3
    • 4
    5.3 less
    less  上下翻动, 空格进行翻页, q退出
    
    • 1
    [root@kid ~]# mv /etc/services ./
    [root@kid ~]# less services  
    ...
    
    • 1
    • 2
    • 3
    5.4 more
    more  使用回车上下翻动, 空格进行翻页, q退出(有百分比) 
    
    • 1
    [root@kid ~]# cp /etc/services ./
    [root@kid ~]# more services  
    ...
    
    • 1
    • 2
    • 3
    5.5 head
    查看文本头部内容命令(默认前十行): head  [选项] [参数]
    选项:
    	-n行数 查看头部n行, 使用-n指定
    
    • 1
    • 2
    • 3
    [root@kid ~]# head -n5 pass
    root:x:0:0:root:/root:/bin/bash
    ...
    
    # 只看头部5个进程  
    ps aux | head -5
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.6 128004  6600 ?        Ss   Aug25   0:01  ...
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    5.6 tail
    查看文本尾部内容命令(默认前十行): head  [选项] [参数]
    选项:
    	-序号 查看文件尾部n行  
    	-f    动态查看文件尾部的变化
    	
    查看文件尾部的变化命令: tailf 等同于tail -f -n 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 查看文件尾部10行 
    [root@kid ~]# tail pass
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    ...
    
    • 1
    • 2
    • 3
    • 4
     # 查看文件尾部20行 
    [root@kid ~]# tail -20 /var/log/secure  
    Aug 25 23:08:27 kid sshd[919]: Received signal 15; terminating.
    ...
    
    • 1
    • 2
    • 3
    • 4
    # 动态查看文件尾部的变化 
    [root@kid ~]# tail -f /var/log/messages
    Aug 25 23:21:16 kid systemd: Removed slice User Slice of root.
    ...
    
    • 1
    • 2
    • 3
    • 4
    # 动态查看文件尾部的变化 
    [root@kid ~]# tailf /var/log/messages
    Aug 25 23:21:18 kid systemd: Created slice User Slice of root.
    ...
    
    • 1
    • 2
    • 3
    • 4
    # 查看倒数两个进程
    [root@kid ~]# ps -aux | tail -2 
    root       1484  0.0  0.1 155448  1852 pts/0    R+   04:04   0:00 ps aux
    root       1485  0.0  0.0 108088   676 pts/0    S+   04:04   0:00 tail -2
    
    • 1
    • 2
    • 3
    • 4
    5.7 grep
    过滤文件内容命令: grep  [选项] [正则表达式] [参数]
    选项:
    	-i 忽略大小写匹配
    	-n 显示行号
    	-A 行数 展示上n行
    	-B 行数 展示上下n行
    	-C 行数 展示下n行
    	-E 选项可以用来扩展选项为正则表达式,
    	   则应该使用 | 来分割多个pattern,以此实现OR操作。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 匹配以root开头的行 
    [root@kid ~]#  grep "^root" pass
    root:x:0:0:root:/root:/bin/bash
    
    • 1
    • 2
    • 3
    # 匹配以bash结尾的行
    [root@kid ~]#  grep "bash$" pass 
    root:x:0:0:root:/root:/bin/bash
    
    • 1
    • 2
    • 3
    # 忽略大小写匹配  
    [root@kid ~]#  grep -i "ftp" pass    
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    
    • 1
    • 2
    • 3
     # 匹配文件中包含sync结尾或ftp字符串
    [root@kid ~]#  grep  -Ei "sync$|ftp" pass  
    sync:x:5:0:sync:/sbin:/bin/sync
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    
    • 1
    • 2
    • 3
    • 4
    # 打印匹配字符串所在行加它下2行  
    [root@kid ~]# grep -n -A 2 "nobody" pass
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    14-systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15-dbus:x:81:81:System message bus:/:/sbin/nologin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 打印匹配字符串所在行加它上2行 
    [root@kid ~]# grep -n -B 2 "nobody" pass
    11-games:x:12:100:games:/usr/games:/sbin/nologin
    12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 打印匹配字符串所在行加它上下2行 
    [root@kid ~]# grep -n -C 2 "nobody" pass
    11-games:x:12:100:games:/usr/games:/sbin/nologin
    12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    14-systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15-dbus:x:81:81:System message bus:/:/sbin/nologin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6. 文件的上传下载

    6.1联网下载
    联网下载文件(wget、curl)
    
    • 1
    联网下载文件命令: wget [选项] [参数]
    wget下载: yum install wget -y  
    选项:
    	-O 指定下载地址 
    
    • 1
    • 2
    • 3
    • 4
    [root@kid ~]# yum install wget -y 
    ...
    # 下载阿里云yum源 保存到指定地址
    [root@kid ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
    
    • 1
    • 2
    • 3
    • 4
    浏览网络上资源命令: curl [选项] [参数]
    选项:
    	-o保存到本地  
    
    • 1
    • 2
    • 3
    [root@kid ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
    
    • 1
    6.2 文件传输
    文件上传与下载(rz、sz)
    lrzsz下载: yum install lrzsz -y 
    rz 能上传文件文件上传(不能大于4g)
    
    • 1
    • 2
    • 3
    [root@kid ~]# rz 选择本地文件
    
    • 1

    image-20220826210859834

    sz 只能下载文件
    
    • 1
    [root@kid ~]# sz 文件名 选择本地路径地址
    
    • 1

    image-20220826210716964

    7. 查找类命令

    7.1 文件查找
    文件查找命令: locate [选项] [参数]
    locate下载: yum  -y install mlocate
    
    下载之后, 想要直接使用输入: sudo updatedb
    否则会报错:
    locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
    
    选项: 
    	-i 忽略大小写
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 搜索etc目录下所有以sh开头的文件
    [root@kid ~]# locate /etc/sh       
    
    # 搜索etc目录下, 所有以sh开头的文件, 忽略大小写  
    [root@kid ~]# locate -i /etc/sh    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    7.2 命令查找
    查看存放命令的绝对路径: which [选项] [参数]
    
    • 1
    [root@kid ~]# which ls  
    
    • 1
    查找命令的路径、帮助手册命令: whereis [选项] [参数]
    选项: 
    	-b 仅显示命令所在的路径, 仅看二进制  
    
    • 1
    • 2
    • 3
    [root@kid ~]#  whereis ls  
    ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
    
    [root@kid ~]# whereis -b ls
    ls: /usr/bin/ls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    (用which whereis 是无法查询到的, 需要使用type采查询)
    内核相关信息命令: type [选项] [参数]
    选项:
    	-a 查看命令的绝对路径,包括别名.
    
    • 1
    • 2
    • 3
    • 4

    8. 字符处理命令

    8.1 sort排序
    有些情况下, 需要对应一个无序的文本文件进行数据的排序, 这时就需要使用sort进行排序
    sort [选项] [文件]
    选项:
    	-r:倒序 
    	-n:按数字排序
        -t:指定分隔符(默认空格)
        -k:指定第几列, 指定几列几字符(指定1,1  3.1,3.3 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 1.首先创建一个文件, 写入一写无序的内容  
    [root@kid ~]# cat >> file.txt <
    b:3  
    c:2  
    a:4  
    e:5  
    d:1  
    f:11  
    EOF  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 2.使用sort下面对输出的内容进行排序  
    [root@kid ~]# sort file.txt  
    a:4  
    b:3  
    c:2  
    d:1  
    e:5  
    f:11  
    # 结果并不是按照数字排序, 而是按字母排序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # -t 指定分隔符, -k指定列, 按第二列排序  
    [root@kid ~]# sort -t ":" -k2 file.txt  
    d:1  
    f:11 # 第二行为什么是11?按照排序的方式, 
    c:2  
    b:3  
    a:4  
    e:5  
    # 按照排序的方式只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 如果想要按照数字的方式进行排序, 需要使用 -n参数, 按数字排序. 
    [root@kid ~]# sort -t ":" -n -k2 file.txt  
    d:1  
    c:2  
    b:3  
    a:4  
    e:5  
    f:11  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    8.2 uniq去重
    如果文件中有多行完全相同的内容, 当前是希望能删除重复的行,
    同时还可以统计出完全相同的行出现的总次数.
    那么就可以使用`uniq`命令解决这个问题(但是必须配合`sort`使用, 相邻的才能去重)
    
    • 1
    • 2
    • 3
    uniq [选项]... [INPUT [OUTPUT]]  
    选项:
    	-c  计算重复的行  
    
    • 1
    • 2
    • 3
    # 1.创建一个file.txt文件: 
    [root@kid ~]# cat >>file2.txt <
    abc  
    123  
    abc  
    123  
    EOF  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 2.  先使用sort排序, 让重复内容连续在一起  
    # | 管道符, 将cat查看的信息交给sort处理
    [root@kid ~]# cat file.txt |sort  
    123  
    123  
    abc  
    abc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 3.-c参数能统计出文件中每行内容重复的次数  
    [root@kid ~]# cat file.txt |sort|uniq -c  
    2 123  
    2 abc 
    
    • 1
    • 2
    • 3
    • 4
    # 4.使用uniq去除相邻重复的行  
    [root@kid ~]# cat file.txt |sort|uniq  
    123  
    abc  
    
    • 1
    • 2
    • 3
    • 4
    8.3 cut截取字段
    cut [选项] [参数]
    选项:
    	-d 指定分隔符
        -f 数字,取第几列 –f3, 6  3列和6
        -c 按字符取(空格也算)  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [root@kid ~]# echo "Im kid, is QQ 1oo86" >file.txt     
    # 过滤出文件里 kid以及1oo86
    [root@kid ~]#  cut -d " " -f2,5 file.txt  
    
    • 1
    • 2
    • 3
    8.4 wc统计行号
    wc [选项] [参数]
    选项:
    	-l显示文件行数
        -c显示文件字节
        -w显示文件单词
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 统计/etc/fstab文件有多少行
    [root@kid ~]# wc -l /etc/fstab  
    11 /etc/fstab 
    
    • 1
    • 2
    • 3
    # 统计/etc/services 文件行号  
    [root@kid ~]# wc -l /etc/services 
    
    • 1
    • 2
    # 统计当前路径下有多少文件和文件夹  
    [root@kid ~]#  ls |wc -l  
    3         
    
    • 1
    • 2
    • 3

    9. 系统文件属性

    使用ls -l列目录下所有文件时, 通常会以长格式的方式显示, 
    其实长格式显示就是Windows下看到的文件详细信息, 也将其称为文件属性, 整个文件的属性分为十列.
    
    • 1
    • 2
    [root@kid ~]# ls -l anaconda-ks.cfg  
    -rw-------. 1 root root 1263 Aug 26 19:24 anaconda-ks.cfg
    
    • 1
    • 2
    -rw-------.        :第一个字符是文件类型, 其他则是权限  
    1                  :硬链接次数  
    root               :文件属于哪个用户  
    root               :文件属于哪个组  
    1263               :文件大小  
    Aug 26 19:24       ⑥⑦⑧:最新修改的时间与日期  
    anaconda-ks.cfg    :文件或目录名称  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    10. 系统文件类型

    通过ls -l以长格式显示一个文件的属性, 通过第一列的第一个字符来近一步的判断文件具体的类型.
    PS:Linux文件扩展名不代表任何含义, 仅为了我们能更好的识别该文件是什么类型.
    
    • 1
    • 2
    [root@kid ~]# ls -l anaconda-ks.cfg  
    -rw-------. 1 root root 1263 Aug 26 19:24 anaconda-ks.cfg
    [root@kid ~]# 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 117608 Aug 20  2019 /bin/ls
    srw-rw-rw-.  1 root root      0 Aug 26 20:58 /dev/log
    brw-rw----.  1 root disk   8, 0 Aug 26 20:58 /dev/sda
    crw--w----.  1 root tty    4, 1 Aug 26 20:58 /dev/tty1
    lrwxrwxrwx.  1 root root     22 Aug 26 19:18 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
    -rw-r--r--.  1 root root    158 Jun  7  2013 /etc/hosts
    prw-------.  1 root root      0 Aug 26 20:58 /run/dmeventd-client
    drwxrwxrwt. 12 root root   4096 Aug 26 21:22 /tmp
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    -   普通文件(文本, 二进制, 压缩, 图片, 日志等)   
    d   目录文件  
    b   设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2  
    c   设备文件(字符设备), 终端 /dev/tty1, /dev/zero  
    s   套接字文件, 进程间通信(socket)  
    p   管道文件  
    l   链接文件  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    无法通过ls -l文件的类型, 比如:一个文件, 它可能是普通文件、也可能是压缩文件、或者是命令文件等, 
    那么此时就需要使用file来更加精准的判断这个文件的类型.
    
    • 1
    • 2
    [root@kid ~]# file /etc/hosts  
    /etc/hosts: ASCII text
    # 文件路径 文件类型
    
    • 1
    • 2
    • 3
    [root@kid ~]# file /dev/sda  
    /dev/sda:block special  
    
    • 1
    • 2

    11. 系统链接文件

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

    img

    Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,  soft link  symbolic link)
    
    • 1
    11.2 软链接
    软链接相当于Windows的快捷方式, 软链接文件会将inode指向源文件的block, 
    访问软链接文件时, 其实访问的是源文件本身.
    
    那么当我们对一个文件创建多个软链接, 其实就是多个inode指向同一个block.
    删除软链接文件时, 其实只是删除了一个inode指向, 并不会对源文件源文件造成影响, 
    但如果删除的是源文件则会造成所有软链接文件失效.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    img

    11.3 软链接实践
    # 文件软链接示例  
    touch 1.txt  
    ln -s 1.txt  /tmp/1_lns.txt  
    ll /tmp/1_lns.txt   
    # root下 1.txt链接到/tmp下并重命名为1_lns.txt  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 目录软链接示例  
    [root@kid ~]# mkdir /dir/a -p  
    [root@kid ~]# ln -s /dir/ /tmp/  
    [root@kid ~]# ll /tmp/dir   
    lrwxrwxrwx. 1 root root 5 Aug 26 21:46 /tmp/dir -> /dir/
    # 查看链接指向  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 使用场景  
    1.软件升级  
    	第一次安装软件xxx0.1版本 --建立软件链接--> xxx
    	将软件链接添加到环境变量中
    	第二次软件升级xxx0.2版本 --建立软件链接--> xxx
    	便可以直接使用, 软件升级失败还原成第一版本的软件接即可.
    	(在升级到新版时, 让新版本软件的软链接名与旧软件的软件连接重名即可)
    2.企业代码发布   
    3.不方便目录移动  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    11.4 硬链接
    若一个inode号对应多个文件名, 则称这些文件为硬链接.
    换言之, 硬链接就是同一个文件使用了多个别名, 如下图hard link 就是 file
    的一个别名, 他们有共同的 inode.  
    
    • 1
    • 2
    • 3

    img

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

    ————————————————
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    ————————————————

  • 相关阅读:
    服务端Skynet(一)——源码浅析
    【C语言】对文件的输入输出
    2022 WAIC 闭幕,融云提供分论坛元宇宙直播技术支持
    LeetCode 面试题 04.01. 节点间通路
    面试题c/c++--语言基础
    windows10 vs2015编译64位activemq
    云原生技术详解
    无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制
    手把手带你开发你的第一个前端脚手架
    【JavaScript】掌握BOM浏览器对象模型
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/126550858