Linux运维常用命令大全
Linux运维常用命令大全
1. 基础命令
文件操作
ls
- 概念:列出目录内容
- 示例:
ls # 列出当前目录文件 ls -l # 详细列表(权限、所有者、大小、时间) ls -a # 显示隐藏文件(以.开头的文件) ls -lhS # 按大小降序排列,人类可读格式 ls -ltr # 按修改时间倒序排列
cp
- 概念:复制文件或目录
- 示例:
cp file1.txt file2.txt # 复制文件 cp -r dir1 dir2 # 递归复制目录 cp -a source dest # 保留权限、属性的归档复制 cp -v file1.txt /path/to/dir/ # 显示复制过程
mv
- 概念:移动或重命名文件/目录
- 示例:
mv oldname.txt newname.txt # 重命名文件 mv file.txt /path/to/dir/ # 移动文件到目录 mv -f file.txt /existing/path/ # 强制移动(覆盖不提示) mv dir1 dir2 # 重命名目录
rm
- 概念:删除文件或目录
- 示例:
rm file.txt # 删除文件 rm -r dir/ # 递归删除目录及其内容 rm -rf dir/ # 强制删除目录(无提示,危险操作) rm *.log # 删除所有.log文件
touch
- 概念:创建空文件或更新文件时间戳
- 示例:
touch newfile.txt # 创建空文件 touch file1.txt file2.txt # 创建多个文件 touch -t 202312312359 file.txt # 设置文件时间戳为指定日期时间
cat
- 概念:连接并显示文件内容
- 示例:
cat file.txt # 显示文件内容 cat file1.txt file2.txt > combined.txt # 合并文件 cat -n file.txt # 显示行号 cat > newfile.txt # 从标准输入创建文件(Ctrl+D结束)
more/less
- 概念:分页查看文件内容(less支持前后滚动)
- 示例:
more largefile.txt # 空格键翻页,q退出 less largefile.txt # 支持上下键滚动,/pattern搜索,q退出 less +G largefile.txt # 直接跳转到文件末尾
head/tail
- 概念:查看文件开头/结尾内容
- 示例:
head file.txt # 查看前10行(默认) head -n 20 file.txt # 查看前20行 tail file.txt # 查看最后10行 tail -n 15 file.txt # 查看最后15行 tail -f /var/log/messages # 实时跟踪日志文件更新 tail -F /var/log/messages # 跟踪文件,即使文件被轮转
目录管理
cd
- 概念:切换当前工作目录
- 示例:
cd /path/to/dir # 进入指定目录 cd .. # 返回上一级目录 cd # 回到当前用户家目录 cd ~username # 进入指定用户的家目录 cd - # 回到上一次工作目录
pwd
- 概念:显示当前工作目录的绝对路径
- 示例:
pwd # 输出当前目录路径
mkdir
- 概念:创建目录
- 示例:
mkdir newdir # 创建单个目录 mkdir -p dir1/dir2/dir3 # 创建多级目录(父目录不存在则自动创建) mkdir -m 755 secure_dir # 创建指定权限的目录
rmdir
- 概念:删除空目录(非空目录需用rm -r)
- 示例:
rmdir emptydir # 删除空目录 rmdir -p dir1/dir2 # 删除多级空目录
权限管理
chmod
- 概念︰修改文件/目录权限
- 示例:
chmod u+x file.sh # 给所有者添加执行权限 chmod g+w file.txt # 给所属组添加写权限 chmod o-r file.txt # 移除其他用户的读权限 chmod 755 file.sh # 数字模式:rwxr-xr-x chmod -R 770 dir/ # 递归修改目录及其内容权限 chmod u+s /usr/bin/program # 设置SUID权限
chown
- 概念:修改文件/目录的所有者和所属组
- 示例:
chown user file.txt # 修改所有者 chown user:group file.txt # 修改所有者和所属组 chown -R user:group dir/ # 递归修改目录 chown :group file.txt # 只修改所属组
chgrp
- 概念:修改文件/目录的所属组(chown的简化版)
- 示例:
chgrp group file.txt # 修改所属组 chgrp -R group dir/ # 递归修改目录所属组
2. 系统管理
用户管理
useradd
- 概念:创建新用户
- 示例:
useradd -m username # 创建用户并自动创建家目录 useradd -s /bin/bash username # 指定登录shell useradd -G group1,group2 username # 添加用户到多个附加组 useradd -d /home/custom username # 指定自定义家目录
userdel
- 概念:删除用户
- 示例:
userdel username # 删除用户(保留家目录) userdel -r username # 删除用户及家目录
usermod
- 概念:修改用户属性
- 示例:
usermod -l newname oldname # 修改用户名 usermod -aG group username # 添加用户到附加组(不删除现有组) usermod -d /new/home username # 修改家目录 usermod -L username # 锁定用户账号 usermod -U username # 解锁用户账号
passwd
- 概念:修改用户密码
- 示例:
passwd username # 修改指定用户密码(需root权限) passwd # 修改当前用户密码 passwd -l username # 锁定用户密码 passwd -u username # 解锁用户密码 passwd -d username # 删除用户密码(允许空密码登录,不推荐)
groupadd/groupdel
- 概念:创建/删除用户组
- 示例:
groupadd groupname # 创建组 groupadd -g 1001 groupname # 指定GID创建组 groupdel groupname # 删除组
su/sudo
- 概念:切换用户身份/以超级用户权限执行命令
- 示例:
su - root # 切换到root用户(带环境变量) su username # 切换到普通用户 sudo command # 以root权限执行单个命令 sudo -i # 切换到root shell sudo visudo # 安全编辑sudoers文件
service管理
systemctl
- 概念:管理systemd服务(CentOS 7+)
- 示例:
sudo systemctl start httpd # 启动服务 sudo systemctl stop httpd # 停止服务 sudo systemctl restart httpd # 重启服务 sudo systemctl reload httpd # 重载配置(不中断服务) sudo systemctl enable httpd # 设置开机自启 sudo systemctl disable httpd # 禁止开机自启 systemctl status httpd # 查看服务状态 systemctl list-unit-files --type=service # 列出所有服务状态 systemctl is-active httpd # 检查服务是否活跃
service
- 概念:管理SysV服务(兼容旧版本CentOS)
- 示例:
sudo service httpd start # 启动服务 sudo service httpd stop # 停止服务 sudo service httpd restart # 重启服务 sudo service httpd status # 查看服务状态
进程管理
ps
- 概念:查看进程状态
- 示例:
ps aux # 查看所有进程详细信息 ps aux | grep "nginx" # 查找特定进程 ps -ef # 显示进程树(父进程关系) ps -eo pid,ppid,cmd # 自定义输出字段 ps aux --sort=-%cpu | head # 按CPU使用率排序前10
top/htop
- 概念:实时监控系统进程和资源占用
- 示例:
top # 基本实时监控(按q退出) top -p 1234 # 监控指定PID的进程 htop # 增强版top(需安装,支持鼠标操作) # top交互命令:P(CPU排序)、M(内存排序)、N(PID排序)、k(终止进程)
kill/pkill
- 概念:终止进程
- 示例:
kill 1234 # 发送SIGTERM信号终止进程 kill -9 1234 # 发送SIGKILL信号强制终止进程 kill -HUP 1234 # 发送SIGHUP信号重载配置 pkill nginx # 终止所有nginx进程 killall httpd # 终止所有httpd进程
pstree
- 概念:以树状图显示进程关系
- 示例:
pstree # 显示简单进程树 pstree -p # 显示进程PID pstree -u # 显示进程所属用户 pstree nginx # 显示特定进程的树状结构
jobs/bg/fg
- 概念:管理后台任务
- 示例:
jobs # 查看后台任务 command & # 将命令放入后台执行 bg %1 # 将任务1放到后台运行 fg %1 # 将任务1调回前台 Ctrl+Z # 暂停当前前台任务
3. 网络管理
网络配置
ip
- 概念:查看/配置网络接口(替代ifconfig)
- 示例:
ip addr # 查看所有网络接口信息 ip addr show eth0 # 查看指定接口 ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址 ip addr del 192.168.1.100/24 dev eth0 # 删除IP地址 ip link set eth0 up/down # 启用/禁用接口 ip route # 查看路由表 ip route add default via 192.168.1.1 # 添加默认网关
ifconfig
- 概念:查看/配置网络接口(传统命令)
- 示例:
ifconfig # 查看所有活动接口 ifconfig eth0 # 查看指定接口 ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 设置IP和子网掩码 ifconfig eth0 up/down # 启用/禁用接口
netstat/ss
- 概念:查看网络连接状态
- 示例:
netstat -tuln # 显示监听的TCP/UDP端口 netstat -an # 显示所有连接 netstat -p # 显示进程PID和名称(需root) ss -tuln # 现代版netstat,更快 ss -o state established '( dport = :80 or sport = :80 )' # 过滤80端口连接
hostname/hostnamectl
- 概念:查看/设置主机名
- 示例:
hostname # 查看主机名 hostnamectl set-hostname newhostname # 设置主机名(永久生效) hostnamectl # 查看详细主机信息
网络测试
ping
- 概念:测试网络连通性
- 示例:
ping google.com # 测试到google.com的连通性 ping -c 4 192.168.1.1 # 发送4个ICMP包后停止 ping -i 2 -c 10 192.168.1.1 # 每2秒发送一个,共10个
traceroute/mtr
- 概念:跟踪数据包路径
- 示例:
traceroute google.com # 跟踪到目标的路由路径 mtr google.com # 结合ping和traceroute的持续监控工具
curl/wget
- 概念:HTTP客户端/文件下载工具
- 示例:
curl http://example.com # 获取网页内容 curl -I http://example.com # 只获取HTTP头信息 curl -O http://example.com/file.iso # 下载文件 wget http://example.com/file.iso # 下载文件 wget -c http://example.com/file.iso # 断点续传
ssh/scp/sftp
- 概念:远程登录/文件传输
- 示例:
ssh username@remote_host # 远程登录 ssh -p 2222 username@host # 指定端口登录 scp file.txt username@host:/path/ # 本地文件复制到远程 scp username@host:/path/file.txt . # 远程文件复制到本地 scp -r dir/ username@host:/path/ # 递归复制目录 sftp username@host # SFTP交互式文件传输
防火墙管理
firewall-cmd
- 概念:firewalld防火墙管理工具(CentOS 7+)
- 示例:
sudo firewall-cmd --state # 查看防火墙状态 sudo firewall-cmd --list-ports # 查看开放端口 sudo firewall-cmd --add-port=80/tcp --permanent # 永久开放80端口 sudo firewall-cmd --remove-port=80/tcp --permanent # 永久关闭80端口 sudo firewall-cmd --reload # 重新加载规则使其生效 sudo firewall-cmd --zone=public --add-service=http --permanent # 开放HTTP服务
iptables
- 概念:传统防火墙管理工具
- 示例:
sudo iptables -L # 查看规则 sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许80端口入站 sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许特定网段 sudo iptables-save > /etc/sysconfig/iptables # 保存规则
4. 存储管理
磁盘信息
df
- 概念:查看磁盘空间使用情况
- 示例:
df -h # 人类可读格式显示 df -i # 显示inode使用情况 df -T # 显示文件系统类型 df /dev/sda1 # 查看指定分区
du
- 概念:查看目录/文件大小
- 示例:
du -sh /path/to/dir # 显示目录总大小(人类可读) du -h --max-depth=1 /path # 显示一级子目录大小 du -ah /path # 显示所有文件和目录大小 du -c file1 file2 # 显示多个文件总大小
lsblk
- 概念:列出块设备信息
- 示例:
lsblk # 显示所有块设备 lsblk -f # 显示文件系统信息 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 自定义输出字段
fdisk/parted
- 概念:磁盘分区工具
- 示例:
sudo fdisk -l # 列出所有磁盘分区 sudo fdisk /dev/sdb # 交互式分区/dev/sdb sudo parted /dev/sdb # 高级分区工具(支持GPT)
挂载管理
mount/umount
- 概念:挂载/卸载文件系统
- 示例:
mount /dev/sdb1 /mnt/data # 挂载分区到/mnt/data mount -t ext4 /dev/sdb1 /mnt/data # 指定文件系统类型 mount -o ro /dev/sdb1 /mnt/data # 只读挂载 umount /mnt/data # 卸载分区 umount -l /mnt/data # 强制卸载(当文件被占用时) mount -a # 挂载/etc/fstab中所有文件系统
/etc/fstab
- 概念:文件系统表,定义开机自动挂载项
- 示例配置:
# 设备 挂载点 类型 选项 备份 检查 /dev/sdb1 /mnt/data ext4 defaults 0 2 UUID=xxx /boot xfs defaults 0 1
- 操作命令:
sudo blkid # 获取设备UUID sudo vim /etc/fstab # 编辑fstab文件 mount -a # 测试fstab配置是否正确
LVM管理
- 概念:逻辑卷管理,灵活管理磁盘空间
- 示例:
# 创建物理卷 sudo pvcreate /dev/sdb1 /dev/sdc1 # 创建卷组 sudo vgcreate vg_data /dev/sdb1 /dev/sdc1 # 创建逻辑卷 sudo lvcreate -L 100G -n lv_data vg_data # 格式化逻辑卷 sudo mkfs.ext4 /dev/vg_data/lv_data # 扩展逻辑卷 sudo lvextend -L +50G /dev/vg_data/lv_data sudo resize2fs /dev/vg_data/lv_data # ext4文件系统扩容
5. 包管理
yum/dnf
- 概念:RPM包管理工具(dnf是yum的下一代)
- 示例:
# 安装软件包 sudo yum install nginx sudo dnf install nginx # CentOS 8+推荐使用dnf# 卸载软件包 sudo yum remove nginx sudo dnf remove nginx# 更新软件包 sudo yum update # 更新所有包 sudo yum update nginx # 更新指定包 sudo yum upgrade # 升级系统# 搜索软件包 yum search "web server" dnf search nginx# 查看包信息 yum info nginx dnf info nginx# 列出已安装包 yum list installed dnf list installed | grep nginx# 清理缓存 sudo yum clean all sudo dnf clean all# 重建缓存 sudo yum makecache sudo dnf makecache
rpm
- 概念:直接操作RPM包的底层工具
- 示例:
rpm -ivh package.rpm # 安装RPM包 rpm -Uvh package.rpm # 升级RPM包 rpm -e package # 卸载RPM包 rpm -qa # 列出所有已安装RPM包 rpm -qa | grep nginx # 查找特定包 rpm -ql package # 列出包安装的文件 rpm -qf /usr/bin/nginx # 查看文件属于哪个包
6. 日志管理
日志文件位置
/var/log/messages
:系统通用日志/var/log/secure
:安全相关日志(SSH登录等)/var/log/httpd/
:Apache日志/var/log/nginx/
:Nginx日志/var/log/mysql/
:MySQL日志/var/log/cron
:定时任务日志
日志查看命令
tail/journalctl
- 示例:
tail -f /var/log/messages # 实时查看系统日志 tail -n 100 /var/log/secure # 查看最近100行安全日志# systemd日志(CentOS 7+) journalctl # 查看所有日志 journalctl -u nginx # 查看特定服务日志 journalctl -f # 实时跟踪日志 journalctl --since "1 hour ago" # 查看1小时前至今的日志 journalctl --until "2023-12-31" # 查看截止到指定日期的日志 journalctl -k # 查看内核日志
grep/awk在日志分析中的应用
- 示例:
# 查找包含"error"的日志行 grep "error" /var/log/messages# 统计特定IP的访问次数 grep "192.168.1.100" /var/log/httpd/access.log | wc -l# 提取访问状态码为404的请求 awk '$9 == 404 {print $0}' /var/log/httpd/access.log# 统计不同状态码的数量 awk '{print $9}' /var/log/httpd/access.log | sort | uniq -c
logrotate
- 概念:日志轮转工具,防止日志文件过大
- 配置文件位置:
/etc/logrotate.conf
和/etc/logrotate.d/
- 示例配置(
/etc/logrotate.d/nginx
):/var/log/nginx/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 0640 nginx nginxsharedscriptspostrotate/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || trueendscript }
7. 性能监控
CPU监控
top/htop/mpstat
- 示例:
top -o %CPU # 按CPU使用率排序 mpstat -P ALL 2 # 每2秒显示所有CPU核心使用情况 sar -u 1 5 # 每1秒采样一次CPU,共5次(需安装sysstat)
内存监控
free/vmstat
- 示例:
free -h # 人类可读格式显示内存使用 free -m # 以MB为单位显示 vmstat 2 # 每2秒显示内存和系统状态 vmstat -s # 显示内存统计摘要
磁盘I/O监控
iostat/iotop
- 示例:
iostat -x 2 # 每2秒显示详细I/O统计 iostat -p sda 2 # 监控指定磁盘 iotop # 实时监控进程I/O(需安装,按q退出)
网络监控
iftop/nload
- 示例:
sudo iftop -i eth0 # 监控eth0接口带宽 sudo nload # 实时监控网络流量(分上传/下载)
8. 文本处理
文本查看/编辑
vi/vim
- 概念:强大的文本编辑器
- 常用操作:
vim file.txt # 打开文件 # 编辑模式:按i进入插入模式 # 保存退出:Esc -> :wq -> 回车 # 不保存退出:Esc -> :q! -> 回车 # 查找:/pattern -> 回车(n下一个,N上一个) # 替换::%s/old/new/g -> 回车(全局替换)
nano
- 概念:简单易用的文本编辑器
- 示例:
nano file.txt # 打开文件(底部有操作提示) # Ctrl+O保存,Ctrl+X退出,Ctrl+W搜索
文本搜索与过滤
grep/egrep
- 概念:在文件中搜索指定模式的文本
- 示例:
grep "error" file.log # 搜索包含"error"的行 grep -i "Error" file.log # 忽略大小写 grep -n "error" file.log # 显示行号 grep -r "error" /var/log/ # 递归搜索目录 grep -v "info" file.log # 排除包含"info"的行 grep -E "error|warning" file.log # 搜索多个模式(egrep等价)
sed
- 概念:流编辑器,用于文本替换和处理
- 示例:
sed 's/old/new/g' file.txt # 全局替换old为new(不修改原文件) sed -i 's/old/new/g' file.txt # 直接修改原文件 sed '/^#/d' file.txt # 删除注释行(以#开头的行) sed '10d' file.txt # 删除第10行 sed -n '5,10p' file.txt # 只显示第5-10行
awk
- 概念:文本处理语言,用于数据提取和报告
- 示例:
awk '{print $1, $3}' data.txt # 打印第1和第3列 awk -F: '{print $1}' /etc/passwd # 以:为分隔符,打印第1列(用户名) awk '$3 > 1000 {print $0}' /etc/passwd # 第3列(UID)大于1000的行 awk '{sum += $2} END {print sum}' data.txt # 计算第2列的总和
文本处理工具链
cut/sort/uniq/wc
- 示例:
# 提取第1列,排序,去重,统计数量 cut -d: -f1 /etc/passwd | sort | uniq | wc -l# 统计访问日志中IP出现次数并排序 awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10# 查找占用空间最大的前10个文件 du -ah /path | sort -rh | head -10
9. 实用技巧
命令别名
- 概念:为常用命令创建简短别名
- 示例:
alias ll='ls -lha' # 临时别名(当前shell有效) alias grep='grep --color=auto' # 彩色显示grep结果# 永久别名(添加到~/.bashrc或~/.bash_profile) echo "alias ll='ls -lha'" >> ~/.bashrc source ~/.bashrc # 使别名立即生效
管道与重定向
- 概念:将命令连接起来或重定向输入输出
- 示例:
# 管道:将前一个命令输出作为后一个命令输入 ps aux | grep nginx | wc -l #统计nginx进程数# 重定向:>覆盖,>>追加 command > output.txt # 标准输出重定向到文件 command >> output.txt # 追加到文件 command 2> error.txt # 错误输出重定向 command &> all_output.txt # 所有输出重定向 command < input.txt # 从文件读取输入# 组合使用 grep "error" /var/log/* 2>/dev/null | tee errors.log # 查找错误并保存到文件同时显示
后台任务与进程管理
- 示例:
# 后台运行命令 nohup ./long_running_script.sh & # 忽略挂断信号,后台运行 nohup command > output.log 2>&1 & # 重定向输出到日志文件# 终端复用(screen/tmux) screen -S session1 # 创建会话 screen -ls # 列出会话 screen -r session1 # 恢复会话 Ctrl+A+D # 分离会话tmux new -s session1 # 创建tmux会话 tmux attach -t session1 # 恢复会话 Ctrl+B+D # 分离tmux会话
文件查找与处理
find
- 概念:强大的文件查找工具
- 示例:
find / -name "*.log" # 按名称查找 find /var -size +100M # 查找大于100MB的文件 find . -mtime -7 # 查找7天内修改的文件 find . -type d -name ".git" # 查找类型为目录且名称为.git的 find / -user root -perm 600 # 查找所有者为root且权限为600的文件 find . -name "*.txt" -exec rm {} \; # 查找并删除.txt文件(谨慎使用) find . -name "*.tmp" -delete # 查找并删除.tmp文件
locate
- 概念:快速文件查找(基于数据库)
- 示例:
locate "*.log" # 快速查找.log文件 sudo updatedb # 更新数据库(默认每天自动更新) locate -i "readme.md" # 忽略大小写查找
压缩与解压
- 示例:
# tar tar -czvf archive.tar.gz dir/ # 打包并gzip压缩 tar -xzvf archive.tar.gz # 解压tar.gz tar -cjvf archive.tar.bz2 dir/ # 打包并bzip2压缩 tar -xjvf archive.tar.bz2 # 解压tar.bz2# zip zip -r archive.zip dir/ # 创建zip压缩包 unzip archive.zip # 解压zip# gzip gzip file.txt # 压缩文件(生成file.txt.gz) gunzip file.txt.gz # 解压gzip文件
系统信息查看
- 示例:
uname -a # 查看内核版本和系统信息 cat /etc/redhat-release # 查看CentOS版本 lsb_release -a # 查看系统版本(需安装redhat-lsb) hostnamectl # 查看主机信息 lscpu # 查看CPU信息 free -h # 内存信息 df -h # 磁盘信息 uptime # 系统运行时间和负载
10. 附录
常用快捷键
快捷键 | 功能描述 |
---|---|
Ctrl+C | 终止当前命令 |
Ctrl+Z | 暂停当前命令(可通过fg恢复) |
Ctrl+D | 退出当前shell(等价于exit) |
Ctrl+L | 清屏(等价于clear) |
Ctrl+A | 光标移到行首 |
Ctrl+E | 光标移到行尾 |
Ctrl+U | 删除光标前所有字符 |
Ctrl+K | 删除光标后所有字符 |
Ctrl+W | 删除光标前一个单词 |
Tab | 自动补全命令或路径 |
Ctrl+R | 搜索命令历史 |
通配符
通配符 | 含义 |
---|---|
* | 匹配任意字符序列(0个或多个) |
? | 匹配任意单个字符 |
[abc] | 匹配a、b或c中的任意一个 |
[a-z] | 匹配任意小写字母 |
[0-9] | 匹配任意数字 |
[^abc] | 匹配除a、b、c外的任意字符 |
{file1,file2} | 匹配file1或file2 |
特殊符号
符号 | 含义 |
---|---|
~ | 当前用户家目录 |
. | 当前目录 |
… | 父目录 |
/ | 根目录 |
$VAR | 引用变量VAR的值 |
# | 注释符号(一行中#后的内容被忽略) |
& | 将命令放入后台执行 |
; | 分隔多个命令,顺序执行 |
&& | 逻辑与,前一个命令成功才执行后一个 |
|| | 逻辑或,前一个命令失败才执行后一个 |
| | 管道,将前一个命令输出作为后一个命令输入 |
> | 输出重定向(覆盖) |
>> | 输出重定向(追加) |
< | 输入重定向 |
2> | 错误输出重定向 |
* | 通配符,匹配任意字符序列 |
文件操作扩展
rename
- 概念:批量重命名文件,支持字符串替换
- 示例:
rename 's/old/new/' *.txt # 将所有.txt文件中的"old"替换为"new" rename 'y/A-Z/a-z/' *.TXT # 将所有.TXT文件转为小写后缀
tree
- 概念:以树状图显示目录结构
- 示例:
tree # 显示当前目录树 tree -L 2 # 限制显示深度为2级 tree -d # 只显示目录
chattr/lsattr
- 概念:修改/查看文件扩展属性(如防删除、只读)
- 示例:
chattr +i important.txt # 设置文件不可修改、删除 chattr -i important.txt # 取消不可修改属性 lsattr important.txt # 查看文件扩展属性
basename/dirname
- 概念:提取文件名或目录名
- 示例:
basename /path/to/file.txt # 输出:file.txt dirname /path/to/file.txt # 输出:/path/to
文本处理扩展
rev
- 概念:反转文件内容的每行字符
- 示例:
rev file.txt # 反转显示file.txt内容 echo "hello" | rev # 输出:olleh
iconv/dos2unix
- 概念:文件编码转换/Windows换行符转Unix
- 示例:
iconv -f GBK -t UTF-8 input.txt > output.txt # GBK转UTF-8 dos2unix winfile.txt # 将CRLF转换为LF格式
vimdiff
- 概念:可视化文件比较工具
- 示例:
vimdiff file1.txt file2.txt # 分屏显示两个文件差异
系统监控高级命令
dmesg
- 概念:查看内核启动信息和硬件诊断
- 示例:
dmesg | grep -i error # 查找内核错误信息 dmesg | less # 分页查看所有启动信息
sar
- 概念:系统活动报告,收集历史性能数据
- 示例:
sar -u 5 3 # 每5秒采样一次CPU,共3次 sar -r 1 5 # 监控内存使用 sar -n DEV 2 # 监控网络接口流量
strace/ltrace
- 概念:跟踪进程系统调用/库函数调用
- 示例:
strace -p 1234 # 跟踪PID 1234的系统调用 ltrace ls # 跟踪ls命令的库函数调用
网络诊断工具
nmap
- 概念:网络端口扫描和服务探测
- 示例:
nmap 192.168.1.1 # 扫描目标主机开放端口 nmap -p 1-1000 192.168.1.1 # 扫描指定端口范围 nmap -sV 192.168.1.1 # 探测服务版本
tcpdump
- 概念:网络抓包工具,分析网络流量
- 示例:
tcpdump -i eth0 port 80 # 抓取eth0上80端口流量 tcpdump -w capture.pcap # 保存抓包到文件 tcpdump -r capture.pcap # 读取保存的抓包文件
磁盘管理高级命令
parted
- 概念:支持GPT分区的磁盘分区工具(大于2TB磁盘)
- 示例:
parted /dev/sdb # 交互式分区/dev/sdb parted -s /dev/sdb mklabel gpt # 非交互式创建GPT标签 parted -s /dev/sdb mkpart primary 0% 100% # 创建整个磁盘分区
swapon/swapoff
- 概念:启用/关闭交换分区
- 示例:
swapon /dev/sdb1 # 启用交换分区 swapon -s # 查看所有活动交换分区 swapoff /dev/sdb1 # 关闭交换分区
实用工具
watch
- 概念:周期性执行命令并全屏显示结果
- 示例:
watch -n 1 'df -h' # 每秒刷新磁盘使用情况 watch -d 'ls -l' # 高亮显示文件变化
bc
- 概念:高精度计算器工具
- 示例:
bc -l # 启动交互式计算器(-l加载数学库) echo "2^32" | bc # 计算2的32次方 echo "scale=2; 10/3" | bc # 设置小数位数计算除法
type
- 概念:判断命令类型(内置/外部/别名)
- 示例:
type cd # 显示cd是shell内置命令 type ls # 显示ls是别名或外部命令路径 type -t python # 仅显示类型(alias/builtin/file)
SELinux管理
getenforce/setenforce
- 概念:查看/临时切换SELinux模式
- 示例:
getenforce # 查看当前模式(Enforcing/Permissive/Disabled) setenforce 0 # 临时切换到Permissive模式 setenforce 1 # 切换回Enforcing模式
永久修改SELinux配置
- 概念:通过配置文件修改SELinux模式
- 示例:
sudo vim /etc/selinux/config # 修改配置文件 # 设置SELINUX=disabled 禁用SELinux(需重启)
文件上传下载工具
sz/rz
- 概念:基于ZModem协议的文件传输工具
- 示例:
yum install -y lrzsz # 安装lrzsz工具 sz filename # 下载文件到本地 rz # 上传本地文件到服务器(弹出文件选择窗口)
curl高级用法
REST API交互
- 概念:使用curl发送HTTP请求测试API
- 示例:
# POST请求 curl -H "Content-Type: application/json" -X POST -d '{"name":"test"}' http://api.example.com # GET请求带参数 curl "http://api.example.com/data?param1=value1¶m2=value2" # 带认证信息 curl -u username:password http://api.example.com
文件下载与限速
- 示例:
curl -O http://example.com/file.iso # 下载文件 curl --limit-rate 100k http://example.com/largefile.iso # 限速100KB/s
进程管理高级命令
pgrep/pkill
- 概念:通过进程名查找/终止进程
- 示例:
pgrep nginx # 查找nginx进程PID pkill -9 nginx # 终止所有nginx进程 pgrep -u root # 查找root用户的进程
ipcs/ipcrm
- 概念:管理进程间通信(IPC)资源
- 示例:
ipcs -m # 显示共享内存 ipcs -s # 显示信号量 ipcrm -m shmid # 删除指定ID的共享内存 ```## 11. 系统安装与编译
包管理差异(CentOS vs Ubuntu)
RPM包管理(CentOS)
- 概念:RedHat系系统的包管理工具
- 示例:
# 安装RPM包 rpm -ivh package.rpm # 升级RPM包 rpm -Uvh package.rpm # 卸载RPM包 rpm -e package # 查询已安装包 rpm -qa | grep package
DPKG包管理(Ubuntu)
- 概念:Debian系系统的包管理工具
- 示例:
# 安装DEB包 dpkg -i package.deb # 卸载DEB包 dpkg -r package # 查看包信息 dpkg -s package # 列出包内容 dpkg -L package
源码编译安装
- 概念:从源码编译安装软件的通用流程
- 示例:
# 安装编译工具(CentOS) yum groupinstall "Development Tools" -y# 安装编译工具(Ubuntu) apt install build-essential -y# 通用编译流程 wget https://example.com/source.tar.gz tar -zxvf source.tar.gz cd source-dir ./configure --prefix=/usr/local/app make make install
12. 在线下载工具
wget高级用法
- 概念:功能强大的命令行下载工具
- 示例:
# 断点续传 wget -c https://example.com/largefile.iso# 后台下载 wget -b https://example.com/file.tar.gz# 限速下载 wget --limit-rate=200k https://example.com/file.zip# 指定User-Agent wget -U "Mozilla/5.0" https://example.com
curl高级用法
- 概念:支持多种协议的URL传输工具
- 示例:
# 下载文件并重命名 curl -o newname.zip https://example.com/file.zip# 跟随重定向 curl -L https://example.com/redirect# 发送表单数据 curl -d "username=admin&password=123" https://example.com/login# 带Cookie请求 curl -b "sessionid=xxx" https://example.com/profile
axel多线程下载
- 概念:多线程下载工具,加速下载速度
- 示例:
# 安装(CentOS) yum install axel -y# 安装(Ubuntu) apt install axel -y# 使用10线程下载 axel -n 10 https://example.com/largefile.iso
13. 压缩解压大全
支持多种格式的压缩解压命令
格式 | 压缩命令 | 解压命令 |
---|---|---|
.tar | tar -cvf file.tar dir/ | tar -xvf file.tar |
.tar.gz | tar -czvf file.tar.gz dir/ | tar -xzvf file.tar.gz |
.tar.bz2 | tar -cjvf file.tar.bz2 dir/ | tar -xjvf file.tar.bz2 |
.tar.xz | tar -cJvf file.tar.xz dir/ | tar -xJvf file.tar.xz |
.zip | zip -r file.zip dir/ | unzip file.zip |
.rar | rar a file.rar dir/ | rar x file.rar |
.7z | 7z a file.7z dir/ | 7z x file.7z |
安装额外压缩工具
# 安装rar(CentOS)
wget https://www.rarlab.com/rar/rarlinux-x64.tar.gz
tar -zxvf rarlinux-x64.tar.gz
cd rar
make install# 安装p7zip(Ubuntu)
apt install p7zip-full -y# 安装p7zip(CentOS)
yum install p7zip p7zip-plugins -y
高级压缩示例
# 压缩时排除特定文件
tar --exclude=*.log -czvf backup.tar.gz /data# 分卷压缩
split -b 100M largefile.tar.gz "largefile.part-"# 合并分卷并解压
cat largefile.part-* | tar -xzvf -
14. 性能监控高级命令
系统性能综合监控
sar详细用法
- 概念:系统活动报告工具,收集和报告系统活动
- 示例:
# 安装sysstat(包含sar) yum install sysstat -y # CentOS apt install sysstat -y # Ubuntu# 监控CPU使用率(每5秒一次,共3次) sar -u 5 3# 监控内存使用 sar -r 1 5# 监控磁盘I/O sar -b 2 10# 监控网络流量 sar -n DEV 1 5
Java内存监控工具
JDK自带工具
- 概念:JDK提供的Java进程监控工具集
- 示例:
# 查看Java进程 jps -l# 查看JVM内存使用 jstat -gc 12345 5000 10 # PID 12345,每5秒一次,共10次# 生成堆转储文件 jmap -dump:format=b,file=heapdump.hprof 12345# 查看线程状态 jstack 12345 > threaddump.txt# 查看JVM参数 jinfo -flags 12345
第三方Java监控工具
# 安装jconsole(图形化,需X11转发)
yum install java-1.8.0-openjdk-devel -y # 包含jconsole# 安装arthas(阿里开源Java诊断工具)
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar # 交互式选择进程
15. Ubuntu与CentOS命令差异对比
包管理差异
操作 | CentOS | Ubuntu |
---|---|---|
更新源 | yum update | apt update |
安装包 | yum install pkg | apt install pkg |
卸载包 | yum remove pkg | apt remove pkg |
搜索包 | yum search pkg | apt search pkg |
清理缓存 | yum clean all | apt clean |
服务管理差异
操作 | CentOS | Ubuntu |
---|---|---|
启动服务 | systemctl start service | systemctl start service |
停止服务 | systemctl stop service | systemctl stop service |
开机启动 | systemctl enable service | systemctl enable service |
查看状态 | systemctl status service | systemctl status service |
服务列表 | systemctl list-unit-files | systemctl list-unit-files |
防火墙差异
操作 | CentOS (firewalld) | Ubuntu (ufw) |
---|---|---|
查看状态 | firewall-cmd --state | ufw status |
启用 | systemctl enable --now firewalld | ufw enable |
开放端口 | firewall-cmd --add-port=80/tcp --permanent | ufw allow 80/tcp |
关闭端口 | firewall-cmd --remove-port=80/tcp --permanent | ufw deny 80/tcp |
重载规则 | firewall-cmd --reload | ufw reload |
16. iptables详细操作
基础规则管理
- 概念:Linux内核防火墙,通过规则链过滤网络流量
- 示例:
# 查看所有规则 iptables -L -n --line-numbers# 清空所有规则 iptables -F# 保存规则(CentOS) service iptables save # 保存规则(Ubuntu) iptables-save > /etc/iptables/rules.v4# 恢复规则(Ubuntu) iptables-restore < /etc/iptables/rules.v4
常用规则配置
# 允许SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 阻止特定IP
iptables -A INPUT -s 192.168.1.100 -j DROP# 端口转发(将80端口转发到8080)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
规则持久化
# CentOS持久化
yum install iptables-services -y
systemctl enable iptables
service iptables save# Ubuntu持久化
apt install iptables-persistent -y
netfilter-persistent save
netfilter-persistent reload
17. 进程管理高级操作
进程查找与过滤
- 概念:根据不同条件查找进程
- 示例:
# 按名称查找进程 pgrep nginx ps aux | grep nginx# 按端口查找进程 lsof -i:8080 netstat -tulnlp | grep 8080 ss -tulnlp | grep 8080# 按用户查找进程 ps -u root# 按CPU/内存使用率排序 ps aux --sort=-%cpu | head -10 # CPU最高的10个进程 ps aux --sort=-%mem | head -10 # 内存最高的10个进程
进程终止操作
- 概念:终止进程的不同方式和信号
- 示例:
# 正常终止(SIGTERM - 15) kill 1234# 强制终止(SIGKILL - 9) kill -9 1234# 重启进程(SIGHUP - 1) kill -1 1234# 终止指定名称的所有进程 pkill nginx killall nginx# 终止占用端口的进程 fuser -k 8080/tcp
端口占用解决完整流程
# 1. 查找占用端口的进程
lsof -i:8080
# 或
netstat -tulnlp | grep 8080# 2. 终止进程(假设PID为1234)
kill -9 1234# 3. 强制释放端口(如果kill后端口仍被占用)
fuser -k 8080/tcp# 4. 验证端口是否释放
ss -tuln | grep 8080
18. 线上问题排查方法论
系统资源瓶颈排查
CPU瓶颈
# 查看CPU使用率
top # 按P排序
htop # 更直观的CPU使用展示# 查看每个CPU核心的使用情况
mpstat -P ALL 1# 查看进程线程CPU占用
ps -Lp 1234 -o %cpu,pid,tid,comm # 查看进程1234的线程CPU占用
内存瓶颈
# 查看内存使用概况
free -h
vmstat 1# 查看进程内存占用
top # 按M排序
ps aux --sort=-%mem | head -10# 查看内存泄漏嫌疑
valgrind --leak-check=full ./program # C程序内存泄漏检测
jmap -histo:live 1234 # Java进程对象统计
磁盘I/O瓶颈
# 查看磁盘I/O负载
iostat -x 1
iotop # 按IO使用率排序进程# 查看磁盘空间
df -h
du -sh /var/* | sort -rh # 按大小排序目录# 查找大文件
find / -type f -size +100M -exec du -h {} \;
网络问题排查
# 检查网络连接
netstat -an | grep ESTABLISHED # 已建立连接
ss -ti # TCP连接详情# 抓包分析
tcpdump -i eth0 port 80 -w capture.pcap
tcpdump -r capture.pcap host 192.168.1.1# 路由追踪
traceroute example.com
mtr example.com # 结合ping和traceroute# DNS排查
nslookup example.com
dig example.com
host example.com
日志分析技巧
# 实时跟踪日志
tail -f /var/log/application.log# 查找错误日志
grep -i error /var/log/application.log
grep -iE "error|exception" /var/log/application.log# 按时间范围过滤日志
sed -n '/2023-10-01 10:00:00/,/2023-10-01 11:00:00/p' /var/log/application.log# 统计错误出现次数
grep -i error /var/log/application.log | wc -l# 分析访问日志(按IP统计访问次数)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
19. 防火墙完整操作指南
firewalld(CentOS)详细配置
# 安装与启动
yum install firewalld -y
systemctl enable --now firewalld# 基本操作
firewall-cmd --state # 查看状态
firewall-cmd --reload # 重载规则
firewall-cmd --complete-reload # 完全重启(中断连接)# 管理端口
firewall-cmd --add-port=80/tcp --permanent # 永久开放80端口
firewall-cmd --remove-port=80/tcp --permanent # 永久关闭80端口
firewall-cmd --list-ports # 查看开放端口# 管理服务
firewall-cmd --add-service=http --permanent # 开放HTTP服务
firewall-cmd --list-services # 查看开放服务# 端口转发
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080 --permanent# 区域管理
firewall-cmd --get-active-zones # 查看活动区域
firewall-cmd --zone=public --add-interface=eth0 --permanent # 接口加入区域
ufw(Ubuntu)详细配置
# 安装与启动
apt install ufw -y
ufw enable # 启用防火墙
ufw disable # 禁用防火墙# 基本操作
ufw status verbose # 详细状态
ufw reload # 重载规则# 管理端口
ufw allow 80/tcp # 允许80/tcp
ufw deny 22/udp # 拒绝22/udp
ufw delete allow 80/tcp # 删除规则# 管理服务
ufw allow ssh # 允许SSH服务
ufw allow http # 允许HTTP服务# 高级规则(允许特定IP)
ufw allow from 192.168.1.0/24 to any port 3306
ufw deny from 10.0.0.1 to any# 端口转发(需先启用ipv4转发)
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sysctl -p
ufw route allow proto tcp from any to any port 8080 to 192.168.1.100 port 80
20. 常用服务运维命令
Redis运维
# 安装(CentOS)
yum install redis -y
systemctl enable --now redis# 安装(Ubuntu)
apt install redis-server -y# 基本操作
redis-cli ping # 测试连接
redis-cli info # 查看信息
redis-cli keys "*" # 列出所有键
redis-cli get key # 获取键值
redis-cli set key value # 设置键值# 持久化操作
redis-cli save # 手动触发RDB持久化
redis-cli bgsave # 后台执行RDB持久化
redis-cli config set appendonly yes # 启用AOF# 备份与恢复
cp /var/lib/redis/dump.rdb /backup/ # 备份RDB文件
redis-cli FLUSHALL # 清空数据库(谨慎操作)
# 恢复:停止Redis,替换dump.rdb,启动Redis# 集群管理
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 ...
redis-cli --cluster info 192.168.1.1:6379
MySQL运维
# 安装(CentOS)
yum install mysql-server -y
systemctl enable --now mysqld# 安装(Ubuntu)
apt install mysql-server -y# 基本操作
mysql -u root -p # 登录
mysqladmin -u root -p status # 查看状态
mysql -e "show databases;" # 执行SQL命令# 备份与恢复
mysqldump -u root -p --all-databases > all_db_backup.sql # 全库备份
mysqldump -u root -p dbname > dbname_backup.sql # 单库备份
mysql -u root -p dbname < dbname_backup.sql # 恢复数据库# 主从复制配置
# 主库:
vi /etc/my.cnf
server-id=1
log_bin=mysql-bin
binlog_do_db=testdb# 从库:
vi /etc/my.cnf
server-id=2
replicate_do_db=testdb# 从库连接主库:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS\G
Java项目部署与监控
# 运行Java项目
java -jar app.jar
nohup java -jar app.jar > app.log 2>&1 & # 后台运行# 设置JVM参数
java -Xms512m -Xmx1024m -jar app.jar# 查看Java进程详细信息
jinfo -flags 1234 # 查看JVM参数
jstat -gcutil 1234 1000 # 每1秒输出GC信息# 分析堆内存
jmap -heap 1234 # 查看堆配置及使用情况
jmap -dump:format=b,file=heap.hprof 1234 # 生成堆转储文件
jhat heap.hprof # 启动堆分析服务器(访问7000端口)# 查看线程状态
jstack 1234 > threads.txt
grep -A 10 "BLOCKED" threads.txt # 查找阻塞线程
21. crontab定时任务完全指南
基本格式与语法
* * * * * command
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 6) (星期天=0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
特殊符号用法
符号 | 含义 | 示例 |
---|---|---|
* | 所有值 | * * * * * 每分钟 |
, | 分隔多个值 | 0 8,18 * * * 每天8点和18点 |
- | 范围 | 0 9-17 * * 1-5 工作日9到17点每小时 |
/ | 间隔 | */15 * * * * 每15分钟 |
@reboot | 启动时 | @reboot /script/start.sh |
@daily | 每天 | @daily /script/backup.sh |
常用示例
# 编辑定时任务
crontab -e# 查看定时任务
crontab -l# 删除定时任务
crontab -r# 每分钟执行
*/1 * * * * /path/to/script.sh# 每天凌晨3点执行
0 3 * * * /path/to/backup.sh# 每周日23点执行
0 23 * * 0 /path/to/cleanup.sh# 每月1号和15号中午12点执行
0 12 1,15 * * /path/to/report.sh# 工作日8:00-18:00每小时执行
0 8-18 * * 1-5 /path/to/check.sh# 每15分钟执行并输出日志
*/15 * * * * /path/to/script.sh >> /var/log/script.log 2>&1
定时任务管理与日志
# 查看cron服务状态
systemctl status crond # CentOS
systemctl status cron # Ubuntu# 查看cron日志(CentOS)
tail -f /var/log/cron# 查看cron日志(Ubuntu)
grep CRON /var/log/syslog# 设置定时任务权限(限制用户)
vi /etc/cron.allow # 仅允许文件中列出的用户使用crontab
vi /etc/cron.deny # 禁止文件中列出的用户使用crontab# 定时任务环境变量问题解决
# 在脚本中使用绝对路径或在crontab中定义PATH
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * /path/to/script.sh
22. 系统状态全面监控命令
系统运行状态
uptime详细解读
uptime
# 输出示例:15:45:30 up 2 days, 3:10, 2 users, load average: 0.88, 0.65, 0.50
# 解读:当前时间 运行时间 用户数 1/5/15分钟负载# 查看更详细的启动时间
who -b
last reboot
系统信息综合查看
# 查看内核版本
uname -a
cat /proc/version# 查看操作系统版本
cat /etc/redhat-release # CentOS
cat /etc/lsb-release # Ubuntu# 查看硬件信息
lscpu # CPU信息
lsmem # 内存信息
lsblk # 磁盘信息# 查看系统资源概览
inxi -Fxz # 需要安装:yum install inxi / apt install inxi
磁盘与文件系统
高级磁盘监控
# 查看磁盘I/O性能
iostat -x 1
iotop -oP # 只显示有I/O活动的进程# 文件系统详细信息
df -Th # 显示文件系统类型
blkid # 查看块设备UUID和类型# 磁盘分区详情
fdisk -l /dev/sda
parted /dev/sda print# 查找大文件和目录
du -Sh /var | sort -rh | head -10 # 目录大小排序
find / -type f -size +100M -print0 | xargs -0 du -h | sort -rh # 大文件查找
网络状态深度分析
# 网络连接统计
ss -s # 连接摘要
ss -tuln # 监听TCP/UDP端口
ss -ti # TCP连接详情(包含RTT信息)# 网络流量实时监控
iftop -i eth0 # 按带宽排序
nload # 分上下行显示流量# 网络接口详细信息
ethtool eth0 # 链路状态、速度等
ip -s link show eth0 # 接口统计信息# 路由表和ARP缓存
ip route show
arp -n