附录 B

附录B 重要的UNIX命令

聚焦脚本开发高频命令;区分:Shell内置命令、文本处理、文件、进程、其他程序。 内置命令标记「🔹内置」;外部普通命令无标记。

Shell与内置命令

背景:内置命令运行于当前Shell进程内部,不会创建新子进程;执行速度更快。写shell脚本优先掌握。

命令 作用说明 常用参数 示例
🔹. / source 读取并在当前shell执行脚本文件,不新建子进程 无 . ./env.sh source ~/.bashrc
🔹break 跳出for/while/until/select循环 break n:跳出n层循环 while true; do break; done
🔹cd 切换当前工作目录 cd -回到上一次目录;cd ~到家目录 cd /var/log cd -
🔹continue 直接进入循环下一轮,跳过本轮后续代码 continue n 跳到外层第n层循环 for i in {1..3}; do continue; done
🔹eval 把参数拼接后,再次交给shell解析执行 无 eval "echo \$var"
🔹exec 用新程序替换当前shell进程,执行后不再返回原shell 无 exec /bin/bash
🔹exit 退出脚本/终端,可指定退出状态码 exit N N为退出码,0成功,非0失败 exit 0;exit 1
🔹export 把变量导出到子进程环境,子shell可以读取该变量 export VAR=value export PATH="/bin:$PATH"
🔹false 返回非0失败退出码,什么都不做,用于循环占位 无 while false; do :; done
🔹getopts 解析脚本的命令行选项参数,处理 -a -b 这类参数 内置变量OPTIND、OPTARG while getopts "ab:" opt; do … done
🔹read 读取标准输入,把一行内容存入shell变量 ‑p "提示" 打印提示;‑r关闭反斜杠转义 read -r filename read -p "请输入:" name
🔹readonly 设置变量只读,后续不能修改、不能unset readonly VAR readonly MAX_NUM=100
🔹return shell函数返回退出状态码,仅用于函数内部 return N fun(){ return 2; }
🔹set 设置shell行为选项;修改位置参数$1 $2 ‑e出错退出;‑u未定义变量报错;‑x开启调试打印 set -eux
🔹shift 删除位置参数,参数整体向左移动 shift n 向左移n个参数 shift 1;处理脚本$1 $2
🔹test / [ ] 条件判断:字符串、数字、文件属性检测 ‑f普通文件;‑d目录;‑gt大于 if [ -f "a.txt" ]; then … fi
🔹trap 捕获操作系统信号,脚本收到信号执行自定义逻辑 trap 动作 信号名 trap 'echo 收到中断' SIGINT
🔹true 返回0成功退出码,什么都不做,常用于循环占位 无 while true; do sleep 1; done
🔹type 查看命令类型:内置/外部/别名/关键字 ‑a显示全部匹配 type cd;type ls
🔹declare 声明变量,设置变量属性(整数、只读、数组) ‑i整数;‑r只读;‑a数组 declare -i sum=0
🔹ulimit 设置进程资源限制:文件句柄、内存、最大进程数 ‑a打印全部限制;‑n修改打开文件数 ulimit -a
🔹unset 删除shell变量、删除函数 unset 变量名 unset temp_var
basename 取出路径最后文件名;可以删除后缀,多用于命令替换 ‑s 后缀 去掉扩展名 basename /tmp/test.txt → test.txt basename -s .txt /tmp/test.txt → test
dirname 去除文件名,只保留目录路径 无 dirname /tmp/a/b/file.txt → /tmp/a/b
env 设置临时环境变量运行命令;查看全部环境变量 无 env LANG=C ls
id 打印用户UID、GID、所属用户组信息 ‑u只输出uid;‑g只输出gid id;id -u
date 打印/格式化系统日期时间 +格式串自定义输出格式 date +"%Y‑%m‑%d %H:%M:%S"
who 查看当前登录系统的用户列表 无 who
stty 修改终端设备属性(回显、行模式等) 无 stty -echo 关闭密码回显;stty echo恢复

文本处理

背景:shell脚本绝大多数工作都是文本解析、过滤、转换。这一组是高频核心工具。

