当前位置: 首页 > news >正文

03目录和文件

本章目标

  • 掌握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.146root root 80K7123:22 lib64 dr-xr-xr-x.2root root 48K7123:22 bin dr-xr-xr-x.2root root 20K7123:22 sbin drwxr-xr-x.50root root 12K7123:22 libexec drwxr-xr-x.239root root8.0K7123:22 share drwxr-xr-x.9root root4.0K7123:22 include dr-xr-xr-x.42root root4.0K7123:22 lib drwxr-xr-x.12root root1317123:19localdrwxr-xr-x.4root root347123:19 src lrwxrwxrwx.1root root107123:19 tmp ->../var/tmp drwxr-xr-x.2root root64112018etc drwxr-xr-x.2root root64112018games
  • 示例2
[root@giles usr]# ls -lt总用量264dr-xr-xr-x.146root root819207123:22 lib64 dr-xr-xr-x.2root root491527123:22 bin dr-xr-xr-x.2root root204807123:22 sbin drwxr-xr-x.239root root81927123:22 share drwxr-xr-x.50root root122887123:22 libexec dr-xr-xr-x.42root root40967123:22 lib drwxr-xr-x.9root root40967123:22 include drwxr-xr-x.4root root347123:19 src lrwxrwxrwx.1root root107123:19 tmp ->../var/tmp drwxr-xr-x.12root root1317123:19localdrwxr-xr-x.2root root64112018etc drwxr-xr-x.2root root64112018games
  • 示例3
[root@giles usr]# ls -l --color=auto --full-time总用量264dr-xr-xr-x.2root root491522024-07-0123:22:42.694643079 +0800 bin drwxr-xr-x.2root root62018-04-1112:59:55.000000000 +0800 etc drwxr-xr-x.2root root62018-04-1112:59:55.000000000 +0800 games drwxr-xr-x.9root root40962024-07-0123:22:34.619670577 +0800 include dr-xr-xr-x.42root root40962024-07-0123:22:39.980652321 +0800 lib dr-xr-xr-x.146root root819202024-07-0123:22:55.530599368 +0800 lib64 drwxr-xr-x.50root root122882024-07-0123:22:40.506650530 +0800 libexec drwxr-xr-x.12root root1312024-07-0123:19:44.939898364 +0800localdr-xr-xr-x.2root root204802024-07-0123:22:42.653643219 +0800 sbin drwxr-xr-x.239root root81922024-07-0123:22:42.394644101 +0800 share drwxr-xr-x.4root root342024-07-0123:19:45.017898361 +0800 src lrwxrwxrwx.1root root102024-07-0123: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/test4mkdir: 无法创建目录"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-------.1root root19127123:27 anaconda-ks.cfg -rw-r--r--.1root root19607123:40 initial-setup-ks.cfg drwxr-xr-x.2root root67600:23testdrwxr-xr-x.3root root197600:24 test1 drwx--x--x.2root root67600:24 test2
5、删除目录
  • 命令:rmdir [参数] 目录名称

  • 作用:删除空目录的

  • 参数

    -p:连同上层"空的"目录也一起删除。

  • 示例

# 可以直接删除掉[root@giles ~]# rmdir test# 因为尚有内容,所以无法删除[root@giles ~]# rmdir test1rmdir: 删除"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 test1rm: 无法删除"test1":是一个目录# 使用递归强制方式删除test1目录以及它的子目录的所有内容,这种删除一定要谨慎使用,传说中的删除跑路大多数就是跟这个命令有关系[root@giles ~]# rm -rf test1
  • 示例4:删除指定路径下以anaconda-ks为前缀的文件
[root@giles ~]# rm /opt/anaconda-ks*.cfgrm:是否删除普通文件"/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 /optcp:是否覆盖"/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/issue1\S2Kernel\r on an\m# 查看/etc/issue这个文件的内容,并添加上行号,空白行也算[root@giles test1]# cat -n /etc/issue1\S2Kernel\r on an\m3
1.2、nl命令
  • 命令:nl 文件名
  • 作用:与cat -b命令作用相同
  • 示例
[root@giles test]# nl /etc/issue
1.3、tac命令
  • 命令:tac 文件名
  • 作用:逆向显示文本内容
  • 示例:
[root@server01 ~]# cat f1.txta b c d e f g[root@server01 ~]# tac f1.txtg f e d c b a
1.4、rev命令
  • 命令:rev 文件名
  • 作用: 将同一行的内容反转显示
  • 示例
[root@server01 ~]# cat f1.txt12345678910a b c d e f g h i j b c d e f g[root@server01 ~]# rev f1.txt01987654321j 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。
  • 小结:
catmoreless
作用显示小文件(一屏以内)显示大文件(超过一屏)显示大文件(超过一屏)
交互命令
原理只显示一屏已经加载文件的全部内容,性能较低不是加载整个文件,而是一点点加载,性能高
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
http://www.jsqmd.com/news/1099794/

相关文章:

  • TVA与具身智能深度融合的内在必然性(5)
  • gorm update结构体值false未修改 有select指定字段
  • 涠洲岛:火山淬炼的蔚蓝秘境
  • 扣子工作流是什么?从零搭建一个最小可用的 AI 流程
  • RTKLIB开源源码调试快速上手指南
  • 一句话讲透向量数据库:它把“语义相似“变成了可计算的东西
  • 数字孪生项目案例 | 区域发展指挥中心
  • TDengine TMQ 消费流程 — 从 Subscribe 到 Commit 的完整链路
  • RedisDesktopManager Windows版:Windows平台终极Redis数据库管理工具完整指南
  • 计算机Java毕设实战-基于 SpringBoot 的二次元游戏周边购物商城系统的设计与实现 基于 SpringBoot 的游戏周边商品买卖管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 从声学参数看入门吉他选择——法雅特梵高日记与雅马哈FS系列实测对比
  • 2026年买口碑好的TPU薄膜,这些销售厂家值得重点关注!
  • 原始字面量 _
  • 6款论文降AI率软件横评:AI率直降安全线,学生党必入平价款
  • Bubble Tea:用 Go 写终端 UI,这事没那么难
  • GPT-5.6全面公开与Cerebras 750 t/s上线:从受限预览到开发者普惠
  • 第9篇:《AMS1117输出振荡排查:输出电容用陶瓷替代钽电容的稳定性问题》
  • MiniMax Code Plan 限时 9 折!分享我的订阅体验和优惠领取方式
  • 孟获MengHuo——一站式智能直播信息采集分析工具
  • 泰戈尔的诗歌
  • 【毕业设计】基于 SpringBoot 的动漫游戏周边线上交易服务系统的设计与实现 基于 SpringBoot 的游戏手办周边销售管理系统(源码+文档+远程调试,全bao定制等)
  • ChatGPT Pro 200美元付款失败怎么办?国内用户没有海外卡怎么开通更稳妥
  • 第十章 结构体与共用体 结构体仿真测试
  • 计算机Java毕设实战-基于 SpringBoot 的高校心理咨询服务管理系统的设计与实现 基于 SpringBoot 的学生心理健康档案管理系【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 开源多Agent投资研究框架ai-berkshire:从架构到部署实战
  • AIGC 应用上线前安全能力清单:模型、内容、账号、业务与合规
  • 强强联手赴慕展!中国星坤 × 立创商城,一站式解锁互连方案 + 全链条研发采购
  • 计算机毕业设计之二手书回收平台设计与实现
  • Web渗透测试课程学习心得:零基础入门Web安全攻防实战总结
  • 覆盖 190 国、400 品牌:中国 TV OS 如何撬开全球智慧家庭市场