• 快速上手Linux核心命令(三):文件和目录操作命令


    前言

    这期呢主要说一说Linux中文件与目录相关的命令,一共包含19个命令

    cd 切换目录

    1、简介

    cd 是“change directory” 中每个单词的首字母,其功能是从当前目录切换到目标路径。

    2、语法格式

    cd [参数选项] [目标路径]
    

    3、参数说明

    这里呢只列出常用参数

    参数选项 参数说明
    - 从当前目录切换到用户上一次所在目录
    ~ 从当前目录切换到家目录,即假设当前登录的用户是xiezhr,执行命令后路径将切换到/home/xiezhr
    .. 从当前目录切换到上一级目录

    在使用cd命令时,配合“tab”键的自动补全功能,可以大大提高效率。

    既然说到了切换路径,我们这里就说一说什么时相对路径?什么时绝对路径

    简单来说,从“/”根目录开始的路径为绝对路径,不从“/”开始的为相对路径
    /home/xiezhr、/home/user/local 是绝对路径,而 date/,webapp/log/ 为相对路径

    4、实践操作

    ① 进入系统 /usr/local 目录 。这里我们会用到pwd命令来显示当前所在路径,这个命令我们会在下一个命令中讲,这里知道即可

    [root@xiezhr ~]# cd /usr/local/
    [root@xiezhr local]# pwd
    /usr/local
    

    ② 切换到上级目录

    [root@xiezhr local]# pwd
    /usr/local
    [root@xiezhr local]# cd ..
    [root@xiezhr usr]# pwd
    /usr
    

    ③ 切换到父目录的父目录

    [root@xiezhr local]# pwd
    /usr/local
    [root@xiezhr local]# cd ../../
    [root@xiezhr /]# pwd
    /
    

    ④ 返回当前用户上一次所在的目录

    [root@xiezhr ~]# cd /usr/local/
    [root@xiezhr local]# cd /root/
    [root@xiezhr ~]# pwd
    /root
    [root@xiezhr ~]# cd -
    /usr/local
    

    ⑤ 返回家目录【当前用户为root用户,家目录为/root】

    [root@xiezhr local]# cd /usr/local/
    [root@xiezhr local]# pwd
    /usr/local
    [root@xiezhr local]# cd ~
    [root@xiezhr ~]# pwd
    /root
    

    pwd 显示当前路径

    1、简介

    pwd 是“print working directory”每个单词的首字母,功能是打印/显示当前所在目录姐绝对路径。在实际工作中,我们经常会在各个目录之间切换,切换的多了,很容易忘记走到哪了,这时就需要有一幅地图指引我们,使我们不至于迷路。由此可见这个命令的重要性

    2、语法格式

    pwd [参数选项]
    

    3、参数说明

    一般不需要加参数

    4、实践操作

    ① 进入到/usr/local后显示路径

    [root@xiezhr ~]# cd /usr/local/
    [root@xiezhr local]# pwd
    /usr/local
    

    ls 显示目录下内容及相关属性信息

    1、简介

    ls 是“list” 英文单词的缩写,功能是列出当前目录下的内容和内容属性信息。类似于DOS系统下的dir命令

    2、语法格式

    ls [参数选项] [文件或目录]
    

    由于用的比较少,这里就不作说明了,大概知道就好了

    3、参数说明

    参数 参数说明
    -l 使用长格式列出文件即目录信息 相当于直接使用ll
    -a 显示目录下的所有文件,包括.开头的隐藏文件
    -t 根据最后修改时间(time)排序,默认是按文件名排序的
    -r 以相反次序排序
    -F 在条目后加上文件类型的只是符号(*、/、=、@、|中的一个)
    -d 当遇到目录时,列出目录本身而非目录内文件
    -h 以人类可读信息显示文件或目录大小,如1KB,23M,3GB等

    4、实践操作

    ① 直接使用ls命令,不带参数,显示当前目录下的文件和路径

    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3
    

    ②加上【-a】参数,显示所有文件,包含隐藏文件("."开头的为隐藏文件),如下所示,ls没有显示隐藏文件,ls -a 显示了隐藏文件.d.txt

    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3
    [root@xiezhr test]# ls -a
    .  ..  a.txt  b.txt  c.txt  dir1  dir2  dir3  .d.txt
    

    ③ 加上【-l】参数,显示文件目录的详细信息
    这个参数时我们最常用的,这个命令会列出文件或目录类型、权限、所属组、创建修改时间(最后一次修改时间,如果时新创建的文件则为创建时间),需要熟练掌握

    [root@xiezhr test]# ls -l
    total 12
    -rw-r--r-- 1 root root    0 Mar 10 23:39 a.txt
    -rw-r--r-- 1 root root    0 Mar 10 23:39 b.txt
    -rw-r--r-- 1 root root    0 Mar 10 23:39 c.txt
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
    

    小技巧:上面的命令我们会发现,时间没显示年份,那么怎么才能显示出我们肉眼既可以看懂的时间呢?

    [root@xiezhr test]#  ls -l --time-style=long-iso
    total 16
    -rw-r--r-- 1 root root   22 2022-03-10 23:44 a.txt
    -rw-r--r-- 1 root root    0 2022-03-10 23:39 b.txt
    -rw-r--r-- 1 root root    0 2022-03-10 23:39 c.txt
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
    

    哇哦,上面命令这么长,使用起来真的不方便,我们给它起个别名吧,这样叫起来也比较方便

    [root@xiezhr test]# alias lst='ls -l --time-style=long-iso'
    [root@xiezhr test]# alias |grep lst
    alias lst='ls -l --time-style=long-iso'
    [root@xiezhr test]# lst
    total 16
    -rw-r--r-- 1 root root   22 2022-03-10 23:44 a.txt
    -rw-r--r-- 1 root root    0 2022-03-10 23:39 b.txt
    -rw-r--r-- 1 root root    0 2022-03-10 23:39 c.txt
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
    drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
    
    

    ④ 加上【-F】参数,F是大写,在文件尾部加上文件类型符号(、/、=、@、|)中一个
    **"
    "表示普通可执行文件、"/"表示目录、"="表示套接字、"@"表示符号链接、"|"表示FIFOs**
    具体文件类型可以参照【文件类型】这篇文章

    [root@xiezhr test]# ls -F
    a.txt  b.txt  c.txt  dir1/  dir2/  dir3/  # 三个目录尾部加上了/
    

    小技巧:通过【-F】参数,可以过滤出所有目录和普通文件

    [root@xiezhr test]# ls -F    # 当前路径下一共包含三个文件和三个目录
    a.txt  b.txt  c.txt  dir1/  dir2/  dir3/
    [root@xiezhr test]# ls -F|grep /  # 过滤出所有路径
    dir1/
    dir2/
    dir3/
    [root@xiezhr test]# ls -F|grep -v /  #过滤出普通文件
    a.txt
    b.txt
    c.txt
    

    ⑤ 假设一个目录下面有很多很多个文件,我们忘记了最近改过的文件的名字(年纪大了,记性越来越不好),这时候要找出它,可以用如下命令

    [root@xiezhr test]# touch xiezhr.txt
    [root@xiezhr test]# ls -lt
    total 16
    -rw-r--r-- 1 root root    0 Mar 11 23:02 xiezhr.txt
    -rw-r--r-- 1 root root    0 Mar 11 22:52 tt.txt
    -rw-r--r-- 1 root root   22 Mar 10 23:44 a.txt
    -rw-r--r-- 1 root root    0 Mar 10 23:39 c.txt
    -rw-r--r-- 1 root root    0 Mar 10 23:39 b.txt
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
    drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
    

    我们最近创建或修改的文件就排在最前面了,有没有很方便哦
    当然了,可以让你最显目,也可以让你排到最后去。ls -lrt 即可按照时间倒序排。-r 是倒序的意思

    mkdir 创建目录

    1、简介

    mkdir 是"make directoy" 英文单词的缩写,功能是创建目录。如果目录存在则提示已存在,不会继续创建

    2、语法格式

    mkdir [参数选项] [目录]
    

    3、参数说明

    参数 参数说明
    -p 递归创建目录。即可以父目录儿子目录孙子目录重孙目录....等一起创建
    -m 创建目录的同时授予权限

    4、实践操作
    ① mkdir 不带任何参数

    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3  tt.txt  xiezhr.txt
    [root@xiezhr test]# mkdir xiezhr
    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3  tt.txt  xiezhr  xiezhr.txt
    

    ② 同时创建多个目录

    [root@xiezhr test]# ls 
    a.txt  b.txt  c.txt  dir1  dir2  dir3  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mkdir dir4 dir5 dir6
    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3  dir4  dir5  dir6  tt.txt  xiezhr  xiezhr.txt
    

    ③ 使用【-p】参数递归创建目录

    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir1  dir2  dir3  tt.txt  xiezhr.txt
    [root@xiezhr test]# mkdir -p xiezhr/test
    [root@xiezhr test]# tree
    .
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── dir1
    ├── dir2
    ├── dir3
    ├── tt.txt
    ├── xiezhr
    │   └── test
    └── xiezhr.txt
    
    5 directories, 5 files
    

    ④ 使用【-m】参数,创建目录同时授权

    [root@xiezhr test]# mkdir -m 755 dir
    

    tree 以树形结构显示目录下的内容

    1、简介

    tree 一看到这个命令,我们就知道是树的意思,当然了这里的树并非种的树,而是以树形结构显示目录下内容。

    2、语法格式

    tree [参数选项] [目录]
    

    3、参数说明

    参数 参数说明
    -d 只显示目录
    -L level 遍历目录的最大层数,level为大于0的整数

    4、实践操作

    注意:个别Linux版本可能没有默认安装tree,大家也不用慌,我们按照如下步骤安装即可

    • 下载安装包
     wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
    
    • 解压安装包
    tar -zxvf tree-1.7.0.tgz
    
    • 切换到解压后的目录
    cd tree-1.7.0
    
    • 编译安装
    make install
    
    • 大功告成,输入tree 命令回车

    ① 不带参数的tree

    [root@xiezhr test]# tree
    .
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── dir
    ├── dir1
    ├── dir2
    ├── dir3
    ├── tt.txt
    ├── xiezhr
    │   └── test
    └── xiezhr.txt
    
    6 directories, 5 files
    

    ② 加上【-d】参数,只显示目录

    [root@xiezhr test]# tree -d
    .
    ├── dir
    ├── dir1
    ├── dir2
    ├── dir3
    └── xiezhr
        └── test
    
    6 directories
    

    ③ 加上【-L leave】 列出目录下第leave层结构

    [root@xiezhr test]# tree -L 1
    .
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── dir
    ├── dir1
    ├── dir2
    ├── dir3
    ├── tt.txt
    ├── xiezhr
    └── xiezhr.txt
    
    5 directories, 5 files
    

    ④ 加上【-f】显示完整的路径名称 加上【-i】则不显示树枝部分

    [root@xiezhr test]# tree -f
    .
    ├── ./a.txt
    ├── ./b.txt
    ├── ./c.txt
    ├── ./dir
    ├── ./dir1
    ├── ./dir2
    ├── ./dir3
    ├── ./tt.txt
    ├── ./xiezhr
    │   └── ./xiezhr/test
    └── ./xiezhr.txt
    
    6 directories, 5 files
    [root@xiezhr test]# tree -i
    .
    a.txt
    b.txt
    c.txt
    dir
    dir1
    dir2
    dir3
    tt.txt
    xiezhr
    test
    xiezhr.txt
    
    6 directories, 5 files
    [root@xiezhr test]# tree -fi
    .
    ./a.txt
    ./b.txt
    ./c.txt
    ./dir
    ./dir1
    ./dir2
    ./dir3
    ./tt.txt
    ./xiezhr
    ./xiezhr/test
    ./xiezhr.txt
    
    6 directories, 5 files
    

    ⑤ 加上【-F】参数区分目录和文件

    [root@xiezhr test]# tree -F
    .
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── dir/
    ├── dir1/
    ├── dir2/
    ├── dir3/
    ├── tt.txt
    ├── xiezhr/
    │   └── test/
    └── xiezhr.txt
    
    6 directories, 5 files
    

    尾部带/的为目录

    touch 创建空白文件或改变文件的时间戳属性

    1、简介

    touch 是触摸的意思,摸一下文件可以创建空白文件或改变文件时间属性
    touch 不能创建目录但是能改变目录的时间戳属性

    2、语法格式

    touch [参数选项] [文件]
    

    3、参数说明

    参数 参数说明
    -a 只更改文件最后访问时间
    -m 只更改文件最后修改时间
    -d string 使用字符串string代表的时间模板设置指定文件的时间属性

    4、实践操作

    ① 不带任何参数

    [root@xiezhr test]# touch xiezhr.txt
    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir  dir1  dir2  dir3  tt.txt  xiezhr  xiezhr.txt
    

    ②更改文件时间戳属性(文件的时间戳属性:访问时间、修改时间、状态改变时间)

    • stat 查看文件时间戳属性
    • -m 更改文件修改时间
    • -a 更改文件的访问时间
    [root@xiezhr test]# stat xiezhr.txt 
      File: ‘xiezhr.txt’
      Size: 0               Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d    Inode: 2661        Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2022-03-12 21:04:32.681919249 +0800
    Modify: 2022-03-12 21:04:32.681919249 +0800
    Change: 2022-03-12 21:04:32.681919249 +0800
     Birth: -
    [root@xiezhr test]# touch -m xiezhr.txt 
    [root@xiezhr test]# stat xiezhr.txt 
      File: ‘xiezhr.txt’
      Size: 0               Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d    Inode: 2661        Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2022-03-12 21:04:32.681919249 +0800
    Modify: 2022-03-12 21:08:22.344330251 +0800
    Change: 2022-03-12 21:08:22.344330251 +0800
     Birth: -
    [root@xiezhr test]# touch -a xiezhr.txt 
    [root@xiezhr test]# stat xiezhr.txt 
      File: ‘xiezhr.txt’
      Size: 0               Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d    Inode: 2661        Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2022-03-12 21:08:42.528893719 +0800
    Modify: 2022-03-12 21:08:22.344330251 +0800
    Change: 2022-03-12 21:08:42.528893719 +0800
     Birth: -
    

    cp 复制文件或目录

    1、简介

    cp 是copy 英文单词的缩写,功能是复制文件或目录

    2、语法格式

    cp [参数选项] [源文件] [目标文件]
    

    3、参数说明

    参数 参数说明
    -p 复制时保持源文件的权限、时间属性
    -d 如果复制的文件时符号链接,那么仅赋值符号链接本身,而且保留符号链接所指向的目标文件或目录
    -r 递归复制目录,即复制目录下所有层级的子目录及文件
    -a 等同于-p、-d、-r三个命令总和
    -i 覆盖已有文件提示用户确认

    4、实践操作

    ① 将文件a.txt 复制为 aaa.txt

    [root@xiezhr test]# cp a.txt aaa.txt
    [root@xiezhr test]# ls
    aaa.txt  a.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ②复制目录,将dir 目录复制为dir_bak

    [root@xiezhr test]# ls
    aaa.txt  a.txt  b.txt  c.txt  dir  dir1  dir2  dir3  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# cp -r dir dir_bak
    [root@xiezhr test]# ls
    aaa.txt  a.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    mv 移动或重命名文件

    1、简介

    mv 是 move 的缩写,功能是移动重命名文件

    2、语法格式

    mv [参数选项] [源文件] [目标文件]
    

    3、参数说明

    参数 参数说明
    -f 若目标文件已经存在,则不会询问直接覆盖
    -i 若目标文件已存在,则会询问是否覆盖
    -n 不覆盖已经存在的文件
    -u 在源文件比目标文件新,或目标文件不存在时才进行移动

    4、实践操作

    ① 给文件改名(如果a1.txt 不存在,则将aaa.txt 重命名为a1.txt)

    [root@xiezhr test]# ls
    aaa.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv aaa.txt a1.txt
    [root@xiezhr test]# ls
    a1.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ② 给文件重命名(如果a2.txt存在,则将a1.txt 覆盖为a2.txt)

    [root@xiezhr test]# ls
    a1.txt  a2.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv a1.txt a2.txt 
    mv: overwrite ‘a2.txt’? y
    [root@xiezhr test]# ls
    a2.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ③ 移动单个文件或多个文件

    [root@xiezhr test]# ls
    a2.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv a2.txt dir/
    [root@xiezhr test]# ls
    b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv b.txt c.txt dir/
    [root@xiezhr test]# ls
    dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ④移动目录 如果目录存在则将文件移动到目录中,如果不存在则将目录改名

    [root@xiezhr test]# ls
    a2.txt  b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv a2.txt dir/
    [root@xiezhr test]# ls
    b.txt  c.txt  dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv b.txt c.txt dir/
    [root@xiezhr test]# ls
    dir  dir1  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv dir1 dir
    [root@xiezhr test]# ls
    dir  dir2  dir3  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# mv dir2 dir5
    [root@xiezhr test]# ls
    dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    rm 删除文件或目录

    1、简介

    rm 时rmove 英文单词的缩写,功能时删除一个或多个文件、目录。rm是Linux中最危险的命令。如果删错了那只有跑路了~ 慎重慎重慎重😂

    2、语法格式

    rm [参数选项] [文件或目录]
    

    3、参数说明

    参数 参数说明
    -f 强制删除,忽率不存在的文件,不提示确认
    -r 递归删除目录及其内容

    4、实践操作

    ① 不带参数的删除,删除需要确认

    [root@xiezhr test]# ls
    a.txt  b.txt  c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# rm a.txt 
    rm: remove regular empty file ‘a.txt’? y
    [root@xiezhr test]# ls
    b.txt  c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ②强制删除文件,不需要确认

    [root@xiezhr test]# ls
    b.txt  c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# rm -f b.txt
    [root@xiezhr test]# ls
    c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    ③ 递归删除目录文件

    [root@xiezhr test]# tree dir1/
    dir1/
    └── a
        └── b
            └── t.txt
    
    2 directories, 1 file
    [root@xiezhr test]# rm -rf dir1/
    [root@xiezhr test]# ls
    c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt
    

    注意:数据无价,慎重、慎重、慎重

    • 尽量用mv代替rm ,先将文件移动到其他目录/tmp,类似于windows的垃圾回收站
    • 删除前必须备份,即使只是删除一个很不起眼的文件
    • 如果非要用到“rm -rf”,一定要确认好路径,别来个rm -rf/ 那就真的玩完了,跑路都是小事,如果造成损失可能要负法律责任。

    chown 改变文件或目录的用户用户组

    1、简介

    chown 是change owner 英文的缩写,用于改变文件或目录的所属用户和用户组

    2、语法格式

    chown [参数选项] [用户:用户组] [文件或目录]
    
    chown 用户 文件或目录       # 仅仅授权用户
    chown :组 文件或目录        # 仅仅授权组
    chown 用户:组 文件或目录    # 不仅授权用户,还授权组
    

    3、参数说明

    参数 参数说明
    -R 递归更改目录的用户和用户组

    4、实践操作

    ① 更改文件的用户和组

    [root@xiezhr test]# ll c.txt
    -rw-r--r-- 1 root root 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chown xiezhr:xiezhr c.txt
    [root@xiezhr test]# ll c.txt 
    -rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ② 递归更改目录即目录下所有目录及文件的用户和用户组属性

    [root@xiezhr test]# ll -d dir
    drwxr-xr-x 3 root root 4096 Mar 13 16:08 dir
    [root@xiezhr test]# chown -R xiezhr.xiezhr dir/
    [root@xiezhr test]# ll -d dir
    drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
    

    chmod 改变文件或目录的权限

    1、简介

    chmod 是change mode 英文单词的缩写,用户改变文件或目录的权限。该命令只有文件的属主和root用户可以使用

    2、语法格式

    chmod [参数选项] [模式选项] [文件或目录]
    

    我们输入如下命令后,会显示文件或目录的详细信息。那么开头的一堆东西代表什么呢?

    [root@xiezhr test]# ll
    total 20
    -rw-r--r-- 1 xiezhr xiezhr    0 Mar 14 22:37 c.txt
    drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
    drwxr-xr-x 2 root   root   4096 Mar 10 23:38 dir3
    

    如上图所示,

    • Linux权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

    • 第一位代表文件类型,-表示普通文件 d 表示目录

    • r是read的缩写,代表可读权限 对应4

    • w是write的缩写,代表可写权限 对应2

    • x是execute的缩写,代表可执行权限 对应1

    • -没有任何权限 对应0

    • a 是all 的缩写,代表所有等于u、g、o的综合

    • u 是user的缩写,代表文件拥有者

    • g 是group的缩写,代表用户组

    • o 是other的缩写,代表其他用户

    3、参数说明

    参数 参数说明
    -R 递归处理指定目录及其子目录下的所有文件

    4、实践操作
    ① 设置所有权限为空

    [root@xiezhr test]# ll c.txt 
    -rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod a= c.txt 
    [root@xiezhr test]# ll c.txt 
    ---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ② 设置文件拥有者具有文件可执行属性

    [root@xiezhr test]# ll c.txt 
    ---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod u+x c.txt 
    [root@xiezhr test]# ll c.txt 
    ---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ②设置文件组具有文件可写权限

    [root@xiezhr test]# ll c.txt 
    ---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod g+w c.txt 
    [root@xiezhr test]# ll c.txt 
    ---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ③ 设置其他用户具有文件可读权限

    [root@xiezhr test]# ll c.txt 
    ---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod o+r c.txt 
    [root@xiezhr test]# ll c.txt
    ---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ④ 多个权限一起

    [root@xiezhr test]# ll c.txt 
    ---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod ugo+x c.txt 
    [root@xiezhr test]# ll c.txt 
    ---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ⑤ 撤销其他用户可执行权限

    [root@xiezhr test]# ll c.txt 
    ---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod o-x c.txt 
    [root@xiezhr test]# ll c.txt
    ---x-wxr-- 1 xiezhr xiezhr    0 Mar 14 22:37 c.txt
    

    ⑥ 通过数字设置文件拥有者可读可写可执行、用户组可读可执行、其他用户可读可执行

    [root@xiezhr test]# ll c.txt 
    ---x-wxr-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    [root@xiezhr test]# chmod 755 c.txt 
    [root@xiezhr test]# ll c.txt
    -rwxr-xr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
    

    ⑦使用【-R】参数递归授予dir目录下所有文件权限

    [root@xiezhr test]# ll dir
    total 8
    -rw-r--r-- 1 xiezhr xiezhr   90 Mar 13 15:24 a2.txt
    -rw-r--r-- 1 xiezhr xiezhr    0 Mar 10 23:39 b.txt
    -rw-r--r-- 1 xiezhr xiezhr    0 Mar 10 23:39 c.txt
    drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
    [root@xiezhr test]# chmod -R 755 dir/
    [root@xiezhr test]# ll dir
    total 8
    -rwxr-xr-x 1 xiezhr xiezhr   90 Mar 13 15:24 a2.txt
    -rwxr-xr-x 1 xiezhr xiezhr    0 Mar 10 23:39 b.txt
    -rwxr-xr-x 1 xiezhr xiezhr    0 Mar 10 23:39 c.txt
    drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
    

    chgrp 更改文件用户组

    1、简介

    chgrp 是change group 的缩写,仅仅用于改变文件的用户组。chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。一般我们都使用chown 命令

    2、语法格式

    chgrp [参数选项] [用户组] [文件或目录]
    

    3、参数说明

    参数 参数说明
    -R 递归更改文件的用户组

    4、实践操作

    ①修改文件组属性

    [root@xiezhr test]# ll a.txt 
    -rw-r--r-- 1 root root 0 Mar 15 21:35 a.txt
    [root@xiezhr test]# chgrp xiezhr a.txt 
    [root@xiezhr test]# ll a.txt 
    -rw-r--r-- 1 root xiezhr 0 Mar 15 21:35 a.txt
    

    ② 递归改变文件用户组属性

    [root@xiezhr test]# ll dir3/
    total 0
    -rw-r--r-- 1 root root 0 Mar 15 21:37 a.txt
    -rw-r--r-- 1 root root 0 Mar 15 21:37 b.txt
    [root@xiezhr test]# chgrp -R xiezhr dir3/
    [root@xiezhr test]# ll dir3/
    total 0
    -rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 a.txt
    -rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 b.txt
    

    ln 硬链接与软连接

    1、简介

    ln 是link英文单词缩写,功能是创建文件间的链接(链接分为软链接和硬链接)

    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

    那么什么是硬链接?什么又是软链接呢?

    【软链接】

    • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
    • 2.软链接可以 跨文件系统 ,硬链接不可以
    • 3.软链接可以对一个不存在的文件名进行链接
    • 4.软链接可以对目录进行链接

    【硬链接】

    • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
    • 2.不允许给目录创建硬链接
    • 3.硬链接只有在同一个文件系统中才能创建

    2、语法格式

    
    

    3、参数说明

    参数 参数说明
    无参数 创建硬链接
    -s 创建硬链接

    4、实践操作

    ①为a.txt 创建软连接linka。如果a.txt丢失,linka失效

    [root@xiezhr dir]# ll
    total 4
    -rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
    [root@xiezhr dir]# ln -s a.txt linka
    [root@xiezhr dir]# ll
    total 4
    -rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
    lrwxrwxrwx 1 root root  5 Mar 15 22:28 linka -> a.txt
    

    ② 给文件a.txt创建硬链接,lna,a.txt与lna的各项属性相同

    [root@xiezhr dir]# ll
    total 4
    -rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
    lrwxrwxrwx 1 root root  5 Mar 15 22:28 linka -> a.txt
    [root@xiezhr dir]# ln a.txt lna
    [root@xiezhr dir]# ll
    total 8
    -rw-r--r-- 2 root root 17 Mar 15 22:25 a.txt
    lrwxrwxrwx 1 root root  5 Mar 15 22:28 linka -> a.txt
    -rw-r--r-- 2 root root 17 Mar 15 22:25 lna
    

    总结:

    • 【删除软连接文件,对源文件及硬链接文件无影响】删除软连接linka,对a.txt和lna无影响
    • 【删除硬链接文件,对源文件及软链接文件无影响】删除硬链接lna,对a.txt和linka无影响
    • 【删除源文件,对硬链接文件无影响,但会导致软链接失效】 删除a.txt,对lna无影响,linka链接失效
    • 【只有同事删除源文件、硬链接文件才会真正删除整个文件】删除lna、a.txt 整个文件才会被删除

    1、简介

    我们使用cat/more 查看软链接文件时,只能查看源文件内容,不能查看软链接的时哪个文件。这时候readlink就派上用场了

    2、语法格式

    readlink [参数选项] [文件]
    

    3、参数说明

    一般不加参数

    4、实践操作

    ① 查看软链接linka

    [root@xiezhr dir]# cat linka
    ffdfdfadf
    fdfdf
    
    [root@xiezhr dir]# readlink linka
    a.txt
    

    find 查找目录下的文件

    1、简介

    find 根据根据意思,你可能就知道其功能了。find用户查找目录下的文件,同时也可以调用其他命令执行相应操作

    2、语法格式

    find [路径] [操作语句] [执行的动作]
    

    3、参数说明

    参数 参数说明
    pathname 命令所查找的路径,常用的.表示当前路径,/表示系统根目录
    -maxdepth levels 查找的最大目录级数,leves 为自然数
    -name 按照文件名查找文件,支持*、?、[] 通配符
    -type 查找某一类型的文件① b[块设备文件] ② c[字符设备文件] ③ d[目录] ④ p[管道文件] ⑤ l[符号链接文件] ⑥ f[普通文件] ⑦s[stocket文件]
    -exec 对匹配的文件执行该参数所给出的shell命令
    取反
    -a 取交集,and
    -o 取并集,or

    4、实践操作

    ① 【-name】根据文件名检索

    • 区分大小写,需要忽略文件名中的大小写,可以使用 -iname参数
    • 可配合通配符"*"、"?" 使用
    • "?" 可以表示任意一个单一的符号
    • "*" 可以表示任意数量(包括 0)的未知符号
    # 查找 /home/test 目录下所有文件名以 .txt 结尾的文件
    [root@xiezhr test]# find /home/test/ -name '*.txt'
    /home/test/.d.txt
    /home/test/dir/a.txt
    /home/test/dir3/b.txt
    /home/test/dir3/a.txt
    /home/test/a.txt
    /home/test/tt.txt
    /home/test/c.txt
    /home/test/xiezhr.txt
    
    # 查找 /home/test 目录下所有文件名刚好为 1 个字符的文件
    [root@xiezhr test]# find /home/test/ -name '?.txt'
    /home/test/dir/a.txt
    /home/test/dir3/b.txt
    /home/test/dir3/a.txt
    /home/test/a.txt
    /home/test/c.txt
    

    ② 【-type】 根据文件类型检索

    # 查找 /home/test 目录下所有java普通文件 下面命令中f 代表普通文件。上面参数中已说明
    [root@xiezhr test]# find /home/test/ -type f -name '*.java'
    /home/test/user.java
    /home/test/money.java
    /home/test/test.java
    /home/test/xiezhr.java
    

    ③ 【-atime -mtime】查找指定时间内修改过的文件

    # 查找当前目录,一天内访问过的文件 .表示当前路径,-1表示一天内
    [root@xiezhr test]# find . -atime -1
    ./user.java
    ./dir/linka
    ./dir/lna
    ./dir/a.txt
    ./money.java
    ./test.java
    ./xiezhr.java
    
    # 在/home/test 目录下,查找2天内修改过的文件
    [root@xiezhr test]# find /home/test/ -mtime -2
    /home/test/
    /home/test/user.java
    /home/test/dir
    /home/test/dir/linka
    /home/test/dir/lna
    

    参照上图所示

    ④ 【!】 进行反向查找

    # 查找当前目录下所有目录
    [root@xiezhr test]# find -type d
    .
    ./dir5
    ./xiezhr
    ./xiezhr/test
    ./dir
    ./dir3
    ./dir_bak
    # 查找当前目录下非目录的文件
    [root@xiezhr test]# find ! -type d
    ./user.java
    ./.d.txt
    ./dir/linka
    ./dir/lna
    ./dir/a.txt
    ./money.java
    ./dir3/b.txt
    ./dir3/a.txt
    ./test.java
    

    ⑤【-size】 根据文件大小查找

    如下命令中

    • "+" 表示大于
    • "-" 表示小于
    • "c" 表示字节
    • "k" 表示kb
    • "M" 表示Mb
    • "G" 表示Gb
    [root@xiezhr test]# find -size +200c
    .
    ./dir5
    ./xiezhr
    ./xiezhr/test
    ./dir
    ./dir3
    ./dir_bak
    

    ⑥ 【-perm】 根据文件权限查找

    # 检索 /home/test 目录下权限为 rw-r--r-- 的文件
    [root@xiezhr test]# find /home/test/ -perm u=rw-,g=r--,o=r--
    /home/test/user.java
    /home/test/.d.txt
    /home/test/dir/lna
    /home/test/dir/a.txt
    /home/test/money.java
    

    上面列子可以写成如下

    [root@xiezhr test]# find /home/test/ -perm 644
    /home/test/user.java
    /home/test/.d.txt
    /home/test/dir/lna
    /home/test/dir/a.txt
    /home/test/money.java
    

    ⑦ 查找当前目录下所有普通问及那,并用ls -l 命令将其列出来

    [root@xiezhr test]# find -type f -exec ls {} \;
    ./user.java
    ./.d.txt
    ./dir/lna
    ./dir/a.txt
    ./money.java
    

    上述列子中

    • -exec 后面的时操作命令,可以是ls、rm、delete 等命令
    • 命令最后以;结尾,考虑到到各个系统;可能有不同含义,所以在前面加上\进行转义
    • {} 表示前面find 命令查到的结果,{} 前后必须要有空格

    在目录中查找n天以前的文件并删除它,实际工作中我们会经常用到。

    我们在服务器上部署的应用程序一般都会输出日志文件,时间一长可能日志文件会成百上千,一下就把你的磁盘空间给撑满了。

    这时候下面命令就显得很重要了。
    一般情况下,这些命令我们我们会配置到Linux任务调度中自动执行

    [root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -exec rm -f {} \;
    [root@xiezhr test]#
    

    或者

    # | 表示管道符号 xargs是一个向其他命令传递参数的过滤器。后面都会说到
    # 下面命令表示 find 查找到的普通文件 传递给rm -f 执行
    [root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 |xargs rm -f
    [root@xiezhr test]#
    

    或者

    [root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -delete
    [root@xiezhr test]#
    

    ⑨ 将查找到的文件移动到另一个目录下

    # 利用xargs -i 命令将find 查找当前目录下的所有java文件作为参数传递给mv命令
    [root@xiezhr test]# find -type f -name "*.java" |xargs -i mv {} dir3/
    [root@xiezhr test]# ls dir3
    a.txt  b.txt  money.java  test.java  user.java  xiezhr.java
    

    我们想将/home/test 目录下多个的高清电影发给好兄弟,这时就需要筛选出当前目录下所有电影并进行压缩

    [root@xiezhr test]# ls
    a.txt  c.txt  dir  dir3  dir5  dir_bak  tt.txt  xiezhr  xiezhr.txt  化学资料.mp4  数学资料.mp4  物理.mp4
    [root@xiezhr test]# find . -name "*.mp4" -exec tar -czvf movie.tar.gz {} \;
    ./数学资料.mp4
    ./物理.mp4
    ./化学资料.mp4
    [root@xiezhr test]# ls
    a.txt  c.txt  dir  dir3  dir5  dir_bak  movie.tar.gz  tt.txt  xiezhr  xiezhr.txt  化学资料.mp4  数学资料.mp4  物理.mp4
    

    movie.tar.gz 就是最后压缩后的文件

    xargs 将标准输入转换成命令行参数

    1、简介

    xargs 是 extended arguments 单词的缩写。它是命令传递参数的一个过滤器。xargs在上一个例子中已经用到过。它能够捕获一个命令的输出,然后传递给另外一个命令

    2、语法格式

    xargs [参数选项]
    

    3、参数说明

    参数 参数选项
    -n 指定每行的最大参数量n,可以将输入的文本划分为多行,每行n个参数,默认空格分隔
    -d 自定义分隔符
    -i 以{}替代前面的结果

    4、实践操作

    ① 多行输入变单行

    [root@xiezhr test]# clear
    [root@xiezhr test]# cat test.txt 
    1 2 3 4 5
    6 7 
    8 9
    10 11 12 13
    
    14 15 17 18
    [root@xiezhr test]# xargs < test.txt 
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18
    

    ② 通过【-n】指定每行的输出个数

    [root@xiezhr test]# cat test.txt 
    1 2 3 4 5
    6 7 
    8 9
    10 11 12 13
    
    14 15 17 18
    [root@xiezhr test]# xargs -n  4 < test.txt 
    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 17
    18
    

    ③ 通过【-d】自定义分隔符

    [root@xiezhr test]# echo "xiezhr-的- 个人公众号是:-XiezhrSpace" | xargs -d- -n4
    xiezhr 的  个人公众号是: XiezhrSpace
    

    ④ 通过【-I】可以指定一个替换的字符串

    # xargs -i 参数可以让{}替代前面find查找到的内容
    [root@xiezhr test]# find . -name "*.mp4"|xargs -i mv {} dir/
    [root@xiezhr test]# ls
    a.txt  c.txt  dir  dir3  dir5  dir_bak  movie.tar.gz  test.txt  tt.txt  xiezhr  xiezhr.txt
    
    # -I 参数可以指定其他字符代替{},本例中则使用[] 替代{}
    [root@xiezhr test]# ls
    a.txt  c.txt  dir  dir2  dir3  dir5  dir_bak  movie.tar.gz  test.txt  tt.txt  xiezhr  xiezhr.txt
    [root@xiezhr test]# find . -name "*.txt"|xargs -I [] cp [] dir3
    cp: ‘./dir3/b.txt’ and ‘dir3/b.txt’ are the same file
    cp: ‘./dir3/a.txt’ and ‘dir3/a.txt’ are the same file
    

    rename 重命名文件

    1、简介

    rename 根据名字就可以知道是重命名

    2、语法格式

    rename from to file
    

    3、参数说明

    • from 表示需要替换或者需要处理的字符(一般是文件名的一部分或扩展名)
    • to 把前面的from 代表的内容替换成to代表的内容
    • file 表示待处理的文件,可以用"*"通配所有文件

    4、实践操作

    [root@xiezhr dir5]# ll
    total 0
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315_unfidend.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316_unfidend.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317_unfidend.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318_unfidend.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319_unfidend.jpg
    [root@xiezhr dir5]# rename "_unfidend" "" *
    [root@xiezhr dir5]# ll
    total 0
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318.jpg
    -rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319.jpg
    

    file 显示文件类型

    1、简介

    file 我们都知道是文件的意思。其作用就是用于显示文件类型。

    2、语法格式

    file [参数选项] [文件或目录]
    

    3、参数说明

    一般不加参数

    4、实践操作

    [root@xiezhr dir5]# file xie_20220315.jpg 
    xie_20220315.jpg: empty
    

    md5sum 计算和校验文件的MD5值

    1、简介

    md5sum 用于计算和校验文件的MD5值。世界上没有完全相同的两片叶子,md5是一种不可逆的加密算法。我们可以通过比较两个文件的md5值来判断文件有没有被修改过。

    2、语法格式

    md5 [参数选项] [文件]
    

    3、参数说明

    参数 参数说明
    -c 从指定文件中读取MD5校验值,并进行校验

    4、实践操作

    ① 生成一个文件的md5值

    [root@xiezhr test]# md5sum a.txt 
    d41d8cd98f00b204e9800998ecf8427e  a.txt
    

    ②【-c】参数判断文件是否被篡改

    -c参数来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致则文件没被修改,如果不一致则文件被篡改了。

    [root@xiezhr dir6]# ls
    xiezhr.txt
    [root@xiezhr dir6]# md5sum xiezhr.txt 
    d41d8cd98f00b204e9800998ecf8427e  xiezhr.txt
    [root@xiezhr dir6]# md5sum xiezhr.txt >data.md5
    [root@xiezhr dir6]# echo "个人公众号:XiezhrSpace" >> xiezhr.txt 
    [root@xiezhr dir6]# md5sum xiezhr.txt 
    8e32899aa04a3a842df366cdd883cdbf  xiezhr.txt
    [root@xiezhr dir6]# md5sum -c data.md5 
    xiezhr.txt: FAILED
    md5sum: WARNING: 1 computed checksum did NOT match
    

    这期内容就到这,下期根据思维导图就到了文件内容操作相关的命令使用了。

    涉及到的命令有:cat、more、head、tail、less、cut、join、sort等等

    敬请期待哦(●’◡’●)

    专栏目录:快速上手Linux核心命令专栏目录

    上一篇:快速上手Linux核心命令(二):关机、重启

    下一篇:快速上手Linux核心命令(四):文件内容相关命令

  • 相关阅读:
    我的创作二周年纪念日
    3.Layui3个基本元素
    oracle的控制文件的隐含参数
    Gopro hero5运动相机格式化后恢复案例
    python机器人编程——基于单目视觉、固定场景下的自动泊车(下)
    面试24K字节测试开发岗被血虐,到底具有怎样的技术才算高级水平?
    elasticsearch数据备份与恢复(kibana操作)
    基于simulink的微电网虚拟同步发电机vsg控制系统仿真
    Qt和PyQt和PySide之间的关系
    【liuyubobobo-玩转Leetcode算法面试】【00】课程概述
  • 原文地址:https://www.cnblogs.com/xiezhr/p/17343212.html