CSDN博客-第三篇-Linux基础Day3-草稿
2026/7/31 5:27:12 网站建设 项目流程

Linux 基础 Day3:文件操作 · 文件查看 · 文件搜索(grep)


系列:粤嵌嵌入式培训学习笔记 (第 3 篇)
上一篇:Linux 基础 Day2:终端快捷键 · 文件系统 · 路径 · 文件类型 · 目录操作
下一篇:内容预告待定
环境:Ubuntu 22.04 · bash | 2026年7月23日


① 概览

Day2 学会了"找东西"(路径、目录),Day3 开始真正"操作文件"——创建、删除、复制、移动、查看、搜索。

模块涉及命令一句话
文件操作 ⭐touchrmcpmv增删改移,rm递归删除机制是重点
文件查看catmorelessheadtail小文件cat,大文件less,看头尾用head/tail
文件搜索 ⭐grepfindlocatewhichgrep 四大选项 + 正则行首行尾 / find 五大条件 / locate 快速查 / which 查命令位置
管道与输出|echo>>>管道串联命令 / echo 输出 + 覆盖写入>/ 追加写入>>

② 文件操作 ⭐

2.1 touch — 创建文件

touch文件路径

注意:touch的本职是更新文件时间戳,文件不存在时才顺便创建。

# 创建单个文件yueqian@st-vm:/mnt/hgfs/linux/20260723$touchtest1.txt yueqian@st-vm:/mnt/hgfs/linux/20260723$ls-l总计0-rwxrwxrwx1root root0111970test1.txt# 批量创建多个文件(空格分隔)yueqian@st-vm:/mnt/hgfs/linux/20260723$toucha.txt b.txt c.txt yueqian@st-vm:/mnt/hgfs/linux/20260723$toucha.c# 文件类型靠后缀区分# 用通配符只看 .txt 文件yueqian@st-vm:/mnt/hgfs/linux/20260723$ls-l*.txt-rwxrwxrwx1root root0111970a.txt-rwxrwxrwx1root root0111970b.txt-rwxrwxrwx1root root0111970c.txt-rwxrwxrwx1root root0111970test1.txt

2.2 rm — 删除文件或目录

核心规则:

删什么要不要-r举例
删文件不需要rm a.txt
删目录必须加rm -r dir/
递归删除机制(重点理解)
目录结构: aDir1 ├── bDir1 │ ├── cFile1 │ └── cFile2 └── bDir2 ├── cFile1 └── cFile2

执行rm -r ./aDir1的过程:从外层向内层查找 → 从内层向外层删除

① 删除:./aDir1/bDir1/cFile1 (最内层文件) ② 删除:./aDir1/bDir1/cFile2 (最内层文件) ③ 删除:./aDir1/bDir1 (空目录) ④ 删除:./aDir1/bDir2/cFile1 (最内层文件) ⑤ 删除:./aDir1/bDir2/cFile2 (最内层文件) ⑥ 删除:./aDir1/bDir2 (空目录) ⑦ 删除:./aDir1 (空目录)

🧠一句话:想删目录,先把它掏空。

实操演示
yueqian@st-vm:/mnt/hgfs/linux/20260723$mkdir-pless01/a/b less02/a/b less03/a less04/a test01 yueqian@st-vm:/mnt/hgfs/linux/20260723$touchless01/a/b/demo01.c test01/demo01.c demo01.c demo02.c demo01.txt# 删文件:直接 rm,不需要 -ryueqian@st-vm:/mnt/hgfs/linux/20260723$rmdemo01.c# ✅ 删文件成功# 删目录:不加 -r 就报错yueqian@st-vm:/mnt/hgfs/linux/20260723$rmless01 rm: 无法删除'less01':是一个目录# ❌ 报错yueqian@st-vm:/mnt/hgfs/linux/20260723$rm-rless01# ✅ 递归删除# 批量删除目录yueqian@st-vm:/mnt/hgfs/linux/20260723$rm-rless02 less03# 交互式删除(-i,每一步都确认)yueqian@st-vm:/mnt/hgfs/linux/20260723$rm-riless04 rm: 是否进入目录'less04'yesrm: 是否删除目录'less04/a'yesrm: 是否删除目录'less04'? no# 这里选了 no,目录保留# 通配符批量删yueqian@st-vm:/mnt/hgfs/linux/20260723$rm-r*.txt test*
重要选项
选项功能使用场景
-r递归删除目录及其内容删除目录时必须使用
-f强制删除,不确认批量删除或脚本中使用
-rf强制递归删除⚠️ 危险操作!删了无法恢复

⚠️rm -rf没有回收站。养成习惯:删之前先ls确认。


2.3 cp — 复制文件或目录

cp[选项]源路径 目标路径
基本用法
场景命令说明
文件 → 目录cp test1.txt less03/复制文件到目录,文件名不变
目录 → 目录cp -r aDir less03/复制目录必须-r
批量复制cp -r aDir bDir less03/多个源一次性复制到目标
拷贝 + 重命名