命令 作用说明 常用参数 示例
awk 文本编程语言,按列/字段处理文本,脚本主力工具 ‑F指定字段分隔符 awk -F ':' '{print $1}' /etc/passwd
cat 读取文件,输出到标准输出;拼接多个文件 ‑n打印行号 cat file.txt cat a.txt b.txt > all.txt
cmp 逐字节对比两个文件,发现差异立刻停止,适合二进制对比 无 cmp file1.bin file2.bin
cut 截取文本指定列/指定字符;提取字段 ‑d分隔符;‑f取第几列;‑c取字符位置 cut -d':' -f1 /etc/passwd
dd 底层数据拷贝,磁盘镜像、字节转换;⚠参数格式特殊if= of= if=输入 of=输出 bs=块大小 dd if=/dev/sda of=/tmp/disk.img bs=4M
echo 打印文本到标准输出 ‑n不输出换行;‑e开启转义字符 echo "hello world";echo -n "no new line"
egrep 使用扩展正则表达式ERE搜索匹配行,等价grep -E ‑i忽略大小写;‑v反向过滤;‑c统计行数 egrep -i "error" app.log
expand 把Tab制表符替换为空格 无 expand tabfile.txt
fgrep 纯字符串精确匹配(不解析正则)等价grep -F ‑f file从文件读取多个关键词 fgrep "literal$string" log.txt
fmt 简单段落格式化,整理文本换行 无 fmt longtext.txt
grep 基础正则BRE搜索文本,打印匹配行 ‑i忽略大小写;‑v反向过滤;‑n输出行号 grep "warn" app.log
iconv 字符编码转换(gbk ↔ utf‑8) ‑f源编码 ‑t目标编码 iconv -f GBK -t UTF‑8 gbk.txt -o utf8.txt
join 对两个已经排序的文件,按关键字合并记录 ‑1文件1的key列;‑2文件2的key列 join file1.sorted file2.sorted
less 分页阅读工具(推荐优先使用,可向上翻页搜索) ‑N显示行号 less huge.log
more 老式分页工具,只能向下翻页,功能弱于less 无 more bigfile.txt
printf 格式化输出,比echo可控,脚本推荐优先printf 格式字符串 + 参数 printf "name=%s\n" "zhangsan"
sed 流编辑器,流式修改、替换、删除文本,不改动原文件(重定向才写回) ‑e多条表达式;‑i原地修改文件⚠谨慎 sed 's/old/new/g' file.txt
sort 对文本行排序 ‑n数字排序;‑k指定排序列;‑r逆序 sort -n -k2 data.txt
tee 标准输入,同时输出到屏幕+写入多个文件 ‑a追加模式,不覆盖 cat log.txt | tee out.log
tr 字符转换、删除、压缩重复字符 ‑d删除字符;‑s压缩重复字符 tr 'a-z' 'A-Z' < file.txt tr -s '\n'压缩空行
unexpand 把空格转换回Tab制表符 无 unexpand spacefile.txt
uniq 去除已经排序文件的重复相邻行;统计重复次数 ‑c统计计数;‑d只打印重复行 sort list.txt | uniq -c
wc 统计:行数、单词数、字节数 ‑l统计行;‑w单词;‑c字节 wc -l access.log

文件

文件操作、权限、查找、压缩打包命令

