运维知识
悠悠
2025年3月28日

Linux常用命令汇总

目录

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

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

文章目录

博主介绍

热爱技术的云计算运维工程师,Python全栈工程师,分享开发经验与生活感悟。
欢迎关注我的微信公众号@运维躬行录,领取海量学习资料

微信二维码