4-Linux-文件-操作命令|目录结构-day12
目录导航
- 网站分享
- 命令
- 一、文件目录移动和创建/删除
- 二、文件查找和处理
- 💡 高频组合技巧
- 通用目录结构(FHS 标准)
- 一级目录全景
- 核心目录详解
- /usr 子目录:系统的"Program Files"
- /var 子目录:会"长大"的地方
- /etc 子目录:配置的"大本营"
- 几个容易混淆的点
- 💡 记忆口诀
网站分享
http://cb.vu/
https://uixshell.com/zh/practice
https://darven-cs.github.io/linux-learning/
命令
一、文件目录移动和创建/删除
| 主指令 | 作用 | 常用子指令 / 参数 | 示例 |
|---|---|---|---|
mkdir | 创建目录 | -p递归创建多级目录-m指定权限 | mkdir -p a/b/c |
rmdir | 删除空目录 | -p递归删除空父目录 | rmdir -p a/b/c |
rm | 删除文件/目录 | -r递归删除-f强制删除不提示-i删除前确认 | rm -rf dir/ |
cp | 复制文件/目录 | -r递归复制目录-a归档模式(保留属性)-p保留原属性-v显示过程 | cp -r src/ dst/ |
mv | 移动/重命名 | -f强制覆盖-i覆盖前确认-v显示过程 | mv old.txt new.txt |
touch | 创建空文件 / 更新时间戳 | -c不创建新文件-t指定时间戳 | touch file.txt |
ln | 创建链接 | -s创建软链接-f强制覆盖 | ln -s target link |
cd | 切换目录 | ..上级目录-返回上次的目录~家目录 | cd /var/log |
pwd | 显示当前路径 | -P显示物理路径(解析链接) | pwd -P |
ls | 列出目录内容 | -l长格式-a含隐藏文件-h人类可读大小-R递归-t按时间排序 | ls -lah |
⚠️
rm -rf极其危险,删除后不可恢复,生产环境慎用。
二、文件查找和处理
| 主指令 | 作用 | 常用子指令 / 参数 | 示例 |
|---|---|---|---|
find | 按条件查找文件 | -name按名称-type f/d按类型-size按大小-mtime按修改时间-exec对结果执行命令 | find . -name "*.log" -mtime +7 -delete |
locate | 基于数据库快速查找 | -i忽略大小写-r正则匹配 | locate -i nginx.conf |
which | 查找可执行文件路径 | --all显示所有匹配 | which python3 |
whereis | 查找二进制/源码/手册 | -b只找二进制-m只找手册 | whereis ls |
grep | 文本搜索 | -r递归-i忽略大小写-n显示行号-v反向匹配-E扩展正则 | grep -rn "TODO" src/ |
cat | 查看/合并文件 | -n显示行号-A显示所有字符(含$) | cat -n file.txt |
less/more | 分页查看 | less支持上下翻页 | less large.log |
head | 查看文件头部 | -n N显示前 N 行-c N显示前 N 字节 | head -n 20 file.log |
tail | 查看文件尾部 | -n N显示后 N 行-f实时追踪(常用于日志) | tail -f /var/log/syslog |
wc | 统计行数/词数/字节 | -l行数-w词数-c字节数 | wc -l file.txt |
sort | 排序 | -n数值排序-r倒序-u去重 | sort -nr data.txt |
uniq | 去重(需先 sort) | -c统计出现次数-d只显示重复行 | sort file \| uniq -c |
cut | 按列截取 | -d指定分隔符-f指定字段 | cut -d: -f1 /etc/passwd |
awk | 文本处理/报表生成 | -F指定分隔符{print $N}打印第 N 列 | awk -F: '{print $1}' /etc/passwd |
sed | 流编辑器/批量替换 | -i就地修改s/old/new/g替换 | sed -i 's/foo/bar/g' file.txt |
xargs | 将标准输入转为命令参数 | -I{}占位符-n N每次传 N 个参数 | find . -name "*.tmp" \| xargs rm |
tar | 归档/压缩 | -c创建-x解压-zgzip-jbzip2-v显示过程-f指定文件 | tar -czvf pkg.tar.gz dir/ |
gzip/gunzip | gzip 压缩/解压 | -d解压-k保留原文件-9最高压缩率 | gzip -k file |
chmod | 修改权限 | u/g/o/a用户/组/其他/所有+/-/=增加/减少/赋值-R递归 | chmod -R 755 dir/ |
chown | 修改所有者 | -R递归user:group同时改所有者和组 | chown -R www:www /var/www |
💡 高频组合技巧
可以把需求丢给AI
# 查找大文件并清理 find /var/log -name "*.log" -size +100M -mtime +30 -delete # 批量重命名 .txt → .md for f in *.txt; do mv "$f" "${f%.txt}.md"; done # 实时追踪日志 + 过滤关键字 tail -f /var/log/nginx/access.log | grep "404" # 统计访问 IP Top 10 cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10📌 提示:
find+xargs+grep/sed/awk是 Linux 文件处理的"三剑客组合",掌握它们几乎能应对所有文件处理场景。
通用目录结构(FHS 标准)
所有 Linux 发行版都遵循FHS(Filesystem Hierarchy Standard,文件系统层次标准),整个系统的目录像一棵树,从根目录/开始向下展开。
一级目录全景
/ ├── bin/ # 基础用户命令(所有人都可用) ├── sbin/ # 基础系统管理命令(主要给 root) ├── etc/ # 系统配置文件 ├── home/ # 普通用户的家目录 ├── root/ # root 用户的家目录 ├── usr/ # 用户程序(第二层"只读"层级) ├── var/ # 可变数据(日志、缓存、邮件等) ├── tmp/ # 临时文件(重启可能清空) ├── dev/ # 设备文件 ├── proc/ # 进程和内核信息的虚拟文件系统 ├── sys/ # 系统设备和内核信息的虚拟文件系统 ├── opt/ # 第三方大型软件 ├── boot/ # 启动相关文件(内核、initramfs) ├── lib/ # /bin 和 /sbin 所需的基础共享库 ├── lib64/ # 64 位共享库 ├── media/ # 可移动介质的挂载点 ├── mnt/ # 临时挂载点 ├── srv/ # 服务相关的数据(如 HTTP/FTP 根目录) └── run/ # 运行时数据(PID 文件、socket 等,重启清空)核心目录详解
| 目录 | 作用 | 里面有什么 |
|---|---|---|
/bin | 基础用户命令 | ls、cp、mv、cat、bash等——系统修复、单用户模式下也必须能用 |
/sbin | 基础系统管理命令 | fdisk、mkfs、iptables、reboot等——多数需 root 权限 |
/etc | 系统配置文件 | passwd、shadow、fstab、nginx/、ssh/等——“一切皆配置” |
/home | 普通用户家目录 | /home/alice/、/home/bob/——用户私有文件、.bashrc等 |
/root | root 的家目录 | 不同于/home,单独放在根下 |
/usr | **用户程序(第二层级)** | 相当于"Linux 的 Program Files",详见下文 |
/var | 可变数据 | 会随时间变化的数据,详见下文 |
/tmp | 临时文件 | 所有用户可读写,重启后通常清空 |
/dev | 设备文件 | sda(硬盘)、tty(终端)、null、zero等——"一切皆文件"的体现 |
/proc | 进程/内核虚拟文件系统 | cpuinfo、meminfo、/1/(PID 为 1 的进程信息)——内存中的虚拟目录 |
/sys | 内核/设备虚拟文件系统 | 暴露内核对象给 userspace——内存中的虚拟目录 |
/opt | 第三方大型软件 | 如/opt/google/chrome/、/opt/jdk/——不归包管理器管的软件 |
/boot | 启动文件 | vmlinuz(内核)、initramfs.img、grub/——不能删 |
/lib/lib64 | 共享库 | .so动态链接库,供/bin、/sbin使用 |
/run | 运行时数据 | PID 文件、socket、锁文件——tmpfs,重启清空 |
/srv | 服务数据 | 如/srv/www/(网站根)、/srv/ftp/——按服务组织 |
/mnt/media | 挂载点 | /mnt手动挂;/media自动挂 U 盘/光盘 |
/usr子目录:系统的"Program Files"
/usr是只读的用户程序层,其内部结构几乎和根目录平行:
/usr/ ├── bin/ # 大多数用户命令(ls、gcc、python 等) ├── sbin/ # 系统管理命令(useradd、httpd 等) ├── lib/ # /usr/bin 和 /usr/sbin 的共享库 ├── local/ # 本地编译安装的软件(make install 默认到这里) │ ├── bin/ │ ├── sbin/ │ └── lib/ ├── share/ # 架构无关的共享数据(文档、locale、zoneinfo) ├── include/ # C/C++ 头文件 └── src/ # 源代码(少见)💡 区别:
/bin是"最小可用命令"(急救用),/usr/bin是"完整用户命令"。现代发行版(UsrMerge)已将/bin→/usr/bin做成符号链接。
/var子目录:会"长大"的地方
/var/ ├── log/ # 日志文件(/var/log/messages、nginx/、audit/) ├── cache/ # 应用缓存 ├── spool/ # 队列数据(邮件、打印任务) ├── lib/ # 应用持久化数据(如 /var/lib/mysql/、/var/lib/docker/) ├── tmp/ # 系统级临时文件(比 /tmp 更持久) ├── run/ # 运行时数据(符号链接到 /run) └── www/ # 某些发行版的 Web 根目录⚠️
/var是最容易撑爆磁盘的目录——日志、数据库、容器镜像都在这里。生产环境常把/var单独分区。
/etc子目录:配置的"大本营"
/etc/ ├── passwd # 用户信息 ├── shadow # 用户密码(仅 root 可读) ├── group # 用户组 ├── fstab # 文件系统挂载表 ├── hosts # 静态 DNS 解析 ├── resolv.conf # DNS 服务器 ├── ssh/ # SSH 配置(sshd_config、密钥) ├── nginx/ # Nginx 配置 ├── systemd/ # systemd 服务单元 ├── network/ # 网络配置(发行版相关) └── profile.d/ # 全局环境变量脚本几个容易混淆的点
1./binvs/usr/bin
老传统:
/bin在根分区(启动早期就能用),/usr/bin可能在独立分区(挂载后才能用)现代(UsrMerge):
/bin是/usr/bin的符号链接,二者已合并
2./srvvs/var/www
两者都可放网站文件,没有强制规定
常见约定:
/srv/www/或/var/www/html/,取决于发行版
3. 什么是"虚拟文件系统"
/proc和/sys不占磁盘空间,是内核在内存中动态生成的查看它们就是在和内核"对话":
cat /proc/cpuinfo、cat /sys/class/net/eth0/address
4. 绝对路径 vs 相对路径
以
/开头 = 绝对路径(从根开始)不以
/开头 = 相对路径(从当前目录开始)
💡 记忆口诀
“配 etc,变 var,用户 home,程序 usr,设备 dev,启 boot,临时 tmp,挂 mnt”
记住这条,你就能在任意 Linux 发行版上快速定位文件。不同发行版的唯一差异在于/etc下的具体配置文件名(比如网络配置 Ubuntu 用 netplan,RHEL 用 network-scripts),但整体骨架完全一致。
