📌 本文档涵盖Linux入门到进阶的全部核心命令,适合运维工程师、开发者和IT从业者收藏备用。


一、文件和目录操作

文件和目录操作是Linux最基础也是最重要的技能,所有的系统管理都离不开文件操作。

1.1 目录查看与切换

命令 功能 示例
pwd 显示当前工作目录 pwd
cd 切换目录 cd /home cd .. cd -
ls 列出目录内容 ls -la ls -lh
tree 以树状图显示目录结构 tree -L 2

ls 常用选项:

  • -a:显示所有文件(包括隐藏文件)
  • -l:以列表形式显示详细信息
  • -h:人性化的文件大小显示
  • -R:递归显示子目录
  • -t:按修改时间排序
  • -S:按文件大小排序
  • -i:显示inode号
# 常见用法
ls -la /home          # 列出home目录所有文件(含隐藏)
ls -lh                # 人性化显示文件大小(KB/MB/GB)
ls -lt                # 按修改时间排序(最新在前)
ls -ltr               # 按修改时间倒序(最旧在前)

1.2 文件和目录创建

命令 功能 示例
mkdir 创建目录 mkdir test mkdir -p /a/b/c
touch 创建空文件 touch file.txt
nano 编辑文件 nano file.txt
vi/vim 编辑文件 vi file.txt
mkdir -p /project/app/src              # 递归创建目录
mkdir -m 755 test                      # 创建目录并设置权限
touch file{1..10}.txt                   # 批量创建文件

1.3 文件和目录复制

命令 功能 示例
cp 复制文件或目录 cp source dest
scp 远程复制文件 scp file user@host:/path
cp file.txt /backup/                    # 复制文件到目录
cp -r /source /dest/                    # 递归复制整个目录
cp -p file.txt /dest/                   # 保留文件属性复制
cp -a /source /dest/                    # 归档复制(保留所有属性)
scp -r root@192.168.1.10:/data /local/  # 从远程复制目录
scp file.txt root@192.168.1.10:/data    # 复制文件到远程

1.4 文件和目录移动/重命名

命令 功能 示例
mv 移动或重命名文件/目录 mv oldname newname
rename 批量重命名 rename .txt .bak *.txt
mv file.txt /newpath/                   # 移动文件
mv oldname newname                       # 重命名
mv *.log /logs/                          # 移动所有log文件
rename 's/\.txt$/\.bak/' *.txt           # 批量重命名

1.5 文件和目录删除

命令 功能 示例
rm 删除文件 rm file.txt
rmdir 删除空目录 rmdir dirname
rm -rf 强制删除目录及内容 rm -rf /tmp/test
rm file.txt                  # 删除单个文件
rm -f file.txt               # 强制删除文件(不提示)
rm -r /tmp/test              # 递归删除目录
rm -rf /tmp/test             # 强制递归删除(慎用!)
rm -i *.log                  # 删除前确认
# 危险操作!永远不要执行以下命令
# rm -rf / 或 rm -rf /*     # 这会删除整个系统!

1.6 文件属性

命令 功能 示例
stat 查看文件详细属性 stat file.txt
file 查看文件类型 file filename
wc 统计文件行数/字数 wc -l file.txt
basename 获取文件名 basename /path/file.txt
dirname 获取目录名 dirname /path/file.txt

二、文件内容查看

2.1 基础查看

命令 功能 特点
cat 查看整个文件 从头到尾显示
tac 反向查看文件 从尾到头显示
rev 反转每行 每行字符反转
cat file.txt                 # 查看整个文件
cat -n file.txt              # 显示行号
tac file.txt                 # 反向显示
head -20 file.txt            # 查看前20行
tail -50 file.txt            # 查看后50行
tail -f /var/log/messages    # 实时查看日志(Ctrl+C退出)
head -n 5 file.txt && tail -n 5 file.txt  # 查看第5行附近

2.2 分页查看

命令 功能 示例
more 分页查看(只向下) more file.txt
less 分页查看(可上下) less file.txt
more file.txt                # 分页显示
less file.txt                # 可上下翻页(更推荐)
less -N file.txt             # 显示行号
less +/keyword file.txt       # 搜索关键字并定位
# less内快捷键:j/k上下行,g/G首/末行,q退出,/搜索

2.3 文本处理

命令 功能 示例
grep 文本搜索 grep "pattern" file
sed 文本替换/编辑 sed 's/old/new/g' file
awk 文本分析 awk '{print $1}' file
cut 切割列 cut -d: -f1 file
sort 排序 sort file.txt
uniq 去重 uniq file.txt
wc 统计 wc -l file.txt
# grep高级用法
grep "error" /var/log/messages          # 搜索关键字
grep -i "error" file.txt                # 忽略大小写
grep -r "test" /path/                   # 递归搜索目录
grep -n "error" file.txt                # 显示行号
grep -v "test" file.txt                  # 反向搜索(不包含)
grep -E "error|warn" file.txt           # 扩展正则(多个条件)
grep "^root" /etc/passwd                 # 匹配行首
grep "100$" file.txt                     # 匹配行尾
grep -A 2 "error" file.txt               # 显示匹配行及后2行
grep -B 2 "error" file.txt               # 显示匹配行及前2行

# sed高级用法
sed 's/old/new/g' file.txt               # 全局替换
sed -i 's/old/new/g' file.txt            # 直接修改文件
sed '3d' file.txt                        # 删除第3行
sed '1,5d' file.txt                      # 删除1-5行
sed '/pattern/d' file.txt               # 删除匹配行
sed 'y/abc/ABC/' file.txt               # 字符替换

# awk高级用法
awk '{print $1}' file.txt                # 打印第1列
awk -F: '{print $1,$3}' /etc/passwd      # 指定分隔符
awk 'NR==5' file.txt                     # 打印第5行
awk 'NR>=10 && NR<=20' file.txt         # 打印10-20行
awk '/error/ {print $0}' file.txt        # 打印匹配行
awk '{sum+=$1} END {print sum}' file.txt # 求和
awk '{print NF}' file.txt                # 打印每行字段数

三、文件压缩与解压

3.1 tar打包命令

# 打包(不压缩)
tar -cvf archive.tar /path/to/dir

# 解包
tar -xvf archive.tar

# 压缩打包
tar -czvf archive.tar.gz /path/to/dir          # gzip压缩
tar -cjvf archive.tar.bz2 /path/to/dir         # bzip2压缩
tar -cJvf archive.tar.xz /path/to/dir          # xz压缩

# 解压解包
tar -xzvf archive.tar.gz                       # 解压gzip
tar -xjvf archive.tar.bz2                      # 解压bzip2
tar -xJvf archive.tar.xz                       # 解压xz
tar -xzvf archive.tar.gz -C /target/dir       # 解压到指定目录

参数说明:

  • -c:创建归档
  • -x:解压归档
  • -v:显示详细过程
  • -f:指定文件名
  • -z:使用gzip
  • -j:使用bzip2
  • -J:使用xz
  • -t:查看归档内容

3.2 zip/unzip

zip -r archive.zip /path/to/dir               # 压缩目录
zip -q -r archive.zip /path/to/dir             # 静默压缩
unzip archive.zip                              # 解压到当前目录
unzip archive.zip -d /target/                  # 解压到指定目录
unzip -l archive.zip                           # 查看zip内容
unzip -q archive.zip                           # 静默解压

3.3 gzip/gunzip

