写点什么

Linux 之旅 - 入⻔命令集 - 文件管理(1/2)

用户头像
诚义舅
关注
发布于: 2021 年 02 月 27 日

登录进一个操作系统以后,第一件要做的事通常是浏览目录和文件。此处,我们就从文件管理开始梳理入门命令集。

关于文件操作的命令集非常丰富,尤其是与读写相关的,我们将分为两篇来梳理。本篇是基本操作,下一篇是文件的分析和归档等操作(用命令分析文件中的内容是 Linux 文件操作的一个利器)。

【注:此处命令集之间先后依赖关系不强,可从目录跳到需要的操作命令进行实验】


文件管理命令集


1. 浏览目录

1.1 切换工作目录

1.1.1 切换到指定目录下

cd ${某个目录名}cy@cy-trip:~/Documents$ cd Linux_tripcy@cy-trip:~/Documents/Linux_trip$ 
复制代码


注: 如果不指定目录名,则切换到 ${HOME}下面,就是当前登录账户的主目录。


1.1.2 切换到之前离开的目录

cd -cy@cy-trip:~/Documents/Linux_trip$ cd -/home/cy/Documentscy@cy-trip:~/Documents$ cy@cy-trip:~/Documents$ cd -/home/cy/Documents/Linux_tripcy@cy-trip:~/Documents/Linux_trip$
复制代码


从哪来就到哪去,即上次切换过来的目录,反复运行"cd -"就是来回切换工作目录。


1.1.3 切换到用户主目录

cd ~cy@cy-trip:~/Documents/Linux_trip$ cd ~cy@cy-trip:~$ pwd/home/cy
复制代码


切换到用户主目录,等同于"cd ${HOME}"和"cd"。


1.2 创建目录

mkdir ${目录名}cy@cy-trip:~/Documents/Linux_trip$ mkdir garden
复制代码


mkdir -p ${目录名}cy@cy-trip:~/Documents/Linux_trip$ mkdir -p garden/trees
复制代码


(parent)可以创建多级目录(如 dir_a/dir_aa),即使目录已经存在也不会报错。


1.3 删除目录

rmdir ${目录名}# rmdir只能删除空目录cy@cy-trip:~/Documents/Linux_trip$ rmdir gardenrmdir: failed to remove 'garden': Directory not emptycy@cy-trip:~/Documents/Linux_trip$ mkdir empty_gardency@cy-trip:~/Documents/Linux_trip$ rmdir empty_garden# 删除trees和他的父目录,但是父目录不为空,所以报错cy@cy-trip:~/Documents/Linux_trip$ rmdir -p garden/treesrmdir: failed to remove directory 'garden': Directory not empty# 上次操作已经删除cy@cy-trip:~/Documents/Linux_trip$ rmdir garden/treesrmdir: failed to remove 'garden/trees': No such file or directory# 父目录garden里面有其他文件cy@cy-trip:~/Documents/Linux_trip$ ls gardendir_a  dir_b  file_list.txt
复制代码


只有目录为空(即不存在任何文件或者目录)时才可以运行成功。否则会报错"Directory not empty"。


1.4 打印当前工作路径

pwdcy@cy-trip:~/Documents/Linux_trip$ pwd/home/cy/Documents/Linux_trip
复制代码


2. 查看文件

2.1 列显文件

2.1.1 显示最近修改过的文件的详细信息

ls -lrt# 文件名左边显示的是该文件的修改时间,最近的修改的在最下面显示cy@cy-trip:~/Documents/Linux_trip$ ls -lrttotal 12drwxrwxr-x 4 cy cy 4096 Feb 17 14:33 gardendrwxrwxr-x 2 cy cy 4096 Feb 17 14:57 forest-rw-rw-r-- 1 cy cy   13 Feb 17 14:58 mountains
复制代码


2.1.2 显示目录下的所有文件(含隐藏的文件)