如果目标是文件名cp会在复制的同时重命名:

# 实操演示yueqian@st-vm:/mnt/hgfs/linux/20260723$mkdirless01 less02 less03 yueqian@st-vm:/mnt/hgfs/linux/20260723$mkdir-paDir/aDir1 bDir/bDir1 yueqian@st-vm:/mnt/hgfs/linux/20260723$touchtest1.txt less01/test1.txt less02/test1.txt# ----- 拷贝到目录 -----yueqian@st-vm:/mnt/hgfs/linux/20260723$cptest1.txt less03 yueqian@st-vm:/mnt/hgfs/linux/20260723$lsless03 test1.txt# 名字不变# ----- 拷贝 + 重命名 -----# 目标是个文件名,触发重命名yueqian@st-vm:/mnt/hgfs/linux/20260723$cptest1.txt less02/test2-副本.txt yueqian@st-vm:/mnt/hgfs/linux/20260723$lsless02 test1.txt test2-副本.txt# 同一目录下拷贝+重命名yueqian@st-vm:/mnt/hgfs/linux/20260723$cptest1.txt test1-副本.txt yueqian@st-vm:/mnt/hgfs/linux/20260723$lstest1.txt test1-副本.txt aDir bDir less01 less02 less03
常用选项
选项功能
-r递归复制,复制目录必须加
-i目标已有同名文件时,询问是否覆盖
# -i 交互确认:目标已有 test1.txt,问你要不要覆盖yueqian@st-vm:/mnt/hgfs/linux/20260723$cp-itest1.txt less03 cp: 是否覆盖'less03/test1.txt'yes

2.4 mv — 移动 / 重命名

mv[选项]源路径 目标路径

核心逻辑:移动和重命名是同一个命令——因为"重命名"本质上是把文件"移到新名字的位置"。

命令效果场景
mv a.txt ../bDir/移动a.txt 移到 …/bDir 目录下(bDir 必须已存在)
mv a.txt b.txt重命名同一目录下改名
mv a.txt ../b.txt移动 + 重命名移走并改名
mv aDir bDirbDir 存在→移动;bDir 不存在→重命名看目标存不存在
mv less02 less03 *.txt aDir批量移动多个源一起移
# 演示:mv aDir bDir 的两种情况mkdiraDir bDirmvaDir bDir# bDir 存在 → aDir 移入 bDir 内部lsbDir/# aDirmkdiraDirmvaDir newDir# newDir 不存在 → 重命名ls# newDir(没有 aDir 了)

💡mv移目录不需要-r——这一点和cp不一样,别搞混。


③ 文件查看

小文件用cat,大文件用less,看头尾用head/tail

3.1 cat — 查看文件内容(小文件)

cat/proc/cpuinfo# 全量输出cat-n/proc/cpuinfo# -n 显示行号

3.2 more — 分页查看

more/proc/cpuinfo
快捷键功能
空格键向下翻一页
回车键向下翻一行
q退出

3.3 less — 高级分页(推荐)

more强大,支持上下翻

less/proc/cpuinfoless-M/proc/cpuinfo# -M:左下角显示当前行范围
快捷键功能
空格键向下翻一页
b向上翻一页
方向键 ↑↓向上/向下翻一行
q退出

🆚more vs lessmore只能往下翻,less能上下翻。记法:less is more(less 功能更多)。

3.4 head — 查看文件头部

head/proc/cpuinfo# 默认前 10 行head-n5/proc/cpuinfo# 前 5 行,写法一head-5/proc/cpuinfo# 前 5 行,写法二(简写)

3.5 tail — 查看文件尾部

tail/proc/cpuinfo# 默认后 10 行tail-n5/proc/cpuinfo# 后 5 行,写法一tail-5/proc/cpuinfo# 后 5 行,写法二(简写)

④ 文件搜索 ⭐ grep

grep[选项]'待查找的字符串'文件路径# 引号可以省略,两种写法等价grep[选项]待查找的字符串 文件路径

常用选项

选项功能举例
-n显示行号grep -n 'apicid' /proc/cpuinfo
-c统计匹配行数(返回数字)grep -c 'apicid' /proc/cpuinfo
-i忽略大小写grep -i 'APICID' /proc/cpuinfo
-v反向搜索(显示不包含的行)grep -v 'processor' /proc/cpuinfo

实操演示

# 基本搜索yueqian@st-vm:/mnt/hgfs/linux/20260723$grep-n'apicid'/proc/cpuinfo14:apicid:015:initial apicid:041:apicid:142:initial apicid:1...# 搜索不存在的字符串 → 无输出(不会报错)yueqian@st-vm:/mnt/hgfs/linux/20260723$grep-ni'apicid2'/proc/cpuinfo yueqian@st-vm:/mnt/hgfs/linux/20260723$# 空,什么都没找到# -c:统计匹配行数yueqian@st-vm:/mnt/hgfs/linux/20260723$grep-ci'apicid'/proc/cpuinfo8# -v:反向搜索yueqian@st-vm:/mnt/hgfs/linux/20260723$grep-cv'apicid'/proc/cpuinfo100