gzip file.txt                  # 压缩(删除原文件)
gzip -k file.txt               # 压缩保留原文件
gzip -d file.txt.gz            # 解压
gunzip file.txt.gz            # 解压
zcat file.txt.gz               # 查看压缩文件内容
zgrep "pattern" file.txt.gz    # 搜索压缩文件

四、权限管理

Linux系统采用严格的权限机制,理解权限是成为Linux高手的必经之路。

4.1 权限表示法

权限组:
- owner(所有者)  - group(所属组)  - others(其他用户)

权限类型:
- r(读取)= 4
- w(写入)= 2
- x(执行)= 1

权限示例:
rwxr-xr-x = 755 (所有者可读写执行,组和其他可读执行)
rw-r--r-- = 644 (所有者可读写,组和其他只读)
rwx------ = 700 (只有所有者可读写执行)

4.2 chmod命令

# 数字权限
chmod 755 file.txt             # 设置为rwxr-xr-x
chmod 644 file.txt             # 设置为rw-r--r--
chmod 700 file.txt             # 设置为rwx------
chmod -R 755 /path/to/dir       # 递归设置目录权限

# 符号权限
chmod u+x file.txt             # 给所有者添加执行权限
chmod g-w file.txt             # 给组移除写权限
chmod o=r file.txt             # 给其他用户设置为只读
chmod a+x file.txt             # 给所有用户添加执行权限
chmod u+rwx,g+rx,o+r file.txt  # 多种权限一起设置

# 特殊权限
chmod u+s file.txt             # 设置SUID(任何用户执行时具有所有者权限)
chmod g+s file.txt             # 设置SGID(目录中新建文件继承组)
chmod +t /tmp                  # 设置粘滞位(只有创建者能删除文件)

4.3 chown命令

chown user file.txt                     # 修改文件所有者
chown :group file.txt                   # 修改文件所属组
chown user:group file.txt               # 同时修改所有者和组
chown -R user:group /path/to/dir        # 递归修改目录

4.4 chgrp命令

chgrp group file.txt            # 修改文件所属组
chgrp -R group /path/to/dir     # 递归修改目录所属组

4.5 umask默认权限

umask                          # 查看当前umask值
umask 022                      # 设置umask为022
# 目录默认权限 = 777 - umask
# 文件默认权限 = 666 - umask
# umask 022 时:目录755,文件644

五、用户和用户组管理

5.1 用户管理

useradd username                # 创建新用户
useradd -m username             # 创建用户并创建家目录
useradd -u 1000 username        # 指定UID
useradd -g groupname username   # 指定主组
useradd -G group1,group2 username  # 指定附加组
useradd -s /bin/bash username   # 指定登录Shell
useradd -e 2025-12-31 username # 指定账号过期日期

usermod -l newname oldname      # 修改用户名
usermod -L username             # 锁定用户(禁止登录)
usermod -U username             # 解锁用户
usermod -aG groupname username   # 添加用户到附加组
usermod -d /new/home username   # 修改家目录

userdel username                # 删除用户
userdel -r username             # 删除用户及家目录

passwd username                 # 设置用户密码
passwd -l username              # 锁定密码
passwd -u username              # 解锁密码
passwd -S username              # 查看密码状态
echo "password" | passwd --stdin username  # 非交互式设置密码

5.2 用户组管理

groupadd groupname              # 创建用户组
groupadd -g 1000 groupname      # 指定GID
groupmod -n newname oldname    # 修改组名
groupmod -g 2000 groupname      # 修改GID
groupdel groupname              # 删除用户组

groups username                 # 查看用户所属组
grpck                          # 检查组文件完整性

5.3 用户信息查看

whoami                         # 显示当前用户名
who                            # 显示当前登录用户
w                              # 显示登录用户详情(含负载)
id                             # 显示当前用户UID、GID
id username                    # 显示指定用户信息
finger username                # 显示用户详细信息
last                           # 显示用户登录历史
lastlog                        # 显示所有用户最后登录时间

六、磁盘管理

6.1 磁盘使用查看

df -h                          # 查看磁盘使用情况(人类可读)
df -H                          # 以1KB=1000B计算
df -T                          # 显示文件系统类型
df -i                          # 显示inode使用情况
df -a                          # 显示所有文件系统

du -h /path                    # 查看目录大小(人类可读)
du -sh /path                   # 查看目录总大小
du -ah /path                   # 显示所有文件大小
du -h --max-depth=1 /path       # 显示到第1级子目录
du -h --max-depth=1 /path | sort -h  # 按大小排序
du -sm /path                   # 以MB为单位统计

6.2 磁盘分区

fdisk -l                       # 列出所有磁盘分区
fdisk /dev/sdb                 # 对磁盘进行分区操作
parted /dev/sdb                # 另一种分区工具(支持2TB+)
partprobe                      # 通知内核分区表变化

6.3 磁盘格式化

mkfs.ext4 /dev/sdb1            # 格式化为ext4
mkfs.xfs /dev/sdb1             # 格式化为xfs
mkfs.vfat /dev/sdb1            # 格式化为FAT32
mkfs.ntfs /dev/sdb1            # 格式化为NTFS
mkfs -t ext4 /dev/sdb1         # 指定文件系统类型

6.4 磁盘挂载

mount /dev/sdb1 /mnt           # 挂载分区到目录
mount -o remount,rw /          # 重新挂载(改变权限)
mount -o loop image.iso /mnt   # 挂载ISO镜像
mount -t ntfs /dev/sdb1 /mnt   # 指定文件系统类型挂载

umount /mnt                    # 卸载挂载
umount /dev/sdb1               # 通过设备名卸载
umount -l /mnt                 # 强制卸载(懒卸载)
umount -f /mnt                 # 强制卸载
fuser -k /mnt                  # 杀掉占用进程并卸载

# 开机自动挂载
vim /etc/fstab
# 添加以下行:
# /dev/sdb1 /mnt ext4 defaults 0 0

6.5 逻辑卷管理(LVM)

# 物理卷
pvdisplay                      # 显示物理卷信息
pvcreate /dev/sdb1             # 创建物理卷
pvmove /dev/sdb1 /dev/sdc1    # 移动数据

# 卷组
vgdisplay                      # 显示卷组信息
vgcreate vg01 /dev/sdb1        # 创建卷组
vgextend vg01 /dev/sdc1        # 扩展卷组
vgreduce vg01 /dev/sdb1        # 缩小卷组

# 逻辑卷
lvdisplay                      # 显示逻辑卷信息
lvcreate -L 10G -n lv01 vg01   # 创建逻辑卷
lvextend -L +5G /dev/vg01/lv01 # 扩展逻辑卷
resize2fs /dev/vg01/lv01       # 调整文件系统大小

七、网络管理

7.1 网络配置

# IP地址配置(CentOS/RHEL 7+)
nmcli connection show                          # 查看所有连接
nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24  # 设置IP
nmcli connection modify eth0 ipv4.gateway 192.168.1.1        # 设置网关
nmcli connection modify eth0 ipv4.dns "8.8.8.8,114.114.114.114"  # 设置DNS
nmcli connection up eth0                                      # 激活连接

# IP命令(新版工具)
ip addr show                    # 查看IP地址
ip addr add 192.168.1.100/24 dev eth0   # 添加IP
ip addr del 192.168.1.100/24 dev eth0    # 删除IP
ip link show                    # 查看网络接口
ip link set eth0 up            # 启用网络接口
ip link set eth0 down          # 禁用网络接口
ip route show                   # 查看路由表
ip route add default via 192.168.1.1     # 添加默认路由

