目录

  1. 文件操作命令
  2. 文件查看命令
  3. 系统管理命令
  4. 网络相关命令
  5. 用户管理命令
  6. 权限管理命令
  7. 压缩与解压缩命令
  8. 搜索命令
  9. 进程管理命令
  10. 磁盘管理命令
  11. 文本处理命令
  12. Shell编程常用命令

文件操作命令

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&param2=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&param2=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()) }'

性能监控最佳实践

  1. 基线监控


    • 在系统负载正常时收集性能数据
    • 建立关键指标的基准值
    • 定期更新基准以反映系统变化
  2. 分层监控方法


    • 硬件层: CPU、内存、磁盘、网络
    • 操作系统层: 进程、线程、系统调用
    • 应用层: 应用特定指标、响应时间
    • 服务层: 端到端性能、用户体验
  3. 警报设置


    • 基于基准值和历史趋势设置阈值
    • 避免警报疲劳,设置合理的阈值
    • 实施分级警报系统
    • 关注异常模式而非单一指标
  4. 性能数据可视化


    • 使用仪表板展示关键指标
    • 将相关指标分组显示
    • 显示历史趋势和预测
    • 支持钻取功能以便深入分析
  5. 性能调优策略


    • 识别瓶颈: CPU、内存、I/O、网络
    • 逐步调整: 一次只改变一个参数
    • 验证改进: 使用基准测试验证调整效果
    • 文档记录: 记录所有更改及其影响
  6. 资源规划


    • 基于历史趋势预测资源需求
    • 考虑业务增长和季节性变化
    • 定期审查资源分配
    • 实施自动扩展策略
  7. 持续改进


    • 定期审查监控策略
    • 更新监控工具和技术
    • 根据新出现的问题调整监控范围
    • 与开发团队合作优化应用性能


通过掌握这些系统监控和性能分析工具,Linux系统管理员和开发人员可以全面了解系统行为,快速识别性能瓶颈,并有效优化系统性能。从基本的资源监控到深入的系统调用跟踪,这些工具提供了不同层次的可见性,帮助解决从简单到复杂的性能问题。

记住,性能分析是一个迭代过程,需要不断学习和实践。随着系统复杂性的增加,熟练使用这些工具并理解它们提供的数据变得越来越重要。通过系统的方法和适当的工具选择,可以确保系统以最佳状态运行,满足业务需求。

标签: none