目录
- 1. ls 指令
- 2. pwd 命令
- 3. cd 命令
- 4. touch 指令
- 5. mkdir 命令
- 6. rm 指令
1. ls指令
功能:ls 是 list 的缩写,用于列出目录中的内容(文件和子目录)。
基本语法:
ls [选项] [目录或文件]
常用选项:
最核心的选项(必须掌握):
| -a | all | 列出所有文件,包括以 . 开头的隐藏文件(. 代表当前目录,.. 代表上级目录)。 |
| -l | long | 以长格式显示信息(权限、链接数、所有者、组、大小、时间、文件名)。 |
| -F | classify | 在每个文件名后附上类型标识符(/ 代表目录,* 代表可执行文件,@ 代表链接)。 |
| -n | numeric-uid-gid | 类似 -l,但显示数字形式的 UID 和 GID,而不是用户名和组名。 |
| -h | human-readable | 配合 -l 使用,将文件大小以人类易读的方式显示(如 K, M, G)。 |
目前Linux中的测试环境:
# 1. 创建一个名为 test_ls 的主测试目录
mkdir test_ls
2. 进入该目录
cd test_ls
3. 创建一个名为 dir1 的子目录
mkdir dir1
4. 创建两个普通文件
touch file1.txt file2.txt
5. 创建一个隐藏文件(以 . 开头)
touch .hidden_file
1.1:基础列表
ls
输出:

默认情况下,ls 只列出非隐藏文件,并按列排序。你看不到 .hidden_file。
1.2:查看隐藏文件 (-a)
ls -a
输出:

-a 让隐藏文件现形。你会看到 . (当前目录) 和 .. (上级目录),以及我们创建的 .hidden_file
1.3: 长格式显示所有文件 (-a -l 或 -al)
ls -al
输出:
解析:
-
total 12:当前目录占用的块总数。
-
第一列(如 drwxr-xr-x):d 开头表示目录,- 开头表示普通文件。后面是权限。
-
第三、四列(root root):所有者和所属组。
-
第五列(4096, 0):文件大小(字节)。目录通常显示 4096。
-
后面依次是修改时间和文件名。
1.4: 区分文件类型(-F)
ls -aF
输出:

注意观察,目录 dir1 后面多了一个 /,而普通文件后面没有。这能让你一眼看出哪些是目录,哪些是文件。
1.5: 显示数字 UID/GID (-n)
ls -aln
输出:

因为当前是 root 用户,UID 和 GID 都是 0。如果在普通用户下,这里会显示类似 1000 的数字,而不是用户名。
1.6:人类易读的大小 (-h)
ls -lh
输出:

2. pwd 命令
目前Linux中的测试环境:
# 1. 在主目录下创建一个多级测试目录(使用 -p 递归创建)
mkdir -p /root/pwd_test/level1/level2
2. 进入最外层测试目录
cd /root/pwd_test
指令全称:Print Working Directory(打印工作目录)
功能:显示当前用户所在的绝对路径。
pwd [选项]
核心概念补充:
-
绝对路径:以 / 开头的完整路径,例如 /root/pwd_test/level1。
-
相对路径:不以 / 开头,相对于当前目录的路径,例如 level1/level2。
-
pwd 永远输出的是绝对路径,这是它最重要的价值。

2.1 进入子目录后查看路径

-
使用相对路径 cd level1 进入了子目录。
-
pwd 输出随之更新为 /root/pwd_test/level1,准确反映了当前所在层级。
-
这证明了 pwd 是动态的,会随 cd 操作实时变化。
2.2 继续深入多级目录

-
每深入一层,pwd 的输出就会追加一层路径。
-
无论目录嵌套多深,pwd 都能完整地打印出从根 / 到当前目录的完整链路。
2.3 返回上级目录后查看路径

-
cd .. 回到上级目录后,pwd 的输出也相应回退了一层。
-
这再次验证了 pwd 与当前工作目录的实时同步性。
3. cd命令
目前Linux中的测试环境:

指令全称:Change Directory(切换目录)
功能:切换当前工作目录。
cd [目录路径]
核心用法详解:
| cd 目录名 | 进入指定目录 | 可以是绝对路径或相对路径。 |
| cd .. | 返回上一级目录 | .. 代表父目录,最常用。 |
| cd . | 进入当前目录 | 等于没动,常用于脚本中占位。 |
| cd ~ | 回到当前用户的家目录 | root 用户的家目录是 /root。 |
| cd | 等同于 cd ~ | 直接敲 cd 不带参数,也回到 home。 |
| cd – | 回到上一次所在的目录 | 在两个目录之间快速来回切换,非常实用。 |
| cd / | 进入根目录 | 整个文件系统的起点。 |
核心概念:
-
绝对路径:以 / 开头,从根目录出发,例如 cd /root/cd_test/level1。
-
相对路径:不以 / 开头,从当前目录出发,例如 cd level1。
3.1:进入子目录(相对路径)
cd level1
pwd