# ifcfg命令(旧版)
ifconfig                        # 查看所有网络接口
ifconfig eth0                  # 查看指定接口
ifconfig eth0 192.168.1.100 netmask 255.255.255.0  # 设置IP
ifconfig eth0 up               # 启用接口
ifconfig eth0 down             # 禁用接口

# 主机名
hostname                        # 查看主机名
hostnamectl set-hostname newname   # 设置主机名
vim /etc/hostname              # 手动修改主机名

7.2 网络测试

ping -c 4 192.168.1.1          # ping测试(发送4次)
ping -c 4 www.google.com       # ping域名
ping -i 0.5 192.168.1.1        # 每0.5秒ping一次
ping -s 1000 192.168.1.1       # 指定数据包大小

traceroute 192.168.1.1         # 路由追踪
traceroute -n 192.168.1.1      # 不解析域名
traceroute -I 192.168.1.1      # 使用ICMP协议
mtr 192.168.1.1                # 实时路由追踪(更直观)

nslookup www.google.com        # DNS查询
dig www.google.com             # 详细DNS信息
dig +short www.google.com      # 只显示IP

curl http://www.example.com    # 测试HTTP请求
curl -I http://www.example.com # 只显示HTTP头
wget http://example.com/file   # 下载文件
wget -c http://example.com/file  # 断点续传
wget -b http://example.com/file  # 后台下载

7.3 网络连接查看

netstat -tunlp                  # 查看监听端口
netstat -anp                    # 查看所有连接
netstat -r                       # 查看路由表
netstat -i                       # 查看网络接口统计

ss -tunlp                       # 比netstat更快
ss -s                           # 显示连接统计
ss -a                           # 显示所有连接

nmap 192.168.1.1                # 扫描端口
nmap -p 80 192.168.1.1          # 扫描指定端口
nmap -sV 192.168.1.1            # 版本检测
nmap -O 192.168.1.1             # 操作系统检测

八、进程管理

8.1 进程查看

ps aux                         # 查看所有进程(BSD格式)
ps -ef                        # 查看所有进程(标准格式)
ps -eo pid,user,comm,%cpu,%mem  # 自定义格式显示
ps -ef | grep nginx           # 查找nginx进程
ps aux --sort=-%cpu | head    # 按CPU排序查看

top                           # 动态查看进程(默认3秒刷新)
top -d 1                      # 每1秒刷新一次
top -p 1234                   # 监控指定进程
top -u user                   # 只显示指定用户的进程
top然后按1                     # 显示所有CPU核心
top然后按M                    # 按内存排序
top然后按P                    # 按CPU排序
top然后按q                    # 退出

htop                          # 更友好的top(需安装)
atop                          # 高级进程监控

8.2 进程控制

kill 1234                     # 终止进程(SIGTERM)
kill -9 1234                   # 强制终止进程(SIGKILL)
kill -15 1234                  # 优雅终止进程
kill -l                        # 查看所有信号

killall nginx                 # 终止所有nginx进程
killall -9 nginx              # 强制终止
pkill -f nginx                # 按进程名终止

# 进程前后台切换
Ctrl+Z                         # 当前进程挂起到后台
jobs                           # 查看后台任务
bg %1                          # 将job 1切到后台运行
fg %1                          # 将job 1切回前台

nohup command &               # 后台运行(忽略挂起信号)
nohup ./script.sh > output.log 2>&1 &

screen                         # 终端复用器
screen -S name                 # 创建命名screen
screen -ls                     # 列出screen
screen -r name                 # 恢复screen
Ctrl+A D                       # 暂时离开screen

tmux                           # 另一个终端复用器

8.3 进程优先级

nice -n 10 command            # 以低优先级启动(nice值10)
nice -n -5 command            # 以高优先级启动
renice -n 10 -p 1234          # 修改运行中进程优先级
renice -n 10 -u username      # 修改用户所有进程优先级

九、系统信息

9.1 系统基本信息

uname -a                      # 显示系统所有信息
uname -r                      # 显示内核版本
uname -m                      # 显示硬件架构

cat /etc/os-release           # 显示操作系统版本信息
cat /etc/redhat-release       # RedHat/CentOS版本
lsb_release -a               # 显示发行版信息

hostname                      # 显示主机名
hostname -I                   # 显示主机IP
hostnamectl                   # 显示主机详细信息

uptime                        # 显示系统运行时间和负载
w                             # 显示登录用户和系统负载
who                           # 显示当前登录用户

9.2 硬件信息

# CPU信息
cat /proc/cpuinfo             # CPU详细信息
lscpu                         # CPU概况信息
nproc                         # CPU核心数

# 内存信息
cat /proc/meminfo             # 内存详细信息
free -h                       # 显示内存使用情况
free -m                       # 以MB为单位显示
vmstat                        # 虚拟内存统计
vmstat 1 5                    # 每秒1次,共5次

# 磁盘信息
lsblk                         # 列出块设备
blkid                         # 显示块设备UUID
lshw                          # 显示硬件详细信息
lspci                         # 显示PCI设备
lsusb                         # 显示USB设备

# 时间日期
date                          # 显示当前日期时间
date -s "2024-01-01 12:00:00" # 设置系统时间
timedatectl                   # 显示时区信息
timedatectl set-timezone Asia/Shanghai  # 设置时区

9.3 系统资源

top                           # 动态查看CPU和内存
htop                          # 更友好的top
vmstat 1                      # 每秒查看系统状态
iostat                        # 查看IO统计
iostat -x 1                   # 每秒显示扩展统计
netstat -i                    # 网络接口统计
watch -n 1 command            # 每秒执行命令

十、软件包管理

10.1 yum/dnf(RHEL/CentOS/Fedora)

# 基础操作
yum install package           # 安装软件包
yum install -y package        # 自动确认安装
yum remove package            # 卸载软件包
yum update package            # 更新软件包
yum update                    # 更新所有软件包
yum search keyword            # 搜索软件包
yum info package              # 查看软件包信息

# 包组操作
yum groupinstall "Development Tools"  # 安装开发工具
yum groups list               # 列出所有包组
yum groupremove "Development Tools"   # 卸载包组

# 缓存和历史
yum makecache                 # 创建缓存
yum clean all                 # 清理缓存
yum history                   # 查看操作历史
yum list installed            # 列出已安装
yum list available            # 列出可安装
yum list updates              # 列出可更新

# 版本和仓库
yum version                   # 查看yum版本
yum repolist                 # 列出仓库
yum install epel-release      # 安装扩展源

# dnf(Fedora新包管理器,用法类似)
dnf install package           # 安装包
dnf upgrade                   # 升级所有

10.2 apt(Debian/Ubuntu)

apt update                     # 更新软件包列表
apt upgrade                    # 升级所有软件包
apt install package            # 安装软件包
apt install -y package        # 自动确认安装
apt remove package            # 卸载软件包
apt purge package             # 卸载并删除配置
apt search keyword            # 搜索软件包
apt show package              # 显示软件包信息
apt list --installed          # 列出已安装
apt list --upgradable         # 列出可升级
apt autoremove                # 清理无用依赖
apt clean                     # 清理缓存
apt-get update                 # 更新(apt的底层工具)

10.3 zypper(openSUSE)

