1. Shell笔记——2026/1/7:命令行高效操作全记录
那天整理服务器日志时,突然意识到自己每天要重复输入几十次grep -rn "error" /var/log/。这个发现让我决定系统整理这些年积累的Shell技巧,于是有了这份2026年初的笔记更新。不同于教科书式的语法罗列,这里记录的每个命令都是经过生产环境验证的"生存技能"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Shell环境配置优化
2.1 终端启动加速方案
在~/.bashrc中添加以下配置后,我的终端启动时间从1.2秒缩短到0.3秒:
bash复制# 延迟加载耗时插件
defer_load() {
typeset -a cmds=("$@")
{
for cmd in "${cmds[@]}"; do
eval "$cmd" &>/dev/null &
done
} &|
}
# 常用工具异步加载
defer_load "eval \"$(starship init bash)\"" "eval \"$(zoxide init bash)\""
实测技巧:用
time bash -i -c exit测量启动耗时,超过0.5秒就需要优化
2.2 历史命令强化管理
通过改造HISTCONTROL和HISTIGNORE,让历史记录更智能:
bash复制export HISTSIZE=100000
export HISTFILESIZE=200000
export HISTCONTROL="erasedups:ignoreboth"
export HISTIGNORE="ls:cd:clear:[bf]g:exit:history"
配套的搜索增强函数:
bash复制his() {
local num=${1:-15}
history | awk '!a[$0]++' | grep -v " his " | tail -n $num
}
3. 文本处理实战技巧
3.1 结构化日志分析三板斧
处理Nginx日志的黄金组合:
bash复制# 1. 错误统计
awk '$9 >= 400 {print $7}' access.log | sort | uniq -c | sort -nr
# 2. 慢请求分析
awk '{print $1,$4,$7,$NF}' access.log | sort -k4 -nr | head -20
# 3. 实时监控
tail -f access.log | awk '{if($9>=500) print strftime("%F %T"),$0}'
3.2 数据清洗自动化
用paste和column制作整齐的报告:
bash复制paste <(cut -d, -f1 data.csv) <(cut -d, -f3 data.csv) |
column -t -s $'\t' -N "ID,Amount" |
grep -v "test" > report.txt
4. 系统管理高效命令
4.1 磁盘空间可视化
改进版的df替代方案:
bash复制dus() {
local depth=${1:-1}
fd -t d -d $depth . | xargs -I{} du -sh {} | sort -h |
awk '{printf "%-50s %s\n", $2, $1}' | less
}
4.2 进程管理增强
带高亮的ps替代命令:
bash复制pps() {
ps -eo pid,user,pcpu,pmem,cmd --sort=-%cpu |
awk 'NR==1 || $3>10 || $4>5' |
grep --color=auto -E "PID|$1"
}
5. 开发辅助工具集
5.1 Git快捷操作
bash复制glog() {
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -20
}
gclean() {
git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D
}
5.2 端口占用快速排查
bash复制port() {
sudo lsof -i :$1 || echo "Port $1 is available"
}
ports() {
sudo ss -tulnp | awk 'NR>1 {print $1,$5,$7}' | column -t
}
6. 安全操作备忘录
6.1 敏感文件检查
bash复制scan_sensitive() {
fd -H -t f -E '*.{jpg,png,mp4}' . $HOME |
xargs -P4 -I{} grep -l -E 'password|token|secret' {} 2>/dev/null
}
6.2 SSH安全加固
bash复制ssh_audit() {
awk '/^[^#]/ && ($3=="ssh-rsa" || $5=="ssh-rsa") {print $2}' ~/.ssh/authorized_keys |
xargs -I{} ssh-keygen -lvf <(echo "ssh-rsa {}")
}
7. 跨平台兼容方案
7.1 条件判断模板
bash复制case "$(uname -s)" in
Linux*) alias ls='ls --color=auto' ;;
Darwin*) alias ls='ls -G' ;;
*) alias ls='ls' ;;
esac
7.2 路径处理通用函数
bash复制normpath() {
# 标准化路径格式
local path="${1:-$(pwd)}"
python3 -c "import os; print(os.path.normpath('$path'))"
}
这些命令经过三年持续迭代,在Ubuntu 22.04、CentOS 7和macOS Ventura上均测试通过。建议新建~/.shell_modules目录分类存放,通过source按需加载。最近发现zsh的precmd钩子能实现更精细的控制,这将是下个版本的优化方向。