-
使用相对路径 level1 进入了当前目录下的子目录。
-
结合 pwd 确认切换成功。
3.2:继续深入多级目录
cd level2
pwd

-
在 level1 中继续进入 level2,成功深入到第三层。
3.3:返回上一级 (..)
cd ..
pwd

-
cd .. 是最常用的操作之一,每次回退一层。
-
你从 level2 回到了 level1。
3.4:一次性返回多级目录
# 从 level1 一次性回到 cd_test
cd ../..
pwd

-
../.. 表示“上一级的上一级”。
-
你在 /root/cd_test/level1,往上两级就到了 /root。
-
技巧:可以连续用 ../../.. 一次性跳回多层,非常高效。
3.5:使用绝对路径切换
cd /root/cd_test/level1/sibling
pwd

-
以 / 开头的路径是绝对路径,从根目录出发。
-
无论当前在哪个位置,绝对路径都能准确到达目标目录。
3.6:回到上次所在目录 (cd -)
cd –
pwd

-
你之前从 root跳到了 sibling,现在用 cd – 直接跳回了 root。
-
再执行一次 cd -,又会跳回 sibling。
-
用途:在两个目录之间频繁切换时,比敲完整路径快得多。
3.7 回到用户家目录 (cd ~ )
cd ~
pwd
-
无论当前在哪个目录,cd ~ 或直接敲 cd 都会回到当前用户的家目录(root 用户是 /root)。
-
这是最常用的“一键回家”操作。
3.8:回到根目录 (cd /)
cd /
pwd

-
cd / 进入整个文件系统的根目录。
-
根目录是整个 Linux 文件系统的起点,所有其他目录都在它之下。
4. touch指令
测试环境:
# 1. 创建并进入测试目录
mkdir -p /root/touch_test
cd /root/touch_test
2. 创建一个目录和一个普通文件
mkdir dir
touch file.txt

指令全称:touch(触摸)
功能:
创建空文件:如果指定的文件不存在,则创建一个大小为 0 的空文件。
修改时间戳:如果文件已存在,则更新该文件的访问时间(atime)和修改时间(mtime)为当前系统时间。
touch [选项] 文件名…
| 无选项 | — | 创建一个空文件;若文件已存在,则同时更新 Access 和 Modify 时间为当前时间。 |
| -a | access | 只更改存取时间(Access time)。 |
| -m | modify | 只更改变动时间(Modify time)。 |
| -c | no-create | 不建立任何文件。如果文件不存在,也不会创建(截图文字有笔误,实际是 no-create 的意思,但一般我们多用 -a 和 -m,-c 知道即可)。 |
Linux 文件的三个时间: 在截图中,stat 命令输出了三个时间,这是理解 touch 的关键:
Access Time (atime):文件最后一次被读取/访问的时间。
Modify Time (mtime):文件内容最后一次被修改的时间。
Change Time (ctime):文件元数据(属性)最后一次被改变的时间(例如:权限、所有者、链接数,或者 atime/mtime 被修改时,ctime 也会跟着变)。
4.1 创建普通文件 & 查看完整时间信息
# 1. 查看当前目录
ls
2. 创建新文件
touch newFile.txt
3. 查看目录确认创建成功
ls
4. 使用 stat 查看文件的详细时间信息
stat newFile.txt

-
新建文件时,Access、Modify、Change 三个时间都被初始化为当前时间。
-
Size: 0 证明 touch 创建的是一个空文件
4.2:修改 Access 时间 (-a)
# 修改 Access 时间
touch -a newFile.txt
再次查看状态
stat newFile.txt

-
Modify 没变:因为我们用了 -a,只针对 Access 时间。
-
Change 为什么变了? 因为 Change 记录的是文件属性/元数据的变化。虽然文件内容没变,但文件的 Access 时间属性被修改了,这个“修改属性”的动作本身,就会更新 Change 时间。总结:只要你动了 atime 或 mtime,ctime 必定会变成当前时间。
4.3:修改 Modify 时间 (-m)
# 修改 Modify 时间
touch -m newFile.txt
再次查看状态
stat newFile.txt

-
这次 Modify 时间更新为当前时间,而 Access 保持上一次的时间不变。
-
同样,因为修改了元数据,Change 时间也同步更新为最新。
4.4: -c
# 尝试修改一个不存在的文件
touch -c not_exist.txt
查看是否创建了该文件
ls

(not_exist.txt 并没有被创建)
解析:
-
-c (–no-create) 的作用是:如果目标文件不存在,就什么都不做,不会创建新文件。这用于防止脚本误创建文件。
5. mkdir命令
创建测试环境:
# 1. 创建并进入测试目录
mkdir -p /root/mkdir_test
cd /root/mkdir_test
2. 创建一个目录和一个普通文件
mkdir dir
touch file.txt newFile.txt