zypper install package        # 安装
zypper remove package         # 卸载
zypper update                 # 更新
zypper search keyword         # 搜索
zypper info package           # 信息

10.4 其他包管理器

# snap(通用)
snap install package          # 安装snap包
snap list                     # 列出snap包
snap remove package           # 卸载

# flatpak(通用)
flatpak install package       # 安装flatpak包
flatpak list                  # 列出
flatpak update                # 更新

# pip(Python包)
pip install package           # 安装Python包
pip list                      # 列出已安装
pip freeze                    # 导出依赖
pip uninstall package         # 卸载

# npm(Node.js包)
npm install package           # 安装
npm list                      # 列出
npm update                    # 更新
npm uninstall package         # 卸载
npm -g install package        # 全局安装

十一、查找命令

11.1 文件查找

# find(最强大的查找命令)
find / -name "file.txt"               # 全局搜索文件
find /home -name "*.log"             # 搜索所有log文件
find / -type f -name "*.conf"        # 搜索配置文件
find / -type d -name "test"          # 搜索目录
find / -mtime -7                     # 7天内修改的文件
find / -mtime 7                      # 正好7天前修改的文件
find / -mtime +7                     # 7天前修改的文件
find / -atime -1                     # 1天内访问的文件
find / -size +100M                   # 大于100MB的文件
find / -size -1G                     # 小于1GB的文件
find / -perm 755                     # 权限为755的文件
find / -user root                    # 属于root用户的文件
find / -group www-data               # 属于www-data组的文件
find / -empty                        # 空文件
find / -type f -exec chmod 644 {} \; # 批量修改权限

# find高级用法
find / -name "*.txt" -exec rm {} \;  # 删除所有txt文件
find / -name "*.log" -mtime +7 -delete  # 删除7天前的日志
find /path -type f -name "*.tmp" | xargs rm  # 管道删除

# locate(快速查找,基于数据库)
locate file.txt                # 快速定位文件
updatedb                       # 更新文件数据库

11.2 命令查找

which python                   # 查找命令路径
which -a python               # 查找所有同名命令
whereis python                # 查找命令、源码、man手册
type -a cd                    # 显示命令类型(builtin/alias/file)
command -v python             # 检测命令是否存在

11.3 xargs详解

# xargs:将管道输入转为命令行参数
find /tmp -name "*.log" | xargs rm                    # 删除所有log文件
cat file.txt | xargs                                   # 每行作为一个参数
echo "a b c d" | xargs -n 2                           # 每2个参数一组执行
find . -name "*.txt" | xargs -I {} wc -l {}            # -I指定替换符
find . -name "*.txt" | xargs -p wc -l                 # -p 确认执行
find . -name "*.txt" | xargs -0                        # 用null分隔
find . -name "*.txt" -print0 | xargs -0 rm             # 处理空格文件名

# 批量重命名
ls *.jpg | xargs -n1 rename -v 's/jpg/jpeg/'          # jpg转jpeg
ls | xargs -I {} mv {} {}.bak                          # 所有文件加.bak

11.4 文件对比

diff file1.txt file2.txt                   # 比较两个文件
diff -u file1.txt file2.txt                # 统一格式输出
diff -r dir1 dir2                           # 递归比较目录
diff -i file1.txt file2.txt                # 忽略大小写
diff -w file1.txt file2.txt                # 忽略空白

# side by side
diff -y file1.txt file2.txt                # 并排显示

# 常用场景
diff <(命令1) <(命令2)                      # 比较两个命令输出
diff -Naur old/ new/ > patch.diff          # 生成补丁文件
patch -p1 < patch.diff                     # 应用补丁

# cmp - 字节级比较
cmp file1 file2                            # 显示第一个不同位置
cmp -l file1 file2                        # 显示所有不同字节

11.4 内容查找

# grep用于文件搜索
grep -r "keyword" /path/      # 递归搜索目录
grep -rn "keyword" /path/     # 显示行号
grep -i "keyword" file        # 忽略大小写
grep -l "keyword" *.txt        # 只显示文件名
grep -c "keyword" file        # 统计匹配行数
grep -v "keyword" file        # 反向匹配(不包含)
grep -A 2 "keyword" file      # 显示匹配行及后2行
grep -B 2 "keyword" file      # 显示匹配行及前2行

# ripgrep(rg)更快的grep
rg "keyword" /path/           # 快速搜索
rg -i "keyword" file          # 忽略大小写
rg -l "keyword" *.py          # 只显示文件名

十二、管道和重定向

12.1 输入输出重定向

# 标准输入、输出、错误
command > file.txt            # 重定向输出到文件(覆盖)
command >> file.txt          # 追加重定向
command 2> file.txt          # 重定向错误输出
command 2>> file.txt         # 追加错误输出
command &> file.txt          # 重定向所有输出
command > file.txt 2>&1      # 标准输出和错误都重定向

# 输入重定向
command < file.txt           # 从文件读取输入
command << EOF
input text
EOF                           # Here Document

# /dev/null 黑洞设备
command > /dev/null 2>&1     # 丢弃所有输出

12.2 管道

# 管道:将前一个命令的输出作为后一个命令的输入
cat file.txt | grep "keyword"      # 查看并搜索
ls -la | head -20                   # 只看前20行
ps aux | grep nginx                 # 查找进程
df -h | grep sda                    # 查找特定磁盘
cat /var/log/messages | tail -100  # 查看最后100行

# 多重管道
cat access.log | grep "404" | awk '{print $1}' | sort | uniq -c | sort -rn
# 日志分析:查找404,提取IP,排序去重,再按次数排序

# 管道中的xargs
find /tmp -name "*.log" | xargs rm  # 查找并删除
cat file.txt | xargs                 # 将每行作为参数
find . -name "*.txt" | xargs -I {} wc -l {}

12.3 命令组合

# ; 不论成功与否都执行
command1 ; command2 ; command3

# && 前一个成功才执行后一个
command1 && command2 && command3

# || 前一个失败才执行后一个
command1 || command2 || command3

# 综合使用
cd /path && ls -la && echo "Success"
mkdir -p /data && cd /data || echo "Failed"

# 命令替换
echo "Current directory: $(pwd)"
echo "Today is `date +%Y-%m-%d`"

十三、编辑器

13.1 Vim基本操作

# 三种模式:普通模式、插入模式、命令模式

# 启动和退出
vim file.txt                 # 打开文件
vim +100 file.txt            # 打开并跳到第100行
vim + /keyword file.txt      # 打开并搜索关键字
:w                           # 保存
:w newfile.txt               # 另存为
:q                           # 退出
:q!                          # 强制退出不保存
:wq                          # 保存并退出
:x                           # 保存并退出
ZZ                           # 保存并退出(快捷键)

# 移动光标
h/j/k/l                      # 左/下/上/右
w/b                          # 下一个/上一个单词
0/$                          # 行首/行尾
gg/G                         # 文件首/末行
100G                         # 跳到第100行
Ctrl+d/Ctrl+u               # 半屏下/上

# 编辑
i                           # 在光标前插入
a                           # 在光标后插入
o/O                         # 在下行/上行插入
x                           # 删除光标字符
dd                          # 删除整行
5dd                         # 删除5行
yy                          # 复制整行
5yy                         # 复制5行
p/P                         # 粘贴到光标后/前
u                           # 撤销
Ctrl+r                      # 重做
.                           # 重复上一步

