适合人群:装好了 Ubuntu、打开终端后不知道能干嘛的纯小白。每一个命令都拆到"输入什么、看到什么、什么意思",你只需要跟着敲。
先搞清楚:学完 Day 1 卡在哪了?
Day 1 我们折腾了大半天,终于把 Ubuntu 装好、VS Code 连上、编译工具也能跑了。但打开终端后,光标在 $ 后面一闪一闪的------
你不知道自己在哪、不知道文件藏在哪里、不知道怎么新建、不知道怎么看内容。
Day 2-3 的目标非常实在:把最常用的文件操作命令练到肌肉记忆。这些命令就像吃饭用的筷子------平常用惯了不觉得,但一天不用浑身难受。
我把内容拆成三大块:
|-------|----------------------|-------------------|
| 板块 | 核心命令 | 一句话作用 |
| 认路与导航 | pwd、cd、ls | 搞清楚"我在哪"和"我要去哪" |
| 增删改 | mkdir、touch、cp、mv、rm | 创建、复制、移动、删除文件和文件夹 |
| 读内容 | cat、less、head、tail | 查看文件里面写了什么 |
学习方法建议:不要试图一次性背下来。打开终端,边看边敲,每个命令敲三遍以上。
第一部分:导航三件套 ------ 先学会"认路"
在讲具体命令前,有个概念必须先刻进 DNA,不然后面删文件的时候很可能删错。
绝对路径 vs 相对路径(一定要看懂,不然 rm 会出事)
什么是"路径"? 路径就是文件/文件夹的"家庭住址",用来告诉电脑你要找的东西在哪。Linux 里路径分两种:绝对的和相对的。
绝对路径:从根目录 / 开始写,完整描述位置。
- 根目录 / 是什么?你可以理解为"我的电脑"的 C 盘------它是整个文件系统的起点,所有东西都在它下面。
- 例子:/home/zhangsan/projects/hello.c
- 特点:不管你人在哪里,输入这个完整地址,都能准确找到目标。就像你的身份证号,全国唯一。
相对路径:以你当前所在的位置为参照物,描述目标在哪。
- 例子:./projects/hello.c(我脚下的 projects 文件夹里)
- 例子:../docs/readme.txt(我楼上的 docs 文件夹里)
- 特点:简短灵活,但依赖"你现在站哪"。就像你跟朋友说**"我左边三米处"**------朋友得先知道你在哪这句话才有意义。
四个特殊符号,以后天天见:
|----|----------|-------------------------------|
| 符号 | 含义 | 通俗类比 |
| . | 当前目录 | "我脚下" |
| .. | 上一级目录 | "楼上" |
| ~ | 当前用户的家目录 | "我家"(你的私人地盘,如 /home/zhangsan) |
| - | 上一个工作目录 | "我刚待的地方"(配合 cd - 使用,快速返回) |
⚠️ 血的教训 :很多新手用 rm -rf 删错了文件甚至删崩了系统,根本原因就是路径写错了。执行删除前,请跟我默念三件套:先用 pwd 确认位置 → 再用 ls 看目标长什么样 → 最后再动手。
命令1:pwd ------ "我在哪?"
全称:Print Working Directory(打印当前工作目录)
打开终端后第一件事永远是确认自己的位置。这个命令就是你的GPS 定位。
操作步骤:
- 打开 Ubuntu 终端(右键桌面 → "在终端中打开",或按 Ctrl + Alt + T)
- 输入以下命令,按回车:
bash
pwd # 显示我当前在哪个目录
- 你会看到类似这样的输出:
/home/zhangsan
这就告诉你:你现在在 /home/zhangsan 这个目录里。
命令2:cd ------ "我要去哪?"
全称:Change Directory(切换目录)
Linux 里最常用的命令,没有之一。
操作步骤(按顺序逐一敲一遍):
第 1 步:用绝对路径进入一个目录
bash
cd /home/zhangsan/Documents # 直接输入完整地址进 Documents 文件夹
pwd # 确认一下:输出 /home/zhangsan/Documents
第 2 步:用相对路径进入子目录
bash
cd ~ # 先回家
cd Documents # 用相对路径进入当前目录下的 Documents(不用写完整地址)
pwd # 确认:输出 /home/zhangsan/Documents
第 3 步:返回上一级
bash
cd .. # 回"楼上"(回到 /home/zhangsan)
pwd # 确认:输出 /home/zhangsan
第 4 步:连续往上跳
bash
cd /home/zhangsan/Documents/notes # 先进入一个深层目录(如果不存在就先 mkdir -p 创建)
cd ../.. # 一次性往上跳两级
pwd # 输出 /home/zhangsan
第 5 步:快速回家
bash
cd ~ # 回到家目录
# 或者直接输入 cd(不接任何参数),效果一样
cd
第 6 步:快速返回刚才的位置(非常实用!)
bash
cd /var/log # 先去一个别的地方
cd - # 立刻回到你刚才待的目录
# 终端会打印出你回到的路径,如 /home/zhangsan
小技巧 :输入目录名的时候按一下键盘上的 Tab 键,系统会自动帮你补全。比如输入 cd Doc 再按 Tab,自动变成 cd Documents/。这能少敲很多字,还能避免拼写错误。
常见坑预警:如果提示 cd: 没有那个文件或目录(No such file or directory),检查:①路径拼写是否正确;②大小写是否一致(Linux 严格区分大小写!Documents 和 documents 是两个不同的东西)。
命令3:ls ------ "这里面有什么?"
全称:LiSt(列出)
操作步骤:
第 1 步:最简用法
bash
ls # 列出当前目录下的所有文件和文件夹(只显示名字)
第 2 步:看详细信息
bash
ls -l # 长格式:显示权限、大小、修改时间等
你会看到类似这样的输出:
drwxr-xr-x 2 zhangsan zhangsan 4096 Jul 17 10:30 projects
-rw-r--r-- 1 zhangsan zhangsan 123 Jul 16 09:15 hello.c
每一行的第一个字符很重要:
- d 开头 = 这是一个目录(文件夹)
-
- 开头 = 这是一个普通文件
第 3 步:看隐藏文件
什么是隐藏文件? 文件名以 . 开头的文件默认不显示,通常是系统配置文件(如 .bashrc、.gitignore)。
bash
ls -a # 显示所有文件,包括 . 开头的隐藏文件
第 4 步:人性化的大小显示
bash
ls -lh # 文件大小显示为 1K、234M、2G 这样的可读格式
第 5 步:组合技(最常用的写法)
bash
ls -la # 等于 ls -l + ls -a,长格式 + 显示隐藏文件
ls -lah # 再叠加 -h,长格式 + 隐藏文件 + 人类可读大小
第 6 步:查看其他目录
bash
ls /var/log # 不切换过去,直接看别的目录里有什么
ls -la /etc # 用组合技查看 /etc 目录
第二部分:增删改五兄弟 ------ 文件与目录的创建、复制、移动、删除
先把这五个命令的角色搞清楚:
|-------|----------------|---------------|-----------------------|
| 命令 | 全称 | 作用 | 类比 |
| mkdir | Make Directory | 创建新目录 | 新建文件夹 |
| touch | --- | 创建空文件 / 更新时间戳 | 新建空白文档 |
| cp | Copy | 复制文件或目录 | 复印一份 |
| mv | Move | 移动或重命名 | 剪切 + 粘贴,或者改名 |
| rm | Remove | 删除文件或目录 | 扔进垃圾桶(但 Linux 没有回收站!) |
命令4:mkdir ------ 创建目录
操作步骤:
第 1 步:创建单层目录
bash
cd ~ # 先回家
mkdir my_project # 在当前目录下创建一个叫 my_project 的文件夹
ls -l # 验证:你应该能看到 my_project
第 2 步:递归创建多层目录
什么是"递归"? 就是"如果中间缺少哪一层,自动帮我补上"。
bash
# 一次性创建三层嵌套目录,就算 parent 和 child 都不存在也能成功
mkdir -p parent/child/grandchild # -p 参数:自动创建不存在的父目录
ls -R parent # 验证:递归显示 parent 目录下的所有内容
第 3 步:批量创建
bash
mkdir dir_{1..5} # 花括号展开,一次性创建 dir_1 到 dir_5 五个目录
ls # 验证:能看到 dir_1 dir_2 dir_3 dir_4 dir_5
常见坑预警:如果不加 -p,当父目录不存在时会直接报错。比如 mkdir a/b/c 在 a 不存在的情况下会失败,必须改成 mkdir -p a/b/c。
命令5:touch ------ 创建空文件
操作步骤:
第 1 步:创建单个空文件
bash
touch main.c # 如果 main.c 不存在,创建一个 0 字节的空文件
ls -l main.c # 验证:文件大小为 0
第 2 步:批量创建
bash
touch src/main.c src/utils.c # 一次创建多个文件(src 目录要先存在)
第 3 步:更新已有文件的时间戳
bash
touch main.c # 如果 main.c 已经存在,不会改变内容,只把"最后修改时间"更新为现在
ls -l main.c # 观察时间戳的变化
注意:touch 只是"碰"一下文件,并不会编辑文件内容。真正写代码要用 VS Code、vim 或 nano。它最常见的用途就是快速占位------"我先建个空文件,内容后面再填"。
命令6:cp ------ 复制
操作步骤:
第 1 步:复制文件(最基础)
bash
cp hello.c hello_backup.c # 把 hello.c 复制一份,新文件叫 hello_backup.c
ls -l hello*.c # 验证:两个文件都在
第 2 步:复制整个目录
bash
cp -r projects projects_backup # -r 表示递归复制(把目录里的所有东西一并复制)
# 不加 -r 会报错:"cp: -r not specified; omitting directory 'projects'"
ls -l # 验证:两个目录都在
第 3 步:覆盖前先询问(强烈推荐)
bash
cp -i file1.txt file2.txt # 如果 file2.txt 已存在,会问你是否覆盖
# 终端会提示:cp: overwrite 'file2.txt'?
# 输入 y 按回车 = 覆盖,输入 n 按回车 = 跳过
第 4 步:复制到另一个目录
bash
cp file.txt ~/Documents/ # 把 file.txt 复制到 Documents 目录下,保持原名
cp file.txt ~/Documents/new_name.txt # 复制过去的同时改个名字
常见坑预警:复制目录时忘记加 -r 是最常见的错误。Linux 的逻辑是"你说复制目录但没加 -r,我理解成你搞错了,不给你执行"。
命令7:mv ------ 移动 或 重命名
mv 很妙:目标路径是目录则移动,目标路径是文件名则重命名。
操作步骤:
第 1 步:重命名文件
bash
mv hello.c main.c # 如果 main.c 不存在,hello.c 会被改名为 main.c
ls -l *.c # 验证:hello.c 消失了,出现了 main.c
第 2 步:移动到子目录
bash
mkdir src # 先建一个 src 目录
mv main.c src/ # 把 main.c 移动到 src 目录下
ls src/ # 验证:src 目录下有了 main.c
第 3 步:从子目录移回来
bash
mv src/main.c ./ # ./ 表示当前目录,把文件移回来
ls # 验证:main.c 又出现在当前目录了
第 4 步:覆盖前询问
bash
mv -i old.txt new.txt # 如果 new.txt 已存在,会问是否覆盖
命令8:rm ------ 删除(⚠️ 危险操作,Linux 没有回收站!)
⚠️ 重要警告:Linux 的 rm 没有回收站机制。删了就是真的没了,只能靠数据恢复工具(成功率不高且极其麻烦)。动手前务必确认三遍。
操作步骤:
第 1 步:删除单个文件
bash
rm file.txt # 删除 file.txt
ls # 验证:file.txt 已经消失
第 2 步:删除整个目录
bash
rm -r my_dir # -r 递归删除目录及其内部所有内容
第 3 步:强制删除(不询问,慎用!)
bash
rm -f file.log # -f 强制删除,即使文件只读也不会问你
# 配合 -r 就是核弹级命令
rm -rf 目录名 # 危险!不询问、递归删除整个目录,执行前务必确认 pwd 三次!
安全建议(请养成习惯):
- 用 rm -ri 代替 rm -r:每删一个文件都会问你确认,虽然慢但安全。
- 删之前先 ls 看一眼:确认目标目录里是什么。
- 用 mv 代替 rm:先 mv 目标 /tmp/ 移动到临时目录,过几天确认没用了再 rm。
bash
# 安全示范:先搬到临时目录"冷静期"
mv 不确定要不要删的目录 /tmp/
# 过几天确认没用了再真正删除
rm -r /tmp/不确定要不要删的目录
常见坑预警:rm -rf / 或 rm -rf /* 会删除整个系统,千万不要执行!很多"删库跑路"的段子就是从这里来的。
第三部分:读内容四大金刚 ------ 查看文件里面写了什么
|------|------------|-----------------|
| 命令 | 适用场景 | 一句话 |
| cat | 短文件(几十行) | 一口气全部打印到屏幕 |
| less | 长文件(几百行以上) | 分页翻看,像看电子书 |
| head | 只要开头几行 | 看文件头部(如 CSV 表头) |
| tail | 只要末尾几行 | 看日志最新输出(运维神器) |
命令9:cat ------ 一口气读完
全称:Concatenate(连接)
操作步骤:
第 1 步:查看短文件
bash
cat /etc/os-release # 查看系统版本信息(这个文件很短,适合 cat)
第 2 步:查看自己写的文件
bash
cat hello.c # 把 hello.c 的全部内容打印到屏幕上
第 3 步:合并多个文件
bash
echo "第一行" > a.txt # 先创建文件 a.txt,内容为"第一行"
echo "第二行" > b.txt # 创建文件 b.txt,内容为"第二行"
cat a.txt b.txt > merge.txt # 把 a.txt 和 b.txt 的内容拼接,输出到 merge.txt
cat merge.txt # 验证:先显示第一行,再显示第二行
缺点:如果文件有几千行,cat 会像瀑布一样刷屏,根本来不及看。这时候就该 less 出场了。
命令10:less ------ 分页慢慢读
这是程序员查看日志、阅读长文件的神器。
操作步骤:
第 1 步:打开文件
bash
less /var/log/syslog # 分页打开系统日志(如果提示权限不够,前面加 sudo)
第 2 步:显示行号
bash
less -N /var/log/syslog # -N 显示行号,方便定位
第 3 步:在 less 界面内的操作
进入 less 后,你的键盘控制力很强。记住下面几个键就够用了:
|---------|---------|----------------------|
| 按键 | 作用 | 记忆技巧 |
| 空格 或 f | 向下翻一页 | Forward |
| b | 向上翻一页 | Backward |
| 回车 | 向下翻一行 | --- |
| /关键词 回车 | 向下搜索关键词 | 输入后按 n 跳到下一个,N 跳到上一个 |
| ?关键词 回车 | 向上搜索关键词 | 同上 |
| g | 跳到文件开头 | Go to start |
| G | 跳到文件末尾 | Go to end |
| q | 退出 less | Quit |
小知识:Unix 哲学里有一句话------"less is more"。字面意思是"少即是多",但也暗指 less 命令比古老的 more 命令功能更强(less 支持向前翻页,more 只能往下翻)。
命令11:head ------ 只看开头几行
默认显示文件前 10 行,看 CSV 表头或日志头部最方便。
操作步骤:
第 1 步:默认看前 10 行
bash
head /var/log/syslog # 看系统日志的最前面 10 行
第 2 步:指定行数
bash
head -n 20 data.csv # 看 data.csv 的前 20 行(-n 指定行数)
第 3 步:批量看多个文件
bash
head -n 5 *.c # 看当前目录所有 .c 文件的前 5 行(每个文件会先显示文件名再显示内容)
命令12:tail ------ 只看末尾几行
默认显示文件最后 10 行。运维工程师几乎每天都会用它看日志。
操作步骤:
第 1 步:默认看最后 10 行
bash
tail /var/log/syslog # 看系统日志的最后 10 行
第 2 步:指定行数
bash
tail -n 100 app.log # 看 app.log 的最后 100 行
第 3 步:终极大招 ------ 实时跟踪(-f)
为什么这个很厉害? 当你调试程序或看持续写入的日志时,tail -f 会动态显示新写入的内容,就像看直播弹幕一样。
bash
tail -f /var/log/syslog # 实时监控系统日志,新增内容会立刻显示
# 看完后按 Ctrl + C 退出
实战场景:开两个终端窗口------一个跑你的程序(产生日志),另一个开 tail -f 日志文件,边运行边实时看报错,调试效率翻倍。
综合实战:用一个完整工作流串联所有命令
假设我们要为后续的 C 语言项目做准备,从头到尾演练一遍。
提示:下面每一条命令你都要亲自在终端里敲一遍。别复制粘贴------敲的过程就是记忆的过程。
第 1 步:确认出发点
bash
cd ~ # 回到我的地盘(家目录)
pwd # GPS 定位:确认在 /home/zhangsan(换成你的用户名)
第 2 步:创建项目目录结构
bash
mkdir -p c_project/src c_project/include c_project/bin # 一口气创建三层目录结构
# 解释:c_project 是项目根目录,src 放源代码,include 放头文件,bin 放编译产物
第 3 步:进入项目目录
bash
cd c_project # 进入项目根目录
pwd # 确认:/home/zhangsan/c_project
第 4 步:在 src 下创建源文件
bash
touch src/main.c src/utils.c # 在 src 目录下创建两个空 C 源文件
ls -l src/ # 验证:能看到 main.c 和 utils.c,大小都是 0
第 5 步:在 include 下创建头文件
bash
touch include/utils.h # 创建头文件(.h 文件是 C 语言的"目录/声明文件")
ls -l include/ # 验证:能看到 utils.h
第 6 步:查看整个项目结构
bash
ls -R # -R 递归显示所有子目录内容
# 如果没有 tree 命令,可以安装:sudo apt install -y tree
如果装了 tree,执行 tree . 会看到更直观的目录树:
. ├── bin ├── include │ └── utils.h └── src ├── main.c └── utils.c
第 7 步:复制一份 main.c 作为备份
bash
cp src/main.c src/main_backup.c # 复制 main.c,命名为 main_backup.c
ls -l src/ # 验证:现在 src 下有 3 个文件
第 8 步:重命名备份文件
bash
mv src/main_backup.c src/main_old.c # 把 main_backup.c 重命名为 main_old.c
ls -l src/ # 验证:main_backup.c 消失,main_old.c 出现
第 9 步:用 cat 快速查看文件内容
bash
cat include/utils.h # 目前是空文件,没有输出是正常的
# 以后往里面写了代码再 cat,就能看到内容了
第 10 步:查看系统日志(练习 head 和 tail)
bash
head -n 5 /var/log/syslog # 看日志头部 5 行
tail -n 20 /var/log/syslog # 看日志尾部 20 行
第 11 步:预热 ------ 用管道查看特定文件
bash
ls -la /etc/ | head -n 10 # 列出 /etc 目录内容,但只显示前 10 行(管道 | 是后续内容,先感受一下)
常见问题速查表(遇到问题先看这里)
|-----------------------------|--------------------|-------------------------------------------------------------------------|
| 症状 | 可能原因 | 解决办法 |
| 输入 cd 后什么都没发生 | cd 不带参数默认回家目录 | 正常现象。你只是回到了家目录 /home/你的用户名 |
| ls 找不到文件 | 路径拼错或大小写不对 | Linux 严格区分大小写!File.txt 和 file.txt 是两个不同的文件,仔细检查 |
| rm -rf 删错了文件 | 路径写错 / 手抖 | 立刻停止一切写入操作。尝试用 extundelete 等工具恢复(成功率不高)。唯一靠谱的解法:平时做好备份,或者用 mv 替代 rm |
| cat 大文件时内容疯狂刷屏 | cat 不适合看大文件 | 按 Ctrl + C 终止,改用 less 查看 |
| 按 Tab 键无法自动补全 | 拼写错误 或 该目录下没有匹配的文件 | 先 ls 看看实际有哪些文件,确认你输入的前几个字符是对的 |
| 绝对路径和相对路径混用搞混了 | 忘了自己当前在哪个目录 | 随时敲 pwd 确认当前位置;在执行 cp / mv 前先 echo 目标路径验证 |
| cp 目录时报错 omitting directory | 忘了加 -r 参数 | 复制目录必须加 -r:cp -r 源目录 目标目录 |
| mkdir 创建多层目录失败 | 父目录不存在且没加 -p | 用 mkdir -p a/b/c 替代 mkdir a/b/c |
| less 打开了不知道怎么退出 | 第一次用 less | 按键盘上的 q 键即可退出 |
| tail -f 停不下来 | 它在持续等待新内容 | 按 Ctrl + C 退出实时跟踪模式 |
总结
这一篇涉及 12 个命令,信息量不小。别试图一次背完------打开终端,每个命令敲三遍以上就行了。
回顾一下你学会的三套组合拳:
|---------|----------------------|-----------------------------|
| 类别 | 命令 | 口诀 |
| 导航三件套 | pwd cd ls | 定位 → 移动 → 查看 |
| 增删改五兄弟 | mkdir touch cp mv rm | 建目录 → 建文件 → 复制 → 移动/改名 → 删除 |
| 读内容四大金刚 | cat less head tail | 全读 → 分页读 → 读头 → 读尾 |
尤其是 less 和 tail -f,未来你看日志、调 bug 的时候会感谢今天学会了它们。
等正式在 Ubuntu 上用 VS Code 写 C 语言代码了,到时候 cd 进项目、ls 看文件、touch 建新文件------这些操作会像呼吸一样自然。
作业(Day 2-3 巩固)
请打开终端,独立完成以下四项任务(不要复制粘贴命令,自己敲):
作业 1:建目录练手
在自己的家目录下创建一个名为 linux_learning 的目录,在里面分别创建 day2 和 day3 两个子目录。
提示:用 mkdir -p 可以一次性搞定。
作业 2:文件复制与移动
在 day2 目录中通过 touch 创建三个 .txt 文件(名字随意),然后用 cp 复制其中一个,用 mv 把另一个移动到 day3 目录。最后用 ls -l 验证结果。
作业 3:搜索实战
用 less 打开 /etc/passwd 文件,按 / 搜索你自己的用户名,截图保存。
提示:进入 less 后,输入 /zhangsan(换成你的用户名)然后回车,n 键跳到下一个匹配。按 q 退出。
作业 4(挑战)
打开两个终端窗口:
- 窗口一:执行 tail -f /var/log/syslog
- 窗口二:随便敲几个命令(如 ls、pwd),然后切回窗口一观察有没有新日志出现
按 Ctrl + C 退出 tail -f。
有任何卡住的地方,回看这篇教程里的对应小节,或者用 man 命令查看官方手册:
bash
man ls # 查看 ls 的完整使用手册(按 q 退出)
man cp # 查看 cp 的手册
我们 Day 4 见!