Day 2-3:Linux 文件与目录操作

适合人群:装好了 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 定位

操作步骤

  1. 打开 Ubuntu 终端(右键桌面 → "在终端中打开",或按 Ctrl + Alt + T)
  2. 输入以下命令,按回车:
bash 复制代码
pwd                               # 显示我当前在哪个目录
  1. 你会看到类似这样的输出:
复制代码
/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 三次!

安全建议(请养成习惯)

  1. 用 rm -ri 代替 rm -r:每删一个文件都会问你确认,虽然慢但安全。
  2. 删之前先 ls 看一眼:确认目标目录里是什么。
  3. 用 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 见!

相关推荐
三8441 小时前
基本Linux命令总结
linux·运维·服务器
hehelm2 小时前
AI 大模型接入 SDK —项目概述
linux·服务器·网络·数据库·c++
mounter6252 小时前
跨越鸿沟:从内核驱动开发到超大规模云端生产环境的思考
linux·驱动开发·linux kernel·kernel
kdxiaojie3 小时前
Linux 驱动研究 —— V4L2 (3)
linux·运维·笔记·学习
dddwjzx3 小时前
嵌入式Linux C应用编程——GPIO
linux·嵌入式
dddwjzx4 小时前
嵌入式Linux C应用编程——输入设备
linux·嵌入式
爆浇牛肉面4 小时前
Linux三剑客与管道使用全解析:从入门到实战
linux
lightqjx4 小时前
【Linux系统】程序地址空间(初识)
linux·页表·地址空间
wljy14 小时前
二、线程操作
linux·线程属性·线程操作