Shell
查看当前目录下所有目录的大小,并限制深度为 1 (以人类可读的格式):
du -dh 1 .
how to use#
-help --help
man [command]
TLDR https://tldr.sh
wget#
wget -r -p -np -k https://example.com
- 从 https://example.com 开始递归下载所有内容;
- 下载页面所需的所有资源(如图片、CSS 等);
- 限制下载范围,不会超出指定目录;
- 将 HTML 文件中的链接转换为本地链接,便于离线浏览。
文本操作#
cat ~/Software/setup_zsh.sh | iconv -f utf-8 -t utf-16le | clip.exe
传递给win的剪切板
模糊检索#
fzf
屏幕操作 (screen)#
提示:screen 的快捷键以 Ctrl-a 为前缀(可自定义)。部分功能依赖于 screen 版本与配置。
常用命令示例:
# 新建会话并命名
screen -S mysession
# 列出会话
screen -ls
# 分离会话(在 screen 中按)
Ctrl-a d
# 重连会话
screen -r mysession
# 在会话中创建新窗口(按)
Ctrl-a c
# 窗口切换:下一个 / 上一个
Ctrl-a n / Ctrl-a p
# 切换到指定窗口编号(按)
Ctrl-a 0..9
# 重命名当前窗口(按)
Ctrl-a A
# 关闭当前窗口(按)
Ctrl-a k
# 分割屏幕(水平)并在分区间切换
Ctrl-a S # 分割
Ctrl-a Tab # 切换焦点
Ctrl-a Q # 关闭其他分区,保留当前
# 复制/粘贴(拷贝模式)
Ctrl-a [ # 进入拷贝模式,移动光标,空格开始选择,回车复制
Ctrl-a ] # 粘贴
tmux#
默认前缀为 Ctrl-b。常用操作示例:
# 新建会话并命名
tmux new -s mysession
# 后台新建会话
tmux new -s mysession -d
# 列出会话
tmux ls
# 连接会话
tmux attach -t mysession
tmux a -t mysession
# 分离会话(在 tmux 中按)
Ctrl-b d
# 创建新窗口(按)
Ctrl-b c
# 窗口切换:下一个 / 上一个
Ctrl-b n / Ctrl-b p
# 重命名当前窗口(按)
Ctrl-b ,
# 垂直/水平分割窗格
Ctrl-b % # 垂直分割(左右)
Ctrl-b " # 水平分割(上下)
# 在窗格间切换
Ctrl-b o # 切换到下一个窗格
或使用方向键:Ctrl-b 上/下/左/右
# 调整窗格大小(示例)
Ctrl-b : resize-pane -L 5
# 关闭窗格 / 窗口
Ctrl-b x # 关闭当前窗格
Ctrl-b & # 关闭当前窗口
# 拷贝/粘贴(复制模式)
Ctrl-b [ # 进入复制模式,移动光标,空格开始选择,回车复制
Ctrl-b ] # 粘贴
# 将窗格输出保存到文件
tmux capture-pane -pS -1000 > /tmp/tmux_scrollback.txt
# 在脚本中发送按键到窗格
tmux send-keys -t mysession:0.1 'ls -la' C-m
提示:tmux 配置文件 ~/.tmux.conf 可自定义前缀、快捷键和行为;tmux 功能更强、脚本化友好,适合复杂会话管理。
install sofware / 安装软件#
常见场景:系统包管理器优先,其次使用语言/生态专属包管理器;找不到时再考虑从源码构建。
-
在 Debian/Ubuntu 系统:
- 更新源并安装:
sudo apt update sudo apt install <package>
- 搜索包名:
apt search <name> apt show <package>
- 更新源并安装:
-
在 macOS:(linux都能装homebrew)
- 使用 Homebrew:
brew update brew install <package>
- 使用 Homebrew:
-
语言/生态工具:
- Python:pip install --user
或使用 pipx - Node.js:npm install -g
或使用 nvm 管理 Node 版本 - Rust:cargo install
- Python:pip install --user
-
快速定位“未找到命令”原因:
- 确认包名拼写;使用 apt/dnf/pacman 的 search 命令查找。
- 在 Debian/Ubuntu 可参考命令搜索服务(如 command-not-found.com 的线上或系统数据库)。
-
从源码构建(最后手段):
- 获取源码:git clone
&& cd repo - 阅读 README / INSTALL 等文档,安装构建依赖。
- 常见构建流程:
- Autotools:
./configure --prefix=/usr/local make -j$(nproc) sudo make install
- CMake:
mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local cmake --build . -- -j$(nproc) sudo cmake --install .
- 如果是脚本或 Python 项目:查看是否有 setup.py / pyproject.toml / install.sh 指示安装方法。
- Autotools:
- 注意事项:尽量避免直接将文件散装到系统路径;可使用 --prefix=/usr/local、checkinstall、stow 或容器/虚拟环境来管理自建软件。
- 获取源码:git clone
总之:优先使用系统与生态的包管理器,必要时再从源码构建并按照项目文档安装。
pipe & Redirect#
ls | grep "build"
重定向 对文件的输出
redirect : > & <
ls > ls_out
把ls的输出stdout 输入到file ls_out里面
grep build < ls_out
把ls_out的内容 当作grep的命令的输入stdin
stdout / stderr / stdin(0, 1, 2)详解#
- 0:stdin(标准输入) — 程序从这里读取输入(通常来自键盘或管道)。
- 1:stdout(标准输出) — 程序的正常输出流,默认打印到终端。
- 2:stderr(标准错误) — 错误或诊断信息,默认也打印到终端(与 stdout 分离,便于分别重定向)。
常用重定向示例:
# 将 stdout 写入文件(覆盖)
cmd > out.txt
# 将 stdout 追加到文件
cmd >> out.txt
# 将 stderr 写入文件
cmd 2> err.txt
# 将 stdout 和 stderr 一起写入同一文件(bash)
cmd &> both.txt # bash-specific
# 或者更通用的写法
cmd > both.txt 2>&1
# 丢弃输出
cmd > /dev/null 2>&1 # 丢弃 stdout 和 stderr
cmd 2> /dev/null # 只丢弃 stderr
管道只传递 stdout,若要把 stderr 也传给下一个命令:
# 把 stderr 重定向到 stdout 再通过管道
cmd 2>&1 | less
# 或只把 stderr 通过进程替换传给另一个命令
cmd 2> >(grep -i error > errors.txt)
Here-doc / Here-string(多行输入)#
-
Here-doc(多行块):
cat <<EOF > file.txt 第一行 第二行 EOF
-
Here-string(短文本作为 stdin):
grep foo <<< "one foo two"
tee:同时输出到终端与文件#
ls -la | tee listing.txt # 将输出写到文件并打印到屏幕
ls -la | tee -a append.txt # 追加写入
xargs 与 find 的常见搭配#
处理大量文件或带空格的文件名时用 -print0 与 -0:
# 并行压缩找到的文件(对大文件集有效)
find . -type f -name '*.log' -print0 | xargs -0 -n1 -P4 gzip
进程替换(Process Substitution)#
在需要以文件名形式传递命令输出时:
diff <(ls dir1) <(ls dir2)
后台运行与作业控制#
- 将命令放后台运行:
sleep 60 &
- 查看作业、切后台/前台:
jobs fg %1 bg %1 disown %1 # 让作业与当前 shell 分离(可用于关闭终端后继续运行)
- 使用 nohup 或 screen/tmux 在会话断开后保持运行:
nohup longtask &> longtask.log &
脚本执行与 shebang、权限#
- 在脚本顶部加入 shebang:
#!/usr/bin/env bash
- 使脚本可执行并运行:
chmod +x script.sh ./script.sh
环境变量与 PATH、别名、函数#
- 临时设置并导出变量:
export MYVAR="value" echo $MYVAR
- 修改 PATH:
export PATH="$HOME/bin:$PATH"
- 常用别名(放入 ~/.bashrc 或 ~/.zshrc):
alias ll='ls -la' unalias ll
- 定义简单函数:
mkcd() { mkdir -p "$1" && cd "$1"; }
常见小技巧与安全注意#
- 使用双引号保护包含空格的文件名或变量: "$var"
- 避免在不受信任的数据上直接使用 eval 或将未过滤输入传给 shell。 (小心注入式攻击)(小心自己把自己注入式攻击了)
- 调试脚本时可用 set -x(显示执行命令)和 set -e(遇错退出)
set -euo pipefail # 推荐在脚本顶部开启(严格模式)
参考常见命令速查(一览)#
- 文件与权限:ls, cp, mv, rm, chmod, chown
- 压缩:tar, gzip, bzip2, zip
- 查找与筛选:find, grep, sed, awk
- 网络:curl, wget, ssh, scp
- 进程与性能:ps, top, htop, nice, ionice
- 包管理:apt, yum/dnf, pacman, brew
:掌握 IO 重定向、管道、后台/作业控制与脚本基础,能显著提高在 shell 中的效率。把常用片段放到 shell 配置文件或脚本中以便复用。
文本三剑客#
awk#
和c类似
创建日期: 2025-10-08