Linux常用命令汇总
目录
文件操作命令
ls - 列出目录内容
# 列出当前目录所有文件和目录
ls
# 列出详细信息
ls -l
# 列出包括隐藏文件
ls -a
# 按时间排序
ls -lt
# 按大小排序
ls -lS
# 递归显示子目录内容
ls -R
# 显示文件大小时使用人类可读格式
ls -lh
cd - 切换目录
# 切换到指定目录
cd /path/to/directory
# 切换到用户主目录
cd 或 cd ~
# 切换到上一级目录
cd ..
# 切换到上一个工作目录
cd -
mkdir - 创建目录
# 创建单个目录
mkdir directory_name
# 创建多个目录
mkdir dir1 dir2 dir3
# 递归创建目录(创建多级目录)
mkdir -p parent/child/grandchild
rm - 删除文件或目录
# 删除文件
rm filename
# 删除目录
rm -r directory
# 强制删除
rm -f filename
# 强制递归删除目录及其内容(危险操作)
rm -rf directory
# 交互式删除
rm -i filename
cp - 复制文件或目录
# 复制文件
cp source_file destination_file
# 复制目录及其内容
cp -r source_directory destination_directory
# 保留文件属性复制
cp -p source_file destination_file
# 交互式复制(覆盖前提示)
cp -i source_file destination_file
# 复制并显示进度
cp -v source_file destination_file
mv - 移动或重命名文件
# 移动文件
mv source_file destination_directory
# 重命名文件
mv old_name new_name
# 交互式移动(覆盖前提示)
mv -i source_file destination_file
# 不覆盖已存在的文件
mv -n source_file destination_file
touch - 创建空文件或更新时间戳
# 创建空文件
touch filename
# 创建多个文件
touch file1 file2 file3
# 只更新访问时间
touch -a filename
# 只更新修改时间
touch -m filename
# 使用指定时间更新时间戳
touch -t 202301011200 filename # 2023年1月1日12:00
ln - 创建链接
# 创建硬链接
ln source_file link_name
# 创建软链接(符号链接)
ln -s source_file link_name
# 强制创建链接
ln -f source_file link_name
文件查看命令
cat - 查看文件内容
# 显示文件内容
cat filename
# 显示行号
cat -n filename
# 显示非打印字符
cat -A filename
# 合并多个文件并显示
cat file1 file2 file3
less - 分页查看文件
# 分页查看文件
less filename
# 常用操作:
# 空格键: 向下翻页
# b键: 向上翻页
# /关键词: 搜索
# n键: 下一个搜索结果
# q键: 退出
head - 查看文件开头
# 显示文件前10行
head filename
# 显示指定行数
head -n 5 filename
# 显示除了最后N行的所有内容
head -n -5 filename
tail - 查看文件结尾
# 显示文件最后10行
tail filename
# 显示指定行数
tail -n 5 filename
# 实时监控文件变化
tail -f filename
# 从第N行开始显示
tail -n +5 filename
grep - 搜索文件内容
# 在文件中搜索关键词
grep "pattern" filename
# 递归搜索目录
grep -r "pattern" directory/
# 显示匹配行号
grep -n "pattern" filename
# 忽略大小写
grep -i "pattern" filename
# 显示不匹配的行
grep -v "pattern" filename
# 只显示匹配的部分
grep -o "pattern" filename
# 统计匹配行数
grep -c "pattern" filename
系统管理命令
uname - 显示系统信息
# 显示所有系统信息
uname -a
# 显示内核名称
uname -s
# 显示内核版本
uname -r
# 显示机器硬件名称
uname -m
hostname - 显示或设置主机名
# 显示主机名
hostname
# 设置主机名(需要root权限)
hostname new_hostname
date - 显示或设置系统日期和时间
# 显示当前日期和时间
date
# 以指定格式显示
date "+%Y-%m-%d %H:%M:%S"
# 设置系统日期和时间(需要root权限)
date -s "2023-01-01 12:00:00"
uptime - 显示系统运行时间
# 显示系统运行时间和负载
uptime
shutdown - 关机或重启系统
# 立即关机
shutdown -h now
# 计划关机(10分钟后)
shutdown -h +10
# 立即重启
shutdown -r now
# 取消预定的关机
shutdown -c
reboot - 重启系统
# 重启系统
reboot
poweroff - 关闭系统
# 关闭系统
poweroff
which - 定位命令的位置
# 显示命令的完整路径
which command_name
whereis - 定位命令的二进制文件、源码和手册页
# 显示命令的二进制文件、源码和手册页位置
whereis command_name
网络相关命令
ifconfig - 配置网络接口
# 显示所有网络接口
ifconfig
# 显示特定网络接口
ifconfig eth0
# 启用网络接口
ifconfig eth0 up
# 禁用网络接口
ifconfig eth0 down
# 设置IP地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
ip - 显示/操作路由、设备、策略路由和隧道
# 显示所有网络接口
ip addr show
# 显示特定网络接口
ip addr show dev eth0
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0
# 显示路由表
ip route show
ping - 测试网络连接
# 发送ICMP请求到主机
ping hostname
# 指定ping的次数
ping -c 5 hostname
# 指定间隔时间(秒)
ping -i 2 hostname
netstat - 显示网络连接、路由表等
# 显示所有连接
netstat -a
# 显示监听的端口
netstat -l
# 显示进程信息
netstat -p
# 显示路由表
netstat -r
# 显示所有TCP连接
netstat -at
ss - 显示套接字统计信息
# 显示所有连接
ss -a
# 显示监听的端口
ss -l
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示进程信息
ss -p
wget - 下载文件
# 下载文件
wget URL
# 后台下载
wget -b URL
# 指定输出文件名
wget -O filename URL
# 断点续传
wget -c URL
# 限制下载速度
wget --limit-rate=200k URL
curl - 传输数据
# 获取网页内容
curl URL
# 下载文件
curl -o filename URL
# 发送POST请求
curl -X POST -d "data" URL
# 使用代理
curl -x proxy_server:port URL
# 显示响应头
curl -I URL
ssh - 安全shell远程登录
# 连接到远程服务器
ssh username@hostname
# 指定端口
ssh -p 2222 username@hostname
# 使用密钥文件
ssh -i key_file username@hostname
# 执行远程命令
ssh username@hostname "command"
scp - 安全复制文件
# 从本地复制到远程
scp local_file username@hostname:/remote/directory
# 从远程复制到本地
scp username@hostname:/remote/file local_directory
# 复制目录
scp -r local_directory username@hostname:/remote/directory
# 指定端口
scp -P 2222 local_file username@hostname:/remote/directory
用户管理命令
useradd - 创建用户
# 创建新用户
useradd username
# 创建用户并指定主目录
useradd -m -d /home/custom_dir username
# 创建用户并指定shell
useradd -s /bin/bash username
# 创建用户并添加到组
useradd -G group1,group2 username
userdel - 删除用户
# 删除用户
userdel username
# 删除用户及其主目录
userdel -r username
usermod - 修改用户账户
# 修改用户所属组
usermod -g groupname username
# 添加用户到附加组
usermod -a -G group1,group2 username
# 修改用户shell
usermod -s /bin/bash username
# 修改用户主目录
usermod -d /new/home username
passwd - 修改用户密码
# 修改当前用户密码
passwd
# 修改指定用户密码(需要root权限)
passwd username
# 锁定用户账户
passwd -l username
# 解锁用户账户
passwd -u username
用户管理命令
su - 切换用户
# 切换到root用户
su
# 切换到指定用户
su username
# 切换用户并使用目标用户的环境
su - username
# 以其他用户身份执行命令
su - username -c "command"
sudo - 以其他用户身份执行命令
# 以root身份执行命令
sudo command
# 以指定用户身份执行命令
sudo -u username command
# 显示sudo权限
sudo -l
# 切换到root用户shell
sudo -s
# 切换到root用户环境
sudo -i
id - 显示用户身份信息
# 显示当前用户信息
id
# 显示指定用户信息
id username
# 只显示用户ID
id -u username
# 只显示组ID
id -g username
groups - 显示用户所属组
# 显示当前用户所属组
groups
# 显示指定用户所属组
groups username
who - 显示当前登录用户
# 显示当前登录的用户
who
# 显示当前用户
who am i
# 显示上次系统启动时间
who -b
w - 显示登录用户及其活动
# 显示登录用户及其活动
w
# 显示指定用户信息
w username
权限管理命令
chmod - 修改文件权限
# 使用数字设置权限
chmod 755 filename # rwxr-xr-x
# 使用符号设置权限
chmod u+x filename # 给所有者添加执行权限
chmod g-w filename # 移除组写权限
chmod o=r filename # 设置其他用户只读
chmod a+x filename # 给所有用户添加执行权限
# 递归修改目录及其内容的权限
chmod -R 755 directory
chown - 修改文件所有者
# 修改文件所有者
chown username filename
# 修改文件所有者和组
chown username:groupname filename
# 递归修改目录及其内容的所有者
chown -R username directory
# 只修改符号链接本身的所有者
chown -h username symlink
chgrp - 修改文件所属组
# 修改文件所属组
chgrp groupname filename
# 递归修改目录及其内容的所属组
chgrp -R groupname directory
umask - 设置默认权限掩码
# 显示当前umask值
umask
# 设置新的umask值
umask 022
getfacl - 显示文件的访问控制列表
# 显示文件的ACL
getfacl filename
setfacl - 设置文件的访问控制列表
# 为用户设置权限
setfacl -m u:username:rwx filename
# 为组设置权限
setfacl -m g:groupname:rx filename
# 删除用户的ACL
setfacl -x u:username filename
压缩与解压缩命令
tar - 归档文件
# 创建tar归档
tar -cf archive.tar file1 file2
# 列出归档内容
tar -tf archive.tar
# 提取归档
tar -xf archive.tar
# 创建gzip压缩的tar归档
tar -czf archive.tar.gz directory/
# 提取gzip压缩的tar归档
tar -xzf archive.tar.gz
# 创建bzip2压缩的tar归档
tar -cjf archive.tar.bz2 directory/
# 提取bzip2压缩的tar归档
tar -xjf archive.tar.bz2
# 提取到指定目录
tar -xf archive.tar -C /target/directory/
gzip - 压缩文件
# 压缩文件(替换原文件)
gzip filename
# 解压文件
gzip -d filename.gz
# 保留原文件并压缩
gzip -c filename > filename.gz
# 显示压缩比率
gzip -l filename.gz
gunzip - 解压gzip文件
# 解压gzip文件
gunzip filename.gz
zip - 创建zip归档
# 创建zip归档
zip archive.zip file1 file2
# 递归压缩目录
zip -r archive.zip directory/
# 添加文件到现有zip归档
zip -u archive.zip newfile
# 使用密码保护
zip -e archive.zip file1 file2
unzip - 解压zip归档
# 解压zip归档
unzip archive.zip
# 列出zip归档内容
unzip -l archive.zip
# 解压到指定目录
unzip archive.zip -d /target/directory/
# 解压特定文件
unzip archive.zip filename
搜索命令
find - 查找文件
# 按名称查找
find /path/to/search -name "filename"
# 使用通配符
find /path/to/search -name "*.txt"
# 忽略大小写
find /path/to/search -iname "filename"
# 按类型查找(f:文件, d:目录, l:符号链接)
find /path/to/search -type f
# 按权限查找
find /path/to/search -perm 644
# 按所有者查找
find /path/to/search -user username
# 按组查找
find /path/to/search -group groupname
# 按大小查找
find /path/to/search -size +10M # 大于10MB的文件
find /path/to/search -size -10k # 小于10KB的文件
# 按修改时间查找
find /path/to/search -mtime -7 # 7天内修改的文件
# 查找并执行命令
find /path/to/search -name "*.txt" -exec rm {} \;
# 查找并确认执行
find /path/to/search -name "*.txt" -ok rm {} \;
locate - 快速查找文件
# 查找文件
locate filename
# 忽略大小写
locate -i filename
# 限制结果数量
locate -l 10 filename
# 显示匹配的确切数量
locate -c filename
whereis - 查找二进制文件、源码和手册页
# 查找命令的二进制文件、源码和手册页
whereis command
# 只查找二进制文件
whereis -b command
# 只查找手册页
whereis -m command
which - 查找可执行文件
# 查找命令的完整路径
which command
# 显示所有匹配的可执行文件
which -a command
进程管理命令
ps - 显示进程状态
# 显示当前用户的进程
ps
# 显示所有进程
ps -e 或 ps -A
# 显示完整格式
ps -f
# 显示所有进程的完整格式
ps -ef
# 显示进程树
ps -ejH
# 按CPU使用率排序
ps -aux --sort=-%cpu
# 按内存使用率排序
ps -aux --sort=-%mem
top - 动态显示进程信息
# 启动top
top
# 按CPU排序(默认)
top 然后按P
# 按内存排序
top 然后按M
# 按运行时间排序
top 然后按T
# 只显示特定用户的进程
top -u username
# 更新间隔(秒)
top -d 2
htop - 增强版top
# 启动htop
htop
# 常用快捷键:
# F2: 设置
# F3: 搜索
# F4: 过滤
# F5: 树状视图
# F6: 排序
# F9: 杀进程
kill - 终止进程
# 通过PID终止进程
kill PID
# 强制终止
kill -9 PID
# 终止多个进程
kill PID1 PID2 PID3
# 发送特定信号
kill -SIGTERM PID
killall - 按名称终止进程
# 终止所有指定名称的进程
killall process_name
# 强制终止
killall -9 process_name
# 交互式确认
killall -i process_name
pkill - 按名称和其他条件终止进程
# 按名称终止进程
pkill process_name
# 按用户终止进程
pkill -u username
# 发送特定信号
pkill -SIGTERM process_name
nice - 以指定优先级运行程序
# 以较低优先级运行命令
nice -n 10 command
# 以较高优先级运行命令(需要root权限)
nice -n -10 command
renice - 修改运行中进程的优先级
# 修改进程优先级
renice 10 -p PID
# 修改用户所有进程的优先级
renice 10 -u username
nohup - 忽略挂起信号运行命令
# 后台运行命令,忽略挂起信号
nohup command &
# 指定输出文件
nohup command > output.log 2>&1 &
磁盘管理命令
df - 显示磁盘空间使用情况
# 显示所有文件系统
df
# 使用人类可读格式
df -h
# 显示文件系统类型
df -T
# 只显示特定类型的文件系统
df -t ext4
du - 显示目录或文件大小
# 显示目录大小
du directory
# 使用人类可读格式
du -h directory
# 显示总计
du -s directory
# 按大小排序
du -h --max-depth=1 | sort -hr
# 只显示指定深度
du -h --max-depth=2 directory
fdisk - 磁盘分区工具
# 列出分区表
fdisk -l
# 操作特定设备
fdisk /dev/sda
mount - 挂载文件系统
# 显示已挂载的文件系统
mount
# 挂载设备到目录
mount /dev/sda1 /mnt/disk
# 指定文件系统类型
mount -t ext4 /dev/sda1 /mnt/disk
# 以只读方式挂载
mount -o ro /dev/sda1 /mnt/disk
umount - 卸载文件系统
# 卸载文件系统
umount /mnt/disk
# 强制卸载
umount -f /mnt/disk
# 懒惰卸载(等待设备不再忙)
umount -l /mnt/disk
fsck - 检查和修复文件系统
# 检查文件系统
fsck /dev/sda1
# 自动修复错误
fsck -a /dev/sda1
# 强制检查
fsck -f /dev/sda1
# 显示进度
fsck -C /dev/sda1
# 检查特定类型的文件系统
fsck -t ext4 /dev/sda1
lsblk - 列出块设备
# 列出所有块设备
lsblk
# 显示完整设备路径
lsblk -p
# 显示文件系统信息
lsblk -f
# 以字节为单位显示大小
lsblk -b
mkfs - 创建文件系统
# 创建ext4文件系统
mkfs -t ext4 /dev/sda1
# 或使用特定命令
mkfs.ext4 /dev/sda1
# 创建带标签的文件系统
mkfs.ext4 -L "LABEL" /dev/sda1
# 检查坏块并创建文件系统
mkfs.ext4 -c /dev/sda1
parted - 磁盘分区工具
# 列出分区表
parted -l
# 打开特定设备
parted /dev/sda
# 常用parted命令:
# print - 显示分区表
# mklabel gpt - 创建GPT分区表
# mkpart primary ext4 1MiB 100% - 创建分区
# rm 1 - 删除分区1
# quit - 退出
badblocks - 检查坏块
# 检查设备坏块
badblocks /dev/sda1
# 详细输出
badblocks -v /dev/sda1
# 非破坏性读写测试(危险操作)
badblocks -w /dev/sda1
文本处理命令
grep - 搜索文本
# 在文件中搜索模式
grep "pattern" filename
# 递归搜索目录
grep -r "pattern" directory/
# 显示行号
grep -n "pattern" filename
# 忽略大小写
grep -i "pattern" filename
# 使用正则表达式
grep -E "pattern1|pattern2" filename
# 显示匹配行的上下文
grep -A 2 -B 2 "pattern" filename # 显示匹配行的前2行和后2行
sed - 流编辑器
# 替换文本
sed 's/old/new/' filename
# 全局替换
sed 's/old/new/g' filename
# 直接修改文件
sed -i 's/old/new/g' filename
# 删除行
sed '5d' filename # 删除第5行
sed '5,10d' filename # 删除第5-10行
sed '/pattern/d' filename # 删除匹配pattern的行
# 插入和追加
sed '5i\new line' filename # 在第5行前插入
sed '5a\new line' filename # 在第5行后追加
# 打印特定行
sed -n '5,10p' filename # 只打印第5-10行
awk - 文本处理语言
# 打印特定列
awk '{print $1}' filename # 打印第一列
awk '{print $1, $3}' filename # 打印第一列和第三列
# 使用自定义分隔符
awk -F: '{print $1}' /etc/passwd
# 条件处理
awk '$3 > 100 {print $1}' filename # 打印第三列大于100的行的第一列
# 内置变量
awk '{print NR, $0}' filename # 打印行号和整行
awk 'END {print NR}' filename # 打印总行数
# 计算总和
awk '{sum += $1} END {print sum}' filename
sort - 排序文本
# 基本排序
sort filename
# 数字排序
sort -n filename
# 反向排序
sort -r filename
# 按特定列排序
sort -k 2 filename # 按第二列排序
# 忽略大小写
sort -f filename
# 删除重复行
sort -u filename
# 检查文件是否已排序
sort -c filename
uniq - 报告或忽略重复行
# 删除重复行(输入必须已排序)
uniq filename
# 只显示重复行
uniq -d filename
# 只显示不重复的行
uniq -u filename
# 计算重复次数
uniq -c filename
cut - 提取文件的列
# 提取特定字符
cut -c 1-5 filename # 提取每行的前5个字符
# 使用分隔符提取字段
cut -d: -f1 /etc/passwd # 提取以冒号分隔的第一个字段
# 提取多个字段
cut -d: -f1,3,5 /etc/passwd
tr - 转换或删除字符
# 转换字符
echo "hello" | tr 'a-z' 'A-Z' # 小写转大写
# 删除字符
echo "hello" | tr -d 'l' # 删除所有'l'
# 压缩重复字符
echo "hello world" | tr -s ' ' # 压缩空格
wc - 计算行数、单词数和字符数
# 计算行数、单词数和字符数
wc filename
# 只计算行数
wc -l filename
# 只计算单词数
wc -w filename
# 只计算字符数
wc -c filename
diff - 比较文件
# 比较两个文件
diff file1 file2
# 忽略空白
diff -w file1 file2
# 并排显示差异
diff -y file1 file2
# 统一格式输出
diff -u file1 file2
# 递归比较目录
diff -r dir1 dir2
patch - 应用diff文件
# 应用patch
patch file < patchfile
# 反向应用patch
patch -R file < patchfile
# 应用到目录
patch -p1 < patchfile
Shell编程常用命令
echo - 显示文本
# 显示文本
echo "Hello World"
# 不换行
echo -n "Hello "
# 解释转义字符
echo -e "Hello\nWorld"
printf - 格式化输出
# 基本格式化
printf "Name: %s, Age: %d\n" "John" 25
# 格式化数字
printf "%.2f\n" 3.14159
read - 读取用户输入
# 基本读取
read var
echo "You entered: $var"
# 提示信息
read -p "Enter your name: " name
# 设置超时
read -t 5 -p "Enter input within 5 seconds: " var
# 不显示输入(用于密码)
read -s -p "Password: " password
if - 条件语句
# 基本if语句
if [ "$a" = "$b" ]; then
echo "a equals b"
fi
# if-else语句
if [ "$a" = "$b" ]; then
echo "a equals b"
else
echo "a does not equal b"
fi
# if-elif-else语句
if [ "$a" = "$b" ]; then
echo "a equals b"
elif [ "$a" = "$c" ]; then
echo "a equals c"
else
echo "a equals neither b nor c"
fi
for - 循环
# 基本for循环
for i in 1 2 3 4 5; do
echo "Number: $i"
done
# 范围循环
for i in {1..5}; do
echo "Number: $i"
done
# 步进循环
for i in {1..10..2}; do
echo "Odd number: $i"
done
# C风格循环
for ((i=1; i<=5; i++)); do
echo "Number: $i"
done
# 遍历文件
for file in *.txt; do
echo "Processing $file"
done
while - 循环
# 基本while循环
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
((count++))
done
# 读取文件每一行
while read line; do
echo "Line: $line"
done < filename
case - 多条件分支
# 基本case语句
case "$var" in
"option1")
echo "Option 1 selected"
;;
"option2"|"option3")
echo "Option 2 or 3 selected"
;;
*)
echo "Unknown option"
;;
esac
function - 函数定义
# 定义函数
function greet {
echo "Hello, $1!"
}
# 调用函数
greet "World"
# 返回值
function add {
local result=$(($1 + $2))
echo $result
}
sum=$(add 5 3)
echo "Sum: $sum"
export - 导出环境变量
# 导出变量
export VAR="value"
# 导出函数
export -f function_name
source - 执行脚本
# 在当前shell执行脚本
source script.sh
# 简写形式
. script.sh
test - 条件测试
# 文件测试
test -f file # 文件存在且是普通文件
test -d dir # 目录存在
test -r file # 文件可读
test -w file # 文件可写
test -x file # 文件可执行
# 字符串测试
test -z "$var" # 字符串长度为0
test -n "$var" # 字符串长度不为0
test "$a" = "$b" # 字符串相等
test "$a" != "$b" # 字符串不相等
# 数值比较
test $a -eq $b # 相等
test $a -ne $b # 不相等
test $a -lt $b # 小于
test $a -le $b # 小于等于
test $a -gt $b # 大于
test $a -ge $b # 大于等于
expr - 表达式求值
# 算术运算
result=$(expr 5 + 3)
echo $result
# 字符串长度
length=$(expr
Shell编程常用命令(续)
expr - 表达式求值(续)
# 算术运算
result=$(expr 5 + 3)
echo $result
# 字符串长度
length=$(expr length "string")
echo $length
# 子字符串
substr=$(expr substr "string" 2 3) # 从位置2开始的3个字符
echo $substr
let - 算术运算
# 基本运算
let a=5+3
echo $a
# 自增/自减
let a++
let b--
# 复合赋值
let "a += 5"
let "b *= 2"
trap - 捕获信号
# 捕获Ctrl+C (SIGINT)
trap "echo 'Ctrl+C pressed'; exit" SIGINT
# 清除trap
trap - SIGINT
# 在脚本退出时执行清理
trap "echo 'Cleaning up...'; rm -f temp_file" EXIT
getopts - 处理命令行选项
# 处理选项
while getopts "a:bc" opt; do
case $opt in
a)
echo "Option -a with value $OPTARG"
;;
b)
echo "Option -b"
;;
c)
echo "Option -c"
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
done
shift - 移动位置参数
# 移动位置参数
echo "Original parameters: $@"
shift
echo "After shift: $@"
# 移动多个位置参数
shift 2
echo "After shift 2: $@"
网络命令
ping - 测试网络连接
# 基本ping
ping example.com
# 指定次数
ping -c 4 example.com
# 指定间隔(秒)
ping -i 2 example.com
# 指定超时(秒)
ping -W 2 example.com
# 洪水ping(需要root权限)
ping -f example.com
traceroute - 跟踪路由
# 基本跟踪
traceroute example.com
# 指定最大跳数
traceroute -m 15 example.com
# 不解析IP地址
traceroute -n example.com
# 指定协议(ICMP)
traceroute -I example.com
netstat - 网络统计
# 显示所有连接
netstat -a
# 显示监听的端口
netstat -l
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示进程信息
netstat -p
# 不解析名称
netstat -n
# 显示路由表
netstat -r
# 常用组合
netstat -tuln # 显示所有监听的TCP和UDP端口,不解析
netstat -tulnp # 同上,并显示进程信息
ss - 显示套接字统计
# 显示所有连接
ss
# 显示监听的端口
ss -l
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示进程信息
ss -p
# 不解析名称
ss -n
# 常用组合
ss -tuln # 显示所有监听的TCP和UDP端口,不解析
ip - 显示/操作路由、设备、策略路由和隧道
# 显示所有网络接口
ip link show
# 显示IP地址
ip addr show
# 显示路由表
ip route show
# 添加路由
ip route add 192.168.2.0/24 via 192.168.1.1
# 删除路由
ip route del 192.168.2.0/24
# 启用网络接口
ip link set eth0 up
# 禁用网络接口
ip link set eth0 down
# 设置IP地址
ip addr add 192.168.1.10/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.10/24 dev eth0
ifconfig - 配置网络接口(已过时,推荐使用ip命令)
# 显示所有网络接口
ifconfig
# 显示特定接口
ifconfig eth0
# 设置IP地址
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
# 启用网络接口
ifconfig eth0 up
# 禁用网络接口
ifconfig eth0 down
wget - 非交互式网络下载器
# 下载文件
wget https://example.com/file.zip
# 指定输出文件名
wget -O output.zip https://example.com/file.zip
# 后台下载
wget -b https://example.com/large-file.zip
# 继续之前的下载
wget -c https://example.com/large-file.zip
# 递归下载
wget -r https://example.com/
# 限制下载速度(KB/s)
wget --limit-rate=100k https://example.com/file.zip
# 设置重试次数
wget --tries=10 https://example.com/file.zip
curl - URL传输工具
# 获取网页内容
curl https://example.com
# 下载文件
curl -O https://example.com/file.zip
# 指定输出文件名
curl -o output.zip https://example.com/file.zip
# 显示响应头
curl -I https://example.com
# 发送POST请求
curl -X POST -d "param1=value1¶m2=value2" https://example.com/api
# 发送JSON数据
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com/api
# 使用基本认证
curl -u username:password https://example.com
# 使用代理
curl -x proxy-server:port https://example.com
# 跟随重定向
curl -L https://example.com
ssh - 安全Shell客户端
# 连接到远程服务器
ssh username@hostname
# 指定端口
ssh -p 2222 username@hostname
# 使用密钥认证
ssh -i private_key.pem username@hostname
# 执行远程命令
ssh username@hostname "ls -la"
# 压缩传输
ssh -C username@hostname
# 启用X11转发
ssh -X username@hostname
# 本地端口转发
ssh -L local-port:remote-host:remote-port username@hostname
# 远程端口转发
ssh -R remote-port:local-host:local-port username@hostname
scp - 安全复制
# 从本地复制到远程
scp local-file username@hostname:/remote/directory
# 从远程复制到本地
scp username@hostname:/remote/file local-directory
# 复制目录
scp -r local-directory username@hostname:/remote/directory
# 指定端口
scp -P 2222 local-file username@hostname:/remote/directory
# 保持文件属性
scp -p local-file username@hostname:/remote/directory
# 限制带宽(KB/s)
scp -l 1000 local-file username@hostname:/remote/directory
rsync - 远程同步
# 同步本地目录到远程
rsync -av source-directory/ username@hostname:/remote/directory
# 同步远程目录到本地
rsync -av username@hostname:/remote/directory/ local-directory
# 删除目标中不存在于源的文件
rsync -av --delete source-directory/ username@hostname:/remote/directory
# 只同步差异部分
rsync -av --update source-directory/ username@hostname:/remote/directory
# 排除特定文件
rsync -av --exclude='*.log' source-directory/ username@hostname:/remote/directory
# 限制带宽(KB/s)
rsync -av --bwlimit=1000 source-directory/ username@hostname:/remote/directory
# 使用SSH指定端口
rsync -av -e "ssh -p 2222" source-directory/ username@hostname:/remote/directory
nc (netcat) - 网络工具
# 连接到服务器
nc hostname port
# 监听端口
nc -l port
# 端口扫描
nc -z -v hostname 20-30
# 传输文件(接收端)
nc -l 1234 > received_file
# 传输文件(发送端)
nc hostname 1234 < file_to_send
# 创建简单的聊天服务器
nc -l 1234
# 连接到聊天服务器
nc hostname 1234
dig - DNS查询工具
# 查询A记录
dig example.com
# 查询特定类型记录
dig example.com MX
dig example.com NS
# 使用特定DNS服务器
dig @8.8.8.8 example.com
# 简短输出
dig +short example.com
# 跟踪DNS查询
dig +trace example.com
# 反向查询
dig -x 8.8.8.8
nslookup - 查询DNS记录
# 交互模式
nslookup
# 查询A记录
nslookup example.com
# 查询特定类型记录
nslookup -type=MX example.com
# 使用特定DNS服务器
nslookup example.com 8.8.8.8
# 反向查询
nslookup 8.8.8.8
host - DNS查询工具
# 基本查询
host example.com
# 查询特定类型记录
host -t MX example.com
# 详细输出
host -v example.com
# 反向查询
host 8.8.8.8
iptables - 配置Linux防火墙
# 查看规则
iptables -L
# 查看规则(带行号)
iptables -L --line-numbers
# 允许端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 阻止IP地址
iptables -A INPUT -s 192.168.1.10 -j DROP
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4
# 恢复规则
iptables-restore < /etc/iptables/rules.v4
tcpdump - 网络数据包分析器
# 捕获特定接口的数据包
tcpdump -i eth0
# 捕获特定主机的数据包
tcpdump host 192.168.1.1
# 捕获特定端口的数据包
tcpdump port 80
# 捕获特定协议的数据包
tcpdump tcp
# 保存捕获的数据包到文件
tcpdump -w capture.pcap
# 读取捕获文件
tcpdump -r capture.pcap
# 显示详细信息
tcpdump -v
# 显示数据包内容
tcpdump -X
# 不解析主机名
tcpdump -n
# 组合过滤器
tcpdump 'tcp port 80 and host 192.168.1.1'
# 限制捕获数量
tcpdump -c 100
# 显示时间戳
tcpdump -tttt
nmap - 网络扫描器
# 扫描主机
nmap 192.168.1.1
# 扫描网络
nmap 192.168.1.0/24
# 扫描特定端口
nmap -p 80,443 192.168.1.1
# 扫描所有端口
nmap -p- 192.168.1.1
# 操作系统检测
nmap -O 192.168.1.1
# 服务版本检测
nmap -sV 192.168.1.1
# 综合扫描
nmap -A 192.168.1.1
# 快速扫描
nmap -F 192.168.1.1
# 隐蔽扫描
nmap -sS 192.168.1.1
telnet - 远程登录
# 连接到服务器
telnet hostname port
# 测试端口是否开放
telnet hostname 80
ftp - 文件传输协议客户端
# 连接到FTP服务器
ftp hostname
# 匿名登录
ftp -a hostname
# 下载文件
get remote-file [local-file]
# 上传文件
put local-file [remote-file]
# 下载多个文件
mget *.txt
# 上传多个文件
mput *.txt
# 切换到二进制模式
binary
# 切换到ASCII模式
ascii
# 列出远程目录
ls
sftp - 安全文件传输协议
# 连接到服务器
sftp username@hostname
# 指定端口
sftp -P 2222 username@hostname
# 下载文件
get remote-file [local-file]
# 上传文件
put local-file [remote-file]
# 下载目录
get -r remote-directory
# 上传目录
put -r local-directory
# 列出远程目录
ls
系统监控和性能分析
top - 实时系统监控
# 基本使用
top
# 批处理模式(非交互)
top -b -n 1
# 显示特定用户的进程
top -u username
# 按CPU排序(默认)
top -o %CPU
# 按内存排序
top -o %MEM
# 显示完整命令
top -c
# 交互命令:
# P - 按CPU排序
# M - 按内存排序
# k - 杀死进程
# r - 调整优先级
# q - 退出
htop - 增强版top
# 基本使用
htop
# 显示树状视图
htop -t
# 显示特定用户的进程
htop -u username
# 按CPU排序
htop --sort-key CPU
# 按内存排序
htop --sort-key MEM
vmstat - 虚拟内存统计
# 显示内存使用情况
vmstat
# 每2秒更新一次,共5次
vmstat 2 5
# 显示详细内存统计
vmstat -s
# 显示磁盘统计
vmstat -d
# 显示事件计数器
vmstat -a
iostat - 输入/输出统计
# 显示CPU和设备统计
iostat
# 每2秒更新一次,共5次
iostat 2 5
# 显示扩展统计
iostat -x
# 只显示设备统计
iostat -d
# 显示NFS统计
iostat -n
mpstat - 多处理器统计
# 显示所有CPU统计
mpstat
# 每2秒更新一次,共5次
mpstat 2 5
# 显示特定CPU统计
mpstat -P 0 # CPU 0
mpstat -P ALL # 所有CPU
sar - 系统活动报告
# 显示CPU使用情况
sar
# 每2秒更新一次,共5次
sar 2 5
# 显示内存使用情况
sar -r
# 显示磁盘I/O统计
sar -d
# 显示网络统计
sar -n DEV
# 显示特定时间的历史数据
sar -s 10:00:00 -e 11:00:00
# 显示指定日期的数据
sar -f /var/log/sa/sa20 # 20日的数据
free - 显示内存使用情况
# 显示内存使用情况
free
# 以MB为单位显示
free -m
# 以GB为单位显示
free -g
# 以人类可读方式显示
free -h
# 每2秒更新一次,共5次
free -s 2 -c 5
# 显示总计行
free -t
dstat - 系统资源统计
# 基本使用
dstat
# 显示CPU、磁盘、网络、分页和系统统计
dstat -cdnpm
# 每2秒更新一次,共5次
dstat 2 5
# 显示最高资源消耗的进程
dstat --top-cpu --top-mem
# 显示磁盘使用情况
dstat -d
# 显示网络使用情况
dstat -n
nmon - 系统监控
# 交互模式
nmon
# 收集数据模式
nmon -f -s 2 -c 30 # 每2秒收集一次,共30次
# 交互命令:
# c - CPU统计
# m - 内存统计
# d - 磁盘统计
# n - 网络统计
# t - 进程统计
# q - 退出
strace - 跟踪系统调用
# 跟踪命令的系统调用
strace ls
# 跟踪特定进程
strace -p PID
# 跟踪特定系统调用
strace -e open ls
# 显示时间戳
strace -t ls
# 统计系统调用
strace -c ls
# 输出到文件
strace -o output.txt ls
ltrace - 跟踪库调用
# 跟踪命令的库调用
ltrace ls
# 跟踪特定进程
ltrace -p PID
# 显示时间戳
ltrace -t ls
# 统计库调用
ltrace -c ls
# 输出到文件
ltrace -o output.txt ls
lsof - 列出打开的文件
# 列出所有打开的文件
lsof
# 列出特定用户打开的文件
lsof -u username
# 列出特定进程打开的文件
lsof -p PID
# 列出特定文件的进程
lsof /path/to/file
# 列出监听的网络连接
lsof -i
# 列出特定端口的连接
lsof -i :80
# 列出TCP连接
lsof -i tcp
# 列出UDP连接
lsof -i udp
perf - 性能分析工具
# 列出可用事件
perf list
# 记录性能数据
perf record -a sleep 10
# 分析记录的数据
perf report
# 实时统计
perf stat ls
# CPU性能计数器
perf stat -e cycles,instructions,cache-misses ls
# 跟踪特定进程
perf record -p PID sleep 10
sysctl - 配置内核参数
# 显示所有内核参数
sysctl -a
# 显示特定参数
sysctl vm.swappiness
# 设置参数
sysctl -w vm.swappiness=10
# 从文件加载设置
sysctl -p /etc/sysctl.conf
ulimit - 控制shell资源
# 显示所有限制
ulimit -a
# 设置文件大小限制(KB)
ulimit -f 1000
# 设置最大进程数
ulimit -u 100
# 设置最大打开文件数
ulimit -n 1024
# 设置核心转储文件大小(KB)
ulimit -c 1000
# 设置无限制
ulimit -c unlimited
nice - 以指定优先级运行程序
# 以较低优先级运行
nice command
# 指定优先级(-20到19,越低优先级越高)
nice -n 10 command
# 以较高优先级运行(需要root权限)
nice -n -10 command
renice - 改变运行中进程的优先级
# 改变进程优先级
renice 10 -p PID
# 改变用户所有进程的优先级
renice 10 -u username
# 改变进程组的优先级
renice 10 -g pgrp
用户和权限管理
useradd - 创建新用户
# 创建基本用户
useradd username
# 指定主目录
useradd -d /home/custom username
# 指定shell
useradd -s /bin/bash username
# 指定UID
useradd -u 1001 username
# 指定组
useradd -g groupname username
# 添加到附加组
useradd -G group1,group2 username
# 创建主目录
useradd -m username
# 创建系统用户
useradd -r username
usermod - 修改用户账户
# 修改用户名
usermod -l newname oldname
# 修改主目录
usermod -d /new/home username
# 修改shell
usermod -s /bin/zsh username
# 修改UID
usermod -u 1002 username
# 修改主组
usermod -g groupname username
# 添加到附加组
usermod -a -G group1,group2 username
# 锁定账户
usermod -L username
# 解锁账户
usermod -U username
userdel - 删除用户
# 删除用户
userdel username
# 删除用户及主目录
userdel -r username
用户和权限管理
passwd - 修改用户密码
# 修改指定用户密码
passwd username
# 删除用户密码
passwd -d username
# 锁定用户密码
passwd -l username
# 解锁用户密码
passwd -u username
# 设置密码过期
passwd -e username
# 显示状态信息
passwd -S username
chage - 修改用户密码过期信息
# 显示用户密码过期信息
chage -l username
# 设置密码最大有效期(天)
chage -M 90 username
# 设置密码最小有效期(天)
chage -m 7 username
# 设置密码过期前警告天数
chage -W 7 username
# 设置密码过期后的宽限期(天)
chage -I 7 username
# 设置账户过期日期
chage -E 2023-12-31 username
# 强制用户下次登录时修改密码
chage -d 0 username
groupadd - 创建新组
# 创建基本组
groupadd groupname
# 指定GID
groupadd -g 1001 groupname
# 创建系统组
groupadd -r groupname
groupmod - 修改组
# 修改组名
groupmod -n newname oldname
# 修改GID
groupmod -g 1002 groupname
groupdel - 删除组
# 删除组
groupdel groupname
gpasswd - 管理组成员和密码
# 添加用户到组
gpasswd -a username groupname
# 从组中删除用户
gpasswd -d username groupname
# 设置组管理员
gpasswd -A username groupname
# 设置组密码
gpasswd groupname
id - 显示用户ID和组ID
# 显示当前用户信息
id
# 显示指定用户信息
id username
# 只显示UID
id -u username
# 只显示主GID
id -g username
# 显示所有组ID
id -G username
# 显示名称而非ID
id -n username
groups - 显示用户所属组
# 显示当前用户所属组
groups
# 显示指定用户所属组
groups username
su - 切换用户
# 切换到root
su
# 切换到指定用户
su username
# 使用登录shell切换
su - username
# 以其他用户执行命令
su username -c 'command'
# 保留环境变量切换
su -p username
sudo - 以其他用户身份执行命令
# 以root身份执行命令
sudo command
# 以指定用户身份执行命令
sudo -u username command
# 切换到root shell
sudo -i
# 切换到指定用户shell
sudo -i -u username
# 编辑sudoers文件
sudo visudo
# 显示sudo权限
sudo -l
# 保留环境变量
sudo -E command
chmod - 修改文件权限
# 符号模式
chmod u+x file # 给所有者添加执行权限
chmod g-w file # 移除组写权限
chmod o=r file # 设置其他用户只读权限
chmod a+r file # 给所有人添加读权限
# 数字模式
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
chmod 700 file # rwx------
# 递归修改
chmod -R 755 directory
# 保留目录权限模式
chmod -R u+rw,go-w directory
# 设置SUID权限
chmod u+s file # 4755
# 设置SGID权限
chmod g+s directory # 2755
# 设置粘滞位
chmod +t directory # 1777
chown - 修改文件所有者和组
# 修改所有者
chown username file
# 修改所有者和组
chown username:groupname file
# 只修改组
chown :groupname file
# 递归修改
chown -R username:groupname directory
# 修改符号链接本身(而非目标)
chown -h username symlink
# 保留引用文件的所有者和组
chown --reference=ref_file file
chgrp - 修改文件组
# 修改组
chgrp groupname file
# 递归修改
chgrp -R groupname directory
# 修改符号链接本身(而非目标)
chgrp -h groupname symlink
# 保留引用文件的组
chgrp --reference=ref_file file
umask - 设置默认权限掩码
# 显示当前umask
umask
# 设置umask(数字模式)
umask 022 # 目录权限755,文件权限644
# 设置umask(符号模式)
umask u=rwx,g=rx,o=rx
# 显示创建的权限
umask -S
系统管理
systemctl - 控制systemd系统和服务管理器
# 启动服务
systemctl start service
# 停止服务
systemctl stop service
# 重启服务
systemctl restart service
# 重新加载配置
systemctl reload service
# 启用服务(开机自启)
systemctl enable service
# 禁用服务(开机不启动)
systemctl disable service
# 查看服务状态
systemctl status service
# 列出所有服务
systemctl list-units --type=service
# 列出所有失败的服务
systemctl list-units --failed
# 查看系统启动时间
systemctl --version
# 电源管理
systemctl poweroff # 关机
systemctl reboot # 重启
systemctl suspend # 挂起
systemctl hibernate # 休眠
service - 运行System V初始化脚本
# 启动服务
service service_name start
# 停止服务
service service_name stop
# 重启服务
service service_name restart
# 查看状态
service service_name status
# 列出所有服务
service --status-all
chkconfig - 更新和查询运行级别信息
# 列出所有服务
chkconfig --list
# 添加服务
chkconfig --add service_name
# 删除服务
chkconfig --del service_name
# 启用服务
chkconfig service_name on
# 禁用服务
chkconfig service_name off
# 设置特定运行级别
chkconfig --level 35 service_name on
shutdown - 关闭系统
# 立即关机
shutdown -h now
# 定时关机
shutdown -h +10 # 10分钟后关机
# 取消关机
shutdown -c
# 立即重启
shutdown -r now
# 指定时间重启
shutdown -r 23:00
reboot - 重启系统
# 重启系统
reboot
# 强制重启
reboot -f
poweroff - 关闭系统
# 关闭系统
poweroff
# 强制关闭
poweroff -f
halt - 停止系统
# 停止系统
halt
# 强制停止
halt -f
init - 改变运行级别
# 切换到单用户模式
init 1
# 切换到多用户模式
init 3
# 切换到图形界面
init 5
# 重启
init 6
# 关机
init 0
crontab - 计划任务
# 编辑当前用户的crontab
crontab -e
# 列出当前用户的crontab
crontab -l
# 编辑指定用户的crontab
crontab -u username -e
# 删除当前用户的crontab
crontab -r
# 删除指定用户的crontab
crontab -u username -r
# crontab格式:
# 分 时 日 月 周 命令
# * * * * * command
# 0 2 * * * /path/to/script # 每天2:00执行
# */5 * * * * command # 每5分钟执行一次
# 0 9-17 * * 1-5 command # 工作日9点到17点整点执行
at - 在指定时间执行命令
# 指定时间执行
at 2:00 tomorrow
command
[Ctrl+D]
# 列出等待的作业
atq
# 删除作业
atrm job_number
dmesg - 显示内核环形缓冲区信息
# 显示所有信息
dmesg
# 实时显示
dmesg -w
# 显示人类可读时间戳
dmesg -T
# 清除缓冲区
dmesg -c
# 按级别过滤
dmesg --level=err,warn
# 搜索特定内容
dmesg | grep "USB"
journalctl - 查询systemd日志
# 显示所有日志
journalctl
# 显示内核消息
journalctl -k
# 显示特定服务的日志
journalctl -u service_name
# 显示特定进程的日志
journalctl _PID=1234
# 显示特定时间段的日志
journalctl --since="2023-01-01" --until="2023-01-02"
# 显示最近的日志
journalctl -n 100
# 实时跟踪
journalctl -f
# 按优先级过滤
journalctl -p err
logrotate - 日志轮转
# 手动运行
logrotate /etc/logrotate.conf
# 调试模式
logrotate -d /etc/logrotate.conf
# 强制轮转
logrotate -f /etc/logrotate.conf
# 轮转特定配置
logrotate /etc/logrotate.d/specific_config
logger - 向系统日志添加条目
# 添加日志消息
logger "Test message"
# 指定标签
logger -t TAG "Test message"
# 指定优先级
logger -p local0.info "Test message"
# 指定ID
logger -i "Test message"
hostnamectl - 控制系统主机名
# 显示主机名信息
hostnamectl
# 设置主机名
hostnamectl set-hostname new-hostname
# 设置特定主机名
hostnamectl set-hostname "pretty-hostname" --pretty
hostnamectl set-hostname "static-hostname" --static
hostnamectl set-hostname "transient-hostname" --transient
timedatectl - 控制系统时间和日期
# 显示当前时间设置
timedatectl
# 设置时间
timedatectl set-time "2023-01-01 12:00:00"
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 列出可用时区
timedatectl list-timezones
# 启用NTP同步
timedatectl set-ntp true
# 禁用NTP同步
timedatectl set-ntp false
localectl - 控制系统区域设置
# 显示当前区域设置
localectl
# 设置系统区域
localectl set-locale LANG=en_US.UTF-8
# 设置键盘布局
localectl set-keymap us
# 列出可用键盘布局
localectl list-keymaps
update-alternatives - 管理命令的符号链接
# 显示特定命令的可选项
update-alternatives --display editor
# 配置特定命令
update-alternatives --config editor
# 安装新的可选项
update-alternatives --install /usr/bin/editor editor /usr/bin/vim 100
# 移除可选项
update-alternatives --remove editor /usr/bin/vim
磁盘和文件系统管理
df - 报告文件系统磁盘空间使用情况
# 显示所有文件系统
df
# 以人类可读格式显示
df -h
# 以MB为单位显示
df -m
# 显示特定文件系统类型
df -t ext4
# 显示inode使用情况
df -i
# 显示文件系统类型
df -T
du - 估计文件空间使用量
# 显示目录大小
du /path/to/directory
# 以人类可读格式显示
du -h /path/to/directory
# 显示总计
du -s /path/to/directory
# 显示总计(人类可读)
du -sh /path/to/directory
# 显示指定深度
du -h --max-depth=2 /path/to/directory
# 按大小排序
du -h /path/to/directory | sort -h
fdisk - 磁盘分区表操作工具
# 列出分区表
fdisk -l
# 操作特定设备
fdisk /dev/sda
# 交互命令:
# m - 显示帮助
# p - 显示分区表
# n - 创建新分区
# d - 删除分区
# t - 更改分区类型
# w - 写入分区表并退出
# q - 不保存退出
parted - 磁盘分区工具
# 列出分区表
parted -l
# 操作特定设备
parted /dev/sda
# 交互命令:
# help - 显示帮助
# print - 显示分区表
# mklabel - 创建分区表类型
# mkpart - 创建分区
# rm - 删除分区
# quit - 退出
mkfs - 创建文件系统
# 创建ext4文件系统
mkfs.ext4 /dev/sda1
# 创建XFS文件系统
mkfs.xfs /dev/sda2
# 创建FAT32文件系统
mkfs.fat -F32 /dev/sda3
# 指定标签
mkfs.ext4 -L LABEL /dev/sda1
# 检查坏块
mkfs.ext4 -c /dev/sda1
fsck - 检查和修复文件系统
# 检查文件系统
fsck /dev/sda1
# 自动修复错误
fsck -a /dev/sda1
# 交互式修复
fsck -r /dev/sda1
# 强制检查
fsck -f /dev/sda1
# 检查特定类型
fsck.ext4 /dev/sda1
mount - 挂载文件系统
# 挂载设备
mount /dev/sda1 /mnt
# 指定文件系统类型
mount -t ext4 /dev/sda1 /mnt
# 只读挂载
mount -o ro /dev/sda1 /mnt
# 读写挂载
mount -o rw /dev/sda1 /mnt
# 挂载ISO镜像
mount -o loop file.iso /mnt
# 显示已挂载的文件系统
mount
umount - 卸载文件系统
# 卸载设备
umount /dev/sda1
# 卸载挂载点
umount /mnt
# 强制卸载
umount -f /mnt
# 延迟卸载
umount -l /mnt
lsblk - 列出块设备
# 列出所有块设备
lsblk
# 显示详细信息
lsblk -a
# 显示文件系统信息
lsblk -f
# 以字节为单位显示大小
lsblk -b
# 显示设备拓扑
lsblk -t
blkid - 显示块设备属性
# 显示所有块设备
blkid
# 显示特定设备
blkid /dev/sda1
# 显示UUID
blkid -s UUID /dev/sda1
# 显示标签
blkid -s LABEL /dev/sda1
# 显示类型
blkid -s TYPE /dev/sda1
tune2fs - 调整ext文件系统参数
# 显示文件系统信息
tune2fs -l /dev/sda1
# 设置最大挂载次数
tune2fs -c 30 /dev/sda1
# 设置检查间隔(天)
tune2fs -i 30d /dev/sda1
# 设置标签
tune2fs -L LABEL /dev/sda1
# 启用日志
tune2fs -j /dev/sda1
# 设置保留块百分比
tune2fs -m 5 /dev/sda1
e2fsck - 检查ext文件系统
# 检查文件系统
e2fsck /dev/sda1
# 自动修复错误
e2fsck -p /dev/sda1
# 强制检查
e2fsck -f /dev/sda1
# 显示详细信息
e2fsck -v /dev/sda1
# 显示进度
e2fsck -C 0 /dev/sda1
badblocks - 搜索坏块
# 检查坏块(只读)
badblocks /dev/sda1
# 非破坏性读写测试
badblocks -n /dev/sda1
# 破坏性写测试(危险!)
badblocks -w /dev/sda1
# 显示详细信息
badblocks -v /dev/sda1
# 显示进度
badblocks -s /dev/sda1
fstab - 文件系统表
# 编辑文件系统表
nano /etc/fstab
# 格式:
# <file system> <mount point> <type> <options> <dump> <pass>
# /dev/sda1 /boot ext4 defaults 0 2
# UUID=xxxx / ext4 defaults 0 1
swapoff/swapon - 停用/启用交换空间
# 启用交换分区
swapon /dev/sda2
# 启用交换文件
swapon /path/to/swapfile
# 启用所有交换空间
swapon -a
# 停用交换分区
swapoff /dev/sda2
# 停用所有交换空间
swapoff -a
# 显示交换空间
swapon --show
mkswap - 创建交换空间
# 创建交换分区
mkswap /dev/sda2
# 创建交换文件
mkswap /path/to/swapfile
# 设置标签
mkswap -L SWAP /dev/sda2
LVM命令
pvcreate - 创建物理卷
# 创建物理卷
pvcreate /dev/sda3
# 创建多个物理卷
pvcreate /dev/sda3 /dev/sdb1
# 强制创建
pvcreate -f /dev/sda3
pvdisplay - 显示物理卷信息
# 显示所有物理卷
pvdisplay
# 显示特定物理卷
pvdisplay /dev/sda3
# 简短格式
pvdisplay -s
vgcreate - 创建卷组
# 创建卷组
vgcreate vg_name /dev/sda3
# 创建使用多个物理卷的卷组
vgcreate vg_name /dev/sda3 /dev/sdb1
# 指定PE大小
vgcreate -s 16M vg_name /dev/sda3
vgdisplay - 显示卷组信息
# 显示所有卷组
vgdisplay
# 显示特定卷组
vgdisplay vg_name
# 简短格式
vgdisplay -s
lvcreate - 创建逻辑卷
# 创建逻辑卷(大小为10GB)
lvcreate -L 10G -n lv_name vg_name
# 创建使用卷组百分比的逻辑卷
lvcreate -l 80%VG -n lv_name vg_name
# 创建使用剩余空间的逻辑卷
lvcreate -l 100%FREE -n lv_name vg_name
lvdisplay - 显示逻辑卷信息
# 显示所有逻辑卷
lvdisplay
# 显示特定逻辑卷
lvdisplay /dev/vg_name/lv_name
# 简短格式
lvdisplay -s
网络管理
ip - 显示/操作路由、设备、策略路由和隧道
# 显示所有网络接口
ip link show
# 显示IP地址
ip addr show
# 显示路由表
ip route show
# 启用网络接口
ip link set dev eth0 up
# 禁用网络接口
ip link set dev eth0 down
# 添加IP地址
ip addr add 192.168.1.10/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.10/24 dev eth0
# 添加默认路由
ip route add default via 192.168.1.1
# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.254
# 删除路由
ip route del 10.0.0.0/24
# 显示ARP表
ip neigh show
ifconfig - 配置网络接口(传统命令)
# 显示所有网络接口
ifconfig
# 显示特定接口
ifconfig eth0
# 设置IP地址
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
# 启用接口
ifconfig eth0 up
# 禁用接口
ifconfig eth0 down
# 设置MTU
ifconfig eth0 mtu 1500
route - 显示/操作IP路由表(传统命令)
# 显示路由表
route
# 添加默认网关
route add default gw 192.168.1.1
# 添加静态路由
route add -net 10.0.0.0/24 gw 192.168.1.254
# 删除路由
route del -net 10.0.0.0/24
netstat - 网络连接、路由表和接口统计
# 显示所有连接
netstat -a
# 显示监听端口
netstat -l
# 显示进程信息
netstat -p
# 显示路由表
netstat -r
# 显示接口统计
netstat -i
# 不解析主机名
netstat -n
# 持续显示
netstat -c
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示UNIX套接字
netstat -x
# 显示所有TCP和UDP端口号
netstat -at -au
# 显示统计信息
netstat -s
# 显示特定协议统计
netstat -s --tcp
# 显示内核路由信息
netstat -rn
ss - 显示套接字统计
# 显示所有连接
ss
# 显示监听端口
ss -l
# 显示进程信息
ss -p
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 不解析服务名
ss -n
# 显示详细信息
ss -v
# 显示内部TCP信息
ss -i
# 显示内存使用
ss -m
ping - 测试网络连接
# 发送ICMP请求
ping example.com
# 指定次数
ping -c 4 example.com
# 指定间隔(秒)
ping -i 2 example.com
# 指定超时(秒)
ping -W 2 example.com
# 指定包大小
ping -s 1000 example.com
# 洪水ping(需要root权限)
ping -f example.com
traceroute - 显示到目标的路由路径
# 跟踪路由
traceroute example.com
# 指定最大跳数
traceroute -m 20 example.com
# 不解析主机名
traceroute -n example.com
# 使用TCP
traceroute -T example.com
# 使用UDP
traceroute -U example.com
# 指定源接口
traceroute -i eth0 example.com
# 指定源IP
traceroute -s 192.168.1.10 example.com
nslookup - 查询DNS记录
# 查询A记录
nslookup example.com
# 查询特定记录类型
nslookup -type=MX example.com
# 使用特定DNS服务器
nslookup example.com 8.8.8.8
# 交互模式
nslookup
> server 8.8.8.8
> example.com
> set type=MX
> example.com
> exit
dig - DNS查询工具
# 查询A记录
dig example.com
# 查询特定记录类型
dig example.com MX
# 使用特定DNS服务器
dig @8.8.8.8 example.com
# 简短输出
dig +short example.com
# 跟踪DNS解析
dig +trace example.com
# 反向查询
dig -x 8.8.8.8
# 显示DNSSEC信息
dig +dnssec example.com
host - DNS查询工具
# 查询主机
host example.com
# 查询特定记录类型
host -t MX example.com
# 使用特定DNS服务器
host example.com 8.8.8.8
# 详细输出
host -v example.com
# 反向查询
host 8.8.8.8
hostname - 显示或设置系统主机名
# 显示主机名
hostname
# 设置主机名(临时)
hostname new-hostname
# 显示FQDN
hostname -f
# 显示IP地址
hostname -i
# 显示所有IP地址
hostname -I
hostnamectl - 控制系统主机名
# 显示主机名信息
hostnamectl
# 设置主机名(永久)
hostnamectl set-hostname new-hostname
# 设置静态主机名
hostnamectl set-hostname "New Host" --static
# 设置瞬态主机名
hostnamectl set-hostname "new-host" --transient
# 设置漂亮主机名
hostnamectl set-hostname "New Host" --pretty
nmcli - NetworkManager命令行工具
# 显示所有连接
nmcli connection show
# 显示活动连接
nmcli connection show --active
# 启用连接
nmcli connection up "Wired connection 1"
# 禁用连接
nmcli connection down "Wired connection 1"
# 显示设备
nmcli device status
# 连接WiFi
nmcli device wifi connect SSID password PASSWORD
# 显示WiFi列表
nmcli device wifi list
# 创建新连接
nmcli connection add type ethernet ifname eth0 con-name "My Connection"
# 修改连接
nmcli connection modify "My Connection" ipv4.method manual ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4"
firewall-cmd - firewalld防火墙管理
# 显示状态
firewall-cmd --state
# 重新加载规则
firewall-cmd --reload
# 列出所有区域
firewall-cmd --list-all-zones
# 列出默认区域
firewall-cmd --list-all
# 列出特定区域
firewall-cmd --zone=public --list-all
# 添加服务
firewall-cmd --zone=public --add-service=http
# 永久添加服务
firewall-cmd --zone=public --add-service=http --permanent
# 添加端口
firewall-cmd --zone=public --add-port=8080/tcp
# 移除服务
firewall-cmd --zone=public --remove-service=http
# 设置默认区域
firewall-cmd --set-default-zone=public
iptables - 管理IPv4数据包过滤规则
# 列出规则
iptables -L
# 带行号列出规则
iptables -L --line-numbers
# 列出NAT表规则
iptables -t nat -L
# 添加允许规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 添加拒绝规则
iptables -A INPUT -p tcp --dport 23 -j DROP
# 删除规则(按行号)
iptables -D INPUT 3
# 清空规则链
iptables -F INPUT
# 设置默认策略
iptables -P INPUT DROP
# 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4
netcat (nc) - 网络工具
# 连接到服务器
nc example.com 80
# 监听端口
nc -l 8080
# 端口扫描
nc -zv example.com 20-30
# 文件传输(接收端)
nc -l 8080 > received_file
# 文件传输(发送端)
nc example.com 8080 < file_to_send
# UDP模式
nc -u example.com 53
# 持久监听
nc -lk 8080
# 指定超时
nc -w 10 example.com 80
curl - 传输URL数据
# 获取网页
curl http://example.com
# 保存到文件
curl -o file.html http://example.com
# 下载文件(使用远程名称)
curl -O http://example.com/file.zip
# 跟随重定向
curl -L http://example.com
# 显示响应头
curl -I http://example.com
# 发送POST请求
curl -X POST -d "name=value" http://example.com
# 发送JSON数据
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com
# 使用基本认证
curl -u username:password http://example.com
# 上传文件
curl -F "file=@localfile.jpg" http://example.com/upload
# 使用代理
curl -x proxy.example.com:8080 http://example.com
wget - 网络下载器
# 下载文件
wget http://example.com/file.zip
# 指定输出文件名
wget -O output.zip http://example.com/file.zip
# 后台下载
wget -b http://example.com/file.zip
# 继续下载
wget -c http://example.com/file.zip
# 镜像网站
wget -m http://example.com
# 递归下载
wget -r http://example.com
# 限制深度
wget -r -l 2 http://example.com
# 限制速度
wget --limit-rate=200k http://example.com/file.zip
# 使用基本认证
wget --http-user=username --http-password=password http://example.com
系统监控和性能分析
top - 实时系统监控
# 启动top
top
# 批处理模式
top -b -n 1
# 监控特定用户
top -u username
# 监控特定进程
top -p 1234
# 按内存排序
top -o %MEM
# 按CPU排序
top -o %CPU
# 显示完整命令
top -c
# 交互命令:
# h - 帮助
# k - 杀死进程
# r - 调整优先级
# q - 退出
# f - 添加/删除字段
# o - 改变排序
htop - 增强的交互式进程查看器
# 启动htop
htop
# 显示线程
htop -t
# 显示树视图
htop -t
# 按用户过滤
htop -u username
# 延迟更新(秒)
htop -d 10
# 交互命令:
# F1-F10 - 功能键
# h - 帮助
# k - 杀死进程
# u - 按用户过滤
# t - 树视图
# s - 跟踪系统调用
ps - 报告进程状态
# 显示当前用户进程
ps
# 显示所有进程
ps -e
# 显示所有进程(完整格式)
ps -ef
# 显示所有进程(BSD格式)
ps aux
# 显示进程树
ps -ejH
# 按CPU排序
ps aux --sort=-%cpu
# 按内存排序
ps aux --sort=-%mem
# 显示特定用户进程
ps -u username
# 显示特定进程及其子进程
ps -p 1234 --forest
free - 显示内存使用情况
# 显示内存信息
free
# 以MB为单位显示
free -m
# 以GB为单位显示
free -g
# 人类可读格式
free -h
# 显示总计
free -t
# 每秒更新一次
free -s 1
vmstat - 报告虚拟内存统计
# 显示内存统计
vmstat
# 每秒更新一次,共5次
vmstat 1 5
# 显示内存统计(-S指定单位)
vmstat -S M
# 显示磁盘统计
vmstat -d
# 显示分区统计
vmstat -p /dev/sda1
# 显示活动/非活动内存
vmstat -a
# 显示系统事件计数器和内存统计
vmstat -s
iostat - 报告CPU和I/O统计
# 显示CPU和I/O统计
iostat
# 每秒更新一次,共5次
iostat 1 5
# 显示扩展统计
iostat -x
# 显示设备利用率
iostat -d
# 显示CPU利用率
iostat -c
# 以MB为单位
iostat -m
# 显示特定设备
iostat -p sda
sar - 系统活动报告
# 显示CPU使用情况
sar
# 每秒更新一次,共5次
sar 1 5
# 显示内存使用情况
sar -r
# 显示I/O活动
sar -b
# 显示网络统计
sar -n DEV
# 显示特定日期的历史数据
sar -f /var/log/sa/sa20
# 显示所有统计
sar -A
mpstat - 多处理器统计
# 显示所有CPU统计
mpstat
# 每秒更新一次,共5次
mpstat 1 5
# 显示特定CPU
mpstat -P 0
# 显示所有CPU单独统计
mpstat -P ALL
# 显示中断统计
mpstat -I ALL
dstat - 系统资源统计
# 显示CPU、磁盘、网络、分页、系统统计
dstat
# 显示CPU统计
dstat -c
# 显示磁盘统计
dstat -d
# 显示网络统计
dstat -n
# 显示内存统计
dstat -m
# 显示进程统计
dstat -p
# 显示电源统计
dstat --power
# 自定义输出
dstat -cdnm
uptime - 系统运行时间和负载
# 显示系统运行时间和负载
uptime
# 简短格式
uptime -p
# 显示自系统启动以来的秒数
uptime -s
w - 显示已登录用户及其活动
# 显示登录用户信息
w
# 简短格式
w -s
# 显示登录来源IP
w -i
# 不显示标题
w -h
# 显示特定用户
w username
who - 显示已登录用户
# 显示登录用户
who
# 显示登录时间
who -a
# 显示运行级别
who -r
# 显示系统启动时间
who -b
# 显示死进程
who -d
last - 显示用户登录历史
# 显示登录历史
last
# 显示特定用户
last username
# 显示特定数量
last -n 10
# 显示主机名
last -a
# 显示IP地址
last -i
# 显示系统重启
last reboot
# 显示系统关机
last shutdown
lsof - 列出打开的文件
# 列出所有打开的文件
lsof
# 列出特定用户打开的文件
lsof -u username
# 列出特定进程打开的文件
lsof -p 1234
# 列出特定程序打开的文件
lsof -c program_name
# 列出特定端口打开的文件
lsof -i :22
# 列出所有网络连接
lsof -i
# 列出特定文件的打开进程
lsof /path/to/file
# 列出特定目录的打开文件
lsof +D /path/to/directory
nmon - 性能监视器
# 启动nmon
nmon
# 捕获数据到文件
nmon -f -s 60 -c 60
# 显示特定资源
nmon -c 60 -s 1 -f -m /home/user
strace - 跟踪系统调用和信号
# 跟踪程序的系统调用
strace program_name
# 跟踪特定进程
strace -p 1234
# 跟踪特定系统调用
strace -e open,read program_name
# 显示调用时间
strace -t program_name
# 显示相对时间戳
strace -r program_name
# 将输出保存到文件
strace -o output.txt program_name
# 跟踪子进程
strace -f program_name
# 统计系统调用
strace -c program_name
ltrace - 跟踪库调用
# 跟踪程序的库调用
ltrace program_name
# 跟踪特定进程
ltrace -p 1234
# 显示调用时间
ltrace -t program_name
# 将输出保存到文件
ltrace -o output.txt program_name
# 跟踪子进程
ltrace -f program_name
# 统计库调用
ltrace -c program_name
perf - 性能分析工具
# 列出可用事件
perf list
# 记录性能数据
perf record -a sleep 10
# 分析性能数据
perf report
# 实时统计
perf stat program_name
# 跟踪特定进程
perf record -p 1234 sleep 10
# 跟踪特定事件
perf record -e cpu-clock program_name
# 显示调用图
perf report --call-graph
sysctl - 配置内核参数
# 显示所有内核参数
sysctl -a
# 显示特定参数
sysctl vm.swappiness
# 设置参数
sysctl -w vm.swappiness=10
# 从配置文件加载
sysctl -p
# 从特定文件加载
sysctl -p /etc/sysctl.conf
fuser - 识别使用文件或套接字的进程
# 显示使用文件的进程
fuser /path/to/file
# 显示使用端口的进程
fuser -n tcp 80
# 显示详细信息
fuser -v /path/to/file
# 杀死使用文件的进程
fuser -k /path/to/file
# 显示使用挂载点的进程
fuser -m /mnt/point
用户和权限管理
useradd - 创建新用户
# 创建用户
useradd username
# 创建用户并指定家目录
useradd -m username
# 创建用户并指定shell
useradd -m -s /bin/bash username
# 创建用户并指定UID
useradd -u 1001 username
# 创建用户并添加到组
useradd -m -G wheel,users username
# 创建系统用户
useradd -r username
# 创建用户并设置过期时间
useradd -e 2023-12-31 username
usermod - 修改用户账户
# 修改用户名
usermod -l new_username old_username
# 修改家目录
usermod -d /new/home username
# 修改shell
usermod -s /bin/zsh username
# 添加到组
usermod -aG group1,group2 username
# 锁定账户
usermod -L username
# 解锁账户
usermod -U username
# 修改UID
usermod -u 1002 username
# 设置过期时间
usermod -e 2023-12-31 username
userdel - 删除用户
# 删除用户
userdel username
# 删除用户及其家目录
userdel -r username
# 强制删除
userdel -f username
passwd - 修改用户密码
# 修改当前用户密码
passwd
# 修改指定用户密码
passwd username
# 删除用户密码
passwd -d username
# 锁定用户密码
passwd -l username
# 解锁用户密码
passwd -u username
# 显示状态
passwd -S username
# 设置密码过期
passwd -e username
groupadd - 创建新组
# 创建组
groupadd groupname
# 创建指定GID的组
groupadd -g 1001 groupname
# 创建系统组
groupadd -r groupname
groupmod - 修改组
# 修改组名
groupmod -n new_groupname old_groupname
# 修改GID
groupmod -g 1002 groupname
groupdel - 删除组
# 删除组
groupdel groupname
gpasswd - 管理组成员
# 添加用户到组
gpasswd -a username groupname
# 从组中删除用户
gpasswd -d username groupname
# 设置组管理员
gpasswd -A admin_user groupname
# 设置组密码
gpasswd groupname
groups - 显示用户组成员关系
# 显示当前用户的组
groups
# 显示指定用户的组
groups username
id - 显示用户身份
# 显示当前用户ID信息
id
# 显示指定用户ID信息
id username
# 仅显示UID
id -u username
# 仅显示GID
id -g username
# 显示所有组ID
id -G username
# 显示名称而非ID
id -n username
chown - 改变文件所有者和组
# 更改所有者
chown username file
# 更改所有者和组
chown username:groupname file
# 递归更改
chown -R username:groupname directory
# 仅更改符号链接
chown -h username:groupname symlink
# 参考文件
chown --reference=reference_file target_file
chmod - 改变文件权限
# 设置权限(数字模式)
chmod 755 file
# 设置权限(符号模式)
chmod u=rwx,g=rx,o=rx file
# 添加权限
chmod u+x file
# 移除权限
chmod o-w file
# 递归更改
chmod -R 755 directory
# 保留权限位
chmod +t directory
chgrp - 改变文件组
# 更改组
chgrp groupname file
# 递归更改
chgrp -R groupname directory
# 参考文件
chgrp --reference=reference_file target_file
umask - 设置默认权限掩码
# 设置umask
umask 022
# 显示符号形式
umask -S
# 设置符号形式
umask u=rwx,g=rx,o=rx# 显示当前umask
umask
# 设置umask
umask 022
# 显示符号形式
umask -S
# 设置符号形式
umask u=rwx,g=rx,o=rx
chage - 修改用户密码过期信息
# 显示用户密码信息
chage -l username
# 设置密码过期日期
chage -E 2023-12-31 username
# 设置最小密码使用天数
chage -m 7 username
# 设置最大密码使用天数
chage -M 90 username
# 设置密码过期前的警告天数
chage -W 7 username
# 设置密码过期后的宽限天数
chage -I 7 username
# 强制用户下次登录时修改密码
chage -d 0 username
su - 切换用户
# 切换到root
su
# 切换到特定用户
su username
# 切换并使用登录环境
su - username
# 执行单个命令
su -c "command" username
# 保留环境变量
su -m username
sudo - 以其他用户身份执行命令
# 以root身份执行命令
sudo command
# 以特定用户身份执行命令
sudo -u username command
# 保留环境变量
sudo -E command
# 编辑sudoers文件
sudo visudo
# 显示sudo权限
sudo -l
# 切换到root shell
sudo -i
# 切换到用户shell
sudo -i -u username
visudo - 安全编辑sudoers文件
# 编辑sudoers文件
visudo
# 检查语法
visudo -c
# 指定特定文件
visudo -f /etc/sudoers.d/custom
getfacl - 显示文件访问控制列表
# 显示ACL
getfacl file
# 显示所有信息
getfacl -a file
# 显示目录内容
getfacl -R directory
setfacl - 设置文件访问控制列表
# 为用户设置权限
setfacl -m u:username:rwx file
# 为组设置权限
setfacl -m g:groupname:rx file
# 删除特定ACL
setfacl -x u:username file
# 删除所有ACL
setfacl -b file
# 递归设置
setfacl -R -m u:username:rwx directory
# 设置默认ACL
setfacl -d -m u:username:rwx directory
软件和包管理
apt (Debian/Ubuntu) - 高级包管理工具
# 更新包列表
apt update
# 升级所有包
apt upgrade
# 安装包
apt install package_name
# 移除包
apt remove package_name
# 移除包及其配置
apt purge package_name
# 自动移除不需要的包
apt autoremove
# 搜索包
apt search keyword
# 显示包信息
apt show package_name
# 列出可升级的包
apt list --upgradable
# 列出已安装的包
apt list --installed
# 清理本地仓库
apt clean
# 下载但不安装包
apt download package_name
apt-get (Debian/Ubuntu) - 包管理工具
# 更新包列表
apt-get update
# 升级所有包
apt-get upgrade
# 安装包
apt-get install package_name
# 移除包
apt-get remove package_name
# 移除包及其配置
apt-get purge package_name
# 自动移除不需要的包
apt-get autoremove
# 清理本地仓库
apt-get clean
# 下载但不安装包
apt-get download package_name
# 仅下载源码
apt-get source package_name
# 构建依赖
apt-get build-dep package_name
dpkg (Debian/Ubuntu) - 包管理器
# 安装包
dpkg -i package.deb
# 移除包
dpkg -r package_name
# 移除包及其配置
dpkg -P package_name
# 列出已安装的包
dpkg -l
# 列出特定包的文件
dpkg -L package_name
# 查找文件所属的包
dpkg -S /path/to/file
# 显示包信息
dpkg -s package_name
# 检查包是否安装
dpkg -l | grep package_name
# 重新配置包
dpkg-reconfigure package_name
yum (RHEL/CentOS) - 包管理器
# 安装包
yum install package_name
# 移除包
yum remove package_name
# 更新所有包
yum update
# 更新特定包
yum update package_name
# 搜索包
yum search keyword
# 列出可用包
yum list available
# 列出已安装的包
yum list installed
# 显示包信息
yum info package_name
# 清理缓存
yum clean all
# 列出包组
yum grouplist
# 安装包组
yum groupinstall "group_name"
# 移除包组
yum groupremove "group_name"
dnf (Fedora/RHEL8+) - 新一代包管理器
# 安装包
dnf install package_name
# 移除包
dnf remove package_name
# 更新所有包
dnf update
# 更新特定包
dnf update package_name
# 搜索包
dnf search keyword
# 列出可用包
dnf list available
# 列出已安装的包
dnf list installed
# 显示包信息
dnf info package_name
# 清理缓存
dnf clean all
# 列出包组
dnf group list
# 安装包组
dnf group install "group_name"
# 移除包组
dnf group remove "group_name"
rpm (RHEL/CentOS/Fedora) - RPM包管理器
# 安装包
rpm -i package.rpm
# 安装包(显示进度)
rpm -ivh package.rpm
# 升级包
rpm -U package.rpm
# 移除包
rpm -e package_name
# 查询所有已安装的包
rpm -qa
# 查询特定包
rpm -q package_name
# 列出包中的文件
rpm -ql package_name
# 查找文件所属的包
rpm -qf /path/to/file
# 显示包信息
rpm -qi package_name
# 验证包
rpm -V package_name
# 导入GPG密钥
rpm --import key.asc
zypper (openSUSE) - 包管理器
# 安装包
zypper install package_name
# 移除包
zypper remove package_name
# 更新所有包
zypper update
# 更新特定包
zypper update package_name
# 搜索包
zypper search keyword
# 列出可用包
zypper se
# 列出已安装的包
zypper se -i
# 显示包信息
zypper info package_name
# 刷新仓库
zypper refresh
# 添加仓库
zypper addrepo URL alias
# 移除仓库
zypper removerepo alias
# 列出仓库
zypper repos
pacman (Arch Linux) - 包管理器
# 安装包
pacman -S package_name
# 移除包
pacman -R package_name
# 移除包及其依赖
pacman -Rs package_name
# 更新所有包
pacman -Syu
# 搜索包
pacman -Ss keyword
# 列出已安装的包
pacman -Q
# 显示包信息
pacman -Qi package_name
# 列出包中的文件
pacman -Ql package_name
# 查找文件所属的包
pacman -Qo /path/to/file
# 清理缓存
pacman -Sc
# 同步数据库
pacman -Sy
snap - 通用Linux包管理系统
# 安装snap包
snap install package_name
# 移除snap包
snap remove package_name
# 更新所有snap包
snap refresh
# 更新特定snap包
snap refresh package_name
# 列出已安装的snap包
snap list
# 搜索snap包
snap find keyword
# 显示snap包信息
snap info package_name
# 切换到特定通道
snap switch --channel=edge package_name
# 启用/禁用snap包
snap enable/disable package_name
# 查看snap日志
snap logs package_name
flatpak - 应用程序沙盒
# 安装flatpak包
flatpak install application_id
# 移除flatpak包
flatpak uninstall application_id
# 更新所有flatpak包
flatpak update
# 更新特定flatpak包
flatpak update application_id
# 列出已安装的flatpak包
flatpak list
# 搜索flatpak包
flatpak search keyword
# 显示flatpak包信息
flatpak info application_id
# 运行flatpak应用
flatpak run application_id
# 添加远程仓库
flatpak remote-add name URL
# 列出远程仓库
flatpak remotes
make - 构建程序
# 构建程序
make
# 安装程序
make install
# 清理构建文件
make clean
# 执行特定目标
make target_name
# 并行构建
make -j4
# 显示调试信息
make -d
# 指定makefile
make -f custom_makefile
# 只打印命令
make -n
网络管理和配置
ifconfig - 配置网络接口
# 显示所有网络接口
ifconfig
# 显示特定接口
ifconfig eth0
# 启用接口
ifconfig eth0 up
# 禁用接口
ifconfig eth0 down
# 设置IP地址
ifconfig eth0 192.168.1.100
# 设置子网掩码
ifconfig eth0 netmask 255.255.255.0
# 设置广播地址
ifconfig eth0 broadcast 192.168.1.255
# 设置MAC地址
ifconfig eth0 hw ether 00:11:22:33:44:55
# 设置MTU
ifconfig eth0 mtu 1500
ip - 显示/操作路由、设备、策略路由和隧道
# 显示所有网络接口
ip link show
# 显示IP地址
ip addr show
# 显示特定接口
ip addr show dev eth0
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0
# 启用接口
ip link set eth0 up
# 禁用接口
ip link set eth0 down
# 设置MTU
ip link set eth0 mtu 1500
# 显示路由表
ip route show
# 添加默认路由
ip route add default via 192.168.1.1
# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.254
# 删除路由
ip route del 10.0.0.0/24
# 显示ARP表
ip neigh show
# 添加ARP条目
ip neigh add 192.168.1.5 lladdr 00:11:22:33:44:55 dev eth0
# 删除ARP条目
ip neigh del 192.168.1.5 dev eth0
route - 显示/操作IP路由表
# 显示路由表
route
# 显示数字形式
route -n
# 添加默认网关
route add default gw 192.168.1.1
# 添加网络路由
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254
# 添加主机路由
route add -host 10.0.0.1 gw 192.168.1.254
# 删除默认网关
route del default
# 删除网络路由
route del -net 10.0.0.0 netmask 255.255.255.0
# 添加接口路由
route add -net 10.0.0.0 netmask 255.255.255.0 dev eth0
netstat - 网络连接、路由表和接口统计
# 显示所有连接
netstat -a
# 显示监听端口
netstat -l
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示进程名/PID
netstat -p
# 显示路由表
netstat -r
# 显示接口统计
netstat -i
# 不解析名称
netstat -n
# 持续显示
netstat -c
# 显示所有TCP连接且不解析
netstat -atn
ss - 显示套接字统计
# 显示所有连接
ss
# 显示监听端口
ss -l
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示进程名/PID
ss -p
# 不解析名称
ss -n
# 显示详细信息
ss -v
# 显示内部TCP信息
ss -i
# 显示摘要统计
ss -s
# 显示所有TCP连接且不解析
ss -atn
ping - 测试网络连接
# 基本ping
ping example.com
# 指定次数
ping -c 4 example.com
# 指定间隔(秒)
ping -i 2 example.com
# 指定超时(秒)
ping -W 2 example.com
# 指定包大小
ping -s 1000 example.com
# 洪水ping(需root权限)
ping -f example.com
# 只显示摘要
ping -q example.com
# 使用特定接口
ping -I eth0 example.com
# 记录路由
ping -R example.com
traceroute - 跟踪网络路径
# 基本路径跟踪
traceroute example.com
# 指定最大跳数
traceroute -m 15 example.com
# 不解析主机名
traceroute -n example.com
# 指定端口
traceroute -p 53 example.com
# 使用ICMP
traceroute -I example.com
# 使用TCP
traceroute -T example.com
# 指定源IP
traceroute -s 192.168.1.100 example.com
# 显示AS号
traceroute -A example.com
# 指定接口
traceroute -i eth0 example.com
mtr - 网络诊断工具(结合ping和traceroute)
# 基本网络诊断
mtr example.com
# 报告模式
mtr -r example.com
# 指定报告循环次数
mtr -r -c 10 example.com
# 不解析主机名
mtr -n example.com
# 使用TCP代替ICMP
mtr -T example.com
# 使用UDP
mtr -u example.com
# 指定端口
mtr -P 80 example.com
# 指定间隔(秒)
mtr -i 2 example.com
# 显示IP地址和主机名
mtr -b example.com
nslookup - 查询DNS记录
# 查询A记录
nslookup example.com
# 指定DNS服务器
nslookup example.com 8.8.8.8
# 查询MX记录
nslookup -type=mx example.com
# 查询NS记录
nslookup -type=ns example.com
# 查询所有记录
nslookup -type=any example.com
# 反向查询
nslookup 8.8.8.8
# 调试模式
nslookup -debug example.com
# 交互模式
nslookup
> server 8.8.8.8
> example.com
dig - DNS查询工具
# 查询A记录
dig example.com
# 指定DNS服务器
dig @8.8.8.8 example.com
# 查询特定记录类型
dig example.com MX
# 简短输出
dig +short example.com
# 跟踪DNS查询
dig +trace example.com
# 反向查询
dig -x 8.8.8.8
# 查询所有记录
dig example.com ANY
# 显示DNSSEC信息
dig +dnssec example.com
# 指定端口
dig @8.8.8.8 -p 53 example.com
host - DNS查询工具
# 基本查询
host example.com
# 指定DNS服务器
host example.com 8.8.8.8
# 查询特定记录类型
host -t MX example.com
# 详细输出
host -v example.com
# 反向查询
host 8.8.8.8
# 查询所有记录
host -a example.com
whois - 查询域名注册信息
# 基本查询
whois example.com
# 指定whois服务器
whois -h whois.verisign-grs.com example.com
# 简短输出
whois -b example.com
# 递归查询
whois -r example.com
# 查询IP地址
whois 8.8.8.8
nc (netcat) - TCP/UDP连接和监听
# 连接到服务器
nc example.com 80
# 指定超时
nc -w 5 example.com 80
# UDP模式
nc -u example.com 53
# 监听端口
nc -l 8080
# 端口扫描
nc -zv example.com 20-30
# 传输文件(接收端)
nc -l 8080 > received_file
# 传输文件(发送端)
nc example.com 8080 < file_to_send
# 聊天服务器
nc -l 8080
# 聊天客户端
nc example.com 8080
# 持久监听
nc -k -l 8080
curl - 传输数据的工具
# 获取网页
curl http://example.com
# 保存到文件
curl -o file.html http://example.com
# 使用原始文件名保存
curl -O http://example.com/file.zip
# 显示响应头
curl -I http://example.com
# 发送POST请求
curl -d "param1=value1¶m2=value2" http://example.com
# 发送JSON数据
curl -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com
# 使用基本认证
curl -u username:password http://example.com
# 跟随重定向
curl -L http://example.com
# 使用代理
curl -x proxy.example.com:8080 http://example.com
# 上传文件
curl -F "file=@localfile.jpg" http://example.com/upload
# 设置cookie
curl -b "name=value" http://example.com
# 保存cookie
curl -c cookies.txt http://example.com
# 限制传输速率
curl --limit-rate 100k http://example.com
# 断点续传
curl -C - -O http://example.com/large_file.zip
wget - 网络下载工具
# 下载文件
wget http://example.com/file.zip
# 指定输出文件名
wget -O output.zip http://example.com/file.zip
# 后台下载
wget -b http://example.com/large_file.zip
# 继续下载
wget -c http://example.com/large_file.zip
# 递归下载网站
wget -r http://example.com/
# 递归下载限制深度
wget -r -l 2 http://example.com/
# 镜像网站
wget --mirror http://example.com/
# 接受/拒绝文件类型
wget -A "*.pdf" -R "*.html" http://example.com/
# 使用基本认证
wget --http-user=username --http-password=password http://example.com/
# 使用代理
wget -e use_proxy=yes -e http_proxy=proxy.example.com:8080 http://example.com/
# 限制带宽
wget --limit-rate=100k http://example.com/large_file.zip
iptables - 配置Linux防火墙
# 显示所有规则
iptables -L
# 显示规则(带行号)
iptables -L --line-numbers
# 显示特定链的规则
iptables -L INPUT
# 添加允许规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 添加拒绝规则
iptables -A INPUT -p tcp --dport 23 -j DROP
# 删除规则(按号码)
iptables -D INPUT 3
# 设置默认策略
iptables -P INPUT DROP
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许特定IP
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 允许特定网段
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# 端口转发
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# 保存规则
iptables-save > /etc/iptables.rules
# 恢复规则
iptables-restore < /etc/iptables.rules
firewalld - 动态防火墙管理器
# 显示状态
firewall-cmd --state
# 重新加载规则
firewall-cmd --reload
# 列出所有区域
firewall-cmd --get-zones
# 列出默认区域
firewall-cmd --get-default-zone
# 设置默认区域
firewall-cmd --set-default-zone=public
# 列出特定区域的规则
firewall-cmd --zone=public --list-all
# 添加服务
firewall-cmd --zone=public --add-service=http
# 永久添加服务
firewall-cmd --permanent --zone=public --add-service=http
# 移除服务
firewall-cmd --zone=public --remove-service=http
# 添加端口
firewall-cmd --zone=public --add-port=8080/tcp
# 永久添加端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
# 移除端口
firewall-cmd --zone=public --remove-port=8080/tcp
# 添加源地址
firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24
# 移除源地址
firewall-cmd --permanent --zone=trusted --remove-source=192.168.1.0/24
# 端口转发
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
# 添加富规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.10" accept'
# 列出所有服务
firewall-cmd --get-services
# 查询端口是否开放
firewall-cmd --zone=public --query-port=80/tcp
nmap - 网络探测和安全审计
# 扫描单个主机
nmap 192.168.1.1
# 扫描整个网段
nmap 192.168.1.0/24
# 扫描多个主机
nmap 192.168.1.1,2,3
# 扫描主机列表
nmap -iL hosts.txt
# 扫描特定端口
nmap -p 80,443 192.168.1.1
# 扫描端口范围
nmap -p 1-100 192.168.1.1
# 扫描所有端口
nmap -p- 192.168.1.1
# 快速扫描
nmap -F 192.168.1.1
# 操作系统检测
nmap -O 192.168.1.1
# 服务版本检测
nmap -sV 192.168.1.1
# 全面扫描
nmap -A 192.168.1.1
# SYN扫描(半开扫描)
nmap -sS 192.168.1.1
# TCP连接扫描
nmap -sT 192.168.1.1
# UDP扫描
nmap -sU 192.168.1.1
# 保存输出到文件
nmap -oN output.txt 192.168.1.1
# XML输出
nmap -oX output.xml 192.168.1.1
# 脚本扫描
nmap --script=vuln 192.168.1.1
# 隐蔽扫描
nmap -T0 192.168.1.1
tcpdump - 网络数据包分析器
# 捕获特定接口的数据包
tcpdump -i eth0
# 捕获特定数量的数据包
tcpdump -c 100 -i eth0
# 显示详细信息
tcpdump -v -i eth0
# 显示更详细信息
tcpdump -vv -i eth0
# 显示十六进制和ASCII输出
tcpdump -X -i eth0
# 不解析主机名和端口
tcpdump -n -i eth0
# 捕获特定主机的数据包
tcpdump host 192.168.1.1
# 捕获源主机的数据包
tcpdump src host 192.168.1.1
# 捕获目标主机的数据包
tcpdump dst host 192.168.1.1
# 捕获特定端口的数据包
tcpdump port 80
# 捕获特定协议的数据包
tcpdump tcp
# 使用过滤表达式
tcpdump 'tcp port 80 and host 192.168.1.1'
# 保存捕获到文件
tcpdump -w capture.pcap
# 读取捕获文件
tcpdump -r capture.pcap
# 捕获HTTP GET请求
tcpdump -i eth0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
nmcli - NetworkManager命令行工具
# 显示所有连接
nmcli connection show
# 显示活动连接
nmcli connection show --active
# 显示设备状态
nmcli device status
# 显示特定设备详情
nmcli device show eth0
# 连接到网络
nmcli connection up "Connection Name"
# 断开连接
nmcli connection down "Connection Name"
# 创建新连接
nmcli connection add type ethernet con-name "My Connection" ifname eth0
# 修改连接属性
nmcli connection modify "My Connection" ipv4.addresses 192.168.1.100/24
# 设置自动连接
nmcli connection modify "My Connection" connection.autoconnect yes
# 删除连接
nmcli connection delete "My Connection"
# 显示WiFi网络
nmcli device wifi list
# 连接到WiFi网络
nmcli device wifi connect SSID password PASSWORD
# 启用设备
nmcli device connect eth0
# 禁用设备
nmcli device disconnect eth0
# 设置系统主机名
nmcli general hostname myhost.example.com
iwconfig - 无线网络接口配置
# 显示所有无线接口
iwconfig
# 显示特定接口
iwconfig wlan0
# 设置ESSID
iwconfig wlan0 essid "NetworkName"
# 设置操作模式
iwconfig wlan0 mode Managed
# 设置频道
iwconfig wlan0 channel 6
# 设置传输速率
iwconfig wlan0 rate 54M
# 设置加密密钥
iwconfig wlan0 key 1234567890
# 设置WEP密钥
iwconfig wlan0 key s:password
# 设置传输功率
iwconfig wlan0 txpower 15
# 启用/禁用接口
iwconfig wlan0 txpower on/off
iw - 无线设备配置工具
# 列出所有无线设备
iw dev
# 显示设备信息
iw dev wlan0 info
# 扫描可用网络
iw dev wlan0 scan
# 连接到网络
iw dev wlan0 connect "NetworkName"
# 断开网络
iw dev wlan0 disconnect
# 设置接口类型
iw dev wlan0 set type ibss
# 加入ad-hoc网络
iw dev wlan0 ibss join "NetworkName" 2412
# 显示链接信息
iw dev wlan0 link
# 显示站点信息
iw dev wlan0 station dump
# 设置功率保存
iw dev wlan0 set power_save on
ssh - 安全Shell客户端
# 连接到远程服务器
ssh username@hostname
# 指定端口
ssh -p 2222 username@hostname
# 使用密钥认证
ssh -i key.pem username@hostname
# 执行远程命令
ssh username@hostname "ls -la"
# 启用压缩
ssh -C username@hostname
# X11转发
ssh -X username@hostname
# 本地端口转发
ssh -L 8080:localhost:80 username@hostname
# 远程端口转发
ssh -R 8080:localhost:80 username@hostname
# 动态端口转发(SOCKS代理)
ssh -D 1080 username@hostname
# 禁用主机密钥检查
ssh -o StrictHostKeyChecking=no username@hostname
# 保持连接活动
ssh -o ServerAliveInterval=60 username@hostname
# 多跳SSH
ssh -J user1@host1 user2@host2
scp - 安全复制
# 从本地复制到远程
scp file.txt username@hostname:/remote/directory
# 从远程复制到本地
scp username@hostname:/remote/file.txt local_directory
# 指定端口
scp -P 2222 file.txt username@hostname:/remote/directory
# 复制目录(递归)
scp -r directory username@hostname:/remote/directory
# 保留文件属性
scp -p file.txt username@hostname:/remote/directory
# 限制带宽
scp -l 1000 file.txt username@hostname:/remote/directory
# 压缩传输
scp -C file.txt username@hostname:/remote/directory
# 使用密钥认证
scp -i key.pem file.txt username@hostname:/remote/directory
# 安静模式
scp -q file.txt username@hostname:/remote/directory
# 详细模式
scp -v file.txt username@hostname:/remote/directory
rsync - 远程文件同步
# 本地同步
rsync -a source/ destination/
# 远程同步(推送)
rsync -a source/ username@hostname:/remote/directory/
# 远程同步(拉取)
rsync -a username@hostname:/remote/directory/ local-dir/
# 使用SSH
rsync -a -e ssh source/ username@hostname:/remote/directory/
# 显示进度
rsync -a --progress source/ destination/
# 删除目标中多余的文件
rsync -a --delete source/ destination/
# 排除文件
rsync -a --exclude='*.txt' source/ destination/
# 包含文件
rsync -a --include='*.txt' --exclude='*' source/ destination/
# 限制带宽
rsync -a --bwlimit=1000 source/ destination/
# 只同步更新的文件
rsync -a --update source/ destination/
# 模拟运行
rsync -a --dry-run source/ destination/
# 压缩传输
rsync -az source/ destination/
lftp - 高级文件传输程序
# 连接到FTP服务器
lftp ftp://username:password@hostname
# 连接到SFTP服务器
lftp sftp://username@hostname
# 列出文件
ls
# 更改远程目录
cd remote-dir
# 更改本地目录
lcd local-dir
# 下载文件
get file.txt
# 上传文件
put file.txt
# 下载目录
mirror remote-dir
# 上传目录
mirror -R local-dir remote-dir
# 设置传输模式
set ftp:ssl-force true
# 设置并发传输
set xfer:parallel 4
# 书签管理
bookmark add myserver
# 使用书签
open myserver
# 断点续传
pget file.txt
# 队列管理
queue start
telnet - Telnet协议客户端
# 连接到服务器
telnet hostname port
# 连接到标准端口
telnet hostname
# 设置转义字符
telnet -e 'x' hostname
# 不读取.telnetrc文件
telnet -a hostname
# 8位传输
telnet -8 hostname
# 不进行本地字符处理
telnet -E hostname
# 调试模式
telnet -d hostname
# 使用行模式
telnet -l user hostname
ftp - 文件传输协议客户端
# 连接到服务器
ftp hostname
# 指定用户名
ftp -u username hostname
# 列出文件
ls
# 更改远程目录
cd remote-dir
# 更改本地目录
lcd local-dir
# 下载文件
get file.txt
# 上传文件
put file.txt
# 下载多个文件
mget *.txt
# 上传多个文件
mput *.txt
# 二进制传输模式
binary
# ASCII传输模式
ascii
# 启用/禁用交互式提示
prompt
# 退出
quit
系统监控和性能分析
top - 系统监控工具
# 运行top
top
# 批处理模式
top -b
# 指定刷新间隔(秒)
top -d 5
# 显示特定用户的进程
top -u username
# 显示特定进程
top -p 1234,5678
# 不显示闲置进程
top -i
# 显示完整命令行
top -c
# 安全模式
top -s
# 显示累计模式
top -S
# 高亮显示排序列
top -x
# 交互式命令:
# P - 按CPU使用率排序
# M - 按内存使用率排序
# T - 按运行时间排序
# k - 终止进程
# r - 重新调整进程优先级
# q - 退出
htop - 交互式进程查看器
# 启动htop
htop
# 显示树状视图
htop -t
# 显示特定用户的进程
htop -u username
# 不显示线程
htop --no-threads
# 不显示树状视图
htop --no-tree
# 延迟更新(秒)
htop -d 5
# 显示特定进程
htop -p 1234,5678
# 高亮显示变化
htop --highlight-changes=3
# 交互式命令:
# F1-F10 - 功能键
# F5 - 树状视图
# F6 - 排序
# F9 - 终止进程
# F10 - 退出
vmstat - 虚拟内存统计
# 显示当前状态
vmstat
# 每隔2秒显示一次,共5次
vmstat 2 5
# 显示内存统计
vmstat -s
# 显示磁盘统计
vmstat -d
# 显示分区统计
vmstat -p /dev/sda1
# 显示活动/非活动内存
vmstat -a
# 显示时间戳
vmstat -t
# 显示单位(MB)
vmstat -S M
# 显示详细信息
vmstat -v
iostat - I/O统计
# 显示CPU和设备统计
iostat
# 每隔2秒显示一次,共5次
iostat 2 5
# 显示扩展统计
iostat -x
# 显示CPU统计
iostat -c
# 显示设备统计
iostat -d
# 显示NFS统计
iostat -n
# 显示时间戳
iostat -t
# 显示单位(KB)
iostat -k
# 显示特定设备
iostat -p sda
mpstat - 多处理器统计
# 显示所有CPU统计
mpstat
# 每隔2秒显示一次,共5次
mpstat 2 5
# 显示特定CPU
mpstat -P 0
# 显示所有CPU单独统计
mpstat -P ALL
# 显示中断统计
mpstat -I ALL
# 显示SMP统计
mpstat -S SCPU
sar - 系统活动报告
# 显示CPU使用情况
sar
# 每隔2秒显示一次,共5次
sar 2 5
# 显示内存使用情况
sar -r
# 显示I/O和传输率统计
sar -b
# 显示分页统计
sar -B
# 显示块设备统计
sar -d
# 显示网络统计
sar -n DEV
# 显示TCP统计
sar -n TCP
# 显示特定时间范围
sar -s 10:00:00 -e 11:00:00
# 从文件读取
sar -f /var/log/sa/sa01
free - 显示内存使用情况
# 显示内存使用情况
free
# 以MB为单位显示
free -m
# 以GB为单位显示
free -g
# 以KB为单位显示
free -k
# 以人类可读格式显示
free -h
# 显示总计行
free -t
# 每隔3秒刷新一次
free -s 3
# 刷新5次
free -c 5
# 宽输出格式
free -w
df - 显示磁盘空间使用情况
# 显示所有文件系统
df
# 以人类可读格式显示
df -h
# 以KB为单位显示
df -k
# 以MB为单位显示
df -m
# 显示文件系统类型
df -T
# 显示inode信息
df -i
# 显示特定文件系统
df /dev/sda1
# 排除特定文件系统类型
df -x tmpfs
# 仅显示特定文件系统类型
df -t ext4
du - 估计文件空间使用
# 显示当前目录大小
du
# 以人类可读格式显示
du -h
# 显示总计
du -s
# 显示每个文件大小
du -a
# 显示特定目录
du /var/log
# 显示指定深度
du --max-depth=2
# 排除模式
du --exclude="*.log"
# 只统计大于指定大小的文件
du --threshold=1M
# 显示时间
du --time
lsof - 列出打开的文件
# 列出所有打开的文件
lsof
# 列出特定用户打开的文件
lsof -u username
# 列出特定进程打开的文件
lsof -p 1234
# 列出特定程序打开的文件
lsof -c nginx
# 列出特定文件的进程
lsof /var/log/syslog
# 列出特定目录的文件
lsof +D /var/log
# 列出网络连接
lsof -i
# 列出TCP端口
lsof -i TCP:80
# 列出UDP端口
lsof -i UDP:53
# 列出IPv4连接
lsof -i 4
# 列出IPv6连接
lsof -i 6
# 不解析主机名
lsof -n
# 不解析服务名
lsof -P
strace - 跟踪系统调用和信号
# 跟踪程序
strace program
# 跟踪特定进程
strace -p 1234
# 跟踪子进程
strace -f program
# 跟踪特定系统调用
strace -e open,read program
# 显示时间戳
strace -t program
# 显示相对时间戳
strace -r program
# 统计系统调用
strace -c program
# 输出到文件
strace -o output.txt program
# 显示文件描述符
strace -y program
# 显示字符串长度
strace -s 256 program
ltrace - 库调用跟踪器
# 跟踪程序
ltrace program
# 跟踪特定进程
ltrace -p 1234
# 跟踪子进程
ltrace -f program
# 显示参数值
ltrace -a program
# 统计调用
ltrace -c program
# 输出到文件
ltrace -o output.txt program
# 显示时间戳
ltrace -t program
# 显示相对时间戳
ltrace -r program
# 跟踪特定库
ltrace -l /lib/libc.so.6 program
# 显示字符串长度
ltrace -s 256 program
dstat - 系统资源统计
# 基本统计
dstat
# 指定间隔(秒)和次数
dstat 5 10
# 显示CPU统计
dstat -c
# 显示磁盘统计
dstat -d
# 显示网络统计
dstat -n
# 显示内存统计
dstat -m
# 显示进程统计
dstat -p
# 显示I/O统计
dstat -i
# 显示负载统计
dstat -l
# 显示全部统计
dstat -a
# 显示时间戳
dstat -t
# 输出到CSV
dstat --output file.csv
nmon - 系统监控工具
# 启动nmon
nmon
# 捕获模式
nmon -f -s 30 -c 120
# 指定文件名
nmon -F filename.nmon
# 显示特定统计信息
nmon -c
# 在线帮助
nmon -h
# 交互式命令:
# c - CPU统计
# m - 内存统计
# d - 磁盘统计
# n - 网络统计
# t - 最耗CPU的进程
# q - 退出
iotop - I/O监控
# 启动iotop
iotop
# 只显示实际执行I/O的进程
iotop -o
# 批处理模式
iotop -b
# 非交互模式,只打印一次
iotop -n 1
# 指定延迟(秒)
iotop -d 5
# 只显示特定用户的进程
iotop -u username
# 只显示特定进程
iotop -p 1234,5678
# 累计模式
iotop -a
# 只显示进程
iotop -P
# 只显示线程
iotop -t
sysstat工具集
# 收集系统活动信息
sadc 1 10 output.file
# 系统活动报告
sar -f output.file
# 显示每日系统活动
sa1
# 生成每日系统活动报告
sa2
# 配置文件
/etc/sysconfig/sysstat
perf - 性能分析工具
# 列出事件
perf list
# 记录系统范围的性能数据
perf record -a sleep 10
# 记录特定进程
perf record -p 1234 sleep 10
# 记录特定命令
perf record command
# 记录CPU周期
perf record -e cycles command
# 记录缓存未命中
perf record -e cache-misses command
# 报告记录的数据
perf report
# 实时统计
perf stat command
# 实时统计特定事件
perf stat -e cycles,instructions command
# 显示调用图
perf report --call-graph
slabtop - 内核slab缓存信息
# 显示slab缓存信息
slabtop
# 指定延迟(秒)
slabtop -d 5
# 只显示一次
slabtop -o
# 排序方式(按大小)
slabtop -s b
# 排序方式(按数量)
slabtop -s a
# 排序方式(按名称)
slabtop -s n
collectl - 系统性能监控
# 显示摘要数据
collectl
# 实时监控
collectl -c 5
# 记录到文件
collectl -f /tmp/data
# 显示CPU信息
collectl -s C
# 显示磁盘信息
collectl -s D
# 显示网络信息
collectl -s N
# 显示内存信息
collectl -s M
# 显示进程信息
collectl -s Z
# 详细输出
collectl -v
# 显示所有子系统
collectl -all
# 启动atop
atop
# 指定间隔(秒)
atop 5
# 写入日志文件
atop -w /tmp/atop.log 60
# 读取日志文件
atop -r /tmp/atop.log
# 显示特定日期的日志
atop -r /var/log/atop/atop_20230101
# 显示特定进程
atop -p
# 显示磁盘活动
atop -d
# 显示内存活动
atop -m
# 显示网络活动
atop -n
# 显示调度活动
atop -s
# 显示各种活动
atop -a
# 交互式命令:
# g - 通用资源视图
# m - 内存视图
# d - 磁盘视图
# n - 网络视图
# c - 命令行视图
# p - 按CPU排序
# M - 按内存排序
# D - 按磁盘排序
# q - 退出
glances - 系统监控工具
# 启动glances
glances
# 客户端/服务器模式
glances -s # 服务器
glances -c SERVER_IP # 客户端
# Web服务器模式
glances -w
# 输出到CSV
glances --export csv --export-csv-file /tmp/glances.csv
# 输出到InfluxDB
glances --export influxdb
# 显示文件系统
glances --fs-free-space
# 禁用网络接口
glances --disable-network
# 指定刷新间隔(秒)
glances -t 5
# 批处理模式
glances -B
# 全屏显示
glances -f
netstat - 网络连接统计
# 显示所有连接
netstat -a
# 显示监听端口
netstat -l
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示进程信息
netstat -p
# 不解析主机名
netstat -n
# 持续显示
netstat -c
# 显示路由表
netstat -r
# 显示接口统计
netstat -i
# 显示网络统计
netstat -s
# 显示特定端口
netstat -an | grep :80
ss - 套接字统计
# 显示所有连接
ss
# 显示监听端口
ss -l
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示进程信息
ss -p
# 不解析服务名
ss -n
# 显示详细信息
ss -e
# 显示内存使用
ss -m
# 显示计时器信息
ss -o
# 显示特定端口
ss -an '( dport = :80 or sport = :80 )'
# 显示状态为已建立的连接
ss -o state established
# 显示所有TCP连接
ss -s
ps - 进程状态
# 显示所有进程
ps -e
# 显示完整格式
ps -ef
# 显示BSD格式
ps aux
# 显示进程树
ps -ejH
# 显示线程
ps -eLf
# 显示特定用户的进程
ps -u username
# 显示特定进程
ps -p 1234
# 按CPU使用率排序
ps -aux --sort=-%cpu
# 按内存使用率排序
ps -aux --sort=-%mem
# 自定义输出格式
ps -eo pid,user,cmd
pstree - 以树状显示进程
# 显示进程树
pstree
# 显示PID
pstree -p
# 显示用户
pstree -u
# 显示命令行参数
pstree -a
# 高亮显示当前进程
pstree -h
# 显示特定进程
pstree -p 1234
# 不显示相同进程
pstree -c
# 显示线程
pstree -t
pmap - 进程内存映射
# 显示进程内存映射
pmap 1234
# 显示设备格式
pmap -d 1234
# 显示扩展格式
pmap -x 1234
# 显示详细格式
pmap -XX 1234
uptime - 系统运行时间和负载
# 显示系统运行时间和负载
uptime
# 显示自上次启动以来的秒数
uptime -p
# 显示系统启动时间
uptime -s
w - 显示登录用户和活动
# 显示登录用户和活动
w
# 显示简短格式
w -s
# 显示登录来源IP
w -i
# 显示特定用户
w username
who - 显示当前登录用户
# 显示当前登录用户
who
# 显示运行级别
who -r
# 显示启动时间
who -b
# 显示死进程
who -d
# 显示系统登录进程
who -l
last - 显示登录历史
# 显示登录历史
last
# 显示特定用户
last username
# 显示特定数量
last -n 10
# 显示IP地址
last -i
# 显示系统重启
last reboot
# 显示系统关机
last shutdown
iftop - 网络带宽监控
# 监控特定接口
iftop -i eth0
# 不解析主机名
iftop -n
# 不显示端口号
iftop -P
# 不显示栏
iftop -B
# 显示端口号
iftop -N
# 显示源端口
iftop -S
# 设置过滤器
iftop -f 'port http'
# 设置刷新间隔
iftop -t
# 显示方向箭头
iftop -a
nethogs - 按进程显示网络流量
# 启动nethogs
nethogs
# 监控特定接口
nethogs eth0
# 设置刷新间隔(秒)
nethogs -d 5
# 跟踪特定设备
nethogs eth0 wlan0
# 显示特定协议
nethogs -p tcp
iptraf - 交互式网络监控
# 启动iptraf
iptraf-ng
# 监控特定接口
iptraf-ng -i eth0
# 显示IP流量监控
iptraf-ng -s eth0
# 显示详细接口统计
iptraf-ng -d eth0
# 显示TCP/UDP统计
iptraf-ng -z eth0
bmon - 带宽监控
# 启动bmon
bmon
# 监控特定接口
bmon -p eth0
# 设置刷新间隔
bmon -r 5
# 使用特定输出模块
bmon -o curses
# 使用特定输入模块
bmon -i proc
nload - 网络流量监控
# 启动nload
nload
# 监控特定设备
nload eth0
# 设置刷新间隔(毫秒)
nload -t 500
# 设置平均值计算间隔(秒)
nload -a 60
# 设置单位(K=1000, k=1024)
nload -u K
vnstat - 网络流量监控
# 显示所有接口统计
vnstat
# 显示特定接口
vnstat -i eth0
# 显示小时统计
vnstat -h
# 显示天统计
vnstat -d
# 显示月统计
vnstat -m
# 显示周统计
vnstat -w
# 显示最高流量
vnstat -t
# 实时监控
vnstat -l
# 更新数据库
vnstat -u
sysdig - 系统活动捕获
# 捕获系统事件
sysdig
# 写入文件
sysdig -w file.scap
# 读取文件
sysdig -r file.scap
# 过滤事件
sysdig proc.name=nginx
# 列出字段
sysdig -l
# 列出事件
sysdig -L
# 查看容器活动
sysdig -pc
# 显示进程活动
sysdig -p"%proc.name %proc.pid %evt.type"
# 显示网络连接
sysdig -c netstat
# 显示最耗CPU的进程
sysdig -c topprocs_cpu
stress - 系统压力测试
# CPU压力测试
stress --cpu 4
# 内存压力测试
stress --vm 2 --vm-bytes 1G
# I/O压力测试
stress --io 4
# 硬盘压力测试
stress --hdd 2 --hdd-bytes 1G
# 超时设置(秒)
stress --timeout 60s
# 组合压力测试
stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 60s
stress-ng - 高级系统压力测试
# CPU压力测试
stress-ng --cpu 4 --timeout 60s
# 内存压力测试
stress-ng --vm 2 --vm-bytes 1G --timeout 60s
# I/O压力测试
stress-ng --io 4 --timeout 60s
# 磁盘压力测试
stress-ng --hdd 2 --hdd-bytes 1G --timeout 60s
# 缓存压力测试
stress-ng --cache 2 --timeout 60s
# 网络压力测试
stress-ng --sock 4 --timeout 60s
# 文件系统压力测试
stress-ng --filesystem 2 --timeout 60s
# 多种压力测试
stress-ng --cpu 2 --vm 1 --io 1 --timeout 60s
# 显示详细统计
stress-ng --metrics-brief
# 随机压力测试
stress-ng --random 8 --timeout 60s
sysbench - 系统基准测试
# CPU基准测试
sysbench cpu run
# 内存基准测试
sysbench memory run
# 文件I/O基准测试
sysbench fileio --file-test-mode=rndrw prepare
sysbench fileio --file-test-mode=rndrw run
sysbench fileio --file-test-mode=rndrw cleanup
# 线程基准测试
sysbench threads run
# 互斥基准测试
sysbench mutex run
# MySQL基准测试
sysbench oltp_read_write --mysql-user=root --mysql-password=password prepare
sysbench oltp_read_write --mysql-user=root --mysql-password=password run
sysbench oltp_read_write --mysql-user=root --mysql-password=password cleanup
# 自定义参数
sysbench cpu --cpu-max-prime=20000 run
# 多线程测试
sysbench cpu --threads=4 run
# 指定测试时间(秒)
sysbench cpu --time=60 run
fio - I/O基准测试
# 随机读测试
fio --name=random-read --ioengine=libaio --direct=1 --bs=4k --size=1G --numjobs=4 --rw=randread
# 随机写测试
fio --name=random-write --ioengine=libaio --direct=1 --bs=4k --size=1G --numjobs=4 --rw=randwrite
# 顺序读测试
fio --name=sequential-read --ioengine=libaio --direct=1 --bs=1M --size=1G --numjobs=4 --rw=read
# 顺序写测试
fio --name=sequential-write --ioengine=libaio --direct=1 --bs=1M --size=1G --numjobs=4 --rw=write
# 混合读写测试
fio --name=mixed --ioengine=libaio --direct=1 --bs=4k --size=1G --numjobs=4 --rw=randrw --rwmixread=70
# 使用作业文件
fio fio_job_file.fio
# 指定输出格式
fio --output-format=json --name=test --ioengine=libaio --direct=1 --bs=4k --size=1G --rw=randread
# 指定运行时间
fio --runtime=60 --time_based --name=test --ioengine=libaio --direct=1 --bs=4k --size=1G --rw=randread
# 多种I/O引擎
fio --name=test --ioengine=sync --bs=4k --size=1G --rw=randread
# 多种I/O深度
fio --name=test --ioengine=libaio --iodepth=16 --bs=4k --size=1G --rw=randread
# 指定CPU亲和性
fio --name=test --cpus_allowed=0-1 --bs=4k --size=1G --rw=randread
# 验证数据完整性
fio --name=test --verify=md5 --bs=4k --size=1G --rw=randwrite
bonnie++ - 文件系统基准测试
# 基本测试
bonnie++
# 指定测试目录
bonnie++ -d /tmp/bonnie
# 指定测试大小
bonnie++ -s 8G
# 指定用户名
bonnie++ -u root
# 指定数量
bonnie++ -n 10:100:10:20
# CSV输出
bonnie++ -f
# 跳过每字符I/O测试
bonnie++ -b
# 不缓冲I/O
bonnie++ -D
hdparm - 硬盘参数工具
# 显示设备信息
hdparm -i /dev/sda
# 显示详细信息
hdparm -I /dev/sda
# 测试读取速度
hdparm -t /dev/sda
# 测试缓存读取速度
hdparm -T /dev/sda
# 获取高级电源管理
hdparm -B /dev/sda
# 设置高级电源管理
hdparm -B 254 /dev/sda
# 获取安全擦除时间
hdparm -I /dev/sda | grep -i erase
# 启用DMA
hdparm -d1 /dev/sda
# 设置传输模式
hdparm -X66 /dev/sda
# 获取设备参数
hdparm -g /dev/sda
smartctl - S.M.A.R.T. 硬盘监控
# 显示设备信息
smartctl -i /dev/sda
# 显示健康状态
smartctl -H /dev/sda
# 显示所有SMART数据
smartctl -a /dev/sda
# 显示错误日志
smartctl -l error /dev/sda
# 显示自测试日志
smartctl -l selftest /dev/sda
# 启动短期自测试
smartctl -t short /dev/sda
# 启动长期自测试
smartctl -t long /dev/sda
# 启动传输测试
smartctl -t conveyance /dev/sda
# 启用SMART
smartctl -s on /dev/sda
# 显示支持的功能
smartctl -c /dev/sda
blktrace - 块I/O层跟踪
# 跟踪设备
blktrace -d /dev/sda -o trace
# 指定输出目录
blktrace -d /dev/sda -o trace -D /tmp
# 设置缓冲区大小
blktrace -d /dev/sda -b 4096
# 设置缓冲区数量
blktrace -d /dev/sda -n 4
# 设置跟踪时间(秒)
blktrace -d /dev/sda -w 60
# 分析跟踪文件
blkparse -i trace
# 生成I/O统计
blkparse -i trace -d trace.bin
# 查看I/O统计
btt -i trace.bin
oprofile - 系统范围的性能分析器
# 启动守护进程
operf
# 收集特定命令的数据
operf command
# 收集特定PID的数据
operf --pid=1234
# 收集系统范围的数据
operf --system-wide
# 设置事件
operf --events=CPU_CLK_UNHALTED:100000
# 生成报告
opreport
# 显示详细报告
opreport -l
# 按符号排序
opreport --symbols
# 显示调用图
opreport --callgraph
# 显示特定二进制文件的报告
opreport /path/to/binary
valgrind - 内存调试和分析工具
# 内存泄漏检测
valgrind --leak-check=full ./program
# 内存使用分析
valgrind --tool=massif ./program
# 缓存分析
valgrind --tool=cachegrind ./program
# 堆分析
valgrind --tool=heap-profiler ./program
# 线程错误检测
valgrind --tool=helgrind ./program
# 详细输出
valgrind -v ./program
# 保存输出到文件
valgrind --log-file=valgrind.log ./program
# 显示泄漏摘要
valgrind --leak-check=summary ./program
# 跟踪子进程
valgrind --trace-children=yes ./program
# 显示调用栈
valgrind --num-callers=20 ./program
gprof - GNU分析器
# 编译支持分析的程序
gcc -pg -o program program.c
# 运行程序
./program
# 生成分析报告
gprof ./program gmon.out > report.txt
# 显示调用图
gprof -A ./program gmon.out
# 显示平面配置文件
gprof -p ./program gmon.out
# 显示调用者/被调用者图
gprof -q ./program gmon.out
# 按函数名排序
gprof -N ./program gmon.out
# 按文件名排序
gprof -i ./program gmon.out
tcpdump - 网络数据包分析器
# 捕获特定接口的数据包
tcpdump -i eth0
# 捕获特定主机的数据包
tcpdump host 192.168.1.1
# 捕获特定端口的数据包
tcpdump port 80
# 捕获TCP数据包
tcpdump tcp
# 捕获UDP数据包
tcpdump udp
# 捕获ICMP数据包
tcpdump icmp
# 保存捕获到文件
tcpdump -w capture.pcap
# 读取捕获文件
tcpdump -r capture.pcap
# 显示详细信息
tcpdump -v
# 显示数据包内容
tcpdump -X
# 不解析主机名
tcpdump -n
# 不解析端口名
tcpdump -nn
# 限制捕获数量
tcpdump -c 100
# 组合过滤器
tcpdump 'tcp and port 80 and host 192.168.1.1'
wireshark/tshark - 网络协议分析器
# 捕获特定接口的数据包
tshark -i eth0
# 捕获特定主机的数据包
tshark -f "host 192.168.1.1"
# 捕获特定端口的数据包
tshark -f "port 80"
# 保存捕获到文件
tshark -w capture.pcap
# 读取捕获文件
tshark -r capture.pcap
# 显示特定字段
tshark -T fields -e ip.src -e ip.dst
# 显示统计信息
tshark -z io,stat,1
# 显示HTTP请求
tshark -Y "http.request"
# 显示DNS查询
tshark -Y "dns.flags.response == 0"
# 显示TCP SYN数据包
tshark -Y "tcp.flags.syn == 1"
# 限制捕获数量
tshark -c 100
# 显示协议层次结构
tshark -V
ngrep - 网络数据包内容搜索
# 搜索HTTP数据包
ngrep -q -d eth0 "^GET|^POST" tcp port 80
# 忽略大小写
ngrep -i "error" tcp port 80
# 显示十六进制和ASCII输出
ngrep -x "login" tcp port 80
# 显示扩展信息
ngrep -W byline "password" tcp port 80
# 保存匹配到文件
ngrep -O /tmp/output.txt "user" tcp port 80
# 从文件读取
ngrep -I capture.pcap "admin"
# 显示BPF过滤器
ngrep -d eth0 -e "GET" tcp port 80
mtr - 网络诊断工具
# 跟踪到主机
mtr google.com
# 报告模式
mtr -r google.com
# 指定报告循环次数
mtr -r -c 10 google.com
# 指定包大小
mtr -s 1000 google.com
# 使用TCP SYN
mtr -T google.com
# 使用UDP
mtr -u google.com
# 使用ICMP
mtr -4 google.com
# 指定间隔(秒)
mtr -i 0.5 google.com
# 显示IP地址
mtr -n google.com
# 显示ASN信息
mtr -z google.com
traceroute - 路由跟踪
# 跟踪到主机
traceroute google.com
# 指定接口
traceroute -i eth0 google.com
# 不解析主机名
traceroute -n google.com
# 使用TCP
traceroute -T google.com
# 使用UDP
traceroute -U google.com
# 使用ICMP
traceroute -I google.com
# 指定端口
traceroute -p 80 google.com
# 指定最大跳数
traceroute -m 30 google.com
# 指定超时(秒)
traceroute -w 5 google.com
# 指定源地址
traceroute -s 192.168.1.10 google.com
ping - 网络连通性测试
# 测试连通性
ping google.com
# 指定次数
ping -c 5 google.com
# 指定间隔(秒)
ping -i 2 google.com
# 指定超时(秒)
ping -W 2 google.com
# 指定包大小
ping -s 1000 google.com
# 洪水ping
ping -f google.com
# 不解析主机名
ping -n google.com
# 指定接口
ping -I eth0 google.com
# 指定TTL
ping -t 64 google.com
# 静默输出
ping -q google.com
# TCP SYN扫描
hping3 -S -p 80 target.com
# TCP端口扫描
hping3 -S --scan 1-100 target.com
# UDP扫描
hping3 -2 -p 53 target.com
# ICMP ping
hping3 -1 target.com
# 发送自定义TCP标志
hping3 -SAFRUP -p 80 target.com
# 指定源端口
hping3 -S -p 80 -s 53 target.com
# 指定源IP
hping3 -S -p 80 -a spoofed.ip.addr target.com
# 发送自定义数据
hping3 -S -p 80 -d 100 target.com
# 指定间隔时间(毫秒)
hping3 -S -p 80 -i u1000 target.com
# 监听模式
hping3 -9 HTTP --listen signature
ab - Apache HTTP服务器基准测试工具
# 发送100个请求,并发10个
ab -n 100 -c 10 http://example.com/
# 测试10秒
ab -t 10 -c 10 http://example.com/
# 显示响应时间分布
ab -n 100 -c 10 -e results.csv http://example.com/
# 显示每个请求的状态码
ab -v 2 -n 100 -c 10 http://example.com/
# 使用HTTP头
ab -H "Accept-Encoding: gzip" -n 100 -c 10 http://example.com/
# 使用HTTP认证
ab -A username:password -n 100 -c 10 http://example.com/
# 使用代理
ab -X proxy:port -n 100 -c 10 http://example.com/
# POST请求
ab -p post.txt -T application/x-www-form-urlencoded -n 100 -c 10 http://example.com/
# 使用Cookie
ab -C "name=value" -n 100 -c 10 http://example.com/
# 不显示进度
ab -q -n 100 -c 10 http://example.com/
wrk - HTTP基准测试工具
# 运行基准测试
wrk -t12 -c400 -d30s http://example.com/
# 指定线程数
wrk -t4 http://example.com/
# 指定连接数
wrk -c100 http://example.com/
# 指定持续时间
wrk -d60s http://example.com/
# 使用脚本
wrk -s script.lua http://example.com/
# 使用HTTP头
wrk -H "User-Agent: wrk" http://example.com/
# 延迟统计
wrk --latency http://example.com/
# 超时设置
wrk -t2 -c100 --timeout 2s http://example.com/
# 使用HTTPS
wrk https://example.com/
siege - HTTP负载测试和基准测试工具
# 并发用户数
siege -c 25 http://example.com/
# 指定时间
siege -t 1m http://example.com/
# 指定重复次数
siege -r 100 http://example.com/
# 使用URL文件
siege -f urls.txt
# 随机URL
siege -i -f urls.txt
# 延迟时间
siege -d 10 http://example.com/
# 详细输出
siege -v http://example.com/
# 记录日志
siege -l -c 25 http://example.com/
# 互联网模式
siege -i -c 25 http://example.com/
# 基准测试模式
siege -b -c 25 http://example.com/
h2load - HTTP/2 负载测试工具
# 基本测试
h2load https://example.com/
# 指定并发客户端数
h2load -c 10 https://example.com/
# 指定总请求数
h2load -n 100 https://example.com/
# 指定每个客户端的请求数
h2load -m 10 https://example.com/
# 指定线程数
h2load -t 4 https://example.com/
# 指定超时(秒)
h2load -T 5 https://example.com/
# 指定预热时间(秒)
h2load -W 2 https://example.com/
# 指定连接窗口大小
h2load -w 65535 https://example.com/
# 指定头部
h2load -H "User-Agent: h2load" https://example.com/
# 指定请求方法
h2load -m POST https://example.com/
jmeter - Java应用负载测试工具
# 启动GUI
jmeter
# 运行测试计划
jmeter -n -t test.jmx
# 生成报告
jmeter -n -t test.jmx -l results.jtl -e -o report
# 指定属性
jmeter -n -t test.jmx -Jproperty=value
# 指定JMeter属性文件
jmeter -n -t test.jmx -p jmeter.properties
# 指定系统属性
jmeter -n -t test.jmx -D system.property=value
# 远程测试
jmeter -n -t test.jmx -R host1,host2
# 指定日志文件
jmeter -n -t test.jmx -j jmeter.log
# 指定JTL文件
jmeter -n -t test.jmx -l results.jtl
perf - Linux性能分析工具
# 列出事件
perf list
# 分析命令
perf stat command
# 记录性能数据
perf record command
# 记录特定事件
perf record -e cpu-clock command
# 报告性能数据
perf report
# 实时分析
perf top
# 分析特定PID
perf record -p 1234
# 分析特定CPU
perf record -C 0 command
# 分析调用图
perf record -g command
# 分析内核函数
perf record -k 1 command
strace - 跟踪系统调用和信号
# 跟踪命令
strace command
# 跟踪特定进程
strace -p 1234
# 跟踪子进程
strace -f command
# 跟踪特定系统调用
strace -e open,read,write command
# 统计系统调用
strace -c command
# 显示时间戳
strace -t command
# 显示相对时间戳
strace -r command
# 保存输出到文件
strace -o output.txt command
# 显示文件描述符
strace -y command
# 显示字符串长度
strace -s 256 command
ltrace - 库调用跟踪
# 跟踪命令
ltrace command
# 跟踪特定进程
ltrace -p 1234
# 跟踪子进程
ltrace -f command
# 跟踪特定库调用
ltrace -e malloc+free command
# 统计库调用
ltrace -c command
# 显示时间戳
ltrace -t command
# 显示相对时间戳
ltrace -r command
# 保存输出到文件
ltrace -o output.txt command
# 显示参数详情
ltrace -a 10 command
# 显示字符串长度
ltrace -s 256 command
ftrace - 函数跟踪器
# 启用跟踪器
echo function > /sys/kernel/debug/tracing/current_tracer
# 设置跟踪函数
echo schedule > /sys/kernel/debug/tracing/set_ftrace_filter
# 启用函数图跟踪器
echo function_graph > /sys/kernel/debug/tracing/current_tracer
# 启用跟踪
echo 1 > /sys/kernel/debug/tracing/tracing_on
# 禁用跟踪
echo 0 > /sys/kernel/debug/tracing/tracing_on
# 清除跟踪缓冲区
echo > /sys/kernel/debug/tracing/trace
# 查看跟踪输出
cat /sys/kernel/debug/tracing/trace
# 设置跟踪缓冲区大小
echo 4096 > /sys/kernel/debug/tracing/buffer_size_kb
bpftrace - Linux eBPF跟踪语言
# 单行程序
bpftrace -e 'BEGIN { printf("Hello, World!\n"); }'
# 跟踪系统调用
bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'
# 跟踪函数调用
bpftrace -e 'kprobe:do_sys_open { printf("%s %s\n", comm, str(arg1)); }'
# 跟踪用户空间函数
bpftrace -e 'uprobe:/bin/bash:readline { printf("readline() called\n"); }'
# 统计系统调用
bpftrace -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }'
# 显示直方图
bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret > 0/ { @bytes = hist(args->ret); }'
# 使用脚本文件
bpftrace script
系统监控和性能分析
BCC - BPF编译器集合
# 跟踪系统调用
execsnoop
# 跟踪文件打开
opensnoop
# 跟踪TCP连接
tcpconnect
# 跟踪块I/O
biosnoop
# 跟踪页面缓存
cachestat
# 跟踪文件系统缓存
cachetop
# 跟踪CPU使用情况
profile
# 跟踪内存泄漏
memleak
# 跟踪网络数据包
trace 'net:netif_receive_skb "len=%d", len'
# 跟踪内核函数
trace 'do_sys_open "%s", arg2'
sysdig - 系统活动监控
# 捕获系统事件
sysdig
# 保存到文件
sysdig -w capture.scap
# 读取捕获文件
sysdig -r capture.scap
# 过滤进程
sysdig proc.name=nginx
# 过滤系统调用
sysdig evt.type=open
# 过滤文件
sysdig fd.name contains /etc/passwd
# 显示容器信息
sysdig -pc
# 显示网络连接
sysdig -c netstat
# 显示系统调用统计
sysdig -c topscalls
# 显示I/O统计
sysdig -c topfiles
DTrace - 动态跟踪框架
# 跟踪系统调用
dtrace -n 'syscall:::entry { @[probefunc] = count(); }'
# 跟踪进程执行
dtrace -n 'proc:::exec-success { trace(execname); }'
# 跟踪文件I/O
dtrace -n 'io:::start { printf("%s %s\n", execname, args[2]->fi_pathname); }'
# 跟踪函数调用
dtrace -n 'pid$target::function:entry { @[probefunc] = count(); }' -p PID
# 跟踪用户堆栈
dtrace -n 'syscall:::entry { @[ustack()] = count(); }'
# 跟踪内核堆栈
dtrace -n 'syscall:::entry { @[stack()] = count(); }'
# 显示直方图
dtrace -n 'syscall::read:return { @["read size"] = quantize(arg0); }'
# 按时间聚合
dtrace -n 'profile:::tick-1sec { @["syscalls per second"] = count(); }'
SystemTap - 诊断和监控工具
# 跟踪系统调用
stap -e 'probe syscall.* { printf("%s -> %s\n", execname(), probefunc()) }'
# 跟踪特定进程
stap -e 'probe syscall.* { if (pid() == 1234) printf("%s\n", probefunc()) }'
# 跟踪函数调用
stap -e 'probe kernel.function("*") { printf("%s\n", probefunc()) }'
# 跟踪函数返回
stap -e 'probe kernel.function("*").return { printf("%s return\n", probefunc()) }'
# 统计系统调用
stap -e 'global calls; probe syscall.* { calls[probefunc()]++ } probe timer.s(5) { foreach (i in calls+) printf("%s: %d\n", i, calls[i]); exit() }'
# 跟踪内存分配
stap -e 'probe kernel.function("kmalloc") { printf("%s allocates %d bytes\n", execname(), $size) }'
# 跟踪网络数据包
stap -e 'probe netfilter.ip.local_in { printf("incoming packet: %s\n", ip_daddr_string()) }'
性能监控最佳实践
基线监控
- 在系统负载正常时收集性能数据
- 建立关键指标的基准值
- 定期更新基准以反映系统变化
分层监控方法
- 硬件层: CPU、内存、磁盘、网络
- 操作系统层: 进程、线程、系统调用
- 应用层: 应用特定指标、响应时间
- 服务层: 端到端性能、用户体验
警报设置
- 基于基准值和历史趋势设置阈值
- 避免警报疲劳,设置合理的阈值
- 实施分级警报系统
- 关注异常模式而非单一指标
性能数据可视化
- 使用仪表板展示关键指标
- 将相关指标分组显示
- 显示历史趋势和预测
- 支持钻取功能以便深入分析
性能调优策略
- 识别瓶颈: CPU、内存、I/O、网络
- 逐步调整: 一次只改变一个参数
- 验证改进: 使用基准测试验证调整效果
- 文档记录: 记录所有更改及其影响
资源规划
- 基于历史趋势预测资源需求
- 考虑业务增长和季节性变化
- 定期审查资源分配
- 实施自动扩展策略
持续改进
- 定期审查监控策略
- 更新监控工具和技术
- 根据新出现的问题调整监控范围
- 与开发团队合作优化应用性能
通过掌握这些系统监控和性能分析工具,Linux系统管理员和开发人员可以全面了解系统行为,快速识别性能瓶颈,并有效优化系统性能。从基本的资源监控到深入的系统调用跟踪,这些工具提供了不同层次的可见性,帮助解决从简单到复杂的性能问题。
记住,性能分析是一个迭代过程,需要不断学习和实践。随着系统复杂性的增加,熟练使用这些工具并理解它们提供的数据变得越来越重要。通过系统的方法和适当的工具选择,可以确保系统以最佳状态运行,满足业务需求。