命令 作用说明 常用参数 示例
bzip2 / bunzip2 高压缩率 bz2 压缩解压 ‑d解压 bzip2 bigfile;bunzip2 bigfile.bz2
chgrp 修改文件/目录所属用户组 ‑R递归修改目录下全部内容 chgrp dev testdir
chmod 修改文件、目录权限(八进制/符号模式) ‑R递归;‑u/g/o/a用户组其他人 chmod 0640 file.txt chmod +x run.sh
chown 修改文件/目录所有者(用户+组) ‑R递归修改 chown zhangsan:dev test.txt
cksum POSIX标准,输出文件校验和+字节数 无 cksum myfile.tar
comm 对比两个已经排序的文件,输出三列:仅A有、仅B有、两者共有行 ‑1隐藏第1列;‑2隐藏第2列;‑3隐藏第3列 comm sorted_a.txt sorted_b.txt
cp 复制文件/目录 ‑r / ‑R递归复制目录;‑p保留权限时间戳 cp -rp dir1 dir2
df 查看磁盘分区空间使用情况 ‑i查看inode占用;‑h人类可读单位 df -h;df -i
diff 对比两个文本文件,输出差异 ‑u unified格式,补丁常用格式 diff -u old.txt new.txt
du 统计目录/文件占用磁盘大小 ‑s汇总总和;‑h人类可读单位 du -sh /home
file 探测文件真实数据类型(文本、ELF可执行、压缩包) 无 file /bin/ls;file test.txt
find 递归遍历目录树,按条件查找文件,脚本高频工具 ‑name按文件名;‑type f/d普通文件/目录;‑exec执行后续命令 find /tmp -type f -name "*.log"
gzip / gunzip gz格式压缩解压 ‑d解压;‑1快压缩;‑9高压缩比 gzip file;gunzip file.gz
head 读取文件开头N行 ‑n N取前N行 head -n 20 access.log
locate 根据文件名快速查找;依赖预生成数据库updatedb 无 locate nginx.conf
ls 列出目录文件信息 ‑l长格式权限;‑a显示隐藏文件;‑h可读大小 ls -lh /var/log
md5sum MD5哈希校验,验证文件完整性 无 md5sum download.iso
mktemp 生成安全唯一临时文件名/临时文件,脚本写临时文件强烈推荐 ‑d生成临时目录 tmpfile=$(mktemp)
od 八进制/十六进制打印二进制原始内容,查看不可见字节 ‑t x十六进制输出 od -t x binary.dat
patch 读取diff差异文件,给原文件打补丁 无 patch < diff.patch
pwd 打印当前工作目录(现代shell内置) 无 pwd
rm 删除文件;⚠删除目录需要‑r ‑r / ‑R递归删除目录;‑f强制不提示 rm -rf tempdir
rmdir 只删除空目录,目录有文件则失败 无 rmdir emptydir
strings 从二进制/可执行文件提取里面可打印字符串 无 strings /bin/bash
tail 读取文件末尾N行;‑f跟踪文件增长(实时日志) ‑n N末尾N行;‑f持续跟踪 tail -n 100 app.log tail -f app.log
tar 打包工具,可同时压缩;归档备份、软件发布标准格式 ‑c创建包;‑x解压;‑zgzip;‑jbzip2;‑v打印过程 tar -czvf out.tar.gz dir/ tar -xzvf out.tar.gz
touch 修改文件atime/mtime时间戳;文件不存在则创建空文件 无 touch newfile.txt
🔹umask 设置新建文件/目录权限掩码,拿掉哪些权限位 无 umask 0027;umask查看当前值
zip / unzip zip压缩包,跨Windows/Linux平台可移植 无 zip out.zip file1 file2;unzip out.zip

进程

进程调度、查看状态、发送信号,脚本做后台任务、定时任务必备

命令 作用说明 常用参数 示例
at 指定某个时间点执行一次任务,只执行1次 ‑l查看任务列表 at 23:00 <<EOF echo run once EOF
batch 系统负载低的时候,自动执行任务 无 batch <<EOF echo low‑load run EOF
cron 后台守护进程,周期性定时执行任务 配置文件crontab编辑 —
crontab 编辑用户定时任务表 ‑e编辑;‑l列出;‑r删除全部任务 crontab -e
fuser 查看哪个进程正在占用某个文件、socket 无 fuser /mnt/cdrom
kill 向进程发送信号;默认SIGTERM温和终止 ‑9发送SIGKILL强制杀死进程;‑l列出全部信号 kill 1234 kill -9 1234
nice 程序启动时设置CPU调度优先级;数值范围‑20~19,越小优先级越高 ‑n N优先级数值 nice -n 10 ./longtask.sh
ps 查看进程状态快照 ‑ef全量所有进程;auxBSD风格输出 ps -ef | grep nginx
renice 已经运行的进程,修改它的调度优先级 ‑n N -p PID renice -n 5 -p 4567
sleep 暂停程序指定秒数 数字,单位秒 sleep 5
top 交互式实时查看CPU、内存占用最高进程 无 top
🔹wait shell内置,等待后台子进程结束,获取退出码 wait PID等待指定pid;无参数等待全部后台进程 sleep 10 & wait $!
xargs 读取标准输入,拼装成命令参数,常配合find使用 ‑n每次传递几个参数;‑0安全处理带空格文件名 find . -name "*.tmp" | xargs rm

其他程序

命令 作用说明 常用参数 示例
man 查看命令/系统调用帮助手册 ‑k按关键词搜索手册 man grep;man -k chmod
logger 往系统syslog日志写入日志消息 无 logger "shell脚本执行完成"
ssh 加密远程登录执行远端机器命令 无 ssh [email protected]
scp 基于ssh安全远程拷贝文件 ‑r拷贝目录 scp file.tar user@host:/tmp/
uptime 打印系统开机时长,1/5/15分钟系统负载 无 uptime
make 编译构建工具,读取Makefile规则 无 make && make install
locale 查看系统字符集、区域语言配置 无 locale;locale -a查看全部可用locale
info GNU超文本帮助文档(部分gnu工具比man更完整) 无 info sed
mail 发送简单邮件 无 echo "text" | mail [email protected]

RCS版本控制命令(老式版本控制系统,现代工作基本用git,简单了解即可):ci签入、co签出、rcs维护库、rcsdiff对比版本、rlog打印变更日志。