# 搜索替换
/keyword                     # 搜索
n/N                          # 下/上一个匹配
:%s/old/new/g               # 全局替换
:%s/old/new/gc              # 确认替换
:1,10s/old/new/g            # 替换1-10行

# 可视模式
v                           # 字符选择
V                           # 行选择
Ctrl+v                      # 块选择
y                           # 复制选择
d                           # 删除选择

# 多窗口
:split file.txt             # 水平分屏
:vsplit file.txt            # 垂直分屏
:wall                       # 保存所有窗口
:qall                       # 退出所有窗口
Ctrl+w+w                    # 切换窗口

# 其他
:set number                 # 显示行号
:set nu                     # 显示行号
:set nonu                    # 隐藏行号
:syntax on                  # 语法高亮
:set hlsearch               # 高亮搜索

13.2 Nano编辑器

nano file.txt               # 打开文件
# 常用快捷键:
Ctrl+O                      # 保存
Ctrl+X                      # 退出
Ctrl+W                      # 搜索
Ctrl+K                      # 剪切行
Ctrl+U                      # 粘贴
Ctrl+Y                      # 上一页
Ctrl+V                      # 下一页
Alt+3                       # 切换注释

十四、系统服务管理

14.1 systemd(现代系统)

# 服务管理
systemctl start nginx              # 启动服务
systemctl stop nginx               # 停止服务
systemctl restart nginx            # 重启服务
systemctl reload nginx             # 重载配置
systemctl status nginx             # 查看状态
systemctl enable nginx             # 开机自启
systemctl disable nginx           # 取消开机自启
systemctl is-enabled nginx        # 检查是否自启
systemctl daemon-reload           # 重载systemd配置

# 查看服务
systemctl list-units --type=service           # 列出所有服务
systemctl list-units --type=service --state=running  # 运行中的服务
systemctl list-dependencies nginx              # 服务依赖关系

# 常用服务
systemctl enable --now nginx      # 启用并立即启动
systemctl mask nginx              # 禁用服务(屏蔽)
systemctl unmask nginx            # 取消屏蔽

# 查看日志
journalctl -u nginx               # 查看服务日志
journalctl -u nginx -f            # 实时查看
journalctl -u nginx --since today  # 今天日志
journalctl -u nginx -n 100        # 最近100行
journalctl --disk-usage           # 查看日志占用
journalctl --vacuum-size=500M    # 清理日志

14.2 service(旧版)

service nginx start               # 启动服务
service nginx stop                # 停止服务
service nginx restart             # 重启服务
service nginx status             # 查看状态

十五、定时任务

15.1 cron

# crontab格式
# * * * * * command
# 分 时 日 月 周 命令
# 分:0-59
# 时:0-23
# 日:1-31
# 月:1-12
# 周:0-7(0和7都是周日)

# 示例
* * * * * /path/to/script.sh         # 每分钟执行
0 * * * * /path/to/script.sh         # 每小时执行
0 0 * * * /path/to/script.sh         # 每天午夜执行
0 0 * * 0 /path/to/script.sh         # 每周日执行
0 0 1 * * /path/to/script.sh         # 每月1日执行
0 0 1 1 * /path/to/script.sh         # 每年1月1日执行
*/5 * * * * /path/to/script.sh       # 每5分钟执行
0 */2 * * * /path/to/script.sh       # 每2小时执行
30 8 * * 1-5 /path/to/script.sh      # 工作日8:30执行

# crontab命令
crontab -e                         # 编辑crontab
crontab -l                          # 查看crontab
crontab -r                          # 删除crontab
crontab -u username -e             # 编辑其他用户crontab

# 查看cron日志
grep CRON /var/log/cron            # CentOS/RHEL
grep cron /var/log/syslog          # Debian/Ubuntu

15.2 at(一次性任务)

at 14:00                           # 下午2点执行
at 14:00 tomorrow                  # 明天下午2点
at now + 1 hour                    # 1小时后
at -l                              # 查看待执行任务
atrm 1                             # 删除任务

十六、SSH远程连接

16.1 基础连接

ssh user@hostname                   # 连接远程主机
ssh -p 2222 user@hostname           # 指定端口
ssh -i ~/.ssh/key user@hostname     # 使用密钥连接
ssh -l username hostname            # 指定用户
ssh -v hostname                     # 显示详细连接信息
ssh -X hostname                     # 启用X11转发

16.2 密钥管理

ssh-keygen -t rsa                   # 生成RSA密钥
ssh-keygen -t ed25519               # 生成Ed25519密钥(更安全)
ssh-keygen -t rsa -b 4096           # 生成4096位RSA密钥
ssh-keygen -p                      # 修改密钥密码
ssh-copy-id user@hostname          # 复制公钥到远程
ssh-copy-id -i ~/.ssh/key.pub user@hostname  # 指定公钥

# 配置
vim ~/.ssh/config
# 格式:
# Host alias
#     HostName hostname
#     User username
#     Port 22
#     IdentityFile ~/.ssh/key

16.3 SSH隧道

ssh -L 8080:localhost:80 user@hostname    # 本地端口转发
ssh -R 8080:localhost:80 user@hostname    # 远程端口转发
ssh -D 1080 user@hostname                 # SOCKS代理
ssh -N -L 8080:localhost:80 hostname      # 只建立隧道不执行命令

16.4 scp远程复制

scp file.txt user@hostname:/path/        # 上传文件
scp user@hostname:/path/file.txt .       # 下载文件
scp -r /local/dir user@hostname:/path/   # 递归上传目录
scp -P 2222 file.txt user@hostname:/path/  # 指定端口
scp -i key.pem file.txt user@hostname:/path/  # 使用密钥

十七、日志查看

17.1 系统日志

# 主要日志文件
/var/log/messages              # 主要系统日志(CentOS/RHEL)
/var/log/syslog                # 系统日志(Debian/Ubuntu)
/var/log/secure               # 安全日志
/var/log/audit/audit.log      # 审计日志
/var/log/dmesg                 # 启动日志
/var/log/boot.log             # 启动过程日志
/var/log/yum.log              # yum日志
/var/log/cron                 # 计划任务日志

# 内核日志
dmesg                          # 查看内核消息
dmesg -T                       # 人类可读时间
dmesg -w                       # 实时监控
journalctl --dmesg             # systemd管理的内核日志

17.2 日志管理

# 日志查看
tail -f /var/log/messages      # 实时查看日志
tail -n 100 /var/log/messages  # 查看最后100行
grep "error" /var/log/messages # 搜索错误
awk '/error/ {print $0}' /var/log/messages | tail

# 日志轮转
logrotate -f /etc/logrotate.conf  # 强制轮转
logrotate -d /etc/logrotate.conf # 测试配置

17.3 应用日志

# nginx
tail -f /var/log/nginx/access.log     # 访问日志
tail -f /var/log/nginx/error.log       # 错误日志

# apache
tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/error_log

# mysql
tail -f /var/log/mysqld.log
tail -f /var/log/mariadb/mariadb.log

# docker
docker logs container_name
docker logs -f container_name          # 实时
docker logs --tail 100 container_name  # 最近100行

十八、磁盘IO与性能监控

18.1 IO监控

iostat -x 1                      # 每秒显示IO统计
iostat -x -d 1                   # 只显示设备
iostat -p sda 1                  # 显示特定设备
iostat -m                        # 以MB/s显示
iotop                            # 按进程显示IO(需安装)
iotop -o                        # 只显示有IO的进程