ls -a# -a选项会显示出来隐藏的文件(以“.”开头)cy@cy-trip:~/Documents/Linux_trip$ ls -lrtatotal 24drwxr-xr-x 4 cy cy 4096 Feb 16 10:15 ..drwxrwxr-x 4 cy cy 4096 Feb 17 14:33 gardendrwxrwxr-x 2 cy cy 4096 Feb 17 14:57 forest-rw-rw-r-- 1 cy cy   13 Feb 17 14:58 mountains-rw-rw-r-- 1 cy cy   10 Feb 17 15:15 .myprofiledrwxrwxr-x 4 cy cy 4096 Feb 17 15:15 .
复制代码


2.1.3 显示文件类型

ls -F ${你的文件}# -F选项会在文件名的最后显示出来文件的类型,“/”表示目录,“*”表示可执行的文件,...cy@cy-trip:~/Documents/Linux_trip$ ls -lrtaFtotal 28drwxr-xr-x 4 cy cy 4096 Feb 16 10:15 ../drwxrwxr-x 4 cy cy 4096 Feb 17 14:33 garden/drwxrwxr-x 2 cy cy 4096 Feb 17 14:57 forest/-rw-rw-r-- 1 cy cy   13 Feb 17 14:58 mountains-rw-rw-r-- 1 cy cy   10 Feb 17 15:15 .myprofile-rwxrw-r-- 1 cy cy   13 Feb 17 15:21 executable_file*drwxrwxr-x 4 cy cy 4096 Feb 17 15:21 ./
复制代码


2.1.4 以更可读的格式显示文件大小

ls -lh ${你的文件}# -h选项把文件的大小带上单位显示如:1K 234M 2G,如此处4096变成了4.0Kcy@cy-trip:~/Documents/Linux_trip$ ls -lrtFhtotal 16Kdrwxrwxr-x 4 cy cy 4.0K Feb 17 14:33 garden/drwxrwxr-x 2 cy cy 4.0K Feb 17 14:57 forest/-rw-rw-r-- 1 cy cy   13 Feb 17 14:58 mountains-rwxrw-r-- 1 cy cy   13 Feb 17 15:21 executable_file*
复制代码


2.1.5 显示文件的类型

file ${你的文件}# 显示文件的类型,如纯文本、目录、perl脚本等cy@cy-trip:~/Documents/Linux_trip$ file gardengarden: directorycy@cy-trip:~/Documents/Linux_trip$ file *executable_file: POSIX shell script, ASCII text executableforest:          directorygarden:          directorymountains:       ASCII text
复制代码


2.2 查找文件

2.2.1 locate

类似桌面索引,就是 google 或者 baidu 等搜索引擎公司推出的桌面版工具,为本机的所有文件创建检索索引到本地数据库里,方便像搜索引擎一样搜本机的文件。如果没有该工具,请通过 root 用户安装,updatedb 操作可以更新索引数据库。


locate ${你的文件名关键字}# 搜索文件名中包含“dir_a”字样的文件cy@cy-trip:~/Documents/Linux_trip$ locate dir_a/home/cy/Documents/Linux_trip/file_system_cmds/dir_a/home/cy/Documents/Linux_trip/file_system_cmds/dir_a/dir_ac/home/cy/Documents/Linux_trip/file_system_cmds/dir_a/dir_ac/dir_ac.testfile/home/cy/Documents/Linux_trip/file_system_cmds/dir_a/xml_in_dir_a.xml.gz/home/cy/Documents/Linux_trip/file_system_cmds/dir_a/xml_in_dir_a_2.xml
复制代码


2.2.2 find

毋庸置疑,Linux 下查找文件的神器就是 find,功能非常灵活强大。


2.2.2.1 删除 7 天以前的文件

# -type f表示文件类型是普通文件# -mtime +7表示修改时间为7*24h之前# -delete表示执行删除动作find ${某目录} -type f -mtime +7 -delete
复制代码


2.2.2.2 查找关键字

# 在${某目录}下查找名字是*.xml或者*.txt文件(-type f),# 找到以后,在文件中过滤字符(grep list),# 过滤操作以“\;”结尾,# 如果过滤出来“list”字样,则打印出该文件名(-print)cy@cy-trip:~/Documents/Linux_trip$ find ./ -type f \( -name "*.txt" -o -name "*.xml" \) -exec grep list {} \; -print测试find grep : file_list.txt./garden/file_list.txt
复制代码


