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

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

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

1. 浏览目录

1.1 切换工作目录

1.1.1 切换到指定目录下

cd ${某个目录名}
cy@cy-trip:~/Documents$ cd Linux_trip
cy@cy-trip:~/Documents/Linux_trip$

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

1.1.2 切换到之前离开的目录

cd -
cy@cy-trip:~/Documents/Linux_trip$ cd -
/home/cy/Documents
cy@cy-trip:~/Documents$
cy@cy-trip:~/Documents$ cd -
/home/cy/Documents/Linux_trip
cy@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 garden
rmdir: failed to remove 'garden': Directory not empty
cy@cy-trip:~/Documents/Linux_trip$ mkdir empty_garden
cy@cy-trip:~/Documents/Linux_trip$ rmdir empty_garden
# 删除trees和他的父目录,但是父目录不为空,所以报错
cy@cy-trip:~/Documents/Linux_trip$ rmdir -p garden/trees
rmdir: failed to remove directory 'garden': Directory not empty
# 上次操作已经删除
cy@cy-trip:~/Documents/Linux_trip$ rmdir garden/trees
rmdir: failed to remove 'garden/trees': No such file or directory
# 父目录garden里面有其他文件
cy@cy-trip:~/Documents/Linux_trip$ ls garden
dir_a  dir_b  file_list.txt

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

1.4 打印当前工作路径

pwd
cy@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 -lrt
total 12
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

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

ls -a
# -a选项会显示出来隐藏的文件(以“.”开头)
cy@cy-trip:~/Documents/Linux_trip$ ls -lrta
total 24
drwxr-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
drwxrwxr-x 4 cy cy 4096 Feb 17 15:15 .

2.1.3 显示文件类型

ls -F ${你的文件}
# -F选项会在文件名的最后显示出来文件的类型,“/”表示目录,“*”表示可执行的文件,...
cy@cy-trip:~/Documents/Linux_trip$ ls -lrtaF
total 28
drwxr-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.0K
cy@cy-trip:~/Documents/Linux_trip$ ls -lrtFh
total 16K
drwxrwxr-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 garden
garden: directory
cy@cy-trip:~/Documents/Linux_trip$ file *
executable_file: POSIX shell script, ASCII text executable
forest:          directory
garden:          directory
mountains:       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 不遍历挂载的其他文件系统

3 读写文件

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

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

3.1.1 显示单个文件的内容

cat ${你的文件}
# 通过cat 显示file_list.txt内容如下
cy@cy-trip:~/Documents/Linux_trip/garden$ cat 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

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 最后一行$

3.1.3 显示文件中的行号

cat -n ${你的文件}
# 通过cat 显示file_list.txt内容的不可见字符和行号
# 注:-n选项为第5行也显示了行号,-b选项不为空行显示行号
cy@cy-trip:~/Documents/Linux_trip/garden$ cat -TEn file_list.txt1  这里是一个文本文件,保存了文件列表的信息:$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 最后一行$

3.1.4 合并显示文件的内容

cat ${你的文件1} ${你的文件2}
# 显示file_list_another.txt的内容
cy@cy-trip:~/Documents/Linux_trip/garden$ cat -nTE file_list_another.txt1  这里是另一个文本文件,保存了另一个文件列表的信息:$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*.txt1 这里是另一个文本文件,保存了另一个文件列表的信息:$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 最后一行$

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

zcat ${你的压缩文件}
cy@cy-trip:~/Documents/Linux_trip/garden$ ls -lrt *.txt
total 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.gz
cy@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 8drwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_a_anotherdrwxrwxr-x 2 cy cy 4096 2月  16 14:20 dir_b_another
测试find grep :       file_list_another.txt
file_list_another.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
file_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.gz
cy@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 268
file_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

3.2 less is more

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

less ${你的文件}
cat ${你的文件} | less
# 解压一个文件(后续详细介绍)
cy@cy-trip:~/Documents/Linux_trip/garden$ gunzip file_list.txt.gz
cy@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.gz
cy@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 268
file_list.txt:            UTF-8 Unicode text
# 通过less打开的文件可以进行搜索,此处搜索关键字"dir",匹配到"dir"的文本处将是高亮显示的
# 见附录中关于vi编辑器的详细介绍,操作步骤如下:先按"/",然后输入关键字“dir”,按回车执行命令,最后按"q"退出less
cy@cy-trip:~/Documents/Linux_trip/garden$ less file_list_another.txt.gz

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

3.3 掐头去尾

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 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
第7行
第8行
第9行
# head -vn5 -v 表示总是在最上面显示文件名
cy@cy-trip:~/Documents/Linux_trip/garden$ head -vn5 file_list.txt
==> 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# 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 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
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
测试一下掐头去尾的操作
倒数第10行

3.3.2 显示文件尾部(tail)

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

3.4 复制文件(cp)

3.4.1 递归目录内容复制

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

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.bak
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
# 选择不覆盖“n”,操作前确认
cy@cy-trip:~/Documents/Linux_trip/garden$ cp -i file_list.txt file_list.txt.bak
cp: overwrite 'file_list.txt.bak'? n
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

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.bak
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.bak比file_list.txt.bak更新,执行了复制
cy@cy-trip:~/Documents/Linux_trip/garden$ cp -u file_list.txt.bak file_list.txt
cy@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

3.4.4 提示所作的操作

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

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.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-r-- 1 cy cy 520 Feb 23 22:11 file_list.txt.bak
cy@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

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

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

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.rename
cy@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.rename
cy@cy-trip:~/Documents/Linux_trip/garden$ mv file_list.txt.rename file_list.txt.bak
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.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 directory
cy@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

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

-i 表示目标文件存在时提醒确认;
-f 表示强制覆盖,不做提醒确认;
-r 表示递归复制整个目录;
-u 表示只移动有最新修改的文件
-v 表示显示所做的操作。

3.6 删除文件(rm)

Linux没有回收站,我们删除文件以后不能从某处恢复的。有一些工具或许能通过分析磁盘来努力辨认删除前的文件,但这一操作会影响业务,也有时效性,还须避免磁盘被后续写入覆盖。所以我们直接认为简单粗暴的删除操作是不能恢复的。
我们有很多操作习惯可以避免这些危险操作,在后续的旅程中会讲到几个造成灾难的故事,以及常见的避免方法。

3.6.1 提醒确认是否删除

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

rm -i
# 与操作者交互,输入“n”不会执行删除
cy@cy-trip:~/Documents/Linux_trip/garden$ rm -i file_list.txt
rm: remove regular file 'file_list.txt'? n
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# 与操作者交互,输入“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_del
cy@cy-trip:~/Documents/Linux_trip/garden$ rm -i file_list.txt.to_be_del
rm: remove regular file 'file_list.txt.to_be_del'? y
cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l file_list.txt.to_be_del
ls: cannot access 'file_list.txt.to_be_del': No such file or directory

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_del
cy@cy-trip:~/Documents/Linux_trip/garden$ rm -if file_list.txt.to_be_del
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

3.6.3 递归强制删除

我刚才在实验这个操作的时候,满手心的汗,已经多年没有直接用这个操作。
这是一个谈之色变的操作,我很可能后悔在本次旅程中呼叫他的名字,也就是很可能后悔让旅客知道他的存在。

rm -rf
# 只要有权限,递归遍历指定的目录,做强制的删除
cy@cy-trip:~/Documents/Linux_trip/garden$ cp -r dir_a dir_a_to_be_del
cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l
total 20
drwxrwxr-x 3 cy cy 4096 Feb 23 22:43 dir_a
drwxrwxr-x 3 cy cy 4096 Feb 27 16:47 dir_a_to_be_del
drwxrwxr-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_del
rm: cannot remove 'dir_a_to_be_del': Is a directory
# -r选项递归删除目录
cy@cy-trip:~/Documents/Linux_trip/garden$ rm -rf dir_a_to_be_del
cy@cy-trip:~/Documents/Linux_trip/garden$ ls -l
total 16
drwxrwxr-x 3 cy cy 4096 Feb 23 22:43 dir_a
drwxrwxr-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

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

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

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

  1. Linux学习整理-网络命令集

    目录 前提 1. 机器IP地址查询 1.1 ifconfig 1.1.1 安装包 1.1.2 执行命令 1.1.3 拓展-ifconfig的其它用法 1.1.4 常用的属性说明 1.2 ip addr ...

  2. Linux压缩和解压缩命令集

    .tar文件 解压tar zxvf FileName.tar 打包tar czvf SourceName.tar DirName .gz文件 解压: gunzip FileName.gz gzip - ...

  3. Linux命令集(Linux文件管理命令--rm指令篇)

    Linux命令集(Linux文件管理命令--rm指令篇) Linux文件管理命令集(rm指令篇) 3. rm(remove) 1. 删除文件 2. 强制删除文件 3. 提示确认,删除前需逐一询问是否确 ...

  4. Linux命令集(Linux文件管理命令--rmdir指令篇)

    Linux命令集(Linux文件管理命令--rmdir指令篇) Linux文件管理命令集(rmdir指令篇) 5. rmdir(remove directory) 1. 删除空的目录 folder1 ...

  5. Linux之旅 13:磁盘配额与高级文件管理

    Linux之旅 13:磁盘配额与高级文件管理 图源:pixels 磁盘配额(quota)的应用与实践 什么是磁盘配额 磁盘配额的一般用途 限制某一用户组能使用的最大磁盘配额 限制某一用户的最大磁盘配额 ...

  6. Linux下 用cmp工具备份,Linux常用命令梳理——文件管理(一)

    由于本人目前仍是萌新一枚,所以<Linux常用命令梳理>系列仅依照个人目前掌握的知识,对一部分命令进行梳理,目的是为了对之前学到的知识进行巩固.当然了,如果机缘巧合被大家看到了,也欢迎各位 ...

  7. linux vi de ce,linux下vi命令Vi命令集

    linux下vi命令Vi命令集 熟悉VI 是学习UNIX 系统的一个关口 (feming) vi 是visual edit 的缩写 文本编辑器是所有计算机系统中最常用的一种工具.UNIX下的编辑器有e ...

  8. linux+后台运行+nohup,Linux后台运行命令集(、fg、bg、jobs、nohup、ctrl + z)

    Linux后台运行命令集(&.fg.bg.jobs.nohup.ctrl + z) 1).& 命令或进程最后加上"&",可以把此操作放到后台执行: 2).c ...

  9. linux集群命令关闭其中一台,自己整理的一点Linux命令集

    ----Linux命令---- 1.cd 命令集ifconfig/ip addr 检查IP地址 pwd 检查当前的位置 tab键 自动补齐(注意唯一性) cd命令是linux中最基本的命令语句,必须熟 ...

  10. linux文件管理命令ppt,linux命令以及文件管理.ppt

    linux命令以及文件管理 [LINUX常用命令详解] vi命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi ...

最新文章

  1. 连接不上ftp解决方案
  2. 只要有热情和方法就能学好Linux
  3. 计算机网络教会我们什么,日久见人心现实教会了我们什么叫人心的说说
  4. 库克:苹果收取 30% 佣金很合理!
  5. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
  6. 陆续放出各种安装及配置文档
  7. vertical-align属性探究
  8. 1000道Python题库系列分享七(30道)
  9. Django admin组件源码流程
  10. ubuntu防火墙问题
  11. Fedora音视频解码的配置
  12. 如何申请小程序账号及上线一个体验版小程序
  13. oracle蓝屏解决方法,win10系统蓝屏怎么办 蓝屏代码0x000007e的3种解决方法
  14. 学习CALCULATE函数(六)丨帕累托之累计求和
  15. 关闭amazon kindle 个人文档服务“请在48小时内点击下方以验证此请求”
  16. 互联网早报:京东健康宠物医院上线:注册医生超3000名 提供7X24在线健康咨询服务
  17. 炼乳可以做什么 炼乳的多种食用方法
  18. 关于华为校招面试的那些事儿
  19. 微信小程序开发初学:按钮 - button
  20. MPEG音频编码实验

热门文章

  1. 近期一些我寨采用的新芯片资料汇总(更新Rk3066)
  2. 万元大奖和Switch等你来拿,百度飞桨AI创造营带你出道
  3. HDU 4415 Assassin’s Creed
  4. html基础、h5c3高级c3动画 、 JavaScript初高级、css预处理器和git 部分面试题
  5. Hi3519V101运行MPP业务
  6. Google Guava简介
  7. 解决xcel数据导入MySQL数据库【日期数据格式混乱】的问题
  8. 图解FDISK与FORMAT命令分区与格式化
  9. NOI2016 滚粗记
  10. 【渝粤教育】国家开放大学2018年秋季 0284-21T外国文学 参考试题