一、文件与目录操作
1. 文件列表命令 (ls)
ls [选项] [目录名] 常用选项: -a, --all # 显示所有文件,包括隐藏文件(以.开头的文件) -l # 使用长列表格式显示详细信息 -h, --human-readable # 以人类可读的格式显示文件大小(如1K, 234M, 2G) -r, --reverse # 反向排序 -t # 按修改时间排序(最新修改的排前面) -S # 按文件大小排序 -R # 递归显示子目录内容 --color=auto # 彩色显示不同类型文件(默认) --group-directories-first # 目录优先显示
示例:
ls -lhtr /var/log # 按时间反向排序,显示/var/log目录的详细内容 ls -la ~ # 显示家目录所有文件(包括隐藏文件) ls -lR /etc # 递归显示/etc目录下所有内容
2. 目录切换命令 (cd)
cd [目录路径] 特殊路径: ~ # 当前用户的家目录 ~user # 指定用户的家目录 - # 返回上一个工作目录 .. # 上级目录 ../.. # 上两级目录 环境变量: $HOME # 当前用户家目录 $OLDPWD # 上一个工作目录路径
示例:
cd /usr/local/bin # 切换到绝对路径 cd ../src # 切换到上级目录的src子目录 cd ~/Documents # 切换到当前用户Documents目录 cd - # 返回上一个工作目录
3. 显示当前目录 (pwd)
pwd [选项] 选项: -P # 显示实际物理路径(解析符号链接) -L # 显示逻辑路径(默认) 示例: pwd -P # 如果当前在符号链接目录,显示实际路径
4. 创建目录 (mkdir)
mkdir [选项] 目录名... 选项: -p, --parents # 创建多级目录,自动创建不存在的父目录 -m, --mode=MODE # 设置目录权限(如mkdir -m 755 dir) -v, --verbose # 显示创建过程信息 示例: mkdir -pv project/{src,bin,doc} # 创建project目录和三个子目录 mkdir -m 750 private_dir # 创建权限为750的目录
5. 删除目录 (rmdir/rm)
# 删除空目录 rmdir [选项] 目录名... 选项: -p, --parents # 删除目录及其空的父目录 -v, --verbose # 显示删除过程信息 # 删除非空目录(使用rm) rm -r 目录名 # 递归删除目录及其内容 rm -rf 目录名 # 强制递归删除,不提示 示例: rmdir -pv dir1/dir2 # 删除dir2,如果dir1为空也删除 rm -ri dir # 交互式递归删除,删除前询问
6. 复制文件/目录 (cp)
cp [选项] 源文件... 目标文件 常用选项: -a, --archive # 归档模式,保留所有文件属性(等于-dpR) -r, -R, --recursive # 递归复制目录 -i, --interactive # 覆盖前询问 -u, --update # 只复制源文件中更新时间较新的文件 -v, --verbose # 显示复制过程 -p # 保留文件属性(模式、所有权、时间戳) --preserve=属性列表 # 保留指定属性(mode,ownership,timestamps等) --backup=方式 # 若需覆盖文件,进行备份(none,off,numbered,t,simple,never) 示例: cp -a /etc /backup/etc_bak # 完整备份/etc目录 cp -u *.txt ~/Documents/ # 只复制更新的文本文件 cp -iv source.txt dest.txt # 交互式复制,显示详细信息
7. 移动/重命名文件 (mv)
mv [选项] 源文件... 目标文件 选项: -i, --interactive # 覆盖前询问 -f, --force # 强制覆盖,不询问 -n, --no-clobber # 不覆盖已存在文件 -u, --update # 只移动更新的文件 -v, --verbose # 显示移动过程 --backup=方式 # 覆盖前备份(同cp) 示例: mv -i oldname newname # 重命名文件(交互式) mv -v *.pdf ~/Documents/ # 移动所有PDF文件并显示过程 mv --backup=numbered file.txt dir/ # 移动文件,如有冲突创建编号备份
8. 删除文件/目录 (rm)
rm [选项] 文件... 选项: -f, --force # 强制删除,忽略不存在的文件,不提示 -i # 删除前逐一询问确认 -I # 删除超过3个文件或递归删除时提示一次 -r, -R, --recursive # 递归删除目录及其内容 -d, --dir # 删除空目录 -v, --verbose # 显示删除过程 示例: rm -i *.tmp # 交互式删除所有tmp文件 rm -rf obsolete/ # 强制递归删除整个目录 find . -name "*.bak" -exec rm -v {} + # 查找并删除所有.bak文件
二、文件查看与编辑
1. 查看文件内容 (cat)
cat [选项] [文件]... 选项: -n, --number # 显示行号 -b, --number-nonblank # 对非空行编号 -s, --squeeze-blank # 压缩连续空行为一行 -E, --show-ends # 在行尾显示$符号 -T, --show-tabs # 将TAB显示为^I -v, --show-nonprinting # 显示非打印字符(除了换行和TAB) -A, --show-all # 等于-vET 示例: cat -n /etc/passwd # 显示带行号的passwd文件 cat file1 file2 > combined # 合并两个文件 cat > newfile <<EOF # 从标准输入创建文件(输入EOF结束)
2. 分页查看文件 (less/more)
less [选项] 文件 more [选项] 文件 less常用操作: 空格/f # 向下翻一页 b # 向上翻一页 /字符串 # 向下搜索 ?字符串 # 向上搜索 n # 重复前一个搜索 N # 反向重复前一个搜索 g # 跳到第一行 G # 跳到最后一行 q # 退出 选项: -N # 显示行号 -i # 搜索时忽略大小写 -m # 显示更多提示信息 +cmd # 启动时执行命令(如less +/pattern file) 示例: less -N +F /var/log/syslog # 查看日志文件(带行号并跟踪尾部) less -i /etc/services # 忽略大小写搜索
3. 查看文件头部/尾部 (head/tail)
head [选项] [文件]... tail [选项] [文件]... head选项: -n, --lines=NUM # 显示前NUM行(默认10) -c, --bytes=NUM # 显示前NUM字节 -q, --quiet # 不显示文件名头 -v, --verbose # 总是显示文件名头 tail选项: -n, --lines=NUM # 显示最后NUM行(默认10) -c, --bytes=NUM # 显示最后NUM字节 -f, --follow # 实时跟踪文件增长 -F # 类似-f,但会重试(适合日志轮转) --pid=PID # 与-f合用,当PID结束时停止跟踪 -s, --sleep-interval=N # 与-f合用,设置睡眠间隔(秒) 示例: head -n 20 /var/log/dmesg # 显示日志前20行 tail -f /var/log/nginx/access.log # 实时查看访问日志 tail -n 100 -s 5 -f logfile # 查看最后100行并每5秒刷新
4. 文本编辑器 (nano/vim)
nano基础用法:
nano [选项] 文件名 常用快捷键: Ctrl+O # 保存文件 Ctrl+X # 退出 Ctrl+W # 搜索 Ctrl+\ # 替换 Ctrl+K # 剪切行 Ctrl+U # 粘贴 Ctrl+G # 打开帮助
vim基础模式:
- 普通模式(默认):移动光标、删除、复制等操作
- 插入模式(i/I/a/A/o/O):编辑文本
- 命令行模式(:):执行命令、保存、退出等
vim [选项] 文件名 常用命令: i # 进入插入模式 ESC # 返回普通模式 :w # 保存文件 :wq # 保存并退出 :q! # 强制退出不保存 dd # 删除当前行 yy # 复制当前行 p # 粘贴 /pattern # 搜索 :noh # 取消搜索高亮 :set nu # 显示行号 :sp file # 水平分割窗口 :vsp file # 垂直分割窗口
三、文件权限与属性
1. 修改权限 (chmod)
chmod [选项] 模式 文件... 模式格式: 1. 符号模式: [ugoa][+-=][rwxXst] u: 所有者 g: 所属组 o: 其他 a: 所有 +: 添加权限 -: 移除权限 =: 设置权限 r: 读 w: 写 x: 执行 X: 仅当文件是目录或已有执行权限 s: setuid/setgid t: 粘滞位 2. 数字模式: 3位或4位八进制数 第一位(可选): setuid(4),setgid(2),粘滞位(1) 第二位: 所有者权限(rwx=4+2+1) 第三位: 组权限 第四位: 其他用户权限 选项: -R, --recursive # 递归修改 -v, --verbose # 显示修改信息 --reference=RFILE # 参照RFILE的权限 示例: chmod u+x script.sh # 给所有者添加执行权限 chmod go-w file.txt # 移除组和其他用户的写权限 chmod -R 755 directory/ # 递归设置目录权限为755 chmod --reference=ref.txt target.txt # 使用参考文件权限
2. 修改所有者 (chown)
chown [选项] [所有者][:[组]] 文件... 选项: -R, --recursive # 递归修改 -v, --verbose # 显示修改信息 --from=当前所有者:当前组 # 只修改匹配的所有者/组 --reference=RFILE # 参照RFILE的所有者和组 示例: chown user:group file.txt # 修改所有者和组 chown -R www-data:www-data /var/www # 递归修改网站目录 chown --reference=ref.txt target.txt # 使用参考文件属性
3. 修改所属组 (chgrp)
chgrp [选项] 组 文件... 选项: -R, --recursive # 递归修改 -v, --verbose # 显示修改信息 --reference=RFILE # 参照RFILE的组 示例: chgrp staff /shared # 修改/shared目录的组为staff chgrp -R dev project/ # 递归修改项目目录组
4. 特殊权限位
- setuid(4): 执行时以文件所有者权限运行
chmod u+s /usr/bin/passwd
- setgid(2):
- 对文件:执行时以文件所属组权限运行
- 对目录:新建文件继承目录的组
chmod g+s /shared
- 粘滞位(1): 对目录设置,只有文件所有者才能删除
chmod o+t /tmp
示例:
chmod 4755 /usr/local/bin/special # setuid chmod 2775 /shared # setgid chmod 1777 /tmp # 粘滞位
四、文件查找与定位
1. 查找文件 (find)
find [路径...] [表达式] 常用表达式: -name 模式 # 按文件名匹配(支持通配符*?[]) -iname 模式 # 不区分大小写的-name -type 类型 # f(文件),d(目录),l(链接)等 -size [+-]N[cwbkMG] # 按大小查找(+表示大于,-表示小于) -mtime N # 按修改时间查找(N天前) -atime N # 按访问时间查找 -ctime N # 按状态变更时间查找 -user 用户名 # 按所有者查找 -group 组名 # 按所属组查找 -perm 模式 # 按权限查找 -exec 命令 {} + # 对找到的文件执行命令 -print # 打印匹配文件(默认) -delete # 删除匹配文件 -maxdepth N # 最大搜索深度 -mindepth N # 最小搜索深度 示例: find / -name "*.conf" -type f # 查找所有.conf文件 find ~ -size +10M -exec ls -lh {} + # 查找大于10M的文件并显示详情 find /var/log -mtime +30 -delete # 删除30天前的日志文件 find . -perm /u=x,g=x,o=x -type f # 查找任何用户可执行的文件
2. 定位命令路径 (which/whereis)
which [选项] 命令名... 选项: -a # 显示所有匹配路径,而不仅是第一个 --skip-alias # 忽略别名 示例: which python # 查找python命令路径 which -a java # 查找所有java命令路径 whereis [选项] 命令名... 选项: -b # 只查找二进制文件 -m # 只查找手册页 -s # 只查找源代码 -f # 显示文件名前不显示路径类别 示例: whereis -b ls # 查找ls命令的二进制文件 whereis -m gcc # 查找gcc的手册页
3. 快速文件定位 (locate)
locate [选项] 模式... 选项: -i, --ignore-case # 忽略大小写 -c, --count # 只显示匹配数量 -l, --limit N # 限制显示数量 -r, --regexp REGEXP # 使用基本正则表达式 --regex # 使用扩展正则表达式 -b, --basename # 只匹配基本名 -d, --database DBPATH # 使用指定数据库 示例: locate -i "*.jpg" # 查找所有jpg图片(不区分大小写) locate -l 10 passwd # 查找passwd文件(限制10个结果) sudo updatedb # 更新locate数据库(需要root权限)
五、文本处理工具
1. 文本搜索 (grep)
grep [选项] 模式 [文件...] 常用选项: -i, --ignore-case # 忽略大小写 -v, --invert-match # 显示不匹配的行 -n, --line-number # 显示行号 -c, --count # 只显示匹配行数 -l, --files-with-matches # 只显示包含匹配的文件名 -L, --files-without-match # 只显示不包含匹配的文件名 -r, -R, --recursive # 递归搜索目录 -w, --word-regexp # 匹配整个单词 -x, --line-regexp # 匹配整行 -A NUM, --after-context=NUM # 显示匹配行后NUM行 -B NUM, --before-context=NUM # 显示匹配行前NUM行 -C NUM, --context=NUM # 显示匹配行前后各NUM行 -E, --extended-regexp # 使用扩展正则表达式 -F, --fixed-strings # 固定字符串匹配(非正则) --color=auto # 高亮匹配文本 示例: grep -i "error" /var/log/syslog # 在日志中搜索error(忽略大小写) grep -r --include="*.c" "main" . # 递归搜索.c文件中的main函数 grep -A3 -B2 "panic" dmesg # 显示panic前后各3行和2行
2. 流编辑器 (sed)
sed [选项] '命令' [输入文件...] 常用命令: s/正则/替换/标志 # 替换文本 p # 打印当前行 d # 删除当前行 a\text # 在当前行后追加文本 i\text # 在当前行前插入文本 c\text # 替换当前行 q # 退出 r 文件 # 读取文件内容并追加 w 文件 # 写入匹配行到文件 y/源/目标/ # 字符转换(类似tr) = # 打印行号 标志: g # 全局替换(非首次匹配) i # 忽略大小写 p # 打印替换的行 数字 # 替换第N个匹配 选项: -n, --quiet, --silent # 不自动打印模式空间 -e 脚本 # 添加脚本到命令执行 -f 脚本文件 # 添加脚本文件内容到命令执行 -i[SUFFIX] # 原地编辑文件(可选备份后缀) -r, --regexp-extended # 使用扩展正则表达式 示例: sed 's/foo/bar/g' file.txt # 替换所有foo为bar sed -i.bak '/^#/d;/^$/d' config # 删除注释和空行(创建备份) sed -n '10,20p' file.txt # 打印10-20行 sed '/pattern/{n;d;}' file # 删除匹配行后的下一行
3. 文本分析工具 (awk)
awk [选项] '模式 {动作}' [文件...] 内置变量: FS # 输入字段分隔符(默认空格) OFS # 输出字段分隔符(默认空格) RS # 输入记录分隔符(默认换行) ORS # 输出记录分隔符(默认换行) NF # 当前记录字段数 NR # 当前记录数(所有文件累计) FNR # 当前文件记录数 FILENAME # 当前文件名 $0 # 整条记录 $1,$2,...$NF # 第1,2,...NF个字段 常用函数: length(s) # 返回字符串长度 substr(s,m,n) # 返回s从m开始n个字符的子串 split(s,a,sep) # 用sep分隔s到数组a index(s,t) # 返回t在s中的位置 match(s,r) # 返回正则r在s中的位置 sub(r,t,s) # 在s中用t替换第一个r匹配 gsub(r,t,s) # 在s中用t替换所有r匹配 system(cmd) # 执行系统命令并返回退出状态 选项: -F fs # 设置字段分隔符 -v var=value # 定义awk变量 -f program-file # 从文件读取awk程序 示例: awk -F: '{print $1,$6}' /etc/passwd # 打印用户名和家目录 awk 'NR%2==1 {print}' file.txt # 打印奇数行 awk 'BEGIN{sum=0} {sum+=$3} END{print sum}' data.txt # 计算第三列总和 awk -v OFS="\t" '{print $1,$3}' file # 制表符分隔输出
4. 排序与去重 (sort/uniq)
sort命令:
sort [选项] [文件...] 选项: -b, --ignore-leading-blanks # 忽略前导空格 -f, --ignore-case # 不区分大小写 -g, --general-numeric-sort # 通用数值排序 -n, --numeric-sort # 按字符串数值排序 -h, --human-numeric-sort # 人类可读数值排序(2K,1G等) -r, --reverse # 反向排序 -k, --key=POS1[,POS2] # 按指定字段排序 -t, --field-separator=SEP # 指定字段分隔符 -u, --unique # 去重(只输出相等行的第一个) -c, --check # 检查是否已排序 -o, --output=FILE # 输出到文件 -m, --merge # 合并已排序文件 --parallel=N # 设置排序线程数 示例: sort -nrk 3 data.txt # 按第三列数值反向排序 sort -t: -k3n /etc/passwd # 按用户ID数值排序 sort -u names.txt # 去重排序 sort -k1,1 -k2,2n data # 主键第一列,次键第二列数值排序
uniq命令:
uniq [选项] [输入文件 [输出文件]] 选项: -c, --count # 统计重复行数 -d, --repeated # 只显示重复行 -D, --all-repeated[=METHOD] # 显示所有重复行 -f, --skip-fields=N # 跳过前N个字段比较 -i, --ignore-case # 忽略大小写 -s, --skip-chars=N # 跳过前N个字符比较 -u, --unique # 只显示不重复行 -w, --check-chars=N # 比较前N个字符 --group=METHOD # 显示所有行,用空行分隔组 示例: uniq -c sorted.txt # 统计每行出现次数 uniq -d -i passwords.txt # 查找不区分大小写的重复行 sort file.txt | uniq -u # 找出唯一行(先排序)
六、系统信息与监控
1. 系统信息 (uname/uptime)
uname命令:
uname [选项] 选项: -a, --all # 显示所有信息(默认) -s, --kernel-name # 内核名称(如Linux) -n, --nodename # 网络节点主机名 -r, --kernel-release # 内核发布版本 -v, --kernel-version # 内核版本 -m, --machine # 硬件架构 -p, --processor # 处理器类型 -i, --hardware-platform # 硬件平台 -o, --operating-system # 操作系统 示例: uname -a # 显示所有系统信息 uname -r # 显示内核版本
uptime命令:
uptime [选项] 输出格式: 当前时间 系统运行时间 用户数 平均负载(1,5,15分钟) 选项: -p, --pretty # 简洁格式显示运行时间 -s, --since # 系统启动时间 -h, --help # 显示帮助 示例: uptime # 21:30:10 up 15 days, 3:22, 2 users, load average: 0.15, 0.10, 0.05 uptime -p # up 2 weeks, 3 days, 4 hours, 10 minutes
2. 进程监控 (top/htop/ps)
top命令:
top [选项] 交互命令: h # 帮助 q # 退出 Space # 立即刷新 P # 按CPU使用排序 M # 按内存使用排序 N # 按PID排序 T # 按运行时间排序 k # 终止进程(输入PID) r # 更改进程优先级(renice) d or s # 更改刷新间隔 W # 保存当前设置到~/.toprc Z # 切换颜色显示 c # 显示完整命令 1 # 显示每个CPU核心统计 选项: -b # 批处理模式 -c # 显示完整命令 -d 延迟 # 设置刷新间隔(秒) -n 次数 # 刷新次数后退出 -p PID # 监控指定PID -u 用户 # 监控指定用户进程 示例: top -d 1 -n 10 -b > top.log # 记录10次top输出到文件 top -u mysql # 监控mysql用户进程
htop命令(需安装):
htop [选项] 交互命令(类似top,更丰富): F1 # 帮助 F2 # 设置 F3 # 搜索进程 F4 # 过滤进程 F5 # 树状显示 F6 # 选择排序字段 F7/F8 # 调整nice值 F9 # 发送信号(如kill) Space # 标记进程 U # 取消所有标记 选项: -u 用户 # 只显示指定用户进程 -p PID # 只显示指定PID -d 延迟 # 设置刷新间隔 -s 列 # 按指定列排序 示例: htop -u root # 显示root用户进程
ps命令:
ps [选项] 常用选项组合: aux # BSD风格(显示所有用户进程) -ef # 标准风格(完整格式) -e, -A # 显示所有进程 -a # 显示终端相关进程 -u 用户 # 显示指定用户进程 -p PID # 显示指定PID --forest # 树状显示进程关系 输出列说明: USER # 进程所有者 PID # 进程ID %CPU # CPU占用百分比 %MEM # 内存占用百分比 VSZ # 虚拟内存使用量(KB) RSS # 物理内存使用量(KB) TTY # 关联终端 STAT # 进程状态(R运行,S睡眠,T停止,Z僵尸,D不可中断等) START # 启动时间 TIME # 累计CPU时间 COMMAND # 命令名/命令行 示例: ps aux --sort=-%cpu | head -10 # 显示CPU占用最高的10个进程 ps -ef --forest # 树状显示所有进程 ps -u root -o pid,cmd # 显示root用户的PID和命令
3. 内存与交换空间 (free)
free [选项] 选项: -b, --bytes # 以字节显示 -k, --kilo # 以KB显示(默认) -m, --mega # 以MB显示 -g, --giga # 以GB显示 -h, --human # 人类可读格式(自动选择单位) -s N, --seconds N # 每N秒刷新一次 -c N, --count N # 刷新N次后退出 -t, --total # 显示总统计行 --si # 使用1000而非1024为基数 输出说明: total used free shared buff/cache available Mem: 8168896 2140128 2580500 320356 3448268 5343104 Swap: 2097148 0 2097148 示例: free -h # 人类可读格式显示内存使用 free -s 5 -c 3 # 每5秒刷新一次,共3次
4. 磁盘空间 (df/du)
df命令:
df [选项] [文件...] 选项: -a, --all # 显示所有文件系统(包括伪文件系统) -h, --human-readable # 人类可读格式 -H, --si # 类似-h但使用1000为基数 -i, --inodes # 显示inode信息而非块使用 -l, --local # 只显示本地文件系统 -T, --print-type # 显示文件系统类型 -t, --type=类型 # 只显示指定类型的文件系统 -x, --exclude-type=类型 # 排除指定类型 示例: df -hT # 显示所有挂载点的人类可读信息 df -h /home # 显示/home分区使用情况 df -i /tmp # 显示/tmp的inode使用
du命令:
du [选项] [文件...] 选项: -a, --all # 显示所有文件统计(不只是目录) -c, --total # 显示总计 -h, --human-readable # 人类可读格式 -H, --si # 类似-h但使用1000为基数 -s, --summarize # 只显示总计 --max-depth=N # 显示N级子目录 --exclude=模式 # 排除匹配模式的文件 --time # 显示修改时间 --threshold=SIZE # 只显示大于SIZE的文件 示例: du -sh /var/log # 显示/var/log总大小 du -ah --max-depth=1 ~ | sort -hr | head -10 # 显示家目录下最大的10个文件/目录 du -csh *.iso # 显示当前目录ISO文件大小及总计
七、网络工具
1. 网络接口信息 (ifconfig/ip)
ifconfig命令:
ifconfig [接口] [选项] 常用选项: up # 激活接口 down # 禁用接口 inet IP # 设置IPv4地址 netmask MASK # 设置子网掩码 broadcast ADDR # 设置广播地址 mtu SIZE # 设置MTU大小 hw ether MAC # 设置MAC地址 示例: ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up # 配置eth0 ifconfig eth0 down # 禁用eth0 ifconfig -a # 显示所有接口(包括未激活)
ip命令(现代替代):
ip [选项] 对象 {命令} 常用对象: link # 网络设备 addr # IP地址 route # 路由表 neigh # ARP/NDISC缓存 示例: ip addr show # 显示所有接口地址(类似ifconfig) ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址 ip link set eth0 up # 启用eth0接口 ip route show # 显示路由表 ip -s link # 显示接口统计信息
2. 网络连通性测试 (ping)
ping [选项] 目标主机 选项: -c COUNT # 发送指定数量包后停止 -i INTERVAL # 设置包间隔(秒) -s SIZE # 指定数据包大小(字节) -t TTL # 设置TTL值 -w DEADLINE # 设置超时时间(秒) -q # 安静模式(只显示统计) -D # 打印时间戳 -f # 洪水ping(快速发送) -I INTERFACE # 指定源接口 示例: ping -c 5 google.com # ping 5次后停止 ping -i 0.5 -s 1000 example.com # 每0.5秒发送1000字节包 ping -w 10 -q 192.168.1.1 # 10秒内安静模式ping
3. 网络连接信息 (netstat/ss)
netstat命令:
netstat [选项] 选项: -a, --all # 显示所有连接(包括监听) -t, --tcp # 显示TCP连接 -u, --udp # 显示UDP连接 -l, --listening # 只显示监听端口 -p, --programs # 显示进程/程序名 -n, --numeric # 显示数字地址(不解析) --numeric-ports # 显示数字端口(不解析服务名) --numeric-hosts # 显示数字主机(不解析主机名) -r, --route # 显示路由表 -i, --interfaces # 显示接口表 -s, --statistics # 显示协议统计 示例: netstat -tulnp # 显示所有TCP/UDP监听端口及进程 netstat -rn # 显示数字格式的路由表 netstat -s # 显示网络协议统计信息
ss命令(现代替代):
ss [选项] [过滤] 选项: -a, --all # 显示所有套接字 -l, --listening # 显示监听套接字 -p, --processes # 显示进程信息 -n, --numeric # 数字格式显示 -t, --tcp # 显示TCP套接字 -u, --udp # 显示UDP套接字 -s, --summary # 显示套接字统计 -o, --options # 显示计时器信息 -m, --memory # 显示套接字内存使用 -i, --info # 显示TCP内部信息 state STATE # 按状态过滤(如ESTAB,CLOSE-WAIT) 示例: ss -tunap # 类似netstat -tulnp ss -o state established '( dport = :http or sport = :http )' # 显示所有HTTP连接 ss -s # 显示套接字统计摘要
4. 路由跟踪 (traceroute/tracepath)
traceroute命令:
traceroute [选项] 目标主机 选项: -n # 数字格式显示(不解析主机名) -m MAX # 设置最大TTL(默认30) -q NUM # 每跳探测包数(默认3) -w SEC # 设置等待时间(秒) -I # 使用ICMP ECHO代替UDP -T # 使用TCP SYN(默认80端口) -U # 使用UDP(默认53端口) -p PORT # 设置目标端口 示例: traceroute -n google.com # 数字格式跟踪路由 traceroute -I -m 20 example.com # 使用ICMP最多20跳 traceroute -T -p 443 github.com # TCP SYN跟踪443端口
tracepath命令:
tracepath [选项] 目标主机 选项: -n # 数字格式显示 -b # 同时显示主机名和IP -l SIZE # 设置初始包大小 -m MAX # 设置最大跳数(默认30) 示例: tracepath -n 8.8.8.8 # 数字格式跟踪 tracepath -m 15 google.com # 最多15跳
5. 域名解析 (dig/nslookup/host)
dig命令:
dig [@服务器] [选项] 域名 [类型] 常用类型: A # IPv4地址(默认) AAAA # IPv6地址 MX # 邮件交换记录 NS # 域名服务器 TXT # 文本记录 CNAME # 别名记录 SOA # 权威起始记录 ANY # 所有记录 选项: +short # 简短输出 +trace # 跟踪递归查询 +stats # 显示查询统计 -x IP # 反向查询(PTR) -f FILE # 批量查询文件中的域名 示例: dig google.com MX # 查询MX记录 dig +trace example.com # 跟踪解析过程 dig -x 8.8.8.8 # 反向查询IP dig @8.8.8.8 +short example.com A # 使用Google DNS简短查询
nslookup命令:
nslookup [选项] [域名] [服务器] 交互模式命令: server DNS # 设置查询服务器 set type=T # 设置查询类型 exit # 退出 示例: nslookup google.com # 基本查询 nslookup -type=MX example.com # 查询MX记录 nslookup # 进入交互模式 > server 8.8.8.8 > set type=AAAA > google.com
host命令:
host [选项] 域名 [服务器] 选项: -a # 相当于-v -t ANY -t TYPE # 指定查询类型 -v # 详细输出 -r # 非递归查询 -4 # 只使用IPv4 -6 # 只使用IPv6 示例: host -t MX google.com # 查询MX记录 host -a example.com # 查询所有记录 host 8.8.8.8 # 反向查询
八、系统管理与维护
1. 用户管理 (useradd/usermod/userdel)
useradd命令:
useradd [选项] 用户名 选项: -c, --comment COMMENT # 用户备注信息(如全名) -d, --home HOME_DIR # 指定家目录 -e, --expiredate EXPIRE_DATE # 设置账户过期日期(YYYY-MM-DD) -g, --gid GROUP # 指定主组 -G, --groups GROUPS # 指定附加组(逗号分隔) -m, --create-home # 创建家目录(默认在某些发行版) -M, --no-create-home # 不创建家目录 -s, --shell SHELL # 指定登录shell -u, --uid UID # 指定用户ID -p, --password PASSWORD # 设置加密密码(不推荐) -r, --system # 创建系统账户 示例: useradd -m -c "John Doe" -s /bin/bash -G sudo,developers johnd # 创建普通用户 useradd -r -s /usr/sbin/nologin backup # 创建系统账户
usermod命令:
usermod [选项] 用户名 选项(类似useradd): -c, -d, -e, -g, -G, -s, -u # 同useradd -l, --login NEW_LOGIN # 修改用户名 -L, --lock # 锁定账户 -U, --unlock # 解锁账户 -a, --append # 与-G合用,追加附加组而非替换 示例: usermod -aG sudo johnd # 将johnd添加到sudo组 usermod -s /sbin/nologin olduser # 禁止登录 usermod -L johnd # 锁定账户
userdel命令:
userdel [选项] 用户名 选项: -f, --force # 强制删除(即使用户已登录) -r, --remove # 删除家目录和邮件池 示例: userdel -r olduser # 完全删除用户及其家目录
2. 组管理 (groupadd/groupmod/groupdel)
groupadd命令:
groupadd [选项] 组名 选项: -g, --gid GID # 指定组ID -r, --system # 创建系统组 -p, --password PASSWORD # 设置组密码 示例: groupadd -g 10000 developers # 创建指定GID的组 groupadd -r systemgrp # 创建系统组
groupmod命令:
groupmod [选项] 组名 选项: -g, --gid GID # 修改组ID -n, --new-name NEW_GROUP # 修改组名 -p, --password PASSWORD # 修改组密码 示例: groupmod -n oldgroup newgroup # 重命名组 groupmod -g 10001 developers # 修改组GID
groupdel命令:
groupdel [选项] 组名 选项: -f, --force # 强制删除(即使有成员) 示例: groupdel oldgroup # 删除组
3. 密码管理 (passwd/chpasswd)
passwd命令:
passwd [选项] [用户名] 选项: -d, --delete # 删除密码(变为无密码账户) -l, --lock # 锁定账户 -u, --unlock # 解锁账户 -e, --expire # 使密码立即过期 -n, --mindays MIN # 设置密码最短使用天数 -x, --maxdays MAX # 设置密码最长使用天数 -w, --warndays WARN # 密码过期前警告天数 -i, --inactive INACTIVE # 密码过期后宽限天数 -S, --status # 显示账户状态 --stdin # 从标准输入读取密码(脚本中使用) 示例: passwd # 修改当前用户密码 passwd -S johnd # 查看johnd账户密码状态 echo "newpass" | passwd --stdin johnd # 非交互式设置密码(某些发行版不支持)
chpasswd命令(批量修改密码):
chpasswd [选项] 选项: -e, --encrypted # 提供的密码已加密 -m, --md5 # 使用MD5加密而非DES -c, --crypt-method METHOD # 指定加密方法(DES,MD5,SHA256,SHA512) -s, --sha-rounds ROUNDS # SHA加密轮数 示例: echo "johnd:newpass" | chpasswd # 修改johnd密码 chpasswd < users.txt # 从文件批量修改(格式: 用户名:密码)
4. 计划任务 (crontab/at)
crontab命令:
crontab [选项] [文件] 选项: -e, --edit # 编辑当前用户的crontab -l, --list # 列出当前用户的crontab -r, --remove # 删除当前用户的crontab -u, --user USER # 指定用户(需要root权限) -i, --interactive # 删除前确认 crontab文件格式: 分 时 日 月 周 命令 * * * * * command | | | | | | | | | +----- 星期 (0 - 6) (周日=0或7) | | | +------- 月份 (1 - 12) | | +--------- 日 (1 - 31) | +----------- 小时 (0 - 23) +------------- 分钟 (0 - 59) 特殊字符: * # 任何值 , # 值列表分隔符 - # 范围 / # 步长值 示例: crontab -e # 编辑当前用户计划任务 # 每天3:30备份 30 3 * * * /home/user/backup.sh # 每周一至周五9点到17点每小时的第5分钟 5 9-17 * * 1-5 /path/to/command # 每10分钟 */10 * * * * /usr/bin/check_status
at命令:
at [选项] 时间 时间格式: HH:MM # 今天或明天的指定时间 midnight/noon/teatime # 特殊时间词 now + N minutes/hours/days/weeks # 相对时间 MMDDYY, MM/DD/YY, DD.MM.YY # 绝对日期 选项: -f FILE # 从文件读取命令 -m # 作业完成后发送邮件 -q queue # 指定队列(a-z,A=z=26) -l # 列出待处理作业(=atq) -d ID # 删除作业(=atrm) -c ID # 查看作业详情 示例: at now + 1 hour at> /path/to/script.sh at> Ctrl+D at -l # 列出作业 at -c 1 # 查看作业1详情 at -f jobs.txt 3pm tomorrow # 从文件读取命令
5. 系统服务管理 (systemctl)
systemctl [选项] 命令 [单元...] 常用命令: start # 启动服务 stop # 停止服务 restart # 重启服务 reload # 重载配置(不重启) enable # 设置开机启动 disable # 取消开机启动 status # 查看服务状态 is-active # 检查是否运行 is-enabled # 检查是否启用 list-units # 列出所有单元 mask # 屏蔽服务(防止手动或自动启动) unmask # 取消屏蔽 选项: --type=TYPE # 过滤单元类型(service,socket等) --all # 显示所有单元(包括不活动的) --failed # 只显示失败单元 -H, --host=HOST # 操作远程主机 示例: systemctl start nginx # 启动nginx systemctl enable --now docker # 启用并立即启动docker systemctl list-units --type=service --all # 列出所有服务 systemctl status sshd # 查看sshd状态 journalctl -u nginx -f # 查看nginx日志(实时)
九、软件包管理
1. Debian/Ubuntu (APT)
apt [选项] 命令 常用命令: update # 更新包索引 upgrade # 升级所有可升级包 full-upgrade # 升级时处理依赖关系变化 install # 安装包 remove # 删除包(保留配置) purge # 完全删除包(包括配置) autoremove # 删除自动安装且不再需要的包 search # 搜索包 show # 显示包详情 list # 列出包 --installed # 列出已安装包 --upgradable # 列出可升级包 edit-sources # 编辑源列表 clean # 删除本地缓存 autoclean # 删除旧版本包缓存 选项: -y, --yes # 自动确认 --no-install-recommends # 不安装推荐包 --only-upgrade # 只升级指定包 --reinstall # 重新安装包 示例: apt update && apt upgrade -y # 更新并升级所有包 apt install -y nginx mysql-server # 安装nginx和mysql apt purge --auto-remove package # 完全删除包及不需要的依赖 apt search "^python3" # 搜索python3开头的包 apt list --upgradable # 列出可升级包
2. RedHat/CentOS (YUM/DNF)
yum命令:
yum [选项] 命令 [包...] 常用命令: install # 安装包 update # 更新包 upgrade # 升级包(同update) remove # 删除包 autoremove # 删除不需要的依赖 search # 搜索包 info # 显示包信息 list # 列出包 --installed # 列出已安装包 --available # 列出可用包 --updates # 列出可更新包 clean # 清理缓存 history # 查看操作历史 groupinstall # 安装包组 provides # 查找提供某文件的包 选项: -y # 自动确认 --nogpgcheck # 跳过GPG验证 -q, --quiet # 安静模式 -v # 详细模式 示例: yum install -y httpd php mysql # 安装Apache,PHP,MySQL yum update --security # 只安装安全更新 yum provides */bin/nginx # 查找提供nginx的包 yum history undo 3 # 撤销事务ID为3的操作
dnf命令(现代替代):
dnf [选项] 命令 [包...] 常用命令(类似yum): install/remove/update/upgrade/search/list/info autoremove/clean/history/group/provides repoquery # 查询仓库信息 download # 下载包不安装 reinstall # 重新安装包 新增选项: --refresh # 强制刷新元数据 --best # 尝试最佳版本升级 --allowerasing # 允许解决依赖时删除包 示例: dnf install -y --allowerasing package # 允许删除冲突包 dnf repoquery -l nginx # 列出nginx包的文件 dnf history userinstalled # 查看用户安装的包
3. Arch Linux (Pacman)
pacman [选项] 命令 [包...] 常用命令: -S, --sync # 安装包 -Syu # 更新系统 -Ss # 搜索包 -Si # 显示包信息 -Q, --query # 查询本地包数据库 -Qi # 查看已安装包信息 -Qs # 搜索已安装包 -R, --remove # 删除包 -Rns # 删除包及依赖和配置 -F, --files # 查询文件属于哪个包 -U # 安装本地包文件 --deptest # 检查依赖 选项: --noconfirm # 不询问确认 --needed # 不重新安装已更新的包 --asdeps/--asexplicit # 标记为依赖/显式安装 示例: pacman -Syu # 更新系统 pacman -S package # 安装包 pacman -Rns unneeded # 完全删除包 pacman -Qs python # 搜索已安装的python包 pacman -Fy # 更新文件数据库 pacman -F $(which nginx) # 查找提供nginx的包
4. 通用编译安装步骤
# 1. 下载源码包 wget http://example.com/package.tar.gz # 2. 解压 tar -xzvf package.tar.gz cd package/ # 3. 配置(检查依赖,设置安装路径等) ./configure --prefix=/usr/local # 4. 编译 make -j$(nproc) # 使用所有CPU核心并行编译 # 5. 安装 sudo make install # 6. 清理(可选) make clean # 卸载(如果支持) sudo make uninstall # 如果未提供uninstall目标,可以手动删除: sudo rm -rf /usr/local/bin/command \ /usr/local/lib/libname* \ /usr/local/include/header.h
十、磁盘与文件系统
1. 磁盘分区 (fdisk/parted)
fdisk命令:
fdisk [选项] 设备 常用命令(交互模式): m # 显示帮助 p # 打印分区表 n # 创建新分区 d # 删除分区 t # 更改分区类型 w # 写入并退出 q # 退出不保存 选项: -l, --list # 列出分区表 -u, --units # 显示单位(cylinders/sectors) 示例: fdisk -l # 列出所有磁盘分区 fdisk /dev/sdb # 对sdb进行分区操作
parted命令:
parted [选项] [设备 [命令]] 常用命令: print # 打印分区表 mkpart # 创建分区(primary/logical 文件系统 起始 结束) rm # 删除分区 set # 设置标记(如boot) mklabel # 创建磁盘标签(如msdos,gpt) unit # 设置单位(如MB,GB,s,%) align-check # 检查对齐 选项: -s, --script # 脚本模式(不提示) -l, --list # 列出所有设备分区 示例: parted /dev/sda print # 显示sda分区表 parted -s /dev/sdb mklabel gpt # 创建GPT分区表 parted -s /dev/sdb mkpart primary ext4 0% 100% # 创建整个磁盘的分区
2. 文件系统创建 (mkfs)
mkfs [选项] [-t 类型] [设备] [大小] 常用文件系统类型: ext4 # Linux常用 xfs # 高性能文件系统 btrfs # 高级特性(快照,压缩等) vfat # FAT32(兼容Windows) ntfs # NTFS(Windows) 选项: -V # 详细输出 -L 标签 # 设置卷标 -N # 设置inode数量 -c # 检查坏块 专用选项(取决于文件系统类型): -b 块大小 # 设置块大小(如1024,2048,4096) -m 保留百分比 # 为root保留的空间百分比 -O 特性 # 设置文件系统特性 示例: mkfs -t ext4 /dev/sdb1 # 创建ext4文件系统 mkfs.xfs -f -L data /dev/sdc1 # 强制创建XFS并设置标签 mkfs.vfat -F 32 /dev/sdd1 # 创建FAT32文件系统
3. 文件系统检查与修复 (fsck)
fsck [选项] [设备] 选项: -A # 检查/etc/fstab中的所有文件系统 -C # 显示进度条 -N # 只显示不执行 -P # 并行检查根文件系统 -R # 与-A合用,跳过根文件系统 -t 类型 # 指定文件系统类型 -y # 自动修复 -p # 自动修复安全的修复 示例: fsck -y /dev/sda1 # 自动修复sda1 fsck -t ext4 /dev/sdb2 # 检查ext4文件系统 fsck -AR -y # 检查并自动修复所有非根文件系统
4. 挂载与卸载 (mount/umount)
mount命令:
mount [选项] [设备] [挂载点] 选项: -t 类型 # 指定文件系统类型 -o 选项 # 挂载选项(逗号分隔) # ro/rw: 只读/读写 # noexec/exec: 不允许/允许执行 # async/sync: 异步/同步写入 # defaults: rw,suid,dev,exec,auto,nouser,async # remount: 重新挂载 -a # 挂载/etc/fstab中的所有文件系统 -l # 显示已挂载文件系统及标签 --bind # 绑定挂载(将一个目录挂到另一个位置) 示例: mount /dev/sdb1 /mnt/data # 挂载sdb1到/data mount -t nfs 192.168.1.100:/share /mnt/nfs # 挂载NFS共享 mount -o remount,ro / # 将根文件系统重新挂载为只读 mount --bind /old /new # 使/old内容在/new也可访问
umount命令:
umount [选项] [设备|挂载点] 选项: -f # 强制卸载(当设备忙时) -l # 延迟卸载(立即断开文件系统,等设备不再忙时清理) -R # 递归卸载 示例: umount /mnt/data # 通过挂载点卸载 umount /dev/sdb1 # 通过设备卸载 umount -R /mnt/nested # 递归卸载嵌套挂载
5. 交换空间管理 (swapon/swapoff)
swapon [选项] [设备] 选项: -a # 激活/etc/fstab中的所有swap -s, --summary # 显示swap使用摘要 -p, --priority # 设置优先级 swapoff [选项] [设备] 示例: swapon /dev/sdb2 # 激活swap分区 swapon -s # 显示swap状态 swapoff /dev/sdb2 # 禁用swap分区 dd if=/dev/zero of=/swapfile bs=1M count=2048 # 创建2GB swap文件 mkswap /swapfile # 设置为swap chmod 600 /swapfile # 设置权限 swapon /swapfile # 启用swap文件
十一、性能监控与调试
1. 系统监控 (vmstat/iostat)
vmstat命令:
vmstat [选项] [间隔[次数]] 选项: -a # 显示活跃/非活跃内存 -f # 显示从启动至今的fork数量 -m # 显示slabinfo -s # 显示事件计数器和内存统计 -d # 显示磁盘统计 -p 分区 # 显示指定分区统计 -S 单位 # 显示单位(k/K/m/M,默认KB) -t # 显示时间戳 -w # 宽输出模式 输出列说明: procs # r:运行队列进程数 b:阻塞进程数 memory # swpd:虚拟内存 free:空闲内存 buff:缓冲 cache:缓存 swap # si:从磁盘交换进内存 so:从内存交换出磁盘 io # bi:块设备接收 blk/s bo:块设备发送 blk/s system # in:中断数 cs:上下文切换数 cpu # us:用户时间 sy:系统时间 id:空闲 wa:IO等待 st:虚拟机偷取时间 示例: vmstat 1 5 # 每秒刷新一次,共5次 vmstat -d # 显示磁盘I/O统计 vmstat -s -S M # 以MB为单位显示内存统计
iostat命令:
iostat [选项] [间隔[次数]] 选项: -c # 只显示CPU统计 -d # 只显示磁盘统计 -h # 人类可读格式 -j {ID | PATH | UUID | ...} # 指定磁盘显示方式 -k # 以KB为单位 -m # 以MB为单位 -N # 显示设备映射名 -p # 显示块设备及其分区统计 -t # 显示时间戳 -x # 显示扩展统计 -z # 忽略零活动统计 输出列说明: %user # 用户级别CPU使用率 %nice # 低优先级用户级别CPU使用率 %system # 系统级别CPU使用率 %iowait # CPU等待IO时间 %steal # 虚拟CPU等待时间 %idle # CPU空闲时间 Device # 设备名 tps # 每秒传输数 kB_read/s # 每秒读取KB kB_wrtn/s # 每秒写入KB kB_dscd/s # 每秒丢弃KB kB_read # 总读取KB kB_wrtn # 总写入KB 示例: iostat -dx 1 3 # 显示扩展磁盘统计,每秒1次共3次 iostat -p sda 2 # 显示sda及其分区统计,每2秒刷新 iostat -c -t -h # 显示带时间戳的人类可读CPU统计
2. 进程监控 (pidstat/iotop)
pidstat命令:
pidstat [选项] [间隔[次数]] 选项: -d # 显示IO统计 -r # 显示页错误和内存使用 -s # 显示栈使用 -u # 显示CPU使用(默认) -w # 显示任务切换 -p PID # 指定PID -t # 显示线程而非进程 -h # 所有统计在一行显示(便于处理) 示例: pidstat -d 1 5 # 显示IO统计,每秒1次共5次 pidstat -p 1234 -u 2 3 # 显示PID 1234的CPU使用,每2秒共3次 pidstat -t -p 5678 # 显示进程5678的线程统计
iotop命令:
iotop [选项] 选项: -o, --only # 只显示实际I/O的进程 -b, --batch # 非交互模式,用于脚本 -n NUM, --iter=NUM # 设置迭代次数后退出 -d SEC, --delay=SEC # 设置刷新间隔(默认1秒) -p PID, --pid=PID # 只监视指定PID -u USER, --user=USER # 只监视指定用户 -P, --processes # 只显示进程,不显示线程 -a, --accumulated # 显示累计I/O而非带宽 -k, --kilobytes # 使用KB而非B 交互命令: 左右箭头 # 改变排序字段 r # 反向排序 o # 只显示有I/O的进程 p # 线程/进程显示切换 a # 累计/实时带宽切换 q # 退出 i # 改变优先级 示例: iotop -o -d 2 # 只显示有I/O的进程,每2秒刷新 iotop -b -n 3 -u mysql # 非交互式监视mysql用户I/O,刷新3次
3. 网络监控 (iftop/nethogs)
iftop命令:
iftop [选项] [过滤] 选项: -i 接口 # 指定网络接口 -n # 不解析主机名 -N # 不解析端口为服务名 -B # 以字节为单位(默认bit) -F 网络 # 显示指定网络流量 -P # 显示端口 -m 限制 # 设置带宽刻度(单位Kb) -b # 不显示流量条 -t # 文本模式(无ncurses界面) 交互命令: h # 帮助 P # 暂停显示 1/2/3 # 按1/2/3列排序 s/d # 显示源/目标主机 S/D # 显示源/目标端口 t # 切换显示模式 j/k # 上下滚动 l # 屏幕过滤 L # 调整刻度 q # 退出 示例: iftop -i eth0 -nNB -F 192.168.1.0/24 # 监视eth0上指定网络流量 iftop -P -m 10M # 显示端口,刻度最大10Mbit
nethogs命令:
nethogs [选项] [设备] 选项: -d 延迟 # 刷新间隔(秒) -v 模式 # 视图模式(0=KB/s,1=KB,2=MB,3=MB/s) -c 次数 # 刷新次数后退出 -t # 追踪模式 -s # 按发送流量排序 -a # 监控所有设备 device # 指定监控设备(如eth0) 交互命令: m # 切换显示单位(KB/MB) r # 按接收流量排序 s # 按发送流量排序 q # 退出 示例: nethogs -d 2 -v 3 eth0 # 每2秒刷新,MB/s单位,监视eth0 nethogs -c 10 -t # 追踪模式,刷新10次后退出
4. 系统日志查看 (journalctl)
journalctl [选项] 选项: -b, --boot[=ID] # 当前/指定引导日志 -u, --unit=UNIT # 显示指定单元日志 -p, --priority=LEVEL # 按优先级过滤(emerg..debug) -S, --since=, -U, --until= # 时间过滤 -f, --follow # 跟踪日志 -r, --reverse # 反向输出(最早优先) -n, --lines=LIMIT # 限制行数 --no-pager # 不适用分页器 --disk-usage # 显示日志磁盘使用 --vacuum-size=, --vacuum-time= # 清理日志 -o, --output=FORMAT # 输出格式(short,verbose,json等) -x, --catalog # 添加消息解释 -k, --dmesg # 只显示内核消息 示例: journalctl -b -p err -u nginx # 显示本次启动nginx的错误日志 journalctl -f -u docker # 实时跟踪docker日志 journalctl -S "2023-01-01" -U "2023-01-02" # 显示指定日期日志 journalctl --disk-usage # 显示日志占用空间 journalctl --vacuum-size=200M # 限制日志最大200MB
十二、安全相关命令
1. 防火墙管理 (iptables/ufw/firewalld)
iptables命令:
iptables [选项] 命令 [链] [规则] 常用命令: -L, --list [链] # 列出规则 -A, --append 链 规则 # 追加规则 -I, --insert 链 [编号] 规则 # 插入规则 -D, --delete 链 规则编号/规则 # 删除规则 -F, --flush [链] # 清空规则 -P, --policy 链 目标 # 设置链默认策略 -N, --new-chain 链 # 新建自定义链 -X, --delete-chain [链] # 删除自定义链 常用选项: -p, --protocol 协议 # 指定协议(tcp,udp,icmp等) -s, --source 地址 # 源地址 -d, --destination 地址 # 目标地址 --sport, --dport 端口 # 源/目标端口 -j, --jump 目标 # 跳转目标(ACCEPT,DROP,REJECT等) -i, --in-interface 接口 # 输入接口 -o, --out-interface 接口 # 输出接口 -m, --match 模块 # 使用扩展模块(state,multiport等) --state 状态 # 连接状态(NEW,ESTABLISHED等) -v, --verbose # 详细输出 -n, --numeric # 数字格式显示地址和端口 示例: iptables -L -n -v # 详细列出所有规则 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许已建立连接 iptables -P INPUT DROP # 设置INPUT链默认策略为DROP iptables-save > /etc/iptables.rules # 保存规则 iptables-restore < /etc/iptables.rules # 恢复规则
ufw命令(简化防火墙):
ufw [选项] 命令 常用命令: enable # 启用防火墙 disable # 禁用防火墙 status # 显示状态 default # 设置默认策略 allow # 添加允许规则 deny # 添加拒绝规则 reject # 添加拒绝并回复规则 limit # 添加限制规则(防暴力破解) delete # 删除规则 insert # 插入规则 app list # 列出应用程序配置 logging # 设置日志级别 示例: ufw enable # 启用防火墙 ufw allow 22/tcp # 允许SSH ufw limit 22/tcp # 限制SSH连接速率 ufw allow from 192.168.1.100 # 允许特定IP ufw allow proto tcp to any port 80,443 # 允许HTTP/HTTPS ufw status numbered # 显示带编号的规则 ufw delete 3 # 删除规则3
firewalld命令:
firewall-cmd [选项] 常用命令: --state # 显示状态 --reload # 重载配置(不中断连接) --complete-reload # 完全重载(中断连接) --get-default-zone # 显示默认区域 --set-default-zone=区域 # 设置默认区域 --get-zones # 列出所有区域 --get-active-zones # 列出活动区域 --list-all [--zone=区域] # 列出区域配置 --add-service=服务 [--zone=区域] # 添加服务 --remove-service=服务 [--zone=区域] # 移除服务 --add-port=端口/协议 [--zone=区域] # 添加端口 --remove-port=端口/协议 [--zone=区域] # 移除端口 --add-rich-rule='规则' # 添加复杂规则 --remove-rich-rule='规则' # 移除复杂规则 --add-source=CIDR [--zone=区域] # 添加源地址 --remove-source=CIDR [--zone=区域] # 移除源地址 --permanent # 永久配置(需--reload) 示例: firewall-cmd --state # 检查状态 firewall-cmd --permanent --add-service=http # 永久允许HTTP firewall-cmd --permanent --add-port=8080/tcp # 永久允许8080端口 firewall-cmd --reload # 重载配置 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' # 允许子网SSH
2. SSH相关 (ssh/scp/ssh-keygen)
ssh命令:
ssh [选项] [用户@]主机 [命令] 选项: -p 端口 # 指定端口(默认22) -i 密钥文件 # 指定身份文件 -L [绑定地址:]本地端口:目标主机:目标端口 # 本地端口转发 -R [绑定地址:]远程端口:目标主机:目标端口 # 远程端口转发 -D [绑定地址:]端口 # 动态SOCKS代理 -N # 不执行远程命令(用于端口转发) -f # 后台运行 -q # 安静模式 -v[vv] # 详细模式 -X, -Y # 启用X11转发(信任/不信任) -t # 强制分配伪终端 -o 选项 # 指定配置选项(如StrictHostKeyChecking=no) 示例: ssh -p 2222 user@example.com # 指定端口连接 ssh -i ~/.ssh/id_rsa_server root@server # 使用指定密钥登录 ssh -L 8080:localhost:80 gateway # 本地端口转发 ssh -R 2222:localhost:22 gateway # 远程端口转发 ssh -D 1080 user@proxy # 创建SOCKS代理 ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" host # 跳过主机密钥检查
scp命令:
scp [选项] 源 目标 选项: -P 端口 # 指定端口(默认22) -p # 保留文件属性 -r # 递归复制目录 -q # 安静模式 -C # 压缩传输 -i 密钥 # 指定身份文件 -l 限制 # 带宽限制(Kbit/s) 源/目标格式: 本地文件: /path/to/file 远程文件: [user@]host:/path/to/file 示例: scp -P 2222 file.txt user@example.com:~/ # 指定端口复制文件 scp -r project/ user@server:/backup/ # 递归复制目录 scp -C user@server:/var/log/*.log ./logs/ # 压缩复制日志文件 scp -i ~/.ssh/id_rsa -l 1000 largefile user@host:~/ # 限速1Mbit/s传输
ssh-keygen命令:
ssh-keygen [选项] 选项: -t 类型 # 密钥类型(rsa,dsa,ecdsa,ed25519) -b 位数 # 密钥位数(如rsa默认3072) -f 文件 # 指定密钥文件 -C 注释 # 密钥注释(通常为email) -N 密码 # 新密码短语 -p # 更改密码短语 -q # 安静模式 -y # 从私钥提取公钥 -R 主机 # 从known_hosts删除主机 -F 主机 # 在known_hosts查找主机 示例: ssh-keygen -t ed25519 -C "user@example.com" # 创建ED25519密钥 ssh-keygen -t rsa -b 4096