跳到主要内容

Linux 命令初识第 2 课:文件增删改查

目标:能在 Linux 里创建、复制、移动、删除文件和目录,会查看文件内容、实时盯日志,会用 vim 改一个配置文件。 用时:约 40 分钟。全部在 Ubuntu 里敲。


0. 先建一个练习场​

本课会删文件,只在练习目录里操作:

mkdir -p ~/practice
cd ~/practice

为什么放在 ~ 而不是 /mnt/d:Linux 自己的目录速度快,而且练坏了也不影响 Windows 的文件。


1. 增:创建​

创建目录与文件:mkdir、touch 和花括号展开

命令作用例子
mkdir 目录创建目录mkdir src
mkdir -p a/b/c一次创建多层,已存在也不报错(parents)mkdir -p myapp/src/handler
touch 文件创建空文件;文件已存在则只更新修改时间touch main.go

花括号展开:一次建一批​

mkdir -p myapp/{src,config,logs}
# 等价于 mkdir -p myapp/src myapp/config myapp/logs

touch myapp/src/{main,router,handler}.go
# 等价于 touch myapp/src/main.go myapp/src/router.go myapp/src/handler.go

注意:花括号里逗号前后不能有空格,写成 {src, config} 就不对了。


2. 查:查看文件内容​

查看文件与日志:cat、less、head、tail 和退出按键

命令作用什么时候用
cat 文件一次性输出全部内容短文件、配置文件
less 文件分页浏览长文件、大日志
head -n 10 文件看前 10 行(默认就是 10)看文件开头格式
tail -n 10 文件看最后 10 行看最新的日志
tail -f 文件实时追踪,文件有新内容就自动打印盯着服务日志排查问题 ← 后端天天用
file 文件判断文件类型不知道一个文件是文本还是二进制时

less 的按键​

按键作用
空格 / b下一页 / 上一页
↑ ↓一行一行滚
g / G跳到开头 / 结尾
/关键词 回车向下搜索,n 下一个匹配,N 上一个
q退出

tail -f 怎么退出​

按 Ctrl + C。tail -f 会一直等新内容,不会自己结束。


3. 改:复制、移动、重命名、编辑​

复制移动与编辑:cp、mv、目标目录状态和 vim 基本流程

cp —— 复制​

写法作用
cp a.txt b.txt复制文件,b.txt 已存在会被直接覆盖
cp a.txt dir/复制到目录里,文件名不变
cp -r dir1 dir2复制目录必须加 -r(recursive,递归)
cp -i a.txt b.txt覆盖前先问你(interactive)

mv —— 移动 / 重命名​

Linux 没有单独的重命名命令,重命名就是在同一个目录里移动:

mv old.txt new.txt # 重命名
mv new.txt src/ # 移动到 src 目录
mv src/new.txt ./a.txt # 移回来并改名

mv 移动目录不需要 -r。

vim —— 在终端里改文件(最低限度)​

在服务器上没有 VS Code,改配置只能用终端编辑器。vim 只需要会这几步:

vim app.yml 打开(文件不存在会新建)
i 进入「插入模式」,左下角显示 -- INSERT --,现在可以打字
Esc 退出插入模式,回到「普通模式」
:wq 回车 保存并退出(write + quit)
:q! 回车 不保存,强制退出(改乱了就用它)

最常见的坑:打开 vim 后直接打字,结果字母被当成命令,界面乱了。先按 Esc,再输入 :q! 回车,一切重来。


4. 删:删除​

通配符与安全删除:先核对路径、再删除并验证

命令作用
rm 文件删除文件
rm -i 文件删除前逐个确认
rm -r 目录删除目录及里面所有内容
rm -f 文件强制删除,不提示、文件不存在也不报错
rmdir 目录只能删空目录(安全,删不掉说明里面还有东西)

⚠️ rm 的三条铁律​

  1. Linux 没有回收站,rm 删了就是没了。
  2. rm -rf 之前,先 pwd 确认自己在哪,再 ls 确认要删的是什么。
  3. 路径里有变量或通配符时格外小心:rm -rf / 和 rm -rf ./ 只差一个点。

5. 通配符:一次操作一批文件​

通配符匹配例子
*任意多个字符(包括 0 个)ls *.go 所有 go 文件
?恰好一个字符ls app?.log 匹配 app1.log,不匹配 app10.log
[abc]括号里的任意一个字符ls app[12].log
rm logs/*.log # 删掉 logs 下所有 .log 文件
cp src/*.go /tmp/ # 复制所有 go 文件

不确定通配符会匹配到什么时,先用 ls 代替 rm 跑一遍,看看列出来的是不是你想删的。


6. 跟着敲一遍​

cd ~/practice
mkdir -p demo/{a,b}
ls demo
touch demo/a/{1,2,3}.txt
ls demo/a
cp demo/a/1.txt demo/b/
ls demo/b
mv demo/b/1.txt demo/b/one.txt
ls demo/b
cp demo/a demo/c # 猜一猜:会成功吗?
cp -r demo/a demo/c
ls demo/c
rmdir demo/c # 猜一猜:会成功吗?
rm demo/c/*.txt
rmdir demo/c
cat /etc/os-release
head -n 3 /etc/os-release
rm -r demo
ls

每敲一条,先猜结果,再看输出对不对。


7. 练习题​

题目在本文件夹的 题目解答.md 里,把每题的命令、输出和回答写在 解答: 下面,做完告诉我,我来批改。


8. 课后​

  • 提交:01-环境准备-01-linux命令初识-第2课文件增删改查