2.2.2.3 将文件备份后移动到处理路径下

这可能是不得已的笨拙处理,在第三日文件系统管理中将介绍什么情况下会有坑,如何避免,这里仅举例一个实现的方法。


# -mmin +2表示修改时间为2分钟以前(2分钟以内没有修改),常用来判断文件是否传输完毕# cp表示复制(copy)# mv表示移动(改名,即move)cy@cy-trip:~/Documents/Linux_trip$ find ${某目录} -type f -mmin +2 -exec cp {} ../backup/. \; -exec mv {} ../execute/. \;
复制代码


2.2.2.4 find 的常用检测条件

检测条件描述-cmin n 文件状态(内容或者属性)变化的时间(单位是分钟),最近 n 分钟以内用-n,n 分钟以前就用+n-atime n 文件的访问时间(单位是 24 小时),最近 n 天以内用-n,n 天以前就用+n-cnewer file 状态变化时间比文件 file 晚-newer file 修改时间比文件 file 晚-empty 空文件或者目录-iname pattern 类似于-name,不区分大小写-mmin n 文件被修改的时间(单位是分钟),最近 n 分钟以内用-n,n 分钟以前就用+n-mtime n 文件被修改的时间(单位是 24 小时),最近 n 天以内用-n,n 天以前就用+n-name pattern 文件或者目录名满足 pattern 格式,区分大小写-perm mode 指定 mode 的文件,可以是数字格式或者符号格式-user user_name 文件的属主是 user_name 的文件或者目录-o 前后两个检测条件是或的关系,前面的检测成功则不必检测后者-a 前后两个检测条件是与的关系,前面的检测失败则不必检测后者!表示否定,如! -name ".txt"表示文件名不为".txt"()一组检测条件,需要用"\"屏蔽其在 shell 中的含义,\( tester1 -o tester2 \)


2.2.2.5 find 的常用执行动作

执行动作描述-print 默认操作,输出匹配到的文件或者目录名到标准输出(屏幕)-delete 删除匹配到的文件-ls 列显匹配的文件-quit 一旦匹配成功就退出-exec 用户自定义的操作,如前文的 grep,自定义操作以";"结束,需要用"\"屏蔽其在 shell 中的含义,即以\;结尾


2.2.2.6 find 的常用选项

常用选项描述-depth 引导 find 处理目录之前先处理目录里的文件-maxdepth levels 检索进入目录的最大层级数-mindepth levels 检索进入目录的最小层级数-mount 不遍历挂载的其他文件系统


2.3 读写文件

作为操作系统的鼻祖,计算机当初最大的需求就是处理文本,所以在 Linux(含 unix 系列)都有大量的读写文件的好工具。


2.3.1 显示文件内容(cat 和 zcat)

2.3.1.1 显示单个文件的内容

cat ${你的文件}# 通过cat 显示file_list.txt内容如下cy@cy-trip:~/Documents/Linux_trip/garden$ cat file_list.txt这里是一个文本文件,保存了文件列表的信息:total 8drwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_adrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b测试find grep : file_list.txt
复制代码


2.3.1.2 显示文件中的不可见字符

cat -TE ${你的文件}# 通过cat 显示file_list.txt的不可见字符:# 其中T选项表示显示tab(制表符)符合为^I# E选项表示显示一行的结束为$,这一惯例在Linux大量工具中是通用的,在以后的几日里大家都会发现这个规律cy@cy-trip:~/Documents/Linux_trip/garden$ cat -TE file_list.txt这里是一个文本文件,保存了文件列表的信息:$total 8$^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a$^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b$$测试find grep :^I^Ifile_list.txt$file_list.txt 最后一行$
复制代码


2.3.1.3 显示文件中的行号

cat -n ${你的文件}# 通过cat 显示file_list.txt内容的不可见字符和行号# 注:-n选项为第5行也显示了行号,-b选项不为空行显示行号cy@cy-trip:~/Documents/Linux_trip/garden$ cat -TEn file_list.txt     1  这里是一个文本文件,保存了文件列表的信息:$     2  total 8$     3  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a$     4  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b$     5  $     6  测试find grep :^I^Ifile_list.txt$     7  file_list.txt 最后一行$
复制代码