# 压力测试
dd if=/dev/zero of=test bs=1M count=1000 oflag=direct  # 写入测试
hdparm -t /dev/sda              # 读取速度测试

18.2 网络监控

ifstat                          # 网络流量统计
iftop                           # 实时流量监控(需安装)
nethogs                         # 按进程显示流量(需安装)
tcpdump -i eth0                 # 抓包分析
tcpdump -i eth0 port 80        # 抓取80端口
tcpdump -i eth0 -w capture.pcap # 保存到文件

18.3 综合监控

# 系统总体
vmstat 1                       # 虚拟内存统计
mpstat 1                       # CPU统计
free -h                        # 内存使用
uptime                          # 系统负载

# 进程监控
top -bn1                        # 一次性显示
htop                            # 交互式(需安装)
btop                            # 更美观的(需安装)
glances                         # 全方位监控(需安装)

# 历史记录
sar -u 1 10                    # CPU使用率
sar -r 1 10                    # 内存使用
sar -d 1 10                    # 磁盘IO
sar -n DEV 1 10                # 网络流量

十九、文件权限特殊属性

19.1 SUID/SGID/Sticky Bit

# SUID(设置在可执行文件上)
chmod u+s executable            # 设置SUID
chmod 4755 executable          # 数值方式设置SUID
# 效果:任何用户执行此文件时,拥有文件所有者的权限
# 例子:passwd命令,任何用户可以用它修改自己的密码

# SGID(设置在可执行文件或目录上)
chmod g+s directory             # 设置SGID
chmod 2755 directory           # 数值方式设置SGID
# 效果:在目录中创建的文件继承目录的组

# Sticky Bit(设置在目录上)
chmod +t directory             # 设置粘滞位
chmod 1777 directory           # 数值方式设置粘滞位
# 效果:只有文件创建者能删除自己的文件
# 例子:/tmp目录

19.2 文件属性

# 查看属性
lsattr file.txt                # 查看文件属性
lsattr -a /path/              # 查看目录及内容属性

# 修改属性
chattr +a file.txt             # 只允许追加
chattr +i file.txt            # 不可修改(锁死)
chattr +A file.txt            # 不修改访问时间
chattr +S file.txt            # 同步写入
chattr -a file.txt            # 移除属性
chattr -i file.txt            # 解锁文件

二十、Linux快捷键与技巧

20.1 Shell快捷键

# 光标移动
Ctrl+a                          # 跳到行首
Ctrl+e                          # 跳到行尾
Ctrl+b/Alt+b                    # 向左/右移动一个词
Ctrl+←/→                        # 左右移动一个词

# 编辑
Ctrl+u                          # 删除光标前所有
Ctrl+k                          # 删除光标后所有
Ctrl+w                          # 删除光标前一个词
Ctrl+y                          # 粘贴删除的内容
Ctrl+t                          # 交换两个字符
Alt+t                           # 交换两个词
Ctrl+_                          # 撤销

# 命令
Ctrl+r                          # 搜索历史命令
Ctrl+g                          # 退出历史搜索
Ctrl+c                          # 终止当前命令
Ctrl+z                          # 挂起当前命令(后台)
Ctrl+d                          # 退出Shell
Ctrl+l                          # 清屏(等于clear)

# 其他
Tab                             # 自动补全
Tab Tab                         # 显示所有可能选项
!!                              # 执行上一条命令
!n                              # 执行第n条历史命令
!string                         # 执行最近以string开头的命令
Esc+.                           # 使用上一个命令的最后一个参数

20.2 通配符与正则

# Shell通配符(用于文件名匹配)
*                               # 匹配任意字符
?                               # 匹配单个字符
[abc]                           # 匹配a、b或c
[a-z]                           # 匹配a到z
[^abc]                          # 不匹配abc
ls *.txt                        # 所有txt文件
ls file?.txt                   # file1.txt, file2.txt等

# 正则表达式(用于文本匹配)
^                               # 行首
$                               # 行尾
.                               # 任意单个字符
*                               # 前一个字符0次或多次
+                               # 前一个字符1次或多次
?                               # 前一个字符0次或1次
[]                              # 字符类
[^]                             # 否定字符类
()                              # 组
|                               # 或
{n}                             # 精确匹配n次
{n,}                            # 至少n次
{n,m}                           # n到m次
\                               # 转义
grep "^root" /etc/passwd        # 以root开头的行
grep "100$" file.txt           # 以100结尾的行
grep "go*d" file.txt           # g*d(goooood)

二十一、容器相关命令

21.1 Docker基础

# 镜像管理
docker images                  # 查看本地镜像
docker pull image_name         # 拉取镜像
docker rmi image_name          # 删除镜像
docker build -t name:tag .     # 构建镜像
docker image prune            # 清理悬空镜像

# 容器管理
docker ps                      # 查看运行中容器
docker ps -a                   # 查看所有容器
docker run -d image            # 后台运行
docker run -it image /bin/bash # 交互式运行
docker start container         # 启动容器
docker stop container          # 停止容器
docker restart container        # 重启容器
docker rm container            # 删除容器
docker rm -f container         # 强制删除

# 进入容器
docker exec -it container bash # 进入容器bash
docker attach container        # 进入容器(共享进程)

# 日志与监控
docker logs container          # 查看日志
docker logs -f container       # 实时日志
docker stats container         # 资源统计
docker top container           # 进程信息

# 网络与存储
docker network ls              # 查看网络
docker volume ls               # 查看卷
docker port container          # 端口映射

21.2 Docker Compose

docker-compose up -d           # 启动服务
docker-compose down            # 停止服务
docker-compose ps              # 查看状态
docker-compose logs -f         # 查看日志
docker-compose build           # 构建
docker-compose restart         # 重启
docker-compose scale web=3     # 扩展服务

21.3 Kubernetes

# Pod
kubectl get pods               # 查看Pod
kubectl describe pod name      # Pod详情
kubectl logs podname           # 查看日志
kubectl exec -it podname -- /bin/bash  # 进入Pod
kubectl delete pod name        # 删除Pod
kubectl apply -f file.yaml    # 应用配置
kubectl delete -f file.yaml    # 删除资源

# Deployment
kubectl get deployments        # 查看Deployment
kubectl scale deployment name --replicas=3  # 扩缩容
kubectl rollout restart deployment name     # 重启

# Service
kubectl get services           # 查看Service
kubectl expose deployment name --port=80 --type=LoadBalancer  # 暴露服务

# 集群信息
kubectl cluster-info          # 集群信息
kubectl get nodes             # 查看节点
kubectl get namespaces        # 查看命名空间
kubectl config current-context # 当前上下文

二十二、总结速查表

22.1 日常高频命令速查

【文件操作】
ls -la /path                   # 查看目录
cd /path && ls                 # 进入并查看
cp -r source/ dest/            # 递归复制
mv old new                     # 重命名
rm -rf /path                   # 强制删除(慎用)

【文本处理】
cat file | grep keyword        # 搜索
head -20 file                  # 查看前20行
tail -f file                    # 实时查看
awk -F: '{print $1}' file      # 提取列

【系统信息】
top                            # 进程监控
free -h                        # 内存
df -h                          # 磁盘
ifconfig/ip addr               # IP
netstat -tunlp                 # 端口

【软件管理】
yum install -y package         # CentOS安装
apt install package            # Ubuntu安装
systemctl restart service      # 重启服务

