经典命令场景与软硬链接

5 阅读4分钟

主题:磁盘排查 · 重定向与标准流 · 软链接与硬链接 标注说明:★★★ 表示高频考点

目录


一、经典命令场景

1. df 与 du 的区别

df 看的是分区还剩多少空间,du 看的是目录占了多少空间。

排查磁盘满的标准顺序:先用 df 定位是哪个分区,再用 du 逐层找大目录。

df -h                              # 看每个挂载点的 Use%
du -sh /var/log                    # 看 /var/log 总共多大
du -sh /* 2>/dev/null | sort -h    # 找出哪个一级目录最大

记忆点:df = disk free(文件系统视角);du = disk usage(目录视角)。

补充追问:如果 df 显示满了、du 加起来却对不上,通常是已删除但仍被进程占用的文件,用 lsof | grep deleted 查。


2. 重定向与标准流

2.1 三个标准流

编号名称默认位置
0标准输入(stdin)键盘
1标准输出(stdout)屏幕 · 正常结果
2标准错误(stderr)屏幕 · 报错信息

2.2 >、>> 与 2>&1

操作符含义
>覆盖重定向
>>追加重定向
2>重定向标准错误
2>&1把标准错误重定向到标准输出当前所在的位置

易错点:&1 里的 1 指的是文件描述符 1,不是名为 1 的文件;而且顺序不能反,必须写成 > file 2>&1。

2.3 两个真实场景

# 1) 把命令的输出和错误都记到日志(cron 里最常用)
/shell/backup.sh >> /var/log/backup.log 2>&1

# 2) 屏蔽一堆无用的权限报错
find / -name "*.conf" 2>/dev/null

二、软链接与硬链接(★★★ 高频)

Q6 硬链接和软链接有什么区别?

考察点:inode · 文件系统 · 链接计数 来源:面经① 第 6 题(已会);面经② 第 4 题(问的是软链接)

ln a.txt hard.txt                 # 硬链接
ln -s a.txt soft.txt              # 软链接(-s = symbolic)
ls -li a.txt hard.txt soft.txt    # -i 查看 inode 编号

核心对比

对比硬链接软链接
本质同一个文件的另一个名字存放路径的快捷方式
inode 编号相同不同
删除源文件后还能用(数据还在)失效(指向的路径没了)
能否跨分区不能能
能否指向目录不能(.、.. 除外)能
类比同一个人有两个户口本桌面上的快捷方式

怎么判断是哪种链接

ls -l soft.txt
# lrwxrwxrwx ... soft.txt -> a.txt
# 开头是 l,并且有 -> 箭头,就是软链接

标准答法(背这一句)

硬链接和源文件指向同一个 inode,相当于给文件起了个新名字,删掉源文件数据还在;软链接存的是路径,是一个快捷方式,删掉源文件就失效了。软链接可以跨分区、可以指向目录,硬链接不行。

四个底层推论(追问时用)

追问怎么答
为什么硬链接不能跨文件系统inode 编号只在单个文件系统内唯一,跨分区找不到对应 inode
怎么看出还有几个硬链接ls -l 的第二列就是链接计数,减到 0 数据才真正释放
目录能做硬链接吗不能(. 和 .. 除外),否则目录树会出现环路
软链接存的是什么一段路径字符串,内核访问时重新解析

Q7 什么是软链接?

考察点:软链接的边界情况 · 断链 · 权限位 被追问的原因:只说「快捷方式」不够,要说出断链、权限位、怎么覆盖。

被追问时的 5 个细节

追问怎么答
软链接的权限位有意义吗没有。软链接永远是 lrwxrwxrwx,能不能访问看目标文件的权限
写成相对路径会怎样相对路径是相对链接文件所在目录解析的;把链接挪到别处就断了(跨目录一般写绝对路径)
什么是断链(dangling link)目标被删或移走后:ls -l 一般显示成红色,file 报 broken symbolic link;此时 test -L 为真、test -e 为假
怎么覆盖已有的链接ln -sf 目标 链接名(-f = 覆盖);不加 -f 会报 File exists
怎么知道它指向哪ls -l 看 -> 箭头;readlink 链接;readlink -f 链接 解析成最终绝对路径

实战场景(说出来比背定义有用)

版本发布常用软链接切流:/opt/app/current -> /opt/app/v1.2,回滚就是把链接指向 v1.1;Nginx 的 sites-enabled 也是指向 sites-available 的软链接。


速记卡

关键词一句话
df vs dudf 看分区剩余,du 看目录占用
2>&1把 stderr 指到 stdout 当前所在的位置
硬链接同 inode,删源可用,不能跨分区、不能指目录
软链接存路径,删源即断,可跨分区、可指目录