2.3.1.4 合并显示文件的内容

cat ${你的文件1} ${你的文件2}# 显示file_list_another.txt的内容cy@cy-trip:~/Documents/Linux_trip/garden$ cat -nTE file_list_another.txt     1  这里是另一个文本文件,保存了另一个文件列表的信息:$     2  total 8$     3  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a_another$     4  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b_another$     5  测试find grep :^I^Ifile_list_another.txt$     6  file_list_another.txt 最后一行$     # 合并显示file_list_another.txt和file_list.txt两个文件# cat本来就是连接(concatenate)文件的缩写cy@cy-trip:~/Documents/Linux_trip/garden$ cat -nET file_list*.txt     1  这里是另一个文本文件,保存了另一个文件列表的信息:$     2  total 8$     3  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a_another$     4  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b_another$     5  测试find grep :^I^Ifile_list_another.txt$     6  file_list_another.txt 最后一行$     7  这里是一个文本文件,保存了文件列表的信息:$     8  total 8$     9  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a$    10  ^Idrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b$    11  $    12  测试find grep :^I^Ifile_list.txt$    13  file_list.txt 最后一行$
复制代码


2.3.1.5 zcat 显示压缩文件的内容(不解压)

zcat ${你的压缩文件}cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt *.txttotal 16-rw-rw-r-- 1 cy cy  225 Feb 21 21:24 file_list.txt-rw-rw-r-- 1 cy cy  268 Feb 21 21:33 file_list_another.txt# 压缩两个文本文件cy@cy-trip:~/Documents/Linux_trip/garden$ gzip *.txt# 两个文件压缩以后以"gz"结尾,是压缩格式的文件,无法正常显示文本内容cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt *.txt*-rw-rw-r-- 1 cy cy 201 Feb 21 21:24 file_list.txt.gz-rw-rw-r-- 1 cy cy 225 Feb 21 21:33 file_list_another.txt.gzcy@cy-trip:~/Documents/Linux_trip/garden$ cat file_list.txt.gz�^2`file_list.txt{�����g3�?���dǪg�ڟ�Y$����~Oϓ�s����dW                                                     �i��                                                         W<���d��g�����U�_���`�řRT^B�Fɕ db`i�`�lN�����������BJfQ|"I�����m�~�~jZf^�BzQj��gZfNj|Nfq�^IE O�ٜ����z���          ��O�"cy@cy-trip:~/Documents/Linux_trip/garden$ 
# 通过zcat可以正常显示文本文件的内容cy@cy-trip:~/Documents/Linux_trip/garden$ zcat file_list_another.txt.gz file_list.txt.gz这里是另一个文本文件,保存了另一个文件列表的信息:total 8 drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_a_another drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_b_another测试find grep : file_list_another.txtfile_list_another.txt 最后一行这里是一个文本文件,保存了文件列表的信息:total 8 drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_a drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_b
测试find grep : file_list.txtfile_list.txt 最后一行# 显示以后,两个文件并没有解压缩,仍是压缩格式cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt *.txt*-rw-rw-r-- 1 cy cy 201 Feb 21 21:24 file_list.txt.gz-rw-rw-r-- 1 cy cy 225 Feb 21 21:33 file_list_another.txt.gzcy@cy-trip:~/Documents/Linux_trip/garden$ file *.txt*file_list_another.txt.gz: gzip compressed data, was "file_list_another.txt", last modified: Sun Feb 21 13:33:32 2021, from Unix, original size modulo 2^32 268file_list.txt.gz: gzip compressed data, was "file_list.txt", last modified: Sun Feb 21 13:24:14 2021, from Unix, original size modulo 2^32 225
复制代码


2.3.2 less is more

少就是多的哲学理念,意味着在 Linux 中将鼓励用 less 替代 more,less 可以上下翻页,可以搜索文本,甚至可以显示上述压缩文件的内容,可以使用 vi 编辑器的浏览命令(除了编辑命令),确实非常强大。


less ${你的文件}cat ${你的文件} | less# 解压一个文件(后续详细介绍)cy@cy-trip:~/Documents/Linux_trip/garden$ gunzip file_list.txt.gzcy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt *.txt*-rw-rw-r-- 1 cy cy 225 Feb 21 21:24 file_list.txt-rw-rw-r-- 1 cy cy 225 Feb 21 21:33 file_list_another.txt.gzcy@cy-trip:~/Documents/Linux_trip/garden$ file *.txt*file_list_another.txt.gz: gzip compressed data, was "file_list_another.txt", last modified: Sun Feb 21 13:33:32 2021, from Unix, original size modulo 2^32 268file_list.txt:            UTF-8 Unicode text# 通过less打开的文件可以进行搜索,此处搜索关键字"dir",匹配到"dir"的文本处将是高亮显示的# 见附录中关于vi编辑器的详细介绍,操作步骤如下:先按"/",然后输入关键字“dir”,按回车执行命令,最后按"q"退出lesscy@cy-trip:~/Documents/Linux_trip/garden$ less file_list_another.txt.gz
复制代码


[图片上传失败...(image-47ec08-1614440061215)]


# 请你也试一试下面的操作cy@cy-trip:~/Documents/Linux_trip/garden$ cat -nTE file_list.txt | less
复制代码


2.3.3 掐头去尾

2.3.3.1 显示文件前部(head)

head -n# head -n1 读取文件的首行cy@cy-trip:~/Documents/Linux_trip/garden$ head -n1 file_list.txt这里是一个文本文件,保存了文件列表的信息:# head -n9 读取文件的前9行cy@cy-trip:~/Documents/Linux_trip/garden$ head -n9 file_list.txt这里是一个文本文件,保存了文件列表的信息:total 8    drwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a    drwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b
测试find grep : file_list.txt第7行第8行第9行# head -vn5 -v 表示总是在最上面显示文件名cy@cy-trip:~/Documents/Linux_trip/garden$ head -vn5 file_list.txt==> file_list.txt <==这里是一个文本文件,保存了文件列表的信息:total 8 drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_a drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_b
# head -vc10 -c显示文件的最前指定数量个比特(bytes)cy@cy-trip:~/Documents/Linux_trip/garden$ head -vc10 file_list.txt==> file_list.txt <==这里是�cy@cy-trip:~/Documents/Linux_trip/garden$
# head -n-9 数量前面加“-”(负数)表示显示除了这些数量的最前部分,此处是去除最后9行,显示文件的前部cy@cy-trip:~/Documents/Linux_trip/garden$ head -n-9 file_list.txt这里是一个文本文件,保存了文件列表的信息:total 8 drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_a drwxrwxr-x 2 cy cy 4096 2月 16 14:20 dir_b
测试find grep : file_list.txt第7行第8行第9行第10行第11行第12行第13行第14行第15行第16行第17行第18行测试一下掐头去尾的操作倒数第10行

复制代码


2.3.3.2 显示文件尾部(tail)

选项与 head 相似,见上一节(head),tail 显示的是文件的尾部。有一个选项很有用,-f 通常用来显示正在写入的文件(如监控日志文件的变化)

[图片上传失败...(image-a7af05-1614440061215)]


2.3.4 复制文件(cp)

2.3.4.1 递归目录内容复制

cp -r# 直接复制目录会出错,使用-r选项可以递归复制目录的内容cy@cy-trip:~/Documents/Linux_trip$ ls gardendir_a  dir_b  file_list_another.txt.gz  file_list.txtcy@cy-trip:~/Documents/Linux_trip$ man cpcy@cy-trip:~/Documents/Linux_trip$ cp garden garden_bakcp: -r not specified; omitting directory 'garden'cy@cy-trip:~/Documents/Linux_trip$ ls garden_bakls: cannot access 'garden_bak': No such file or directorycy@cy-trip:~/Documents/Linux_trip$ cp -r garden garden_bakcy@cy-trip:~/Documents/Linux_trip$ ls garden_bakdir_a  dir_b  file_list_another.txt.gz  file_list.txt
复制代码


2.3.4.2 覆盖文件前提醒确认

cp -i# 如果目标文件是已经存在的文件,就可能造成意外覆盖,使用-i选项会做提醒确认cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy  520 Feb 22 21:36 file_list.txt-rw-rw-r-- 1 cy cy  520 Feb 23 21:51 file_list.txt.bak# 文件被覆盖,有误操作的风险cy@cy-trip:~/Documents/Linux_trip/garden$ cp file_list.txt file_list.txt.bakcy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 22 21:36 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 21:53 file_list.txt.bak# 选择不覆盖“n”,操作前确认cy@cy-trip:~/Documents/Linux_trip/garden$ cp -i file_list.txt file_list.txt.bakcp: overwrite 'file_list.txt.bak'? ncy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 22 21:36 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 21:53 file_list.txt.bak
复制代码


2.3.4.3 只复制有最新修改的文件

cp -u# 请注意文件的修改时间,只有最新的修改才会复制,否则不会复制cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 22 21:36 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 21:53 file_list.txt.bak# file_list.txt没有file_list.txt.bak更新,没有复制cy@cy-trip:~/Documents/Linux_trip/garden$ cp -u file_list.txt file_list.txt.bakcy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 22 21:36 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 21:53 file_list.txt.bak# file_list.txt.bak比file_list.txt.bak更新,执行了复制cy@cy-trip:~/Documents/Linux_trip/garden$ cp -u file_list.txt.bak file_list.txtcy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 23 21:53 file_list.txt.bak-rw-rw-r-- 1 cy cy 520 Feb 23 22:08 file_list.txt
复制代码


2.3.4.4 提示所作的操作

cp -v# 同样是上一节的操作,-v选项会显示实际做的操作cy@cy-trip:~/Documents/Linux_trip/garden$ cp -uv file_list.txt.bak file_list.txtcy@cy-trip:~/Documents/Linux_trip/garden$ cp -uv file_list.txt file_list.txt.bak'file_list.txt' -> 'file_list.txt.bak'
复制代码


2.3.4.5 复制后保持修改时间和权限等属性

cp -p# 请留意文件的修改时间和权限cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt file_list.txt*-rw-rw-r-- 1 cy cy 520 Feb 23 22:08 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 22:11 file_list.txt.bak# 取消其他组用户的读权限cy@cy-trip:~/Documents/Linux_trip/garden$ chmod o-r file_list.txtcy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt-rw-rw-r-- 1 cy cy 520 Feb 23 22:11 file_list.txt.bakcy@cy-trip:~/Documents/Linux_trip/garden$ cp -p file_list.txt file_list.txt.bak# file_list.txt.bak的修改时间和权限与file_list.txt一致cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt.bak
复制代码


2.3.5 移动(改名)文件(mv)

mv 与 cp 的更深层次差异将在第三日(文件系统管理)中详细分析,那里也会讲到防御操作冲突的一些技巧。


2.3.5.1 基本操作

mv ${源文件} ${目标文件}# 与之前的cp相似,mv操作成功以后,原来的源文件将不再存在。cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt-rw-rw---- 1 cy cy 527 Feb 23 22:29 file_list.txt.bak# 改名cy@cy-trip:~/Documents/Linux_trip/garden$ mv file_list.txt file_list.txt.renamecy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 527 Feb 23 22:29 file_list.txt.bak-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt.renamecy@cy-trip:~/Documents/Linux_trip/garden$ mv file_list.txt.rename file_list.txt.bakcy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt.bak# 将文件移动到目录中cy@cy-trip:~/Documents/Linux_trip/garden$ mv file_list.txt.bak dir_a/.cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*ls: cannot access 'file_list.txt*': No such file or directorycy@cy-trip:~/Documents/Linux_trip/garden$ ls -l dir_a/total 12-rw-rw---- 1 cy cy  520 Feb 23 22:08 file_list.txt.bak
复制代码


2.3.5.2 其他与 cp 相同含义的选项:

-i 表示目标文件存在时提醒确认;

-f 表示强制覆盖,不做提醒确认;

-r 表示递归复制整个目录;

-u 表示只移动有最新修改的文件

-v 表示显示所做的操作。


2.3.6 删除文件(rm)

Linux 没有回收站,我们删除文件以后不能从某处恢复的。有一些工具或许能通过分析磁盘来努力辨认删除前的文件,但这一操作会影响业务,也有时效性,还须避免磁盘被后续写入覆盖。所以我们直接认为简单粗暴的删除操作是不能恢复的。

我们有很多操作习惯可以避免这些危险操作,在后续的旅程中会讲到几个造成灾难的故事,以及常见的避免方法。


2.3.6.1 提醒确认是否删除

所以,我们第一个要讲的操作就是交互式确认是否当真要删除文件。


rm -i# 与操作者交互,输入“n”不会执行删除cy@cy-trip:~/Documents/Linux_trip/garden$ rm -i file_list.txtrm: remove regular file 'file_list.txt'? ncy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt-rw-rw---- 1 cy cy 520 Feb 23 22:44 file_list.txt
# 与操作者交互,输入“y”才会执行删除cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt.to_be_del-rw-rw---- 1 cy cy 520 Feb 23 22:08 file_list.txt.to_be_delcy@cy-trip:~/Documents/Linux_trip/garden$ rm -i file_list.txt.to_be_delrm: remove regular file 'file_list.txt.to_be_del'? ycy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt.to_be_dells: cannot access 'file_list.txt.to_be_del': No such file or directory
复制代码


2.3.6.2 强制删除

下面的操作将一次比一次危险,误操作将造成更大的麻烦。


rm -f# 强制删除,“-i”提示将失效,不再提示cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:44 file_list.txt-rw-rw---- 1 cy cy 520 Feb 23 22:44 file_list.txt.to_be_delcy@cy-trip:~/Documents/Linux_trip/garden$ rm -if file_list.txt.to_be_delcy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt*-rw-rw---- 1 cy cy 520 Feb 23 22:44 file_list.txt
复制代码


2.3.6.3 递归强制删除

我刚才在实验这个操作的时候,满手心的汗,已经多年没有直接用这个操作。

这是一个谈之色变的操作,我很可能后悔在本次旅程中呼叫他的名字,也就是很可能后悔让旅客知道他的存在。


rm -rf# 只要有权限,递归遍历指定的目录,做强制的删除cy@cy-trip:~/Documents/Linux_trip/garden$ cp -r dir_a dir_a_to_be_delcy@cy-trip:~/Documents/Linux_trip/garden$ ls -ltotal 20drwxrwxr-x 3 cy cy 4096 Feb 23 22:43 dir_adrwxrwxr-x 3 cy cy 4096 Feb 27 16:47 dir_a_to_be_deldrwxrwxr-x 2 cy cy 4096 Feb 16 14:25 dir_b-rw-rw-r-- 1 cy cy  225 Feb 21 21:33 file_list_another.txt.gz-rw-rw---- 1 cy cy  520 Feb 23 22:44 file_list.txt# 不能直接删除目录cy@cy-trip:~/Documents/Linux_trip/garden$ rm -f dir_a_to_be_delrm: cannot remove 'dir_a_to_be_del': Is a directory# -r选项递归删除目录cy@cy-trip:~/Documents/Linux_trip/garden$ rm -rf dir_a_to_be_delcy@cy-trip:~/Documents/Linux_trip/garden$ ls -ltotal 16drwxrwxr-x 3 cy cy 4096 Feb 23 22:43 dir_adrwxrwxr-x 2 cy cy 4096 Feb 16 14:25 dir_b-rw-rw-r-- 1 cy cy  225 Feb 21 21:33 file_list_another.txt.gz-rw-rw---- 1 cy cy  520 Feb 23 22:44 file_list.txt
复制代码


2.3.6.4 其他与 cp 相同含义的选项:

-v 表示显示所做的操作。


发布于: 2021 年 02 月 27 日阅读数: 14
用户头像

诚义舅

关注

还未添加个人签名 2021.02.18 加入

还未添加个人简介

评论

发布
暂无评论
Linux之旅 - 入⻔命令集 - 文件管理(1/2)