0

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

 1 year ago
source link: https://www.cnblogs.com/xiezhr/p/17343212.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2381533-20230422153917415-258289401.png

cd 切换目录

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 显示当前路径

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

2、语法格式

pwd [参数选项]

3、参数说明

一般不需要加参数

4、实践操作

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

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

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

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 创建目录

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 以树形结构显示目录下的内容

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 创建空白文件或改变文件的时间戳属性

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 复制文件或目录

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 移动或重命名文件

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 删除文件或目录

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 改变文件或目录的用户用户组

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 改变文件或目录的权限

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
2381533-20230422153917472-1009246901.png
2381533-20230422153917300-763613992.png

如上图所示,

  • 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 更改文件用户组

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 硬链接与软连接

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 整个文件才会被删除

redlink 查看符号连接文件的内容

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

2、语法格式

readlink [参数选项] [文件]

3、参数说明

一般不加参数

4、实践操作

① 查看软链接linka

[root@xiezhr dir]# cat linka
ffdfdfadf
fdfdf

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

find 查找目录下的文件

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
2381533-20230422153917311-1122605318.png

参照上图所示

  • -4 代表文件更改时间距离现在4天以内
  • +4 代表文件更改时间距离现在4天以前
  • 4 表示距离现在第四天

④ 【!】 进行反向查找

# 查找当前目录下所有目录
[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 将标准输入转换成命令行参数

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 重命名文件

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 显示文件类型

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

2、语法格式

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

3、参数说明

一般不加参数

4、实践操作

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

md5sum 计算和校验文件的MD5值

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核心命令(四):文件内容相关命令


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK