缘博客
发布日期

Linux基础命令(二):文件操作与查找命令

作者
  • 姓名
    社交账号

本篇学习范围

上一篇解决了“怎样定位目录”,本篇开始真正操作文件。内容按最常见的工作顺序展开:

创建文件
查看文件
复制、移动或重命名
谨慎删除
按名称和大小查找

所有示例都建议在自己的 HOME 目录或专门的练习目录中执行。


touch:创建文件

touch 用于创建文件,基本语法为:

touch 文件路径

例如:

touch hello.txt
touch ~/linux-practice/notes.txt
touch ./logs/app.log

touch 没有必须学习的常用选项,重点在于参数必须是目标文件路径。路径可以使用绝对路径、相对路径和特殊路径符。

若目标文件不存在,touch 会创建一个空文件;若文件已存在,它通常不会清空内容,而会更新文件的时间戳。因此它适合初始化空文件或确保某个文件存在,不适合用来写入正文。


catmore:查看文件内容

cat:一次输出全部内容

cat 用于查看文件内容:

cat 文件路径

例如:

cat hello.txt
cat /etc/services

它会把文件全部输出到终端,适合内容较短的文本。文件过大时,输出会迅速滚过屏幕,不方便阅读。

more:分页查看长文件

more 同样用于查看文件,但支持分页:

more 文件路径

例如:

more /etc/services

more 的阅读界面中:

按键作用
空格向下翻一页
q退出查看

catmore 只负责查看,不会修改文件。对于可以自由前后翻页和搜索的大文件,实际环境中还常使用 less,但本课件的重点是先分清 cat 的“一次显示”和 more 的“分页显示”。


cp:复制文件和目录

cp 来自 copy,用于复制文件或目录:

cp [-r] 被复制对象 目标位置

复制文件:

cp hello.txt backup.txt
cp hello.txt ~/backup/

第一个命令会在当前目录创建 backup.txt;第二个命令会把 hello.txt 复制到 ~/backup/ 目录中。

复制目录时必须添加 -r

cp -r project project-backup
cp -r project ~/backup/

-r 表示递归复制,即把目标目录及其内部的子目录、文件一并复制。没有 -r 时,cp 不能完成普通目录的复制。

复制前建议先确认目标目录存在并且名称写对:

pwd
ls
ls ~/backup

这样可以避免把文件复制到错误位置或意外覆盖同名文件。


mv:移动文件、目录和重命名

mv 来自 move,用于移动文件或目录:

mv 被移动对象 目标位置

移动到已有目录:

mv hello.txt ~/backup/
mv project ~/archive/

目标路径不存在时,mv 会表现为重命名:

mv hello.txt hello-old.txt
mv project project-v2

因此同一个命令可以完成两类操作:

目标是否存在mv source target 的效果
target 是已有目录source 移入该目录
target 不存在source 改名为 target

mv 不需要 -r 才能移动目录。移动目录与复制目录不同,它只是改变目录位置或名称,并不是把全部内容另建一份副本。


rm:删除前必须确认

rm 来自 remove,用于删除文件或目录:

rm [-r] [-f] 文件或目录路径...

删除一个文件:

rm hello.txt

一次删除多个文件:

rm a.txt b.txt c.txt

删除目录时必须使用 -r

rm -r old-project
选项作用
-r递归删除目录及其内容
-f强制删除,不进行交互确认

是否出现确认提示取决于发行版、Shell 别名、权限和当前环境,不能把某一种表现当作 Linux 的固定规则。-f 会进一步抑制错误和确认信息,初学时一般没有必要使用。

rm 中的通配符

rm 可以使用 * 做模糊匹配:

模式匹配含义
test*名称以 test 开头的内容
*test名称以 test 结尾的内容
*test*名称中包含 test 的内容

例如:

rm test*

会删除当前目录中所有以 test 开头的匹配项。Shell 会在执行前先展开 *,所以实际被删除的文件可能比直觉中更多。

若匹配对象中包含目录,只有添加 -r 才能递归删除目录内容:

rm -r test*

这条命令风险更高,必须先用 ls test* 确认实际匹配结果。

删除命令的安全规则

rm 删除的内容通常不会进入回收站。含有 -r-f* 时风险会显著增加,特别是在 root 用户下。

执行前至少做这几件事:

pwd          # 确认当前位置
ls           # 查看当前目录的内容
ls test*     # 先观察通配符会匹配哪些内容

不要执行以根目录或系统目录为目标的递归强制删除命令,也不要为了“方便”长期使用 root 账号。练习删除时,先在 HOME 目录中创建专门的测试文件。


which:命令程序在哪里

终端中执行的很多命令,本体是系统中的可执行程序。which 可以查看某个命令会使用哪一个程序文件:

which 命令名

例如:

which ls
which java
which vim

输出通常是一个路径,例如 /usr/bin/ls。这有助于理解:ls 不是特殊语法,而是 Shell 在环境变量 PATH 指定的位置中找到并运行的程序。

which 只需要一个参数,即想查询的命令名;它不用于按任意文件名搜索,后者应当使用 find


find:按名称和大小查找文件

find 可以在指定目录树中搜索文件或目录。它功能强大,先掌握两种最常用条件即可。

按名称查找

基本语法:

find 起始路径 -name "名称模式"

示例:

# 从根目录开始找名为 test 的内容
find / -name "test"

# 在当前目录及子目录中找 config.yml
find . -name "config.yml"

# 在 /usr 下找名称含 centos 的内容
find /usr -name "*centos*"

名称模式中也可以使用 *

写法查找结果
find / -name "test*"名称以 test 开头
find / -name "*test"名称以 test 结尾
find / -name "*test*"名称中包含 test

引号很重要。它会阻止当前 Shell 提前展开 *,使通配模式作为一个整体传给 find

按文件大小查找

基本语法:

find 起始路径 -size [+|-]数字单位

其中:

组成部分含义
+大于指定大小
-小于指定大小
数字大小数值
kKB,使用小写 k
MMB
GGB

例如:

find / -size -10k
find /usr -size +100M
find / -size +1G

分别表示查找小于 10 KB、大于 100 MB 和大于 1 GB 的文件。

控制搜索范围

/ 开始搜索会遍历整个系统,可能耗时较长,也会遇到无权限读取的目录。优先选择更小、更符合目标的起始路径:

find ~ -name "*.txt"
find /usr -size +100M

如果只是在自己的项目中找文件,使用 find . ... 往往更快也更清晰。


本篇命令速查

目标命令
创建空文件touch 文件名
查看短文件cat 文件名
分页查看长文件more 文件名
复制文件cp 源文件 目标
复制目录cp -r 源目录 目标
移动或重命名mv 源 目标
删除文件rm 文件名
删除目录rm -r 目录名
查命令程序位置which 命令名
按名称查找find 路径 -name "模式"
按大小查找find 路径 -size +100M

下一篇:Linux基础命令(三):文本处理、重定向与Vim