03目录和文件

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目录用于存储需要在系统重启后仍然保留的临时文件‌数据库文件邮件和队列文件锁文件‌lostfound该目录一般情况下是空的只有当系统出错或者非法关机之后这个目录主要用于存放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是一个连接文件[rootgiles mail]# cd /var/mail# 列出目前的工作目录[rootgiles mail]# pwd/var/mail# 列出当前目录并非连接路径[rootgiles mail]# pwd -P/var/spool/mail2、切换目录命令cd [相对路径或绝对路径]作用cd是change Directory的缩写用来切换工作目录的命令。示例# 这个就是绝对路径的写法直接指定要去的完整路径名称[rootgiles ~]# cd /var/spool/mail# 这是相对路径的写法我们由/var/spool/mail到/var/spool/plymouth目录[rootgiles mail]# cd ../plymouth# 表示返回上一级目录[rootgiles plymouth]# cd ..# 表示回到刚才的那个目录也就是/var/spool/plymouth[rootgiles spool]# cd -/var/spool/plymouth# 回到自己的主目录也就是/root[rootgiles spool]# cd ~# 没有加上任何路径也还是代表回到自己的主目录也就是/root[rootgiles opt]# cd3、查看文件目录命令: ls [选项参数] [目录名称]作用罗列目录中文件参数参数说明-a全部的文件连同隐藏文件(开头为.和…的文件)一起列出来-A全部的文件连同隐藏文件(但不包含.和…文件这两个目录)-h将文件容量以人类较易读的方式(例如GB,KB等)列出来-l列出长数据串包含文件的属性与权限等数据-R连同子目录一起列出来等于该目录下的所有文件夹都会出来-S以文件容量大小排序而不是用文件名排序-t以时间排序–colornever不要依据文件特征给予颜色显示–coloralways显示颜色–full-time以完整时间模式(包含年、月、日、时、分)输出示例1[rootgiles usr]# ls -lhS总用量 264K dr-xr-xr-x.146root root 80K7月123:22 lib64 dr-xr-xr-x.2root root 48K7月123:22 bin dr-xr-xr-x.2root root 20K7月123:22 sbin drwxr-xr-x.50root root 12K7月123:22 libexec drwxr-xr-x.239root root8.0K7月123:22 share drwxr-xr-x.9root root4.0K7月123:22 include dr-xr-xr-x.42root root4.0K7月123:22 lib drwxr-xr-x.12root root1317月123:19localdrwxr-xr-x.4root root347月123:19 src lrwxrwxrwx.1root root107月123:19 tmp -../var/tmp drwxr-xr-x.2root root64月112018etc drwxr-xr-x.2root root64月112018games示例2[rootgiles usr]# ls -lt总用量264dr-xr-xr-x.146root root819207月123:22 lib64 dr-xr-xr-x.2root root491527月123:22 bin dr-xr-xr-x.2root root204807月123:22 sbin drwxr-xr-x.239root root81927月123:22 share drwxr-xr-x.50root root122887月123:22 libexec dr-xr-xr-x.42root root40967月123:22 lib drwxr-xr-x.9root root40967月123:22 include drwxr-xr-x.4root root347月123:19 src lrwxrwxrwx.1root root107月123:19 tmp -../var/tmp drwxr-xr-x.12root root1317月123:19localdrwxr-xr-x.2root root64月112018etc drwxr-xr-x.2root root64月112018games示例3[rootgiles usr]# ls -l --colorauto --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的新目录[rootgiles ~]# mkdir test[rootgiles ~]# mkdir test1/test2/test3/test4mkdir: 无法创建目录test1/test2/test3/test4:没有那个文件或目录#加上-p参数可以自行创建多层目录[rootgiles ~]# mkdir -p test1/test2/test3/test4# 新建权限为rwx--x--x的目录[rootgiles ~]# mkdir -m 711 test2[rootgiles ~]# ls -l总用量8-rw-------.1root root19127月123:27 anaconda-ks.cfg -rw-r--r--.1root root19607月123:40 initial-setup-ks.cfg drwxr-xr-x.2root root67月600:23testdrwxr-xr-x.3root root197月600:24 test1 drwx--x--x.2root root67月600:24 test25、删除目录命令rmdir [参数] 目录名称作用删除空目录的参数-p连同上层空的目录也一起删除。示例# 可以直接删除掉[rootgiles ~]# rmdir test# 因为尚有内容所以无法删除[rootgiles ~]# rmdir test1rmdir: 删除test1失败: 目录非空# 一次性删除目录[rootgiles ~]# rmdir -p test1/test2/test3/test4三、文件相关操作1、查看文件状态命令:stat 文件名示例:[rootserver01 ~]# 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[rootgiles ~]# touch hello.txt#在家目录的下同时创建三个文件分别时a.txt b.txt c.txt[rootgiles ~]# touch a.txt b.txt c.txt示例2修改时间#同时修改文件的修改时间与访问时间[rootgiles ~]# touch -d 2024-07-01 13:01:02 hello.txt#只修改文件的修改时间[rootgiles ~]# touch -m -d 2024-7-02 13:15:26 hello.txt#只修改文件的访问时间[rootgiles ~]# touch -a -d 2024-7-03 13:15:26 hello.txt3、删除文件命令rm [选项参数] 文件或文件夹参数-r递归删除-f强制删除示例1删除指定目录下文件#删除当前目录下的某个文件[rootgiles test1]# rm hello.txt示例2强制删指定目录下的文件# 强制删除当前目录下的某个文件这里不提醒[rootgiles test1]# rm -f a.txt示例3递归删除某个目录以及子目录下所有内容# 删除test1目录以及它子目录下的所有内容[rootgiles ~]# rm -f test1rm: 无法删除test1:是一个目录# 使用递归强制方式删除test1目录以及它的子目录的所有内容这种删除一定要谨慎使用传说中的删除跑路大多数就是跟这个命令有关系[rootgiles ~]# rm -rf test1示例4删除指定路径下以anaconda-ks为前缀的文件[rootgiles ~]# rm /opt/anaconda-ks*.cfgrm是否删除普通文件/opt/anaconda-ks.cfgy rm是否删除普通文件/opt/anaconda-ks-copy.cfgy示例5通配符删除方法#全部删除[rootgiles ~]# rm -rf *#删除file10 file11 file12 file13 file14 file15文件[rootgiles ~]# rm -rf file{10..15}#删除扩展名为jpg的所有文件[rootgiles ~]# rm -rf *.jpg#删除file后面有两个单词的文件这里?代表匹配一个单词两个问号代表匹配两个单词[rootgiles ~]# rm -rf file??#删除1.txt,4.txt,12.txt文件[rootgiles ~]# rm {1,4,12}.txt4、拷贝文件命令cp [参数] 源文件 目标文件作用该命令时copy的缩写用于复制文件和目录参数-r递归复制整个文件夹示例1拷贝文件到指定目录# 复制文件到目标文件夹下并更改原文件名称[rootgiles ~]# cp anaconda-ks.cfg /opt/anaconda-ks-copy.cfg# 复制文件到目标文件夹下并保证原文件名而不重命名[rootgiles ~]# cp anaconda-ks.cfg /opt/示例2一次性拷贝多个文件到指定目录下# 一次性拷贝多个文件到指定目录下[rootgiles ~]# cp a.txt b.txt c.txt /opt# 如果在目标文件下已经存在所要拷贝的这几个文件会有提醒,敲回车键确认覆盖[rootgiles ~]# cp a.txt b.txt c.txt /optcp是否覆盖/opt/a.txt cp是否覆盖/opt/b.txt cp是否覆盖/opt/c.txt# 覆盖目标文件下的文件时候不提醒[rootgiles ~]# \cp a.txt b.txt c.txt /opt递归拷贝[rootgiles test1]# cp -r /root/test1 /opt5、移动文件剪切命令移动文件mv 要移动的文件 目标文件目录重命名 mv 旧文件名 新文件名示例1将某个文件移动到指定目录中去# 移动hello.txt到当前目录的test2文件夹下[rootgiles ~]# mv hello.txt test2示例2一次移动多个源文件到目标文件目录中# 将a.txt b.txt c.txt一次性移动到test2目录下[rootgiles ~]# mv a.txt b.txt c.txt test2示例3移动整个目录# 将/root/test1整个目录下的内容 移动到/opt目录下[rootgiles ~]# mv /root/test1 /opt示例4重命名# 将当前目录下的hello.txt更改为hi.txt[rootgiles test2]# mv hello.txt hi.txt# 将当前目录下的test2目录更改为tt目录[rootgiles ~]# mv test2 tt四、查看文件1、直接查看1.1、cat命令语法cat [选项参数] 文件的路径参数-b打印出行号针对非空白行做行号显示空白行不标记符号-n打印出行号连同空白行也有行号示例# 查看/etc/issue这个文件的内容[rootgiles test1]# cat /etc/issue\S Kernel\r on an\m# 查看/etc/issue这个文件的内容并添加上行号[rootgiles test1]# cat -b /etc/issue1\S2Kernel\r on an\m# 查看/etc/issue这个文件的内容并添加上行号空白行也算[rootgiles test1]# cat -n /etc/issue1\S2Kernel\r on an\m31.2、nl命令命令nl 文件名作用与cat -b命令作用相同示例[rootgiles test]# nl /etc/issue1.3、tac命令命令tac 文件名作用逆向显示文本内容示例:[rootserver01 ~]# cat f1.txta b c d e f g[rootserver01 ~]# tac f1.txtg f e d c b a1.4、rev命令命令rev 文件名作用: 将同一行的内容反转显示示例[rootserver01 ~]# cat f1.txt12345678910a b c d e f g h i j b c d e f g[rootserver01 ~]# rev f1.txt01987654321j i h g f e d c b a b c d e f g2、可翻页查看2.1、more分屏显示文件命令more 文件名称作用分屏查看文件内容示例#分屏查看/etc/profile文件[rootgiles test1]# more /etc/profilemore在读取文件时默认已经加载文件的全部内容more命令也不太适合读取太大的文件more 命令的执行会打开一个交互界面下面是一些常用交互命令操作说明回车键向下移动一行d向下移动半页。空格键向下移动一页。b向上移动一页。/ 字符串搜索指定的字符串。:f显示当前文件的文件名和行号。q 或 Q退出 more。2.2、less分屏显示文件命令less 文件名称作用分屏查看文件内容示例#分屏查看/etc/profile文件[rootgiles 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行的内容[rootgiles test1]# head /etc/profile#使用head查看/etc/profile前5行的内容[rootgiles test1]# head -5 /etc/profile3.2、tail显示文件结尾命令tail [参数选项] 文件名称作用查看一个文件的后n 行如果不指定n则默认显示后10 行选项-n 表示显示前n行的内容n等于行数示例#使用tail查看/etc/profile后10行的内容[rootgiles test1]# tail /etc/profile#使用tail查看/etc/profile后5行的内容[rootgiles test1]# tail -5 /etc/profile