指令全称:make directories(创建目录)
功能:在当前目录下创建一个名为 “dirname” 的目录。
mkdir [选项] 目录名…
| 无选项 | — | 创建单级空目录。若父目录不存在或目录已存在,会报错。 |
| -p | parents | 递归创建。可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。 |
-
单级创建:mkdir dir —— 只能建一层,父目录必须存在。
-
递归创建:mkdir -p a/b/c/d —— 无论多深,一次性建好所有缺失的父目录。
-
批量创建:mkdir dir1 dir2 dir3 —— 用空格隔开,建多个同级目录。
5.1:创建普通空目录
# 1. 查看当前目录状态
ls -l
2. 创建一个名为 mydir 的目录
mkdir mydir
3. 再次查看目录状态
ls -l

-
观察 ls -l 的输出,mydir 那一行以 d 开头,代表这是一个目录(directory)。
-
这是 mkdir 最基础的用法:在当前目录下创建一个单级空目录。
5.2:递归建立多个目录,创建指定路径
# 递归创建多级目录
mkdir -p path1/path2/path3/path4
查看结果
ls -l

-
如果不用 -p,直接敲 mkdir path1/path2/path3/path4 会报错,因为 path1 还不存在,系统无法在不存在的基础上创建 path2。
-
加上 -p 后,系统自动逐级创建了 path1、path2、path3、path4 全部四层目录
5.3:一次性创建多个同级目录
mkdir dir1 dir2 dir3
ls

-
直接在命令后用空格分隔多个目录名,可以一次性创建多个同级目录。
-
比敲三次 mkdir 高效得多。
6. rm 指令
rm 用于删除文件或目录。为了演示各种删除场景(删文件、删空目录、删非空目录、强制删除等),我们需要搭建一个包含多级目录和文件的测试环境。
创建测试环境:
# 1. 创建并进入测试目录
mkdir -p /root/rm_test
cd /root/rm_test
2. 创建测试用的普通文件
touch file1.txt file2.txt
3. 创建一个空目录
mkdir empty_dir
4. 创建一个非空目录(里面放文件)
mkdir -p not_empty_dir/sub_dir
touch not_empty_dir/inner_file.txt
5. 创建一个用于强制删除的只读文件(模拟权限不足的情况)
touch read_only.txt
chmod 444 read_only.txt
mkdir dir
touch file.txt newFile.txt
mkdir -p path1/path2
touch path1/myfile.txt
touch path1/path2/myfile.txt


指令全称:remove(移除/删除)
功能:删除一个或多个文件或目录。
rm [选项] 文件或目录…
| 无选项 | — | 只能删除普通文件。若目标是目录,会直接报错 Is a directory。 |
| -r / -R | recursive | 递归删除。用于删除目录及其内部的所有内容(包括子目录)。 |
| -f | force | 强制删除。忽略不存在的文件,不提示确认,直接删除(常配合 -r 使用)。 |
| -i | interactive | 交互模式。删除前逐个询问确认(y 确认,n 取消)。 |
Linux 没有回收站!rm 删除的文件极难恢复。切忌在根目录 / 下随意执行 rm -rf *。
6.1:删除普通文件
# 1. 查看当前文件状态(使用 ll 或 ls -l)
ls -l
2. 删除普通文件 file.txt
rm file.txt
3. 再次查看,确认删除成功
ls -l

-
rm file.txt 直接删除了文件,没有任何报错或提示。
-
这是 rm 最基础的用法。
6.2:删除目录
# 尝试直接删除目录 dir
rm dir

-
直接 rm 一个目录会报错 Is a directory。
-
这证明 rm 默认只能删除文件,不能删除目录,必须加 -r 选项。
6.3:递归删除目录
# 使用 -r 递归删除 dir 目录
rm -r dir
查看结果
ls -l

-
加上 -r 后,rm 成功删除了目录 dir。
-
如果目录内部有文件,-r 也会一并递归删除
6.4:删除文件前询问 (-i)
# 使用 -i 删除 newFile.txt
rm -i newFile.txt

-
-i (interactive) 会在删除前询问 y/n。
-
输入 y 确认删除,输入 n 则取消。
-
这是一个非常安全的选项,适合在不熟悉环境时使用。
6.5:删除多级目录前逐一询问(-ri)
# 1. 先递归创建一个多级目录 d/d/d/d
mkdir -p d/d/d/d
2. 查看结构(使用 tree)
tree d
3. 使用 -ri 交互式递归删除
rm -ri d

-
使用 -ri 删除多级目录时,系统会一层一层地询问你是否进入该目录、是否删除该目录。
-
这非常安全,但对于深层目录来说操作很繁琐,适合学习阶段使用。
6.6:递归强制删除(-f 与 -rf )
# 尝试只加 -f 删除非空目录 path1
rm -f path1

-f 只负责“不提示、强制”,但它不负责递归处理目录。删除目录必须有 -r。
# 1. 先查看 path1 的内部结构
tree path1
2. 使用 -rf 强制递归删除
rm -rf path1
3. 查看结果
ls -l

-
rm -rf path1 是最常用也最危险的组合。
-
它会无提示、无确认、强制递归删除 path1 及其下的所有文件和子目录。
-
务必在使用前用 ls 或 pwd 确认当前路径和目标路径是否正确!








