Appearance
uname – 显示系统内核信息
uname命令来自英文词组UNIX name的缩写,其功能是查看系统主机名、内核及硬件架构等信息。如果不加任何参数,默认仅显示系统内核名称(相当于-s参数)的作用。
语法格式
bash
uname [选项]
选项
参数 | 输出内容 | 典型值示例 | 技术细节 |
---|---|---|---|
-s | 内核名称 | Linux | 对应struct utsname.sysname |
-n | 网络节点主机名 | server01 | 来自gethostname() 系统调用 |
-r | 内核发行版本 | 5.15.0-78-generic | 包含ABI兼容性标识 |
-v | 内核构建信息 | #85-Ubuntu SMP ... | 包含编译日期和GCC版本 |
-m | 硬件架构 | x86_64/aarch64 | 对应CPU指令集架构 |
-p | 处理器类型 | Intel(R) Xeon(R) Gold | 可能返回unknown (需root) |
-o | 操作系统名称 | GNU/Linux | GNU扩展参数 |
-a | 所有可用信息 | 综合上述所有参数输出 | 输出顺序:s n r v m p o |
which - 查找命令所在的位置
定位给定命令的可执行文件路径,通过搜索 $PATH
环境变量中的目录顺序查找第一个匹配项
语法格式
bash
which [选项] 命令名...
选项
选项 | 作用 | 示例 |
---|---|---|
-a | 显示所有匹配路径(不限于第一个) | which -a python |
--skip-alias | 忽略别名扩展 | which --skip-alias ll |
--skip-functions | 跳过shell函数 | which --skip-functions _git |
--read-alias | 从stdin读取别名(需配合alias 命令) | `alias |
-i | 交互模式(部分实现支持) | which -i docker |
ps – 显示进程状态
ps命令来自英文单词process的缩写,中文译为“进程”,其功能是显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源(处理器与内存)使用占比、运行状态等。ps命令可帮助我们及时发现哪些进程出现“僵死”或“不可中断”等异常情况。 ps命令经常会与kill命令搭配使用,以中断和删除不必要的服务进程,避免服务器的资源浪费。
语法格式
bash
ps [选项]
选项
选项 | 说明 |
---|---|
-A | 显示所有进程(同 -e) |
-e | 显示所有进程 |
-a | 显示终端上的所有进程(除会话引导进程) |
-d | 显示所有进程(除会话引导进程) |
-f | 完整格式输出(显示命令行参数) |
-F | 额外完整格式(比 -f 更多字段) |
-H | 显示进程层次结构 |
-j | 显示作业控制信息 |
-l | 长格式输出 |
-L | 显示线程(LWP和NLWP列) |
-M | 显示安全上下文(SELinux) |
-o | 用户自定义格式 |
-y | 不显示标志(与 -l 一起使用) |
-Z | 显示安全上下文(同 -M) |
BSD风格选项
选项 | 说明 |
---|---|
aux | 显示所有用户的所有进程(常用组合) |
-T | 显示该终端的所有进程 |
-m | 显示线程 |
-r | 只显示运行中的进程 |
-x | 显示无控制终端的进程 |
GNU长选项
选项 | 说明 |
---|---|
--forest | 树形显示进程层次 |
--sort | 指定排序字段(+field升序,-field降序) |
--headers | 重复显示标题行 |
--no-headers | 不显示标题行 |
--format | 自定义输出格式(同 -o) |
--pid | 显示指定PID的进程 |
--ppid | 显示指定PPID的子进程 |
--quick-pid | 快速检查指定PID |
输出格式控制
bash
%cpu # CPU使用率
%mem # 内存使用率
args # 完整命令行
cmd # 简单命令名
command # 命令名
etime # 进程运行时间
euser # 有效用户名
fgroup # 文件系统组名
lstart # 进程启动时间
lWP # 线程号
NLWP # 该进程中的线程数
ni # nice值,优先级修改值取值范围-20到20
pcpu # CPU百分比(同%cpu)
pgid # 进程组ID
pid # 进程ID
ppid # 父进程ID
pri # 优先级
rss # 驻留集大小(内存)
stat # 进程状态
S # 休眠状态进程
R # 运行状态进程
D # 不可中断(正在等待系统分配资源)
+ # 运行在前台进程
Z # 僵尸进程(需要定期清理)
time # 累计CPU时间
tty # 控制终端
? # 系统启动进程
tty # 本地登录
pts # 远程登录
user # 用户名
vsz # 虚拟内存大小
经典案例
bash
ps -ef # UNIX风格
ps aux # BSD风格
ps aux --sort=-pcpu | head -10 # 按CPU使用率降序前10
ps aux --sort=-pmem | head -10 # 按内存使用率降序前10
ps -ef --forest # 树形显示进程关系
ps -ef | grep nginx # 模糊匹配进程名
ps -C sshd -f # 精确匹配命令名
ps -p 1234,5678 # 按PID筛选
ps -L -p <PID> # 查看指定进程的线程
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu # 仅显示指定列
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 10 # 监控高CPU进程
kill – 杀死进程
kill
命令用于向进程发送信号,以终止、暂停或恢复进程的运行。它通过进程ID(PID)识别目标进程,并支持多种信号类型,允许用户以不同方式控制进程行为。
默认信号:SIGTERM (15)
(请求正常终止进程)
语法格式
bash
kill [选项] <PID>...
kill -<信号> <PID>...
kill -l [信号编号]
信号选项
信号编号 | 信号名 | 说明 | 常用场景 |
---|---|---|---|
1 | SIGHUP | 挂断进程,通常用于重启或重新加载配置(如守护进程) | kill -1 <PID> 或 kill -HUP 48 |
2 | SIGINT | 中断进程(等同于 Ctrl+C ) | 交互式程序终止 |
9 | SIGKILL | 强制终止,进程无法捕获或忽略,直接由内核处理 | 顽固进程终止17 |
15 | SIGTERM | 默认信号,请求进程正常退出(允许清理资源) | kill <PID> 39 |
18 | SIGCONT | 恢复已暂停的进程 | 结合 SIGSTOP 使用 |
19 | SIGSTOP | 暂停进程(不可捕获或忽略),等同于 Ctrl+Z | 调试或暂停任务 |
选项
选项 | 说明 |
---|---|
-l | 列出所有信号名称 |
-s <信号> | 指定信号(如 -s 9 或 -s SIGKILL ) |
-<信号> | 直接使用信号(如 -9 或 -KILL ) |
经典案例
bash
kill 1234 # 发送 SIGTERM (15) 请求正常终止 PID 1234
kill -9 1234 # 强制终止 PID 1234(SIGKILL):cite[1]:cite[8]
kill -1 5678 # 发送 SIGHUP,常用于重启守护进程(如 Nginx):cite[3]:cite[6]
kill -19 1234 # 暂停 PID 1234(SIGSTOP)
kill -18 1234 # 恢复 PID 1234(SIGCONT):cite[1]:cite[4]
kill 1234 5678 # 同时终止 PID 1234 和 5678:cite[3]
pkill nginx # 终止所有名为 "nginx" 的进程
killall -9 python # 强制终止所有 Python 进程:cite[5]:cite[8]
kill -9 $(ps -u username -o pid) # 强制终止某用户的所有进程:cite[8]
kill -9 $(ps -A -ostat,ppid | awk '/[Zz]/ {print $2}') # 终止僵尸进程的父进程:cite[5]:cite[6]
注意事项
SIGKILL
(-9
)是最后的强制手段- 进程无法捕获或忽略
SIGKILL
,可能导致数据丢失。 - 优先尝试
SIGTERM
(-15
),给进程清理资源的机会。
- 进程无法捕获或忽略
ill -15
(默认) → 优雅终止(推荐优先使用)
pkill - 批量终止进程
pkill
是 kill
的增强版,允许通过 进程名、用户、终端等条件 批量终止进程,无需手动查找 PID。
语法格式
bash
pkill [选项] <模式>
选项
选项 | 说明 |
---|---|
-f | 匹配完整命令行(而不仅是进程名) |
-u | 按用户名匹配 |
-t | 按终端匹配(如 pts/0 ) |
-x | 精确匹配进程名 |
-n | 只杀最新的匹配进程 |
-o | 只杀最旧的匹配进程 |
-c | 统计匹配的进程数(不实际终止) |
-l | 显示进程名(配合 -c 使用) |
经典案例
bash
pkill -f "python" # 终止命令行包含 "python3" 的进程
pkill nginx # 终止所有名为 "nginx" 的进程
pkill -u root # 终止 root 用户的所有进程
pkill -u bob,alice # 终止多个用户的进程
pkill -t pts/1 # 终止来自终端 pts/1 的进程
pkill -9 nginx # 强制终止(SIGKILL)
pkill -15 python # 优雅终止(SIGTERM,默认)
pkill -STOP vim # 暂停进程(SIGSTOP)
pkill -CONT vim # 恢复进程(SIGCONT
pkill -u bob -t pts/2 # 终止某用户的 SSH 会话
killall - 按进程名批量终止进程
killall
用于 按进程名批量终止进程(精确匹配),比 kill
更方便,但比 pkill
功能简单。
语法格式
bash
killall [选项] <进程名>
选项
选项 | 说明 |
---|---|
-e | 精确匹配进程名(默认) |
-I | 忽略大小写 |
-i | 交互式终止(询问确认) |
-r | 使用正则表达式匹配(类似 pkill ) |
-s | 指定信号(如 -s 9 或 -s KILL ) |
-v | 显示详细信息(哪些进程被终止) |
-w | 等待所有进程终止后再返回 |
经典案例
bash
killall nginx # 终止所有名为 "nginx" 的进程
killall -9 python # 强制终止所有 Python 进程
killall -u root # 终止 root 用户的所有进程
killall -u bob # 终止用户 bob 的所有进程
killall -15 nginx # 优雅终止(SIGTERM,默认)
killall -9 vim # 强制终止(SIGKILL)
killall -STOP bash # 暂停所有 Bash 进程
killall -CONT bash # 恢复所有 Bash 进程
type - 查看是外部命令还是内部命令
type
是 Linux 中用于显示命令类型的实用工具,它能够告诉你指定的命令是别名、shell 内置命令、函数还是外部可执行文件。
语法格式
bash
type [选项] 命令名
选项
选项 | 说明 |
---|---|
-t | 只显示命令类型(简短输出) |
-p | 如果是外部命令,显示其路径 |
-P | 强制在 PATH 中查找,即使命令是别名或函数 |
-a | 显示所有可能的定义(包括别名、内置命令、外部命令等) |
经典案例
基本用法
bashtype ls # 查看命令类型 type -t cd # 只显示命令类型(简洁模式 type -p python # 查找外部命令的路径 type -a echo # 显示命令的所有可能定义
实用技巧
bash# 区分命令是内置还是外部 if [ "$(type -t command)" = "builtin" ]; then echo "This is a shell builtin" fi # 获取可执行文件的完整路径 full_path=$(type -p some_command)
hostnamectl – 显示与设置主机名称
hostnamectl
是 systemd
提供的工具,用于查询和修改 Linux 系统的主机名及相关系统信息。它直接与 systemd-hostnamed
服务交互,无需手动编辑配置文件(如 /etc/hostname
或 /etc/hosts
)。
语法格式
bash
hostnamectl [选项] [命令] [主机名]
选项
选项 | 说明 |
---|---|
--static | 设置静态主机名(默认,持久化) |
--transient | 设置临时主机名(重启失效) |
--pretty | 设置美观主机名(可含空格/符号) |
--no-ask-password | 执行时不提示输入密码(脚本适用) |
-h 或 --help | 显示帮助信息 |
经典案例
bash
hostnamectl # 查看当前主机信息
hostnamectl set-hostname "new-server" --static # 修改静态主机名(永久生效)
NOTE
设置后可以使用bash
命令使其立即生效
rpm - 软件包管理工具
RPM(Red Hat Package Manager)是 Red Hat 系列 Linux 发行版(如 RHEL、CentOS、Fedora)的软件包管理工具,用于安装、查询、验证、升级和卸载软件包。
语法格式
bash
rpm [选项] [软件包名/文件]
常用选项分类
安装/升级/卸载选项
选项 | 说明 |
---|---|
-i | 安装软件包 |
-U | 升级软件包(如不存在则安装) |
-F | 升级已安装的软件包 |
-e 软件名 | 卸载软件包 |
--nodeps | 忽略依赖关系,强制卸载程序 |
--force | 强制操作。和ivh 配合使用,覆盖系统内的旧的安装信息 |
查询选项
选项 | 说明 |
---|---|
-q | 查询软件包 |
-a | 查询所有已安装的软件包 |
-l 软件名 | 列出软件包中的文件 |
-i 软件名 | 显示软件包信息 |
-f 软件名 | 查询文件属于哪个软件包 |
-c | 列出配置文件 |
验证选项
选项 | 说明 |
---|---|
-V | 验证软件包文件 |
--checksig | 验证软件包签名 |
经典案例
bash
# -v 显示详细信息
# -h 显示进度条
rpm -ivh package.rpm
rpm -e package-name # 卸载软件包
rpm -qa # 查询所有已安装的软件包
rpm -q package-name # 查询特定软件包是否安装
rpm -ql package-name # 列出软件包包含的文件
rpm -qf /usr/bin/rz # 查询文件属于哪个软件包
注意事项
- 依赖问题:RPM 不会自动解决依赖关系(建议使用 yum/dnf)
- 安装顺序:多个相互依赖的软件包需按正确顺序安装
- 强制安装:
--force
可能破坏系统稳定性 - 签名验证:建议始终验证软件包签名
- 配置文件:升级时旧配置文件会保存为 .rpmsave 文件
yum/dnf软件包管理
yum
(Yellowdog Updater Modified)是 RHEL/CentOS 等基于 RPM 的 Linux 发行版的 高级包管理工具,相比 rpm
能 自动解决依赖关系,简化软件安装和管理。
语法格式
bash
yum [选项] [命令] [软件包名/组名/通配符]
常用命令
操作类型 | 命令 | 功能说明 |
---|---|---|
安装 | install | 安装指定软件包 |
groupinstall | 安装软件包组 | |
卸载 | remove | 卸载软件包(保留依赖) |
autoremove | 卸载未使用的依赖 | |
更新 | update | 更新所有/指定软件包 |
upgrade | 升级整个系统(CentOS 8+用dnf ) | |
查询 | list | 列出可用/已安装的包 |
search | 搜索软件包 | |
info | 显示软件包详细信息 | |
provides | 查询命令所属安装包 | |
仓库 | repolist | 列出已启用的仓库 |
clean all | 清理缓存(/var/cache/yum ) | |
历史 | history | 查看操作历史 |
history undo <ID> | 撤销指定操作 |
选项
选项 | 作用 |
---|---|
-y | 自动回答 "yes"(非交互式) |
-q | 静默模式(不显示输出) |
-v | 显示详细过程 |
--nogpg | 跳过 GPG 签名验证 |
经典示例
yum
bash
yum clean all # 清理缓存(释放磁盘空间)
yum makecache # 生成缓存
yum install -y nginx # 安装软件包
yum remove httpd # 卸载软件包(保留依赖)
yum update -y # 更新所有软件包
yum search python3 # 搜索软件包
yum info nginx # 查看软件包信息
## 回滚操作
yum history list # 查看yum操作历史
yum history undo 3 # 撤销ID为3的操作
yum localinstall /path/to/package.rpm # 本地安装 RPM
常见问题
报错 "No match for argument" ⇒ 检查包名是否正确或更新仓库:
sudo yum makecache
仓库元数据损坏 ⇒ 清理缓存后重建:
bashsudo yum clean all sudo yum makecache
替代
yum
的dnf
CentOS 8+/RHEL 8+ 中,yum
是dnf
的符号链接,用法基本一致。
alias - 命令别名
在 Shell 会话中创建命令快捷方式,通过字符串替换实现命令简化或增强
语法格式
bash
alias [别名]='原始命令'
操作维度
操作类型 | 命令示例 | 作用说明 |
---|---|---|
创建别名 | alias ll='ls -alh' | 将ls -alh 绑定到ll |
查看别名 | alias 或 alias ll | 显示所有/指定别名定义 |
删除别名 | unalias ll | 移除指定别名 |
持久化存储 | 写入~/.bashrc 或~/.zshrc | 实现登录时自动加载 |
clear - 清除屏幕
clear命令来自英文单词,中文译为“清理”,其功能是用于清除终端界面已有内容。执行clear命令后终端界面会向后翻一页,实现了“清除”当前屏幕上已有内容的效果,等同于快捷键“Ctrl+c”的效果
语法格式
bash
clear [参数]
选项
选型 | 说明 |
---|---|
--help | 显示帮助信息 |
--vesion | 显示版本信息 |
xargs - 列数据转换为命令行参数
xargs
(eXtended ARGuments)用于将标准输入(stdin)的数据转换为命令行参数,并传递给其他命令执行。它解决了管道符 |
无法直接将输入作为参数的问题,常用于批量处理文件、多参数传递等场景。
格式
bash
[输入源] | xargs [选项] [目标命令] [目标命令的选项]
输入源:通常来自管道(如
find
、grep
的输出)或文件。目标命令:默认是
echo
(仅显示参数),通常替换为rm
、mv
、cp
等需要参数的命令。
参数
参数 | 说明 |
---|---|
-n NUM | 每次执行命令时传递 NUM 个参数 |
-I {} | 定义替换字符串(如 {} ),将输入插入到命令的指定位置 |
-p | 交互式模式,执行前询问用户确认 |
-t | 打印要执行的命令(调试用) |
-0 / --null | 输入项以 \0 分隔(配合 find -print0 处理含空格/特殊字符的文件名) |
-P NUM | 并行执行,启动 NUM 个进程加速任务 |
-d DELIM | 自定义分隔符(默认以空格/Tab/换行分隔输入) |
-s MAX_SIZE | 设置命令行的最大总长度(避免 "Argument list too long" 错误) |
应用场景
bash
# 删除所有 .tmp 文件(先确认列表,再替换为 rm)
find . -name "*.tmp" | xargs rm -f
# 将找到的 .log 文件移动到 backup 目录
find /var/log -name "*.log" | xargs -I {} mv {} ~/backup
find /var/log -name "*.log" | xargs -I @ mv @ ~/backup
find /var/log -name "*.log" | xargs -i -i mv {} ~/backup
# 使用 find -print0 和 xargs -0 安全处理文件名
find . -name "*.txt" -print0 | xargs -0 -I {} cp {} ~/docs
# 每次传递 3 个文件给 tar 命令压缩
find . -type f -name "*.csv" | xargs -n 3 tar -czvf archive.tar.gz
# 使用 4 个进程并行压缩图片
find . -name "*.jpg" | xargs -P 4 -I {} convert {} -resize 50% {}_resized.jpg
# 删除文件前询问用户确认
find . -name "*.bak" | xargs -p rm -f
# 批量重命名文件(比 for 循环更高效)
ls *.txt | xargs -I {} mv {} {}_backup
# 将输入作为中间参数传递
echo "keyword" | xargs -I {} grep {} file1.txt file2.tx
# 批量替换文件后缀
find . -name "*.cfg" | xargs -I {} bash -c 'mv "$0" "${0%.cfg}.md"' {} \;
seq - 生成数字序列
生成指定范围内的整数序列,常用于循环操作或生成测试数据。
语法格式
bash
seq [选项] 起始值 步长 结束值
# 简化形式:
seq 结束值 # 生成 1 到 N 的序列
seq 起始值 结束值 # 生成 起始值 到 结束值 的序列
seq 起始值 步长 结束值
选项
选项 | 作用 | 示例 |
---|---|---|
-s | 指定分隔符(默认换行) | seq -s " " 3 → 1 2 3 |
-w | 等宽补零(对齐数字位数) | seq -w 8 10 → 08 09 10 |
-f | 格式化输出(类似 printf) | seq -f "num%03g" 3 → num001 num002 num003 |
make - 构建工具
GNU make
是自动化构建工具,通过读取 Makefile
文件自动执行编译、安装等任务。广泛用于 C/C++ 项目,但支持任意文件依赖关系的自动化处理。
语法格式
bash
make [选项] [目标] [宏定义]
选项
选项 | 作用 |
---|---|
-f FILE | 指定非默认名称的 Makefile |
-j N | 并行执行任务(N=线程数) |
-n | 只显示命令但不执行(dry-run) |
-B | 强制重建所有目标 |
-C DIR | 先切换到指定目录再执行 |
install | 执行安装目标 |
clean | 执行清理规则 |
--debug | 输出调试信息 |
经典案例
bash
make # 编译默认目标(通常是第一个目标)
make -j4 # 使用4个线程并行编译
make -f build.mk # 指定自定义 Makefile
make CC=clang # 临时使用clang代替默认编译器
make install # 执行安装目标
make clean # 执行清理规则
调试技巧
bash
make --debug=v # 详细输出依赖检查过程
make -p # 打印所有内置规则和变量
NOTE
💡 扩展知识:现代替代品如 CMake/Meson 会生成 Makefile,但 make
仍是实际执行构建的标准工具。
getent - 统一查询系统数据库
getent
是 Linux 系统中用于统一查询系统数据库的命令
语法格式
bash
getent 数据库类型 [查询键]
基本功能
数据库类型 | 描述 |
---|---|
passwd | 用户账户信息(替代 /etc/passwd ) |
group | 组信息(替代 /etc/group ) |
hosts | 主机名解析(替代 /etc/hosts ) |
services | 网络服务列表 |
shadow | 密码哈希(需 root 权限) |
经典案例
bash
getent passwd # 批量查询所有用户等效于 cat /etc/passwd
getent passwd username # 查询用户信息
getent group groupname # 查询组信息
getent hosts www.openeuler.org # 主机名解析
getent services ssh # 查询网络服务
getent --help | grep databases: # 显示支持的数据库类型
systemd - 系统和服务管理器
systemd 是 Linux 系统的新型初始化系统和服务管理器,取代传统的 SysVinit。它提供:
- 并行启动服务
- 按需激活守护进程
- 快照和系统状态恢复
- 依赖关系管理
语法格式
bash
systemctl [OPTIONS] COMMAND [UNIT...]
主要命令
命令 | 作用 |
---|---|
systemctl start <服务名> | 启动服务(立即生效) |
systemctl stop <服务名> | 停止服务 |
systemctl restart <服务名> | 重启服务 |
systemctl reload <服务名> | 重新加载配置(不重启服务) |
systemctl status <服务名> | 查看服务状态(运行/失败/日志) |
systemctl enable <服务名> | 开机自启 |
systemctl disable <服务名> | 开机不自启 |
systemctl is-active <服务名> | 检查服务是否正在运行 |
systemctl is-enabled <服务名> | 检查服务是否开机自启 |
systemctl enable --now <服务名> | 开机自启,并立即启动 |
systemctl disable --now <服务名> | 开机不自启,并立即关 |
systemctl status | 系统管理 |
journalctl -u <服务名> | 日志管理 |
journalctl | 查看系统日志 |
经典案例
bash
systemctl status nginx # 查看服务状态
systemctl enable docker # 设置开机启动
systemctl enable docker --now # 设置开机启动并立即启动
systemctl start sshd # 启动服务
systemctl stop apache2 # 停止服务
systemctl restart mysql # 重启服务
注意事项
- 配置文件路径:
- 系统服务:
/etc/systemd/system/
- 用户服务:
~/.config/systemd/user/
- 系统服务:
- 修改配置后需要重载:
systemctl daemon-reload
- 查看日志
journalctl -u service_name
- 不同发行版差异:
- Ubuntu 16.04+ 默认使用
- CentOS 7+ 默认使用
- 旧版系统可能需要手动安装
journalctl - 查询 systemd 日志
journalctl
是 systemd 提供的日志管理工具,用于查看和分析系统日志。它替代了传统的 syslog
,并提供了更强大的日志过滤、搜索和格式化功能。
语法格式
bash
journalctl [OPTIONS] [MATCHES...]
选项
选项 | 说明 |
---|---|
-u UNIT | 查看指定服务的日志 |
-b | 查看本次启动的日志 |
-f | 实时跟踪日志(类似 tail -f ) |
-n NUM | 显示最近的 NUM 条日志 |
-k | 仅显示内核日志 |
--since "YYYY-MM-DD HH:MM:SS" | 查看指定时间之后的日志 |
--until "YYYY-MM-DD HH:MM:SS" | 查看指定时间之前的日志 |
-p PRIORITY | 按日志级别过滤(如 emerg , alert , crit , err , warning , notice , info , debug ) |
-o json | 以 JSON 格式输出日志 |
--no-pager | 直接输出(不进入分页模式) |
经典案例
bash
journalctl # 查看所有日志
journalctl -u nginx # 查看特定服务的日志
journalctl -f # 实时跟踪日志(类似 tail -f)
journalctl -n 50 # 查看最近 50 条日志
journalctl -b # 查看本次启动的日志
journalctl -p err # 查看错误级别的日志
journalctl --since "2023-10-01 00:00:00" --until "2023-10-02 23:59:59" # 查看特定时间段的日志
journalctl -k # 查看内核日志
journalctl _PID=1234 # 查看某个进程的日志
journalctl -u sshd --no-pager > sshd.log #导出日志到文件
注意事项
权限要求:
普通用户只能查看自己的日志。
使用
sudo
查看系统日志:
bashsudo journalctl
日志存储位置:
- 默认存储在
/var/log/journal/
(如果存在)。 - 如果未启用持久化存储,重启后日志会丢失。
- 默认存储在
启用持久化存储:
bashsudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald
日志大小限制:
默认限制在
/etc/systemd/journald.conf
中配置:iniSystemMaxUse=500M RuntimeMaxUse=100M
top - 实时进程监控工具
top
是 Linux 系统中最常用的实时进程监控工具,可以动态查看系统资源使用情况、进程状态和系统负载。
语法格式
bash
top [选项]
- 默认显示 CPU、内存、进程等信息
- 按
q
退出
选项 | 说明 |
---|---|
top -d <秒> | 设置刷新间隔(默认 3 秒) |
top -p <PID> | 仅监控指定进程 |
top -u <用户名> | 仅显示指定用户的进程 |
top -H | 显示线程(而不是进程) |
top -b | 批处理模式(适合输出到文件) |
top -n <次数> | 运行指定次数后退出 |
top 交互命令
在 top
运行时,可以输入以下命令进行交互:
全局控制
命令 | 说明 |
---|---|
q | 退出 top |
h | 显示帮助 |
Space | 立即刷新 |
z | 切换彩色/黑白显示 |
W | 保存当前配置到 ~/.toprc |
排序控制
命令 | 说明 |
---|---|
P (大写) | 按 CPU 使用率 排序 |
M (大写) | 按 内存使用率 排序 |
T (大写) | 按 运行时间 排序 |
N (大写) | 按 PID 排序 |
R (大写) | 反向排序 |
进程操作
命令 | 说明 |
---|---|
k | 杀死进程(输入 PID 后回车) |
r | 调整进程的 nice 值(优先级) |
c | 显示完整命令行 |
H (大写) | 显示/隐藏线程 |
top 界面解析
top
界面分为 顶部汇总信息 和 进程列表 两部分:
顶部汇总信息
bash
top - 10:30:45 up 2 days, 3:45, 2 users, load average: 0.15, 0.10, 0.05
Tasks: 120 total, 2 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 1.2 sy, 0.0 ni, 93.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7856.4 total, 1024.2 free, 4096.0 used, 2736.2 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3200.0 avail Mem
- 第1行:系统运行时间、用户数、平均负载(1/5/15 分钟)
- 第2行:进程状态(运行、睡眠、停止、僵尸)
- 第3行:CPU 使用情况(用户态、内核态、空闲、IO等待等)
- 第4行:物理内存使用情况(总量、空闲、已用、缓存)
- 第5行:交换分区(Swap)使用情况
进程列表
bash
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 500000 80000 10000 R 10.5 1.0 5:30.01 firefox
5678 mysql 20 0 2000000 500000 20000 S 5.2 6.3 10:20.45 mysqld
- PID:进程 ID
- USER:进程所属用户
- PR:优先级
- NI:
nice
值(-20 最高,19 最低) - VIRT:虚拟内存使用量(KB)
- RES:物理内存使用量(KB)
- SHR:共享内存(KB)
- S:进程状态(R=运行, S=睡眠, Z=僵尸, D=不可中断)
- %CPU:CPU 占用率
- %MEM:内存占用率
- TIME+:累计 CPU 时间
- COMMAND:进程名(
c
键可切换完整命令)
经典案例
bash
top -p 1234,5678 # 监控 PID 1234 和 5678
top -b -n 3 > top.log # 运行 3 次并保存到文件
top -H -p 1234 # 查看 PID 1234 的所有线程
top -o %MEM # 按内存占用排序
top -d 1 # 每秒刷新一次
pstree - 树状结构显示进程
pstree 命令以树状结构显示系统中正在运行的进程及其关系,直观展示进程间的父子关系。
语法格式
bash
pstree [选项] [PID/用户名]
主要选项
选项 | 说明 |
---|---|
-a | 显示完整命令行 |
-c | 禁止压缩相同进程 |
-h | 高亮当前进程及其祖先 |
-H PID | 高亮指定PID的进程 |
-l | 显示长行(不截断) |
-n | 按PID排序(默认按名称) |
-p | 显示PID |
-u | 显示用户切换 |
-G | 使用VT100线条字符 |
-U | 使用UTF-8线条字符 |
经典案例
bash
pstree -p # 显示完整进程树(带PID)
pstree username # 显示特定用户的进程
pstree -H `pgrep sshd` # 高亮显示SSH进程
pstree -a # 显示完整命令行(适合调试)
nohup - 后台运行进程
nohup (no hang up) 命令用于在用户注销(logout)或终端关闭后仍保持进程运行,默认将输出重定向到nohup.out
文件。
语法格式
bash
nohup 命令 [参数] &
关键特性
- 忽略SIGHUP信号:终端关闭时不会终止进程
- 自动重定向输出:
- STDOUT 和 STDERR 默认写入
nohup.out
- 如果不可写则保存到
$HOME/nohup.out
- STDOUT 和 STDERR 默认写入
经典案例
bash
nohup ./script.sh & # 基础用法(后台运行)
nohup python app.py > custom.log 2>&1 & # 自定义输出文件
nohup command > /dev/null 2>&1 & # 完全丢弃输出
nohup java -jar app.jar --server.port=8080 & # 启动Web服务
注意事项
文件权限问题:
- 确保对输出文件有写入权限
- 推荐明确指定输出路径
进程管理:
bashjobs -l # 查看后台任务 kill %1 # 终止任务
日志轮转: 长期运行建议使用
logrotate
管理输出文件替代方案: 现代系统推荐使用更专业的工具:
bashsystemd-run --user --unit=myapp ./app.sh # systemd方式 tmux new -d -s session 'command' # tmux方式
jobs - 查看后台进程
jobs
是 Bash 内置命令,用于查看当前 shell 会话中所有后台运行的作业(任务)状态。它常与 fg
、bg
、&
、Ctrl+Z
等配合使用进行作业控制。
语法格式
bash
jobs [-lnprs] [jobspec ...]
选项
选项 | 说明 |
---|---|
-l | 显示 PID 和作业详细信息 |
-n | 仅显示状态改变的作业 |
-p | 仅显示作业的进程组 ID |
-r | 仅显示运行中的作业 |
-s | 仅显示暂停的作业 |
输出符号说明
符号 | 含义 |
---|---|
+ | 默认恢复的作业(fg /bg 不指定时操作此作业) |
- | 下一个将被默认恢复的作业 |
Running | 正在后台运行 |
Stopped | 被暂停(如用 Ctrl+Z ) |
Done | 已完成 |
经典案例
bash
jobs -l # 查看所有后台作业
jobs -r # 只看运行中的作业
jobs -s # 只看暂停的作业
# 配合任务控制
sleep 100 & # 启动后台作业
# 按 Ctrl+Z暂停当前前台作业
jobs # 查看状态
bg %2 # 恢复作业到后台运行
fg %1 # 恢复作业到前台
bg - 暂停的作业(Job)恢复至后台运行
bg
(Background)是 Bash 内置命令,用于将 暂停的作业(Job)恢复至后台运行。通常配合 Ctrl+Z
(暂停进程)和 fg
(恢复至前台)使用。
语法格式
bash
bg [作业编号]
选项
bg
本身没有选项,但依赖 作业控制符号:
符号 | 说明 |
---|---|
%n | 作业编号(如 %1 、%2 ) |
%str | 以 str 开头的作业名(如 %vim ) |
%?str | 包含 str 的作业名(如 %?py 匹配 python ) |
%% 或 %+ | 当前作业(最近暂停的) |
%- | 上一个作业 |
经典案例
bash
bg %1 # 恢复作业 1 到后台运行
bg # 恢复最近暂停的作业(带 `+` 标记的)
# 结合 jobs 查看作业状态
jobs -l # 查看所有作业(含 PID 和状态)
bg %2 # 恢复作业 2 到后台
# 配合 Ctrl+Z 使用
vim file.txt # 启动一个前台进程
# 按 Ctrl+Z 暂停
bg # 恢复 vim 到后台运行
# 结合 nohup 保持后台运行
python server.py
# 按 Ctrl+Z 暂停
bg # 恢复至后台
disown -h %1 # 脱离终端关联(避免关闭终端时被终止)
注意事项
仅适用于当前 Shell
bg
只能管理当前终端启动的作业,新终端无法控制。
输出可能丢失
- 后台运行的进程如果未重定向输出(如
> log.txt
),可能丢失打印信息。
- 后台运行的进程如果未重定向输出(如
与
&
的区别方式 特点 command &
直接后台运行 Ctrl+Z
+bg
先暂停,再后台恢复 无法恢复已终止的作业
- 如果作业已被
kill
终止,bg
无法恢复。
- 如果作业已被
at - 在指定时间执行一次性任务
at
命令用于在指定时间执行一次性任务,适合安排未来某个时刻运行的作业。任务执行后会从队列中自动删除。
语法格式
bash
at [-V] [-q queue] [-f file] [-mldbv] TIME
at -c job [job...]
atq [-V] [-q queue]
atrm [-V] job [job...]
选项
选项 | 描述 | 示例 |
---|---|---|
-f file | 从指定文件读取命令 | at -f script.sh 13:00 |
-m | 任务完成后发送邮件 | at -m now + 1 hour |
-l | 列出待处理任务(同atq) | at -l |
-d job | 删除指定任务(同atrm) | at -d 3 |
-v | 显示任务执行时间 | at -v tomorrow |
-q queue | 指定队列(a-z,A-Z) | at -q b 15:00 |
TIME | 时间格式:HH:MM、noon、midnight等 | at 23:59 |
经典案例
bash
# 明天上午10点执行备份脚本
at 10:00 tomorrow -f /backup/script.sh
# 5分钟后执行命令
echo "shutdown -h now" | at now + 5 minutes
# 查看当前任务队列
atq
1 Fri Aug 20 10:00:00 2023 a user
# 删除编号为2的任务
atrm 2
注意事项
- 需要atd服务运行(
systemctl start atd
) - 默认输出会通过邮件发送,建议使用
-m
选项或重定向输出 - 时间格式支持灵活写法:
- 绝对时间:10:00、23:59
- 相对时间:now + 2 hours
- 特殊时间:noon、teatime(16:00)、tomorrow
- 不同发行版可能需要单独安装at包
- 系统重启后未执行的任务会丢失
crontab - 周期性任务调度守护进程
crontab
是 Linux 系统中用于周期性执行任务的守护进程,通过读取 /etc/crontab
和用户 crontab 文件来调度任务。相比 at
命令,crontab
更适合需要重复执行的任务。
语法格式
bash
crontab [-u user] [-l | -r | -e] [file]
选项
选项 | 描述 | 示例 |
---|---|---|
-u user | 指定用户crontab | crontab -u alice -l |
-l | 列出当前crontab内容 | crontab -l |
-r | 清空指定用户crontab,默认root | crontab -r |
-e | 编辑当前crontab | crontab -e |
-f file | 从文件安装crontab | crontab ~/mycron |
-n | 前台运行模式 | crond -n |
-s | 启用SELinux安全上下文 | crond -s |
时间格式说明
bash
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# 分 时 日 月 周 用户 command
- 分钟(0 - 59)
- 小时(0 - 23)
- 日期(1 - 31)
- 月份(1 - 12)
- 星期(0 - 7,0 和 7 都代表周日)
- user-name执行用户,默认root
command
是要执行的命令或脚本
时间表达式
*
:表示任意值,例如*
在分钟字段就意味着每分钟。,
:用于分隔多个值,像1,3,5
就表示 1、3、5 这几个值。-
:用于指定范围,例如1-5
代表从 1 到 5 的范围。/
:用于指定间隔,例如*/2
表示每 2 个单位执行一次。
经典案例
bash
# 每天凌晨3点执行备份脚本
0 3 * * * /usr/local/bin/backup.sh
# 每5分钟检查一次服务状态
*/5 * * * * /usr/bin/systemctl check-service
# 每周一上午9点发送周报
0 9 * * 1 /usr/bin/send-weekly-report
# 每月1号中午12点清理日志
0 12 1 * * /usr/bin/logrotate -f /etc/logrotate.conf
# 每天0点备份代码
0 0 * * * /usr/bin/tar zcf /data/www-$(/usr/bin/date +%F).tar.gz /data/wwwroot/www
# 查看当前用户的crontab
crontab -l
# 编辑crontab(使用默认编辑器)
crontab -e
注意事项
- 服务必须保持运行:
systemctl enable --now crond
- 环境变量与登录shell不同,建议脚本中使用绝对路径
- 特殊符号说明:
*
表示所有有效值,
表示多个时间点(1,3,5)-
表示范围(1-5)/
表示间隔(*/10)
- 系统级crontab位于:
/etc/crontab
/etc/cron.d/
/etc/cron.hourly/
等目录
- 日志查看:
grep CRON /var/log/syslog
或journalctl -u crond
john - 密码破解工具
john
是一个强大的密码破解工具,支持多种加密算法和哈希类型。它常用于安全审计和密码强度测试。
语法格式
bash
john [选项] [文件]
选项
选项 | 描述 | 示例 |
---|---|---|
-w:FILE | 使用指定的单词列表文件 | john -w:wordlist.txt hashfile |
-rules | 启用规则攻击 | john -rules hashfile |
-single | 使用单模式破解 | john -single hashfile |
-incremental | 使用增量模式破解 | john -incremental hashfile |
--show | 显示已破解的密码 | john --show hashfile |
-format:NAME | 指定哈希格式 | john -format:md5crypt hashfile |
-users:[-]LOGINUID[,..] | 只针对特定用户 | john -users:0 hashfile |
-groups:[-]GID[,..] | 只针对特定组 | john -groups:0 hashfile |
-salts:[-]COUNT | 只针对特定数量的盐值 | john -salts:2 hashfile |
经典案例
bash
# 使用单词列表破解哈希文件
john -w:wordlist.txt shadow
# 使用规则攻击破解哈希文件
john -rules shadow
# 显示已破解的密码
john --show shadow
# 使用增量模式破解哈希文件
john -incremental shadow
# 只针对特定用户破解哈希文件
john -users:root shadow
注意事项
- 合法性:使用
john
进行密码破解时,请确保你有合法权限。未经授权的密码破解是违法行为。 - 性能:密码破解是一个资源密集型任务,建议在性能较好的机器上运行,或者使用分布式破解工具如
John the Ripper
的分布式版本。 - 哈希格式:确保指定正确的哈希格式,否则
john
可能无法正确识别和破解哈希。 - 单词列表:选择一个高质量的单词列表可以显著提高破解成功率。常用的单词列表包括
rockyou.txt
等。 - 日志记录:建议在破解过程中记录日志,以便后续分析和审计。
cut - 文本切割工具
简介
cut
是 Linux 中用于按列或字符位置切割文本行的实用工具,常用于处理结构化文本数据(如 CSV、日志文件等)。它支持三种切割模式:按字节、字符或字段(列)进行提取。
语法格式
bash
cut OPTION... [FILE]...
选项
选项 | 描述 | 示例 |
---|---|---|
-b BYTE_LIST | 按字节位置切割 | cut -b 1-5 file.txt |
-c CHAR_LIST | 按字符位置切割 | cut -c 2,4,6 file.txt |
-f FIELD_LIST | 按字段(列)切割 | cut -f 1,3 -d',' data.csv |
-d DELIMITER | 指定字段分隔符(默认 TAB) | cut -d':' -f1 /etc/passwd |
--complement | 反选(显示未选中的部分) | cut -f3 --complement data.txt |
-s | 不输出不含分隔符的行 | cut -s -d':' -f1 file.log |
经典案例
bash
# 提取/etc/passwd的用户名(第一字段)
cut -d':' -f1 /etc/passwd
# 提取日志的时间戳(前15个字符)
cut -c 1-15 /var/log/syslog
# 提取CSV文件的第2和第4列
cut -d',' -f2,4 data.csv
# 结合管道处理ps输出
ps aux | cut -c 1-100 | head -n 5
注意事项
- 字段编号从1开始计数
- 当使用
-f
时建议总是显式指定-d
参数 - 中文字符建议使用
-c
而非-b
(避免截断多字节字符) - 空分隔符字段需要用
-s
避免显示 - 范围表示法:
N
第N个单元N-
从第N个到行尾N-M
从第N到第M个-M
从行首到第M个
sh - Bourne Shell 命令解释器
简介
sh 是 Unix/Linux 系统中最基础的 shell 解释器,全称为 Bourne Shell。作为系统默认的命令行解释器,它负责解析用户输入的命令并与操作系统内核交互。现代系统中通常将 sh 符号链接到兼容性更好的 shell(如 bash 或 dash)。
语法格式
bash
sh [选项] [脚本文件] [参数]
选项
选项 | 描述 | 示例 |
---|---|---|
-c 命令 | 执行指定字符串命令 | sh -c "ls -l" |
-n | 检查脚本语法不执行 | sh -n test.sh |
-x | 显示执行的命令及参数 | sh -x script.sh |
-e | 命令失败立即退出 | sh -e backup.sh |
-v | 显示输入的命令行 | sh -v install.sh |
-u | 使用未定义变量时报错 | sh -u config.sh |
经典案例
bash
# 1. 执行单行命令
sh -c "date +%F"
# 2. 调试脚本执行
sh -x /etc/init.d/nginx start
# 3. 带参数执行脚本
sh backup.sh /data /backup
# 4. 检查脚本语法
sh -n deploy.sh && echo "语法检查通过"
# 5. 安全模式运行
sh -eu cleanup.sh
注意事项
- 现代系统中
/bin/sh
通常是符号链接,实际可能是bash
、dash
等兼容 shell - 使用
-e
选项可避免错误继续执行,适合关键任务脚本 -x
调试输出会显示变量展开后的实际值- 不同系统的 sh 实现可能有细微差异,重要脚本应指定完整路径
- 避免使用未定义的变量,建议配合
-u
选项使用
stress - 系统压力测试工具
简介
stress
是一个用于对 Linux 系统施加 CPU、内存、IO 和磁盘压力的工具,常用于系统稳定性测试和性能评估。它可以模拟高负载场景,帮助管理员测试系统在压力下的表现。
语法格式
bash
stress [OPTIONS]
选项
选项 | 描述 | 示例 |
---|---|---|
-c N | 启动 N 个 CPU 压力进程 | stress -c 4 |
-i N | 启动 N 个 IO 压力进程 | stress -i 2 |
-m N | 启动 N 个内存压力进程 | stress -m 1 |
-d N | 启动 N 个磁盘压力进程 | stress -d 1 |
-t TIMEOUT | 设置测试持续时间(秒) | stress -c 2 -t 60 |
--vm-bytes SIZE | 指定每个内存压力进程使用的内存量(默认 256MB) | stress -m 1 --vm-bytes 512M |
--hdd-bytes SIZE | 指定每个磁盘压力进程写入的数据量 | stress -d 1 --hdd-bytes 1G |
经典案例
bash
# 启动4个CPU压力进程,持续30秒
stress -c 4 -t 30
# 同时施加CPU和内存压力(2个CPU进程+1个内存进程使用1GB内存)
stress -c 2 -m 1 --vm-bytes 1G -t 120
# 综合压力测试(CPU+内存+磁盘)
stress -c 2 -i 1 -m 1 -d 1 --hdd-bytes 500M -t 300
注意事项
- 需要 root 权限才能施加磁盘和内存压力
- 过度使用可能导致系统不稳定,建议在测试环境中使用
- 监控系统资源使用情况(建议配合
top
或htop
使用) - 默认情况下,内存压力进程会不断分配和释放内存
- 磁盘压力测试会创建大文件(默认在临时目录),测试完成后会自动删除