目录和文件
2025/12/8大约 10 分钟
简介
相关文档:【Linux 文件结构】
- Linux 中一切都是文件,分为普通的文件(如
.txt、.doc、.mp3等)和特殊的文件(比如光盘驱动器) - 绝对路径:有且只有一个根目录
/,从根目录/开始写起,用/表示目录层级关系,例如:/usr/bin - 相对路径:当前目录(
.),上级目录(..),家目录(~) - 在
Linux下命名目录时尽量不要使用空格或其他特殊符号,尽量使用小写字母,会省去很多不必要的麻烦 - 在
Linux中,以.开头的文件是隐藏文件 - 每个文件分为三部分:文件名、文件内容、权限
- 每个文件的文件内容都被分配到一个标识号码,就是
inode - 每个文件名都绑定到它的文件内容(用
inode标识)
直属子目录
| 路径 | 说明 |
|---|---|
bin | 常用二进制命令存放目录,包含会被所有用户使用的可执行文件,普通用户 和 root 用户均可使用命令 |
sbin | 系统管理命令存放目录,包含系统级的重要可执行程序,root 用户可用命令 |
boot | 启动目录,Linux 内核与系统引导程序目录 |
dev | 设备文件存放目录,里面的每个子目录对应一个外设(光盘驱动器文件) |
etc | 系统配置文件存放目录 |
home | 普通用户家目录,用户私人目录,每个用户(除 root) 都在 home 目录下有一个私人目录, |
root | 超级用户 root 的家目录,root 用户拥有所有权限,和普通用户不在一起 |
lib | 函数库存放目录,启动系统与运行命令所需的共享库文件与内核模块目录,包含被程序所调用的库文件,例如 .so 结尾的文件,windows 中这样的库文件是以 .dll 结尾的 |
media | 媒体设备挂载目录,当可移动的外设(USB 盘、SD 卡、DVD、光盘等)插入时,可以通过 media 子目录来访问这些外设中的内容 |
mnt | 系统挂载目录,类似 media 目录,但一般用于临时挂载一些装置 |
opt | 第三方软件存放目录,表示可选的应用软件包,用于安装多数第三方软件和插件 |
srv | 服务存放数据目录,包含一些网络服务启动之后所需要取用的数据 |
tmp | 临时目录,普通用户和程序存放临时文件的地方 |
usr | 存放用户应用程序的目录,/usr/local:编译方式安装程序的默认目录,/usr/src:程序源码目录 |
var | 系统相关文档内容目录,通常包含程序的数据,比如 log(日志)文件 |
proc | 系统运行时,进程信息与内核信息存放目录 |
lib64 | |
run | |
sys |
目录浏览
| 命令 | 说明 |
|---|---|
pwd | 显示当前目录的绝对路径 |
ls | 列出当前目录下的目录和文件-a:列出所有文件,包含隐藏文件-A:与 -a 类似,但不包含 . 和 .. -l:列出一个显示文件和目录详细信息的列表(文件以字节为单位)-h:表示适合人类阅读的-t:按文件最近一次修改时键排序 -i:显示文件的信息--color=auto/no:开启/关闭颜色标注 |
ll | 列出当前目录下的目录和文件详细信息(实际上是 ls -l 命令的别名) |
cd | 切换目录,不加路径参数时会直接回到家目录( ~ ) cd ..:返回上一级目录cd ../..:返回上上级目录 |
du | 显示目录包含的文件大小-a:显示目录和文件的大小-h:表示适合人类阅读的-s:只显示总计大小 |
文件浏览
cat
cat 文件路径 [文件路径]:一次性在终端显示文件的所有内容,可以连接多个文件,会把多个文件内容合并显示-n:显示行号-E:显示空行(空行用$符号代替)cat a.txt b.txt >> c.txt:将多个文件内容合并输出到一个文件cat > test.txt + EOF:创建输入流并将输入文本重写入到指定文件>:创建输入流EOF:指定的结束字符(可以是其他文本)- 将
>改为>>即可把重写文本操作改为追加文本操作
less
less + 文件路径:分页显示文件内容- 命令中快捷键
d键:前进半页(半个屏幕)u键:后退半页(半个屏幕)空格键:文件内容读取下一个终端屏幕的行数,相当于前进一个屏幕页,与键盘上的 PageDown(下一页) 效果相同b键:后退一页,与键盘上的 PageUp(上一页) 效果相同回车键:文件内容读取下一行,与向下键效果相同y键:后退一行,与向上键效果相同q键:终止less命令或退出帮助文档h键:显示帮助文档=键:显示在文件中的位置(当页开始行数-当页结束行数/总行数 byte 当页字符数/总字符数 当前页占整个文件的百分比)- 当前页面的内容是文件的第几行到第几行
- 整个文件的行数
- 当前页面的字符数
- 整个页面的字符数
- 当前页面占整个文件的百分比
/(斜杠):进入搜索模式- 在斜杠后输入要搜索的文字按下回车键,就回把所有符合的结果都表示出来
- 要在搜索的结果中跳转
- 按
n键(跳到下一个符合项目) - 按
N键(shift + n跳到上一个符合项目)
- 按
- 正则表达式也可以用在搜索内容中
- 命令中快捷键
head
head + 文件路径:显示文件的开头几行-n + 行数:指定显示行数
tail
tail + 文件路径:显示文件的结尾几行(默认显示 10 行)-n + 行数:指定显示行数-f:实时追踪文件的更新(vim编辑文件是删除重建过程,不会触发更新)- 默认每隔 1s 检查一下文件是否有新内容
-s + 秒数:指定间隔检查的描述
grep
grep 要查找的文本 文件路径:将包含文本的文本行进行提取-v:将不包含文本的文本行进行提取- 要查找的文本可以是正则表达式
|:通道,将前面命令的输出结果作为后面命令的依据ll | grep bin
-E:使用扩展的正则表达式对结果进行筛选ll | grep bin[0-9]{1,5}.txt
创建
mkdir [-p] 目录名称:创建目录-p:递归创建目录结构,例如:mkdir -p one/two/three-v:用于显示执行过程
touch + 文件路径:当文件不存在时,创建一个空白文件,可同时创建多个文件
链接
硬链接(物理链接)
多个文件名指向同一索引节点,即一个 inode[1] 节点对应两个不同的文件名,两个文件名指向同一个文件
- 删除任意一方的文件,共同指向的文件内容并不会从硬盘上被删除,同时删除硬链接的所有文件,共同指向的文件内容才会消失,也就是
inode才会被删除 - 一旦文件 1 和文件 2 之间有了硬链接,那么修改文件 1 或文件 2,修改的是相同的一块内容
- 写法:
ln [源文件或目录] [目标软链接] - 能创建指向文件的硬链接,不能创建指向目录的
- 通过一些参数的修改,也可以创建指向目录的硬链接,但比较复杂
软连接(符号链接)
类似于 Windows 的快捷方式,实际上是一个特殊的文件,其中包含的有另一文件的位置信息,对于目录一般都是用软链接
- 删除软连接文件,源文件不会有任何影响,如果删除源文件,软连接文件会变成死链接,因为指向的文件不见了
- 写法:
ln -s [源文件或目录] [目标软链接]
# 创建源目录和文件
mkdir test
touch ./test/file1.txt
touch ./test/file2.txt
# 创建目录软链接
ln -s test test_ln
# 删除 test 目录下所有文件
rm -rf ./test_ln/
# 删除目录软链接(不删除数据)
rm -rf test_ln复制
cp:拷贝文件-r/-R:拷贝目录*:通配符
移动
mv:移动或重命名文件或目录
删除
rmdir [-p] 目录名称:删除目录,只能用于删除空目录rm:删除目录或文件-i:向用户确认是否删除-f:不询问用户是否确定删除文件-r:递归删除,用于删除目录
查找
locate + filename|function|reg:搜索包含关键字的所有文件或目录- 不会对实际的整个硬盘进行查找,而是在文件的数据库里进行查找
- 对于刚创建不久的文件,还没有被收录进文件数据库,所以找不到其索引,不会返回任何结果
- 一般每天会更新一次数据库,隔 24 小时再用 locate 查找就可以找到了
updatedb:强制系统立即更新文件数据库,此命令只能由 root 用户执行find:查找文件- 可以让我们对每个找到的文件做后续的操作
- 不会在文件数据库中查找文件的记录,而是遍历实际硬盘
find [何处] 何物 [做什么]- 何处:指定在哪个目录中查找,此目录的所有子目录也会被查找
- 如果没有提供此参数,会在当前目录及其子目录进行查找
- 何物:(必须)可以根据 文件名字、大小、最近访问时间 等等来查找
- 做什么:找到文件后最为每个文件做一定的操作,称为“后续处理”
- 默认地,假如不指定这个参数,该命令只会显示找到的文件
-name:按名称查找-type:按类型查找d:目录f:文件
-printf:格式化打印查找结果%p:文件名%u:文件所有者
-delete:删除查找到的文件-exec:可以后接一个命令,对每个查找到的文件进行操作- 不必用双引号括起来
{}:会用查找到的每个文件来替代\:是必须的结尾
-ok:和-exec类似,但每次操作查找到的文件前都有一次确认提示
- 何处:指定在哪个目录中查找,此目录的所有子目录也会被查找
- find 只会查找完全符合
何物字符串表示的文件,locate 会查找所有包含关键字的文件- 例如查找
thing,find 只会找到thing, 为不会找到thing1 - 可以使用通配符(
*)解决此问题
- 例如查找
# 根据文件名查找
find -name "new_file"
# 根据文件大小查找
find /var -size +10M
find /var -size -50k
find /var -size +20G
# 按文件类型查找
find . -name "new_file" -type d
# 按最近访问时间查找(7天内)
find -name "*.txt" -atime -7
# 在特定的目录下按文件名查找
find /var/log -name "syslog"
# 格式化打印查找结果
find -name "*.txt" -printf "%p - %u\n"
# 删除当前目录及其子目录下所有以 .jpg 为后缀的文件
find -name "*.jpg" -delete
# 对每个找到的文件修改权限
find one -name "*.txt" -exec chmod 600 {}其他
| 命令 | 说明 |
|---|---|
whereis | 查找特定目录 |
find 目录 [-name/user/size] 参数 | 查找 |
在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index) ↩︎