经典命令场景与软硬链接

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

目录

  • 一、经典命令场景
    • [1. df 与 du 的区别](#1. df 与 du 的区别 "#1-df-%E4%B8%8E-du-%E7%9A%84%E5%8C%BA%E5%88%AB")
    • [2. 重定向与标准流](#2. 重定向与标准流 "#2-%E9%87%8D%E5%AE%9A%E5%90%91%E4%B8%8E%E6%A0%87%E5%87%86%E6%B5%81")
  • [二、软链接与硬链接(★★★ 高频)](#二、软链接与硬链接(★★★ 高频) "#%E4%BA%8C%E8%BD%AF%E9%93%BE%E6%8E%A5%E4%B8%8E%E7%A1%AC%E9%93%BE%E6%8E%A5-%E9%AB%98%E9%A2%91")
    • [Q6 硬链接和软链接有什么区别?](#Q6 硬链接和软链接有什么区别? "#q6-%E7%A1%AC%E9%93%BE%E6%8E%A5%E5%92%8C%E8%BD%AF%E9%93%BE%E6%8E%A5%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB")
    • [Q7 什么是软链接?](#Q7 什么是软链接? "#q7-%E4%BB%80%E4%B9%88%E6%98%AF%E8%BD%AF%E9%93%BE%E6%8E%A5")
  • 速记卡

一、经典命令场景

1. df 与 du 的区别

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

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

bash 复制代码
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 两个真实场景

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

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

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

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

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

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

核心对比

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

怎么判断是哪种链接

bash 复制代码
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 du df 看分区剩余,du 看目录占用
2>&1 把 stderr 指到 stdout 当前所在的位置
硬链接 同 inode,删源可用,不能跨分区、不能指目录
软链接 存路径,删源即断,可跨分区、可指目录
相关推荐
CCCCCCCCharlie1 小时前
深入解析I/O底层:文件描述符与缓冲区真相
linux·开发语言·c++·算法
kmomo..2 小时前
Linux 驱动开发学习笔记:UART、触摸屏与 ADC 驱动实战
linux·驱动开发·学习
先知后行。2 小时前
各种文件系统
linux·服务器·数据库
人工智能培训2 小时前
具身智能环境交互与学习范式原理
大数据·linux·人工智能·学习·算法·机器学习
Sayai2 小时前
Java 进程 Unable to create new native thread 排查实战:Linux 线程数五层限制与 JVM -Xss 调优
java·linux·运维·jvm·性能优化
CS_Zero2 小时前
解决模型开发板ping不通模型终端设备问题
linux·网络
wuminyu2 小时前
Continuation::freeze与thaw的x86_64汇编Stack Chunk拆解源码分析
java·linux·c语言·汇编·jvm·c++
修船大队长3 小时前
启动阶段 KL15 未接通时触发报文超时监控
运维·服务器·网络