⚠️-c-n不要一起用——统计只返回数字,显示行号没意义。

grep 正则表达式

^$让 grep 定位更精确。

行首匹配^:以指定字符序列开头:

grep-n'^apicid'/proc/cpuinfo# 只匹配 apicid 开头的行# apicid : 0 ← 匹配# initial apicid : 0 ← 不匹配(开头是 initial)

行尾匹配$:以指定字符序列结尾:

grep-n'[0-9]$'/proc/cpuinfo# 以数字结尾的行grep-n'[A-Za-z]$'/proc/cpuinfo# 以字母结尾的行

💡[0-9]表示 0~9 任意一个数字,[A-Za-z]表示任意一个字母。


find — 查找文件或目录

grep搜文件内容find搜文件本身——从磁盘遍历查找,精确但慢。

find检索路径[选项]参数
五大选项
选项功能举例
-name按名搜(区分大小写)find ./ -name "test.c"
-iname按名搜(忽略大小写)find ./ -iname test1.txt
-type按类型搜d目录 /f文件 /l链接
-size按大小搜+3M大于 /-3M小于
-mtime按修改时间搜-124h内 /+77天前

💡-size默认单位是 512 字节。加 M 表示 MB(如+3M= 大于 3MB)。

实操演示
# 当前目录找 test1.txt,忽略大小写find./-inametest1.txt# 根目录下大于 3MB 的文件find/-size+3M2>/dev/null|head-10# 只找 /var/log 下的 .log 普通文件find/var/log-typef-name"*.log"2>/dev/null# 当前目录下找名为 src 的目录find./-typed-name"src"# 24 小时内修改过的文件find/-mtime-12>/dev/null|head-10# 不加单位时的默认单位:3 单位 = 3 × 512 = 1536 字节find/-size+32>/dev/null|head-10

locate — 快速查找

find搜磁盘(慢但准),locate搜数据库(快但可能过时)。

locate[选项]文件或目录
选项功能
-c统计文件个数
-i忽略大小写
locate-itest.c# 忽略大小写搜,无需指定路径locate-c"*.txt"# 统计有多少 .txt 文件

⚠️locate不是实时搜磁盘,而是查预建的文件数据库(updatedb),每天自动更新一次。新创建的文件可能搜不到,需手动sudo updatedb

🆚 find vs locate
findlocate
查什么磁盘数据库
速度
准度准,实时可能过时
需指定路径需要不需要

which — 查找命令位置

想知道一个命令的绝对路径在哪,用which

whichls# 输出:/usr/bin/ls

管道|— 命令组合

前一个命令的输出,变成后一个命令的输入

# 先 ls -l 列出所有文件,再从结果中 grep 筛选出 .txt 结尾的ls-l|grep".txt$"# 先 cat 打开 cpuinfo,再用 grep -c 统计 cpuid 出现次数cat/proc/cpuinfo|grep-c'cpuid'

🧠管道|vs 重定向>:管道连接命令,重定向连接文件


echo — 输出字符串

echo"字符串">|>>文件路径
符号效果
>覆盖写入:先清空文件,再写入(文件不存在则创建)
>>追加写入:不清空,在文件末尾添加
# 覆盖写入(之前的内容被清空)echo"yueqian is good!">yueqian.txt# 追加写入(保留之前内容,新内容加在末尾)echo"kaige is good!">>yueqian.txt

⑤ 踩坑记录 ⭐

坑1:rm less01报"是一个目录"

  • 现象
    rm: 无法删除 'less01': 是一个目录
  • 根因:删文件不需要-r,但删目录必须加-r(递归删除)
  • 解决rm -r less01

坑2:cp aDir报"omitting directory"

  • 现象
    cp: -r not specified; omitting directory 'aDir'
  • 根因cp复制目录必须加-r
  • 解决cp -r aDir backup/

🆚 对比:mv移动目录不需要-rcp -r要加,mv不用加,这是最容易混的地方。

坑3:grep搜不到内容时没报错

  • 现象grep 'xxx' file执行后啥也没输出,不确定是没搜到还是命令写错了
  • 根因grep找不到匹配内容时,就是静默无输出,不是报错
  • 解决:不确定时用grep -c看统计数,返回 0 说明确实没有

⑥ 小结

今天完成touch创建 →rm -r递归删除 →cp -r递归复制 + 拷贝重命名 →mv移动/重命名 → 5 种查看(cat/more/less/head/tail)→grep四大选项 + 正则^$find五大条件 →locate快速查 →which查命令位置 → 管道|echo+>/>>

下一篇:待更新。


本文首发于 CSDN,转载请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询