Linux 常用命令大全|新手 & 运维必备,日常开发直接复制即用
·
📌 本文档涵盖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
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)