本章目标
- 掌握Linux文件系统【掌握】
- 掌握目录相关操作【掌握】
- 掌握文件相关操作【掌握】
- 掌握查看文件的几种方式【掌握】
本章内容
一、Linux文件系统
1、Linux文件目录结构

| 一级目录 | 功能(作用) |
|---|---|
| /bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
| /boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
| /dev/ | 设备文件保存位置 |
| /etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
| /home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
| /lib/ | 系统调用的函数库保存位置 |
| /media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
| /mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
| /misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
| /opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
| /root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
| /sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
| /srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
| /tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清理 |
| /proc/ | proc文件夹包含了一些系统信息文件,进程信息,每个进程都在该目录下有对应的目录,每个目录下包含了该进程的相关信息,设备信息,包括驱动或者磁盘的一些信息,网络的信息,内核信息,调试和监控的信息 |
| /var/ | 存放系统的日志文件;存放缓存;临时文件:/var/tmp目录用于存储需要在系统重启后仍然保留的临时文件;数据库文件;邮件和队列文件;锁文件 |
| lost+found | 该目录一般情况下是空的,只有当系统出错或者非法关机之后,这个目录主要用于存放fsck(文件系统检查)过程中部分修复的文件。一般只有root账号才能打开这个文件 |
关于/tmp和/var/tmp的区别?
没有本质区别,仅仅只有清理时间的不同
/tmp 目录默认清理10天未用的文件,系统重启会清空目录
/var/tmp 目录默认清理30天未用的文件
2、运维高频重点目录速记
/etc 系统配置
/var/log 日志
/opt 第三方大型商业软件安装目录(如 Oracle、钉钉、部分商用服务),每个软件单独一个文件夹,完全隔离
/usr/local 源码软件、源码编译、自行安装开源软件的标准目录,软件打散存放到对应子文件夹,多个软件共用
/home 用户数据
/boot 启动文件
/proc/sys 硬件查看
/tmp 临时文件
/mnt 手动挂载磁盘
3、绝对和相对路径
在开始目录的切换之前,必须了解路径以下所谓的路径,在Linux系统中,如果我们想要找到某一个目录或者文件,可以有2种找寻方式:绝对路径与相对路径。
- 绝对路径:路径的写法一定由根目录
/写起,例如/usr/share/doc这个目录。 - 相对路径:相对路径相对于当前工作目录的路径
./ :表示当前目录(同级),普通文件./可以省略,可执行文件(绿色)必须加./
../:表示上级目录(上一级)
切换目录的时候到底使用绝对路径还是相对路径取决于源目录和目标目录的路径的长短,原则是谁的路径越短就使用谁
二、目录相关操作
1、显示当前目录
-
命令:pwd [选项]
-
作用:pwd是print working Directory,显示目前所在目录的命令。
-
参数:
-P:显示当前的路径,而非使用连接路径(连接路径相当于就是windows中的快捷方式,-P可以显示真实的位置)
-
示例:
# 注意/var/mail是一个连接文件
[root@giles mail]# cd /var/mail
# 列出目前的工作目录
[root@giles mail]# pwd
/var/mail
# 列出当前目录,并非连接路径
[root@giles mail]# pwd -P
/var/spool/mail
2、切换目录
- 命令:cd [相对路径或绝对路径]
- 作用:cd是change Directory的缩写,用来切换工作目录的命令。
- 示例
# 这个就是绝对路径的写法,直接指定要去的完整路径名称
[root@giles ~]# cd /var/spool/mail
# 这是相对路径的写法,我们由/var/spool/mail到/var/spool/plymouth目录
[root@giles mail]# cd ../plymouth
# 表示返回上一级目录
[root@giles plymouth]# cd ..
# 表示回到刚才的那个目录,也就是/var/spool/plymouth
[root@giles spool]# cd -
/var/spool/plymouth
# 回到自己的主目录,也就是/root
[root@giles spool]# cd ~
# 没有加上任何路径,也还是代表回到自己的主目录,也就是/root
[root@giles opt]# cd
3、查看文件目录
- 命令: ls [选项参数] [目录名称]
- 作用:罗列目录中文件
- 参数
| 参数 | 说明 |
|---|---|
| -a | 全部的文件,连同隐藏文件(开头为.和…的文件),一起列出来 |
| -A | 全部的文件,连同隐藏文件(但不包含.和…文件这两个目录) |
| -h | 将文件容量以人类较易读的方式(例如GB,KB等)列出来 |
| -l | 列出长数据串,包含文件的属性与权限等数据 |
| -R | 连同子目录一起列出来,等于该目录下的所有文件夹都会出来 |
| -S | 以文件容量大小排序,而不是用文件名排序 |
| -t | 以时间排序 |
| –color=never | 不要依据文件特征给予颜色显示 |
| –color=always | 显示颜色 |
| –full-time | 以完整时间模式(包含年、月、日、时、分)输出 |
- 示例1
[root@giles usr]# ls -lhS
总用量 264K
dr-xr-xr-x. 146 root root 80K 7月 1 23:22 lib64
dr-xr-xr-x. 2 root root 48K 7月 1 23:22 bin
dr-xr-xr-x. 2 root root 20K 7月 1 23:22 sbin
drwxr-xr-x. 50 root root 12K 7月 1 23:22 libexec
drwxr-xr-x. 239 root root 8.0K 7月 1 23:22 share
drwxr-xr-x. 9 root root 4.0K 7月 1 23:22 include
dr-xr-xr-x. 42 root root 4.0K 7月 1 23:22 lib
drwxr-xr-x. 12 root root 131 7月 1 23:19 local
drwxr-xr-x. 4 root root 34 7月 1 23:19 src
lrwxrwxrwx. 1 root root 10 7月 1 23:19 tmp -> ../var/tmp
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
- 示例2
[root@giles usr]# ls -lt
总用量 264
dr-xr-xr-x. 146 root root 81920 7月 1 23:22 lib64
dr-xr-xr-x. 2 root root 49152 7月 1 23:22 bin
dr-xr-xr-x. 2 root root 20480 7月 1 23:22 sbin
drwxr-xr-x. 239 root root 8192 7月 1 23:22 share
drwxr-xr-x. 50 root root 12288 7月 1 23:22 libexec
dr-xr-xr-x. 42 root root 4096 7月 1 23:22 lib
drwxr-xr-x. 9 root root 4096 7月 1 23:22 include
drwxr-xr-x. 4 root root 34 7月 1 23:19 src
lrwxrwxrwx. 1 root root 10 7月 1 23:19 tmp -> ../var/tmp
drwxr-xr-x. 12 root root 131 7月 1 23:19 local
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
- 示例3
[root@giles usr]# ls -l --color=auto --full-time
总用量 264
dr-xr-xr-x. 2 root root 49152 2024-07-01 23:22:42.694643079 +0800 bin
drwxr-xr-x. 2 root root 6 2018-04-11 12:59:55.000000000 +0800 etc
drwxr-xr-x. 2 root root 6 2018-04-11 12:59:55.000000000 +0800 games
drwxr-xr-x. 9 root root 4096 2024-07-01 23:22:34.619670577 +0800 include
dr-xr-xr-x. 42 root root 4096 2024-07-01 23:22:39.980652321 +0800 lib
dr-xr-xr-x. 146 root root 81920 2024-07-01 23:22:55.530599368 +0800 lib64
drwxr-xr-x. 50 root root 12288 2024-07-01 23:22:40.506650530 +0800 libexec
drwxr-xr-x. 12 root root 131 2024-07-01 23:19:44.939898364 +0800 local
dr-xr-xr-x. 2 root root 20480 2024-07-01 23:22:42.653643219 +0800 sbin
drwxr-xr-x. 239 root root 8192 2024-07-01 23:22:42.394644101 +0800 share
drwxr-xr-x. 4 root root 34 2024-07-01 23:19:45.017898361 +0800 src
lrwxrwxrwx. 1 root root 10 2024-07-01 23:19:45.017898361 +0800 tmp -> ../var/tmp
关于文件的颜色的说明
- 白色:表示普通文件,如文本文件、配置文件、源码文件等
- 蓝色:表示目录
- 绿色:表示可执行文件,可执行的程序
- 红色:表示压缩文件或者包文件
- 浅蓝色:链接文件,主要是使用ln命令建立的文件等
- 红色闪烁:表示链接的文件有问题
- 黄色:表示设备文件
- 灰色:表示其他文件
4、新建目录
-
命令:mkdir [参数] 目录名称
-
作用:mkdir是make directory的缩写,用来创建文件目录的
-
参数
-p:递归创建目录
-m:配置文件的权限,直接设置
-
示例
#创建名为test的新目录
[root@giles ~]# mkdir test
[root@giles ~]# mkdir test1/test2/test3/test4
mkdir: 无法创建目录"test1/test2/test3/test4": 没有那个文件或目录
#加上-p参数,可以自行创建多层目录
[root@giles ~]# mkdir -p test1/test2/test3/test4
# 新建权限为rwx--x--x的目录
[root@giles ~]# mkdir -m 711 test2
[root@giles ~]# ls -l
总用量 8
-rw-------. 1 root root 1912 7月 1 23:27 anaconda-ks.cfg
-rw-r--r--. 1 root root 1960 7月 1 23:40 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 7月 6 00:23 test
drwxr-xr-x. 3 root root 19 7月 6 00:24 test1
drwx--x--x. 2 root root 6 7月 6 00:24 test2
5、删除目录
-
命令:rmdir [参数] 目录名称
-
作用:删除空目录的
-
参数
-p:连同上层"空的"目录也一起删除。
-
示例
# 可以直接删除掉
[root@giles ~]# rmdir test
# 因为尚有内容,所以无法删除
[root@giles ~]# rmdir test1
rmdir: 删除 "test1" 失败: 目录非空
# 一次性删除目录
[root@giles ~]# rmdir -p test1/test2/test3/test4
三、文件相关操作
1、查看文件状态
- 命令:stat 文件名
- 示例:
[root@server01 ~]# stat hello.txt
最近访问:2025-08-01 09:43:36.135457034 +0800:用户最后一次访问文件内容的时间
最近更改:2025-08-01 09:43:36.135457034 +0800:用户最后一次修改文件内容的时间
最近改动:2025-08-01 09:43:36.135457034 +0800:最后一次修改文件的元信息
注意!
我们的“最近改动”时间是文件的元信息(文件属性状态)被修改的时间,但是在客户端进行观察的时候发现时间也会同步进行更新,原因是客户端每次会自动进行文件元信息的加载更新。在服务器端则可以正常显示,所以不是存在问题,而是第三方的工具的原因。
2、创建和更新文件时间
- 命令:touch 文件名
- 作用:创建空文件或者修改文件时间
- 示例1:创建空文件
#在家目录下创建一个空文件hello.txt
[root@giles ~]# touch hello.txt
#在家目录的下同时创建三个文件,分别时a.txt b.txt c.txt
[root@giles ~]# touch a.txt b.txt c.txt
- 示例2:修改时间
#同时修改文件的修改时间与访问时间
[root@giles ~]# touch -d "2024-07-01 13:01:02" hello.txt
#只修改文件的修改时间
[root@giles ~]# touch -m -d "2024-7-02 13:15:26" hello.txt
#只修改文件的访问时间
[root@giles ~]# touch -a -d "2024-7-03 13:15:26" hello.txt
3、删除文件
-
命令:rm [选项参数] 文件或文件夹
-
参数
-r:递归删除
-f:强制删除
-
示例1:删除指定目录下文件
#删除当前目录下的某个文件
[root@giles test1]# rm hello.txt
- 示例2:强制删指定目录下的文件
# 强制删除当前目录下的某个文件,这里不提醒
[root@giles test1]# rm -f a.txt
- 示例3:递归删除某个目录以及子目录下所有内容
# 删除test1目录以及它子目录下的所有内容
[root@giles ~]# rm -f test1
rm: 无法删除"test1": 是一个目录
# 使用递归强制方式删除test1目录以及它的子目录的所有内容,这种删除一定要谨慎使用,传说中的删除跑路大多数就是跟这个命令有关系
[root@giles ~]# rm -rf test1
- 示例4:删除指定路径下以anaconda-ks为前缀的文件
[root@giles ~]# rm /opt/anaconda-ks*.cfg
rm:是否删除普通文件 "/opt/anaconda-ks.cfg"?y
rm:是否删除普通文件 "/opt/anaconda-ks-copy.cfg"?y
- 示例5:通配符删除方法
#全部删除
[root@giles ~]# rm -rf *
#删除file10 file11 file12 file13 file14 file15文件
[root@giles ~]# rm -rf file{10..15}
#删除扩展名为jpg的所有文件
[root@giles ~]# rm -rf *.jpg
#删除file后面有两个单词的文件,这里?代表匹配一个单词,两个问号代表匹配两个单词
[root@giles ~]# rm -rf file??
#删除1.txt,4.txt,12.txt文件
[root@giles ~]# rm {1,4,12}.txt
4、拷贝文件
-
命令:cp [参数] 源文件 目标文件
-
作用:该命令时copy的缩写,用于复制文件和目录
-
参数
-r:递归复制整个文件夹
-
示例1:拷贝文件到指定目录
# 复制文件到目标文件夹下并更改原文件名称
[root@giles ~]# cp anaconda-ks.cfg /opt/anaconda-ks-copy.cfg
# 复制文件到目标文件夹下并保证原文件名而不重命名
[root@giles ~]# cp anaconda-ks.cfg /opt/
- 示例2:一次性拷贝多个文件到指定目录下
# 一次性拷贝多个文件到指定目录下
[root@giles ~]# cp a.txt b.txt c.txt /opt
# 如果在目标文件下已经存在所要拷贝的这几个文件,会有提醒,敲回车键确认覆盖
[root@giles ~]# cp a.txt b.txt c.txt /opt
cp:是否覆盖"/opt/a.txt"?
cp:是否覆盖"/opt/b.txt"?
cp:是否覆盖"/opt/c.txt"?
# 覆盖目标文件下的文件时候不提醒
[root@giles ~]# \cp a.txt b.txt c.txt /opt
- 递归拷贝
[root@giles test1]# cp -r /root/test1 /opt
5、移动文件(剪切)
-
命令:
移动文件:mv 要移动的文件 目标文件目录
重命名: mv 旧文件名 新文件名
-
示例1:将某个文件移动到指定目录中去
# 移动hello.txt到当前目录的test2文件夹下
[root@giles ~]# mv hello.txt test2
- 示例2:一次移动多个源文件到目标文件目录中
# 将a.txt b.txt c.txt一次性移动到test2目录下
[root@giles ~]# mv a.txt b.txt c.txt test2
- 示例3:移动整个目录
# 将/root/test1整个目录下的内容 移动到/opt目录下
[root@giles ~]# mv /root/test1 /opt
- 示例4:重命名
# 将当前目录下的hello.txt更改为hi.txt
[root@giles test2]# mv hello.txt hi.txt
# 将当前目录下的test2目录更改为tt目录
[root@giles ~]# mv test2 tt
四、查看文件
1、直接查看
1.1、cat命令
-
语法:cat [选项参数] 文件的路径
-
参数
-b:打印出行号,针对非空白行做行号显示,空白行不标记符号
-n:打印出行号,连同空白行也有行号
-
示例
# 查看/etc/issue这个文件的内容
[root@giles test1]# cat /etc/issue
\S
Kernel \r on an \m
# 查看/etc/issue这个文件的内容,并添加上行号
[root@giles test1]# cat -b /etc/issue
1 \S
2 Kernel \r on an \m
# 查看/etc/issue这个文件的内容,并添加上行号,空白行也算
[root@giles test1]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
1.2、nl命令
- 命令:nl 文件名
- 作用:与cat -b命令作用相同
- 示例
[root@giles test]# nl /etc/issue
1.3、tac命令
- 命令:tac 文件名
- 作用:逆向显示文本内容
- 示例:
[root@server01 ~]# cat f1.txt
a
b
c
d
e
f
g
[root@server01 ~]# tac f1.txt
g
f
e
d
c
b
a
1.4、rev命令
- 命令:rev 文件名
- 作用: 将同一行的内容反转显示
- 示例
[root@server01 ~]# cat f1.txt
1 2 3 4 5 6 7 8 9 10
a b c d e f g h i j
b
c
d
e
f
g
[root@server01 ~]# rev f1.txt
01 9 8 7 6 5 4 3 2 1
j i h g f e d c b a
b
c
d
e
f
g
2、可翻页查看
2.1、more分屏显示文件
- 命令:more 文件名称
- 作用:分屏查看文件内容
- 示例:
#分屏查看/etc/profile文件
[root@giles test1]# more /etc/profile
more在读取文件时,默认已经加载文件的全部内容,more命令也不太适合读取太大的文件
more 命令的执行会打开一个交互界面,下面是一些常用交互命令
| 操作 | 说明 |
|---|---|
| 回车键 | 向下移动一行 |
| d | 向下移动半页。 |
| 空格键 | 向下移动一页。 |
| b | 向上移动一页。 |
| / 字符串 | 搜索指定的字符串。 |
| :f | 显示当前文件的文件名和行号。 |
| q 或 Q | 退出 more。 |
2.2、less分屏显示文件
-
命令:less 文件名称
-
作用:分屏查看文件内容
-
示例:
#分屏查看/etc/profile文件
[root@giles test1]# less /etc/profile
不是加载整个文件,而是一点一点进行加载,相对而言,读取大文件时,效率比较高
| 操作 | 说明 |
|---|---|
| 回车键 | 向下移动一行 |
| d | 向下移动半页。 |
| 空格键 | 向下移动一页。 |
| b | 向上移动一页。 |
| / 字符串 | 搜索指定的字符串。 |
| :f | 显示当前文件的文件名和行号。 |
| q 或 Q | 退出 more。 |
- 小结:
| cat | more | less | |
|---|---|---|---|
| 作用 | 显示小文件(一屏以内) | 显示大文件(超过一屏) | 显示大文件(超过一屏) |
| 交互命令 | 无 | 有 | 有 |
| 原理 | 只显示一屏 | 已经加载文件的全部内容,性能较低 | 不是加载整个文件,而是一点点加载,性能高 |
3、数据选取
3.1、head显示文件开头
-
命令:head [参数选项] 文件名称
-
作用:查看一个文件的前n 行,如果不指定n,则默认显示前10 行
-
选项:
-n: 表示显示前n行的内容,n等于行数
-
示例:
#使用head查看/etc/profile前10行的内容
[root@giles test1]# head /etc/profile
#使用head查看/etc/profile前5行的内容
[root@giles test1]# head -5 /etc/profile
3.2、tail显示文件结尾
-
命令:tail [参数选项] 文件名称
-
作用:查看一个文件的后n 行,如果不指定n,则默认显示后10 行
-
选项:
-n :表示显示前n行的内容,n等于行数
-
示例:
#使用tail查看/etc/profile后10行的内容
[root@giles test1]# tail /etc/profile
#使用tail查看/etc/profile后5行的内容
[root@giles test1]# tail -5 /etc/profile

708

被折叠的 条评论
为什么被折叠?



