- 查看打开的文件描述符
lsof
- 查看进程打开的文件描述符
ll /proc/pid/fd/
- 获取脚本路径
script_path="$(cd "$(dirname "$0")"; pwd)"
- 获取相对路径对应的绝对路径
absolute_path=$(realpath "$relative_path")
- 获取字符串的最后一个字符
last_char="${dir_str: -1}"
- journalctl
# 删除超过两周的日志, 可以根据需要调整时间参数,例如 1month 或 7days。
journalctl --vacuum-time=2weeks
# 将日志文件的大小限制为 100MB
journalctl --vacuum-size=100M
- find
# 删除5天之前的文件夹
find . -mindepth 1 -type d -mtime +5 -exec rm -r {} +
# 删除5分钟之前的文件夹
find . -mindepth 1 -type d -mmin +5 -exec rm -r {} +
- sed插入一行
sed -i "2i find log/ -mindepth 1 -type d -mtime +5 -exec rm -r {} +" log.sh
- 屏蔽/启用服务
systemctl unmask my.service
systemctl mask my.service
# systemctl unmask 命令在 Linux 中用于去除服务单元的“屏蔽”。当你使用 systemctl mask 命令屏蔽一个服务时,它会创建一个从服务的单元文件到 /dev/null 的符号链接,从而阻止该服务被手动或自动启动。
# 使用 systemctl unmask 可以移除这个符号链接,使得服务可以再次启动。这在你需要重新启用之前被屏蔽的服务时非常有用。
- 启用扩展模式匹配
shopt -s extglob
该命令用于在 Bash shell 中启用扩展的模式匹配功能。具体来说,它允许使用更复杂的模式匹配语法,这在处理文件名或字符串时非常有用。
启用 extglob 后,你可以使用以下扩展模式:
?(pattern):匹配零个或一个模式。
*(pattern):匹配零个或多个模式。
+(pattern):匹配一个或多个模式。
@(pattern):匹配一个指定的模式。
!(pattern):匹配任何不匹配指定模式的字符串。
示例:如果你想匹配以 .txt 或 .md 结尾的文件,可以使用:
shopt -s extglob
ls *.@(txt|md)
- update-alternatives管理同一功能的多个软件版本
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
--install <链接> <名字> <实际路径> <优先级>
<链接>:系统中用于调用的通用路径(如 /usr/bin/gcc)
<名字>:该选择项的名字(如 gcc)
<实际路径>:你要添加的具体版本的路径(如 /usr/bin/gcc-12)
<优先级>:数字,优先级高的会被自动选为默认
# 切换默认 gcc/g++ 版本:
update-alternatives --config gcc
sudo apt update
sudo apt install gcc-12 g++-12
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
- 查看DNS
查看 systemd-resolved 状态(推荐)
resolvectl status
# 或旧命令
systemd-resolve --status
查看当前使用的 resolv.conf(注意 20.04 通常是 127.0.0.53 的 stub)
cat /etc/resolv.conf
# 若启用 systemd-resolved,实际服务器在:
cat /run/systemd/resolve/resolv.conf
使用 NetworkManager 查看每个网卡的 DNS
nmcli dev show | grep -E 'DEVICE|IP4.DNS'
netplan 配置里可能指定了 DNS(仅供参考)
grep -Rns 'nameserver\|addresses' /etc/netplan/
注意:
看到 nameserver 127.0.0.53 说明使用了 systemd-resolved 的本地 stub,实际 DNS 以 resolvectl status 或 /run/systemd/resolve/resolv.conf 为准。
本地 stub(本地桩解析器)是指运行在本机上的一个“轻量 DNS 代理/转发器”。在 Ubuntu 20.04 中就是 systemd-resolved 监听的 127.0.0.53。含义与作用:
工作原理:应用把 DNS 请求发给 127.0.0.53 → 本地 stub 接收、缓存并转发到实际的上游 DNS(如网关、ISP、DoT/DoH 服务)。
好处:
本地缓存,减少重复查询、加快解析。
支持每接口/每域名的“分裂 DNS”(不同网卡/域使用不同 DNS)。
统一入口,便于系统管理(Netplan、NetworkManager 配的 DNS 会聚合到这里)。
为什么 resolv.conf 常见 127.0.0.53:它只是本地入口;真正的上游 DNS 不在这里。
查看真实上游 DNS:
resolvectl status
cat /run/systemd/resolve/resolv.conf