文件管理基础
一句话总结:Linux 里“一切皆文件”,会看目录结构、会读写文件、会查权限和时间,就掌握了日常一半的运维操作。
适用:Rocky Linux / CentOS 9(GNU 工具)。示例统一用 /tmp/lesson。
一、目录结构:单根树形
Linux 只有一个根 /,所有目录都挂在它下面,没有 C/D 盘的概念。
| 目录 | 作用 | 记忆点 |
|---|---|---|
/ |
根目录,树的起点 | 一切从这开始 |
/bin、/sbin |
普通用户 / 管理员命令(多是指向 /usr/bin 的软链接) |
binary |
/boot |
内核 vmlinuz、启动文件、GRUB |
启动用 |
/dev |
设备文件:sda、nvme0n1、tty、null |
device |
/etc |
配置文件大本营 | edit config |
/home |
普通用户家目录 /home/用户名 |
用户的“我的文档” |
/root |
root 的家目录 | 注意不是 /home/root |
/lib、/lib64 |
共享库、内核模块 | library |
/media、/mnt |
移动介质 / 临时挂载点 | mount |
/opt |
第三方软件安装目录 | optional |
/proc、/sys |
内核和进程的虚拟文件系统(不占硬盘) | 内存里的“假文件” |
/run |
运行时数据(PID、socket) | 重启即清空 |
/tmp |
临时文件,systemd 会定期清理 | 谁都能写 |
/usr |
用户级程序和数据,/usr/local 放自编译软件 |
Unix System Resource |
/var |
经常变化的数据:日志 log、邮件、数据库 |
variable |
记忆口诀:etc 存配置,var 存变化,bin 放命令,dev 放设备,proc 放内核状态。
二、绝对路径与相对路径
- 绝对路径:以
/开头,从根开始,任何位置都能精确定位,例如/etc/sysconfig/network-scripts/。 - 相对路径:不以
/开头,基于当前目录往下找,例如cd sysconfig。
| 符号 | 含义 | 例子 |
|---|---|---|
. |
当前目录 | ./b/c/1.txt |
.. |
上一级目录 | ../../a.txt |
~ |
当前用户家目录 | root 是 /root,普通用户是 /home/用户名 |
- |
上一次所在目录(cd -) |
两个目录之间来回跳 |
三、文件的种类:ls -l 第一个字符
| 类型 | 符号 | 说明 | 例子 |
|---|---|---|---|
| 普通文件 | - |
文本、二进制、图片、压缩包 | /etc/passwd、/bin/ls |
| 目录 | d |
存放文件和子目录 | /home、/etc |
| 符号链接 | l |
指向另一个文件的“快捷方式” | /dev/cdrom -> sr0 |
| 字符设备 | c |
按字符流访问 | /dev/tty、/dev/null |
| 块设备 | b |
按块访问 | /dev/sda、/dev/nvme0n1 |
| 套接字 | s |
进程间/网络通信 | /run/systemd/... |
| 命名管道 | p |
单向数据流 | mkfifo 创建 |
站在硬盘角度最小读写单位是扇区;站在操作系统角度是块(block,默认 8 个扇区)。
/dev/sda不是目录,它是设备节点,本身没有内容,只是内核把读写请求转给硬盘驱动的入口。
四、看懂 ls -l 的每一段
[root@www ~]# ll /tmp/a.txt
-rwxr-xr--. 1 root group1 31457280 4月 16 14:21 /tmp/a.txt
| 字段 | 含义 |
|---|---|
- |
文件类型(见上一节) |
rwxr-xr-- |
权限,三组:属主 u / 属组 g / 其他人 o,每组 r 读 w 写 x 执行 |
. |
SELinux 开启时创建的文件(getenforce 查看,setenforce 0 临时关闭) |
1 |
普通文件是硬链接数,目录是子目录数 |
root |
属主 owner |
group1 |
属组 group |
31457280 |
字节大小(ls -lh 带单位) |
4月 16 14:21 |
最后修改时间 mtime |
权限速算:r=4、w=2、x=1,三段相加就是数字表示法:rwx=7、rw-=6、r-x=5。
chmod 644 file # rw-r--r--
chmod u+x script.sh # 属主加执行
chown user:group file # 改属主和属组
五、三种时间戳(stat)
| 时间 | 含义 | 什么时候变 |
|---|---|---|
atime |
访问时间 | 读一次文件内容就变(现代默认 relatime,不一定每次) |
mtime |
修改时间 | 文件内容变化才变 |
ctime |
状态变化时间 | 元数据(权限、属主)或内容变化都会变 |
stat /tmp/111.txt
echo 111 > /tmp/111.txt # 覆盖写:mtime、ctime 变
六、文件与目录操作命令
| 命令 | 作用 | 常用选项 | 例子 |
|---|---|---|---|
touch |
创建空文件 / 更新时间戳 | -t 指定时间 |
touch /tmp/{1..10}.txt |
mkdir |
建目录 | -p 递归创建 |
mkdir -p /tmp/a/b/c |
cp |
复制 | -r 目录、-a 保留属性、-i 覆盖提示 |
cp -a /etc /tmp/etc.bak |
mv |
移动 / 重命名 | -i |
mv a.txt b.txt |
rm |
删除 | -r 递归、-f 强制 |
rm -rf /tmp/* |
ls |
列目录 | -l -a -h -d -t |
ls -dlh /tmp |
cd |
切换目录 | - 回上次 |
cd - |
pwd |
显示当前路径 | pwd |
|
tree |
树形展示 | -L 层级、-d 只看目录 |
tree -L 2 /etc |
cat |
一次看全部 | -n 行号 |
cat /etc/hosts |
less |
分页看(推荐) | 上下键翻、/ 搜索、q 退出 |
less /var/log/messages |
head |
看开头 | -n 行数 |
head -3 /etc/passwd |
tail |
看结尾 | -f 动态跟踪 |
tail -f /var/log/messages |
echo |
输出 / 写文件 | > 覆盖、>> 追加 |
echo 111 >> /tmp/a.txt |
stat |
看元数据 | stat file |
|
file |
判断文件类型 | file /bin/ls |
|
du |
统计占用空间 | -sh 汇总 |
du -sh /var/log |
df |
分区使用率 | -h |
df -h |
ln |
创建链接 | -s 软链接 |
ln -s /opt/app /usr/local/app |
find |
按条件查找 | -name -type -size -mtime -exec |
find /tmp -name "*.log" -mtime +7 -delete |
软链接 vs 硬链接
| 对比 | 软链接 | 硬链接 |
|---|---|---|
| 创建 | ln -s 源 目标 |
ln 源 目标 |
| 本质 | 新文件,内容是源路径 | 同一个 inode 的另一个名字 |
| 跨文件系统 | 可以 | 不可以 |
| 链接目录 | 可以 | 不可以 |
| 源文件删除 | 链接失效 | 数据仍在,链接数减 1 |
ln -s /data/app/current /opt/app # 发布切换软链接即可回滚
七、/etc 下必须认识的配置文件
| 文件 | 作用 |
|---|---|
/etc/passwd |
用户信息(用户名:密码占位:UID:GID:描述:家目录:shell) |
/etc/shadow |
密码哈希与有效期(只有 root 能读) |
/etc/group |
用户组 |
/etc/hostname |
主机名(hostnamectl set-hostname 改的就是它) |
/etc/hosts |
本地域名解析,优先级高于 DNS |
/etc/resolv.conf |
DNS 客户端配置(nameserver) |
/etc/fstab |
开机自动挂载列表 |
/etc/selinux/config |
SELinux 开关 |
/etc/ssh/sshd_config |
SSH 服务端配置 |
Rocky 9 网卡配置在
/etc/NetworkManager/system-connections/;CentOS 7 在/etc/sysconfig/network-scripts/ifcfg-ens33。
八、其他常用位置
/var/log/messages:系统日志;/var/log/secure:登录与 sudo 日志。/tmp:临时文件,相当于“公共回收站”。- 生成指定大小文件:
dd if=/dev/zero of=/tmp/test.txt bs=10KB count=3→ 30KB 全零文件。
九、远程连接 SSH
systemctl status sshd # 确认服务端已启动
systemctl restart sshd # 改完配置重启生效
ssh root@192.168.0.163 # 客户端连接
Windows 可用 PowerShell 自带的 ssh,或 Xshell、SecureCRT、PuTTY;macOS / Linux 自带 ssh 客户端。
十、通配符与重定向
| 通配符 | 含义 | 例子 |
|---|---|---|
* |
任意多个字符 | *.log |
? |
任意一个字符 | file?.txt |
[abc] |
集合中任意一个 | [abc].txt |
{1..5} |
花括号展开 | touch f{1..5} |
| 重定向 | 含义 |
|---|---|
> |
覆盖输出 |
>> |
追加 |
2> |
错误输出 |
&> |
正确 + 错误 |
| |
管道 |
十一、速查表
pwd; cd -; cd ~; cd /etc
ls -lah; ls -dl /tmp; ls -lt
tree -L 2 /etc
touch a.txt; mkdir -p a/b/c
cp -a src dst; mv a b; rm -rf dir
cat f; less f; head -5 f; tail -f f
echo x > f; echo y >> f
ln -s /opt/app /usr/local/app
find / -name "*.conf" -type f 2>/dev/null
find /tmp -mtime +7 -name "*.log" -delete
du -sh /var/log/*; df -h
stat f; file f
chmod 644 f; chmod -R u+rwX dir; chown -R user:user dir
十二、常见坑
rm -rf /tmp/*前先ls一遍,通配符写错会删多。cp复制目录必须-r/-a。mv同名覆盖不提示,重要文件用mv -i。chmod 777图省事是坏习惯,按最小权限给。find /会穿越/proc、/sys,加2>/dev/null。- 软链接源用相对路径,移动后易失效,建议绝对路径。
>会清空文件,>>才是追加。
练习(16 题)
查看 /etc 目录本身的详情(不是里面内容),要带人类可读大小。
查看答案
ls -dlh /etc
目录本身用
-d,否则列出的是里面的内容;-h让大小带单位。
在当前用户家目录下一次性创建 dir1 到 dir5 五个目录。
查看答案
mkdir ~/dir{1..5}
花括号展开成 5 个参数,一条命令建 5 个目录。
把 /etc/hosts 复制到 /tmp 并命名为 hosts.bak,保留原属性。
查看答案
cp -a /etc/hosts /tmp/hosts.bak
-a保留权限、属主、时间戳,适合备份。
把 /tmp/a.txt 重命名为 /tmp/b.txt。
查看答案
mv /tmp/a.txt /tmp/b.txt
同一目录下
mv就是重命名。
只删除 /tmp 下所有 .log 文件。
查看答案
rm -f /tmp/*.log
先
ls /tmp/*.log确认再删更稳。
统计 /var/log 下每个子项占用的空间,按大小排序取前 5。
查看答案
du -sh /var/log/* | sort -rh | head -5
du -sh汇总,sort -rh按人类可读大小倒序。
查看 /etc/passwd 的最后 3 行,并让行号显示出来。
查看答案
tail -n 3 /etc/passwd
cat -n /etc/passwd | tail -n 3
tail自身不带行号,需要行号就配合cat -n。
动态跟踪 /var/log/messages 的新增内容。
查看答案
tail -f /var/log/messages
-f持续输出新增行;-F在日志轮转后还能继续跟踪。
给 /opt/run.sh 加上属主可执行权限,用数字表示法。
查看答案
chmod 744 /opt/run.sh
7=rwx、4=r--、4=r--。
把 /opt/data 的属主和属组都改成 www:www,包含子目录。
查看答案
chown -R www:www /opt/data
-R递归;用户:组同时改属主和属组。
创建一个软链接 /usr/local/nginx 指向 /opt/nginx-1.24。
查看答案
ln -s /opt/nginx-1.24 /usr/local/nginx
软链接源用绝对路径,链接移动后仍有效。
找出 /etc 下所有 .conf 文件,忽略权限报错。
查看答案
find /etc -name "*.conf" -type f 2>/dev/null
-type f排除同名目录;2>/dev/null屏蔽权限报错。
找出 /tmp 下 7 天以前修改的 .log 文件并删除(先只打印确认)。
查看答案
find /tmp -name "*.log" -mtime +7 -print
find /tmp -name "*.log" -mtime +7 -delete
先
-delete。
查看 /tmp/a.txt 的三种时间戳。
查看答案
stat /tmp/a.txt
输出里
Access、Modify、Change分别是 atime、mtime、ctime。
用一条命令生成一个 30KB、内容全零的文件。
查看答案
dd if=/dev/zero of=/tmp/test.txt bs=10KB count=3
读 3 块、每块 10KB 的零字节,生成约 30KB 文件。
判断 /bin/ls 是文本还是二进制文件。
查看答案
file /bin/ls
输出
ELF 64-bit LSB executable说明是二进制。