【权限】
chmod 755 file                 # 修改权限
chown user:group file          # 修改所有者

22.2 命令速查思维导图

Linux命令
├── 文件操作: ls/cd/cp/mv/rm/mkdir/touch
├── 文件查看: cat/head/tail/less/grep
├── 文本处理: awk/sed/sort/uniq/wc/cut/tr/tee
├── 压缩解压: tar/zip/gzip/zipinfo
├── 权限: chmod/chown/chgrp/umask
├── 用户: useradd/usermod/userdel/passwd
├── 磁盘: df/du/fdisk/mkfs/mount
├── 网络: ping/traceroute/nslookup/curl/wget
├── 进程: ps/top/kill/pkill/nohup
├── 软件: yum/apt/dnf/pip/npm
├── 服务: systemctl/service
├── 定时: crontab/at
├── 日志: journalctl/tail/grep
├── 容器: docker/docker-compose/kubectl
└── 快捷键: Tab/Ctrl+r/Ctrl+c/Ctrl+l

二十三、环境变量与别名

23.1 alias命令别名

# 查看别名
alias                         # 查看所有别名
alias alias_name               # 查看指定别名

# 设置临时别名(当前会话有效)
alias ll='ls -la'             # 设置ll为ls -la
alias gs='git status'         # 设置gs快捷命令
alias ..='cd ..'              # ..快速返回上级目录
alias -p                      # 显示为可执行的alias命令

# 设置永久别名(需写入配置文件)
vim ~/.bashrc                  # 用户级别配置
vim /etc/bashrc               # 系统级别配置
# 添加:alias ll='ls -la'
source ~/.bashrc              # 重新加载配置

# 删除别名
unalias ll                     # 删除单个别名
unalias -a                     # 删除所有别名

23.2 export环境变量

# 查看环境变量
echo $PATH                     # 查看PATH变量
env                           # 显示所有环境变量
printenv HOME                 # 显示指定变量
set                           # 显示所有变量(包括本地变量)

# 设置环境变量
export VAR=value               # 临时设置(当前会话)
export PATH=$PATH:/new/path    # 添加到PATH

# 永久设置
vim ~/.bash_profile            # 用户登录配置
vim ~/.bashrc                  # 用户Shell配置
vim /etc/profile               # 系统全局配置
# 添加:export JAVA_HOME=/usr/local/jdk

# 常用环境变量
echo $HOME                     # 用户主目录
echo $USER                     # 当前用户名
echo $SHELL                    # 默认Shell
echo $PWD                      # 当前目录
echo $PATH                     # 命令搜索路径
echo $LANG                     # 语言设置
echo $HOSTNAME                 # 主机名

# 设置代理
export http_proxy=http://proxy.com:8080
export https_proxy=https://proxy.com:8080

二十四、字符处理工具

24.1 tr字符转换

# 字符替换
echo "hello world" | tr 'a-z' 'A-Z'     # 小写转大写
echo "HELLO" | tr 'A-Z' 'a-z'           # 大写转小写

# 字符删除
echo "hello123world" | tr -d '0-9'      # 删除所有数字
echo "hello world" | tr -d ' '          # 删除空格
echo "hello" | tr -s 'l'                # 压缩重复字符

# 字符集
tr '[:lower:]' '[:upper:]' < file.txt  # 转换为大写
tr '[:digit:]' 'n' < file.txt          # 数字转n
tr -cd '[:alnum:]' < file.txt          # 只保留字母数字

# 其他用法
tr -s ' '                               # 压缩多个空格为一个
tr '.' '-'                              # 句号转横线
echo "a b c" | tr ' ' '\n'              # 空格转换行

24.2 tee双向输出

# 同时输出到屏幕和文件
echo "hello" | tee output.txt           # 覆盖写入
echo "hello" | tee -a output.txt       # 追加写入

# 常用场景
ls -la | tee list.txt | grep ".log"   # 保存同时过滤
echo "text" | tee file1.txt file2.txt  # 写入多个文件
command | tee file.txt | other_command # 管道组合

# sudo写入系统文件
echo "config" | sudo tee /etc/file     # sudo写入
echo "config" | sudo tee -a /etc/file  # sudo追加

24.3 文件远程同步rsync

# 本地同步
rsync -av /source/ /dest/              # 同步目录(-a保持属性)
rsync -avz /source/ /dest/             # 压缩传输
rsync -av --delete /source/ /dest/    # 同步删除(目标有而源没有的会删除)

# 远程同步
rsync -avz /local/path/ user@host:/remote/path/  # 本地到远程
rsync -avz user@host:/remote/path/ /local/path/  # 远程到本地

# 选项说明
rsync -a              # 归档模式(等于-rlptgoD)
rsync -v              # 显示详情
rsync -z              # 压缩传输
rsync -P              # 显示进度(等于--partial --progress)
rsync --dry-run      # 模拟运行
rsync -n              # 预览同步内容
rsync --exclude="*.log"  # 排除文件
rsync --include="*.conf" # 包含文件
rsync -e "ssh -p 2222"   # 指定SSH端口

# 常用示例
rsync -avP --delete /data/ backup@server:/backup/  # 增量备份
rsync -avz --exclude={'*.tmp','*.log'} source/ dest/  # 排除多个

二十五、网络工具详解

25.1 curl高级用法

# 基础请求
curl http://example.com              # GET请求
curl -X POST http://example.com       # POST请求
curl -I http://example.com            # 只看响应头
curl -i http://example.com           # 显示响应头
curl -v http://example.com           # 详细过程

# 请求头
curl -H "Content-Type: application/json" http://example.com
curl -H "Authorization: Bearer token" http://example.com
curl -H "User-Agent: Mozilla/5.0" http://example.com

# 请求体
curl -d '{"key":"value"}' http://example.com      # POST数据
curl -d "name=test&age=20" http://example.com    # 表单数据
curl -X PUT -d "data" http://example.com          # PUT请求
curl -F "file=@document.pdf" http://example.com  # 上传文件

# 下载保存
curl -O http://example.com/file.zip              # 下载并保存原名
curl -o newname.zip http://example.com/file.zip  # 下载并改名
curl -C - -O http://example.com/file.zip         # 断点续传
curl -z "Mon, 01 Jan 2024" http://example.com    # 条件下载

# 认证和代理
curl -u user:pass http://example.com             # Basic认证
curl --cert /path/to/cert http://example.com     # 客户端证书
curl -k http://example.com                       # 忽略SSL证书
curl -x http://proxy:8080 http://example.com    # 使用代理

# 其他
curl --limit-rate 1000k http://example.com      # 限速
curl --max-time 30 http://example.com           # 超时时间
curl --connect-timeout 10 http://example.com    # 连接超时
curl -L http://example.com                       # 重定向跟随
curl -s http://example.com                       # 静默模式
curl -w "%{http_code}" http://example.com       # 显示状态码

25.2 防火墙firewalld(CentOS/RHEL 7+)

# 基础命令
firewall-cmd --state                    # 查看防火墙状态
firewall-cmd --reload                    # 重载配置
firewall-cmd --panic-on                 # 启用紧急模式
firewall-cmd --panic-off                # 关闭紧急模式

# 区域管理
firewall-cmd --list-all                 # 查看默认区域所有配置
firewall-cmd --list-all --zone=public   # 查看指定区域
firewall-cmd --get-default-zone         # 获取默认区域
firewall-cmd --set-default-zone=public  # 设置默认区域

