【Linux】文件操作篇(一):文件系统结构与基础命令
本文介绍了Linux文件系统层次结构和常用命令使用。主要包括:Linux文件系统的目录结构及各核心目录功能;Bash Shell的命令结构、常用快捷键和实用技巧;以及文件管理(touch/vim/cp/mv/rm)、目录操作(mkdir/cd/pwd)和内容查看(cat/less/head/tail/wc)等基础命令的使用方法。
本专栏文章持续更新,新增内容使用蓝色表示。
第一部分:Linux文件系统层次结构
Linux 系统中的所有文件存储在文件系统中,被组织到一棵上下颠倒的树(树根在顶部,树根下方延伸出目录和子目录的分支)中,称为文件系统层次结构。如下图所示(虚线箭头是符号链接 )。

不同Linux发行版的文件系统层次结构大体上是相似的,会存在点小差异。
/ 目录是根目录,位于文件系统层次结构的顶部。/ 字符还用作文件名中的目录分隔符。
第一层级目录
|
目录 |
说明 |
|---|---|
|
|
基础命令:存放所有用户可用的基本命令(如 |
|
|
引导文件:包含内核、引导加载程序(如GRUB)等启动必需文件 |
|
|
设备文件:所有硬件设备(如磁盘、USB)的虚拟文件接口 |
|
|
系统配置:全局配置文件(如网络配置、用户账户等) |
|
|
用户目录:普通用户的主目录(图示含 |
|
|
系统库:lib为32位库文件,lib64为64位库文件 |
|
|
临时挂载:手动挂载外部设备(如U盘、网络存储)的临时位置 |
|
|
超级用户目录:root用户的主目录 |
|
|
运行时数据:存放系统运行时的进程ID、锁文件等(重启后清空) |
|
|
系统命令:仅管理员可用的系统管理命令(如 |
|
|
内核对象:虚拟文件系统,实时反映内核管理的设备和驱动状态 |
|
|
临时文件:全局临时文件(所有用户可访问,通常重启清空) |
|
|
用户程序:二级层次结构,包含大部分用户安装的应用程序 |
|
|
可变数据:存放日志、缓存等频繁变化的文件 |
第二层级目录
/usr 子目录
|
目录 |
说明 |
|---|---|
|
|
用户命令:非必要的用户命令(如 |
|
|
本地软件:管理员手动安装的软件(避免与包管理器冲突) |
|
|
程序库: |
|
|
管理命令:非必要的系统管理命令 |
|
|
临时文件 |
/var 子目录
|
目录 |
说明 |
|---|---|
|
|
系统日志:记录系统和服务运行日志 |
|
|
临时文件 |
使用ls命令可以查看不同目录下的所有文件(关于ls命令的具体用法第三部分介绍),以下是查看根目录下文件的情况:
ls -l /
ubuntu22.04:

Red Hat:

第二部分:Bash Shell
CTRL+ALT+T 打开终端(或者右键选择打开终端)。
注:终端是一个基于文本的界面,负责接收用户输入并传递到Shell处理,再将结果输出到屏幕,是Shell的载体。
Bash(Bourne-Again Shell)是Linux默认的命令行解释器,也是脚本编程语言,是UNIX系统上原始 Bourne Shell 的改进版本,后续有时间会出相关内容。
shell在等待用户输入时,普通用户显示$:
![]()
超级用户root用户显示#:
![]()
$或#前显示的是:当前用户名@主机名(登录的计算机的名称)工作目录。
普通用户切换为root用户,使用sudo命令,命令详解在本专栏【Linux】权限管理详解(一)的1.2.6 su 切换用户 中有介绍。
【Linux】权限管理详解(一):用户与组管理 | Redhat-CSDN博客
sudo -i

退出root用户:
exit

Linux命令结构
在 shell 提示符下输入的命令由三个基本部分组成:
命令 [选项] [参数]
命令是要运行的程序的名称(系统中安装的可执行程序)。其后可能跟着一个或多个选项,通常以 - 或 -- 开头(e.g. -a 短选项,-all长选项,等价的,多个短选项可以合并),用于调整命令行为,以将其与参数区分。也可能会跟着一个或多个参数,通常用于指定命令操作的目标。
命令、选项、参数之间需要空格分隔,带空格的参数需要用引号包起来。 写好执行命令后,按 Enter 键,会执行命令。
第三部分:常用命令教学
3.1 常用小tips
3.1.1 tab键补全
输入命令或者文件/目录时,可以按tab键进行提示补全,尤其是在输入文件目录/文件名时,没人想自己敲完全部吧?
按一次 Tab:如果前输入能唯一匹配一个文件/命令,则自动补全。
按两次 Tab:列出所有可能项。
补全范围:
命令名:补全 $PATH 中的可执行程序。
文件/目录路径:补全当前工作目录下的内容。
命令选项:部分高级 Shell(如 Bash、Zsh)支持选项补全。
3.1.2 显示历史命令
history 命令显示之前执行的命令的列表,前缀为命令编号。搭配! 前缀的命令可以快速调用历史命令,无需复制粘贴,感兴趣可以了解一下。
比较常用的是↑UpArrow键和↓ DownArrow键。
按 ↑ 显示上一条命令,↓ 显示下一条命令,连续按 ↑ 可以不断往前翻历史记录,连续按↓ 同理往后翻。
3.1.3 多行编写长命令
使用反斜杠字符 ( \ ) ,再按 Enter 换行符,Shell 会将命令延续到下一行以延续提示符(称为辅助提示符)——大于号字符( > )进行显示,表示命令未结束,可继续输入,直到最后一行不加 \ 直接按 Enter 执行。
以下是示例,echo就是原样输出输入的东西,那这命令岂不是很无聊?不是的啦,只是这里简单示例一下,实际上它常用于配置环境变量之类的,搭配重定向,将输入的内容输出到指定的配置文件中(可追加可覆盖,后续章节会详细介绍)。另外,输出重定向使用的也是大于号( > )字符,如果使用多行编写,需要额外注意。
echo "注意看!" \
"这个女孩叫小墨," \
"她已经很久没有上学了," \
"因为她放暑假了。" \
"但是她还不能休息。" \
"因为她已经大三了," \
"这个暑假需要准备秋招。" \
"在此之前,她已经尝试了很久找实习。" \
"但是没结果,所以她选择换一个方向继续学," \
"让我们祝她成功!" \
"掌声(鼓掌)"
如果使用 ↑ 显示上一条命令可以看到整个 echo 命令实际上是在一行中书写的,但是由于长度原因,在显示时被自动换行了。
3.1.4 一行编写多个命令
使用分号 (;) 作为命令分隔符。分号是一类称为元字符的字符的成员,对于 bash 具有特殊的解读。使用分号分隔多个命令之后,系统会显示这多个命令的输出,然后显示下一shell 提示符。
3.1.5 命令行编辑实用快捷键
觉得有用的可以记一下,不是必备。使用一段时间有感:还是记一下好用,vim 里也能用,尤其加粗的几个,本人较为常用。
| 快捷键 | 描述 |
|---|---|
| Ctrl+A | 跳到命令行的开头。 |
| Ctrl+E | 跳到命令行的末尾。 |
| Ctrl+U | 将光标处到命令行开头的内容清除。 |
| Ctrl+K | 将光标处到命令行末尾的内容清除。 |
| Ctrl+LeftArrow | 跳到命令行中前一字的开头。 |
| Ctrl+RightArrow | 跳到命令行中下一字的末尾。 |
| Ctrl+R | 在历史记录列表中搜索某一模式的命令。 |
| Ctrl+Shfit+C | 复制 |
| Ctrl+Shfit+V | 粘贴 |
3.1.6 补充知识
| 符号/路径类型 | 含义 | 示例 |
|---|---|---|
| ~ | 用户主目录,通常是/home/用户名 | /home/student |
| / | 根目录,文件系统的顶层目录 | /root |
| . | 当前目录 | ./file.txt |
| .. | 上一级目录 | ../docs |
| - | 进入此目录之前所在的目录(在cd命令中使用) | cd - |
相对路径:从当前目录开始。
绝对路径:从根目录(/)开始,全局唯一。
3.2 常用命令及其选项
以下命令结构均为:命令 [选项] [参数](本章节第二部分Linux 命令结构)。
3.2.1 查看命令帮助手册
Linux 的命令及其相关的选项很多,本章节涉及到的仅是部分常用命令和常用选项,命令的详细内容推荐查看man手册。
#命令替换为想要查看的命令
命令 --help # 快速查看选项说明
man 命令 # 查看完整手册(按q退出)
以ls命令为例:
ls --help
man ls
3.2.2 创建文件 touch
touch命令
-
如果文件不存在,创建一个空文件。
-
如果文件已存在,更新它的访问时间(atime)和修改时间(mtime)。
文件后缀最好显式给出,尤其是程序代码或者压缩后的文件,例如 .c ,.cpp,.tar.gz,.tar.bz2(后两个使用压缩命令tar时注意)等
touch hello.c # C 语言源文件
touch main.cpp # C++ 源文件
touch script.py # Python 脚本
3.2.3 编辑文件内容 vim
vim——文本编辑器
相关内容很多,记住常用的几个就行:
使用时vim 文件名即可,没有文件时会自动创建打开。
vim file.txt # 编辑file.txt文件(没有会创建)
使用Vim打开文件后,会进入命令模式,可用于导航、剪切和粘贴等。按特定按键可访问特定的模式功能。
以下均在普通模式下进行,在其他模式下需要先退回到普通模式,不知道自己在哪个模式下,就多按几次 Esc 回到普通模式:
- 按 i 键在光标前进入插入模式,按a键在光标后进入插入模式,插入模式可以编辑文件内容。按 Esc 键返回到普通模式。
- 按 v 键进入字符可视模式,按 Shift+V (V)进入行可视模式,按 Ctrl+V 进入块可视模式,可选择多个字符进行文本操作。 按 Esc 键返回到普通模式。
- 按 : 键进入命令行模式,可以执行的任务包括写入文件(进行保存),以及退出 Vim 编辑器等。
模式切换图

注意以下都是在命令模式且英文输入法下输入:
:wq # 保存并退出
:q! # 强制退出不保存
:w newfile # 另存为(newfile替换为新文件名)
:set nu # 显示行号
/keyword # 向下搜索关键词(keyword替换为想要查找的关键词)
?keyword # 向上搜索关键词(keyword替换为想要查找的关键词)
n # 跳转到下一个匹配项
dd # 删除整行
ndd # 删除n行(n替换为想要删除的行数)
yy # 复制当前行
nyy # 复制n行(n替换为想要删除的行数)
p/P # 粘贴到光标后/前
u # 撤销
Ctrl+r # 重做
补充:set paste命令,可以在粘贴文本时保持原始格式。
使用方法:在命令行模式下输入":set paste",然后回车,输入"i",进行粘贴即可。
3.2.4 显示文件内容 cat head tail less
以下file需要替换为已有的文件,没有的合适的文件,可以利用touch+vim命令创建一个。
cat
创建单个或多个文件,查看文件内容,串联不同文件中的内容,以及将文件内容重定向到终端或文件(重定向后面章节具体介绍)。
cat file #查看文件内容
cat file1 file2 #串联不同文件中的内容
head
显示前 N 行(默认 10 行)
head file # 默认显示前10行
head -n file # n替换为想要显示的行数
tail
显示后 N 行(默认 10 行)
tail file # 默认显示后10行
tail -n file # n替换为想要显示的行数
less
分页浏览(支持搜索/翻页),一次显示一页,按 ↑ 向上,↓ 向下翻页显示,/keyword 可以搜索关键词(keyword 替换为想要搜索的内容),按q退出
less file
3.2.5 创建目录 mkdir
mkdir——make dir
| 选项 | 作用 |
|---|---|
-p |
递归创建目录 |
-v |
显示创建过程 |
mkdir dir # 创建单级目录
mkdir -p dir/dir1 dir/dir2 # 创建多级目录(自动补全父目录)
3.2.6 统计文件内容数量 wc
计算文件中的行、字或者字符的数量
| 选项 | 作用 |
|---|---|
-l |
line 显示行数 |
-w |
word 显示字数 |
-c |
char 显示字符数 |
wc -l /etc/passwd # 统计/etc/passwd文件的行数
wc -w /etc/passwd # 统计字数
wc -c /etc/passwd # 统计字符数
3.2.7 打印当前位置 pwd
pwd
输出结果会是当前所在位置的绝对路径。
3.2.8 进入目录 cd
cd
cd # 进入当前用户的主目录中
cd ~ # 和上一个命令等价
cd .. # 返回上级目录
cd - # 回到上一个目录
cd /var/log #绝对路径
cd log #相对路径,当前工作目录为/var
3.2.9 显示文件 ls
ls——list
ls [选项] [参数]
| 选项 | 作用 |
|---|---|
-a |
显示所有文件包括隐藏文件(以 . 开头的文件) |
-l |
使用详细列表格式 |
-h |
人性化显示文件大小 |
-d |
仅显示目录本身,而不是目录中的内容 |
-R |
递归显示目录及其子目录中的内容 |
短选项可以搭配使用,此处的示例后面还需要加上参数,目标文件或者目录
ls # 列出目录下的文件/目录
ls -l # 详细列表(权限/大小/时间)
ls -a # 显示隐藏文件
ls -lh # 人类可读的文件大小(KB/MB/GB)
ls -lR # 显示当前目录和子目录下的详细内容
以下file、dir之类的示例需要替换为已有的文件或目录
3.2.10 复制文件 cp
cp——copy
| 选项 | 作用 |
|---|---|
-r |
递归复制目录 |
-i |
覆盖前提示 |
-v |
显示复制过程 |
cp file.txt file2.txt # 复制文件file.txt并命名为file2.txt
cp -r dir1/ dir2/ # 递归复制目录dir1到dir2
cp -i file.txt file2.txt # 若file2.txt 已存在,会提示是否覆盖
cp -v file.txt file2.txt # 显示复制过程的详细信息
3.2.12 移动文件 mv
mv——move
注意:mv在遇到同名文件时,默认行为是覆盖且不会提示。
| 选项 | 作用 |
|---|---|
-i |
移动前提示(如果目标文件已存在) |
-v |
显示移动过程的详细信息 |
mv file.txt newfile.txt # 将file.txt重命名为newfile.txt
mv file.txt dir/ # 将file.txt移动到目录dir/ 中
mv -i file.txt newfile.txt # 若newfile.txt 已存在,会提示是否覆盖
3.2.13 删除文件 rm
rm——remove
RHEL(红帽企业 linux) 命令行删除没有撤销功能,也没有可恢复的回收站,所以生产环境上,建议软删除,避免直接删除。
| 选项 | 作用 |
|---|---|
-r |
递归删除目录 |
-f |
强制删除不提示 |
-i |
删除前提示确认 |
注意:如果同时指定 -i 和 -f 选项,-f 选项优先级更高,不会出现提示,而是直接强制删除文件。
rm file.txt # 删除文件
rm -i file.txt # 交互式确认删除
rm -r dir/ # 递归删除
rm -rf dir/ # 强制递归删除目录(慎用!)
3.2.14 删除目录 rmdir
rmdir——删除空目录 remove dir
| 选项 | 作用 |
|---|---|
-p |
删除父目录(如果父目录为空) |
rmdir empty_dir/ # 只能删除空目录
综合练习
打开终端后确认所处位置:
一般是在~(当前用户主目录)下,除非在其他目录下右键打开的终端。如果不在~,使用cd命令切换到~
pwd
在~ 下创建一个空文件empty.txt文件,并查看它的相关信息
touch empty.txt
ls -l empty.txt
过一两分钟后再次使用touch命令,并查看文件相关信息,观察变化
sleep 120 #休眠两分钟,也可以直接等两分钟
向empty.txt中写入以下内容,并更名为info.txt
《好看电视剧》第一季
主演:张三, 李四
上映时间:2025年
vim empty.txt
mv empty.txt info.txt
分别使用cat head tail less查看info.txt文件内容,此处就不演示了
cat info.txt # 完整显示
head -1 info.txt # 只看第一行
tail -2 info.txt # 只看最后两行
less info.txt # 交互式浏览(按q退出)
创建一个多级目录,TV_Shows存放类别为电视剧的内容,Good_TV_Drama表示电视剧名称,内部存放剧集信息,Season_1表示第一季的内容
mkdir -p TV_Shows/Good_TV_Drama/Season_1
提示:以下步骤可使用tab补齐
将刚才创建的info.txt文件移动到~/TV_Shows/Good_TV_Drama/Season_1目录下,并确认info.txt存在
mv info.txt TV_Shows/Good_TV_Drama/Season_1/
ls TV_Shows/Good_TV_Drama/Season_1/ # 确认文件存在
cd 到~/TV_Shows/Good_TV_Drama/目录下
cd TV_Shows/Good_TV_Drama/
递归复制Season_1目录创建副本目录Season_1_copy
cp -r Season_1 Season_1_copy
使用rmdir尝试删除Season_1_copy目录(无法删除,因为此命令只能用于删除空目录)
rmdir Season_1_copy
![]()
删除~/TV_Shows/Good_TV_Drama/Season_1_copy目录下的info.txt文件
rm Season_1_copy/info.txt
此时使用rmdir就可以删除Season_1_copy目录了
rmdir Season_1_copy
尝试在当前目录下递归删除TV_Shows(失败,删除时不能在目录中)
rm -r TV_Shows
切换到~目录,再次尝试
cd ~ # 返回主目录
rm -r TV_Shows # 递归删除
预告下一篇
【已出】【Linux】文件操作篇(二):实战理解硬链接与软链接
如有问题或建议,欢迎在评论区留言~
更多推荐



所有评论(0)