# 端口管理
firewall-cmd --zone=public --add-port=80/tcp           # 添加端口
firewall-cmd --zone=public --remove-port=80/tcp        # 移除端口
firewall-cmd --zone=public --list-ports                 # 列出开放端口
firewall-cmd --zone=public --add-port=1000-2000/tcp    # 添加端口段

# 服务管理
firewall-cmd --zone=public --add-service=http          # 添加服务
firewall-cmd --zone=public --remove-service=http       # 移除服务
firewall-cmd --zone=public --list-services             # 列出开放服务

# 永久生效
firewall-cmd --permanent --add-port=80/tcp             # 永久添加端口
firewall-cmd --permanent --add-service=http            # 永久添加服务
firewall-cmd --reload                                 # 重载生效

# IP访问控制
firewall-cmd --zone=public --add-source=192.168.1.0/24
firewall-cmd --zone=public --remove-source=192.168.1.0/24

# 端口转发
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10

25.3 网卡工具ethtool

# 查看网卡信息
ethtool eth0                          # 查看eth0详细信息
ethtool -i eth0                        # 查看网卡驱动
ethtool -S eth0                        # 查看网卡统计
ethtool -k eth0                        # 查看网卡特性
ethtool -g eth0                        # 查看Ring Buffer

# 修改网卡参数
ethtool -s eth0 speed 1000            # 设置速率(单位Mbps)
ethtool -s eth0 duplex full            # 设置全双工
ethtool -s eth0 autoneg off            # 关闭自动协商
ethtool -s eth0 wol g                  # 开启网络唤醒

# 网卡测试
ethtool -t eth0                        # 物理连接测试
ethtool -t eth0 online                # 在线自检
ethtool -t eth0 offline               # 离线测试

25.4 网络诊断

# 带宽测试
iperf3 -s                             # 启动服务端
iperf3 -c server_ip                   # 启动客户端测试

# DNS测试
host www.example.com                   # DNS查询
resolvectl status                      # 查看DNS状态
cat /etc/resolv.conf                   # 查看DNS配置

# 连接追踪
ss -tunapl                             # 所有连接详情
netstat -antp                          # TCP连接
netstat -anup                          # UDP连接
lsof -i :80                            # 端口占用进程
fuser 80/tcp                          # 杀掉占用端口的进程

# 带宽监控
bmon                                  # 带宽监控(需安装)
speedometer -r eth0 -t eth0           # 实时流量图

二十六、find命令补充

26.1 时间查找

# 按修改时间(-mtime)
find / -mtime -7                      # 7天内修改的文件
find / -mtime 7                       # 第7天修改的文件
find / -mtime +7                      # 7天前修改的文件
find / -mmin -30                      # 30分钟内修改

# 按访问时间(-atime)
find / -atime -1                      # 1天内访问过
find / -amin -60                      # 60分钟内访问过

# 按状态改变时间(-ctime)
find / -ctime -3                      # 3天内状态改变

# 时间比较
find / -newer file.txt                # 比file.txt更新
find / -! -newer file.txt             # 比file.txt更旧
find / -newermt "2024-01-01"         # 比指定时间新
find / -newermt "2024-01-01" ! -newermt "2024-02-01"  # 时间范围内

# 秒级时间
find / -mmin -5                       # 5分钟内修改
find / -cmin +10                      # 10分钟前改变状态

26.2 高级查找

# 组合条件
find / -name "*.log" -size +100M     # 大于100M的log
find / -user www-data -group www-data # 属于www-data的文件
find / -type f -links +2              # 硬链接数大于2

# 逻辑运算符
find / -name "*.txt" -o -name "*.log"         # 或
find / -name "*.tmp" ! -path "/tmp/*"         # 排除
find / -name "*.log" -and -mtime -7            # 且
find / -type f ! -name ".*"                    # 非隐藏文件

# 组合测试
find / -type f \( -name "*.log" -o -name "*.txt" \) -mtime -7

# 排除目录
find / -path "/proc" -prune -o -type f -print
find / -type d -name ".git" -prune -o -type f -print

# 高级操作
find / -type f -exec chmod 644 {} \;          # 修改权限
find / -type f -exec chown user:group {} \;   # 修改所有者
find / -type f -exec md5sum {} \; > checksums.txt  # 计算校验和
find / -type f -name "*.tmp" -delete          # 删除

二十七、补充命令速查

27.1 字符串处理

# expr
expr length "hello"                    # 字符串长度
expr substr "hello" 2 3               # 截取字符串(从2开始,3个字符)
expr index "hello" l                   # 查找字符位置
expr match "hello" "hel*"              # 正则匹配
expr 10 + 5                           # 算术运算

# 变量处理
${var:-default}                       # 变量为空时使用默认值
${var:=default}                        # 变量为空时赋值并使用
${var:+value}                          # 变量不为空时使用value
${var#pattern}                         # 从开头删除最短匹配
${var##pattern}                        # 从开头删除最长匹配
${var%pattern}                         # 从结尾删除最短匹配
${var%%pattern}                        # 从结尾删除最长匹配
${var/old/new}                         # 替换第一个匹配
${var//old/new}                        # 替换所有匹配

# 字符串切片
${var:0:3}                             # 提取前3个字符
${var:3}                               # 提取第3个字符之后

27.2 日期时间

# 格式化输出
date                                    # 默认格式
date +"%Y-%m-%d %H:%M:%S"              # 自定义格式
date +"%s"                              # 时间戳
date +"%Y%m%d%H%M%S"                   # 文件名友好格式
date -d "2024-01-01" +"%A"             # 星期几
date -d "yesterday"                     # 昨天
date -d "tomorrow"                     # 明天
date -d "1 week ago"                   # 一周前
date -d "+3 days"                      # 3天后

# 时间戳转换
date -d @1609459200                    # 时间戳转日期
echo $(date +%s)                       # 当前时间戳

27.3 系统监控补充

# dstat(综合监控)
dstat                                  # 默认显示
dstat -cdl                            # CPU、磁盘、负载
dstat -cm                             # CPU、内存
dstat --fs                            # 文件系统
dstat -ta                             # 所有资源

# collectl
collectl -s CPU                       # CPU监控
collectl -s MEM                       # 内存监控
collectl -s DISK                      # 磁盘监控

# monit(进程监控)
monit status                          # 查看所有服务状态
monit start service_name              # 启动服务
monit stop service_name               # 停止服务
monit reload                          # 重载配置

27.4 其他实用命令

# watch - 定期执行命令
watch -n 1 'df -h'                    # 每秒监控磁盘
watch -d 'netstat -ant'              # 高亮变化部分
watch -n 2 'ps aux | grep process'   # 监控进程

# time - 测量命令执行时间
time ls -la /path

# seq - 生成序列
seq 1 10                              # 1到10
seq 0 2 10                            # 0到10,步长2
seq -f "%.2f" 1 0.5 3                # 格式化浮点序列

# shuf - 随机排序
echo {1..10} | tr ' ' '\n' | shuf    # 随机打乱
shuf -i 1-100 -n 10                   # 随机10个数

# yes - 重复输出
yes | command                          # 自动回答yes
yes n | command                        # 自动回答no
yes "y" | ./install.sh                # 批量自动安装

# expect - 自动化交互
expect << 'EOF'
spawn ssh user@host
expect "password:"
send "password\r"
expect "~#"
send "exit\r"
EOF
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