作为一名Linux系统管理员,我经常需要处理各种系统操作问题。今天我想分享一些Linux系统中极为实用的操作技巧,这些都是在日常工作中高频使用的命令和功能。无论你是刚接触Linux的新手,还是有一定基础的用户,掌握这些技巧都能显著提升你的工作效率。
在Linux终端中,Ctrl+C和Ctrl+D是最常用的快捷键组合之一。它们看似简单,但在实际使用中有许多需要注意的细节:
Ctrl+C的真正作用是发送SIGINT信号,大多数程序会因此终止,但并非所有kill -9才能彻底停止Ctrl+C会触发KeyboardInterrupt异常Ctrl+C不会退出,只是取消当前命令Ctrl+D发送的是EOF(End Of File)信号,它的行为也因程序而异:
cat或more等命令中,表示输入结束特别注意:在vim编辑器中,
Ctrl+D是向下滚动半屏,要退出应该使用:q命令
Linux保存了用户执行过的命令历史,默认保存在~/.bash_history中。除了基本的history命令外,还有更多高效用法:
!!:重复上一条命令!-n:重复倒数第n条命令!string:重复最近一条以string开头的命令!?string?:重复最近一条包含string的命令^old^new:将上一条命令中的old替换为new后执行Ctrl+R的反向搜索特别适合查找很久以前用过的复杂命令。搜索到后,你可以:
Ctrl+J直接执行找到的命令Ctrl+G取消搜索高效的命令行编辑可以节省大量时间。除了基本的Ctrl+A和Ctrl+E外,还有:
Ctrl+U:删除从光标到行首Ctrl+K:删除从光标到行尾Alt+Backspace:删除前一个单词Ctrl+Y:粘贴最近删除的内容Ctrl+_:撤销上一次编辑对于长命令,Alt+.可以插入上一条命令的最后一个参数,这在处理文件路径时特别有用。
YUM(Yellowdog Updater Modified)是RHEL/CentOS系列的包管理器,它解决了RPM包的依赖问题。实际使用中需要注意:
/etc/yum.repos.d/目录存放仓库配置文件yum clean all可以清除缓存yum update更新所有包,而yum upgrade还会处理废弃的依赖yum provides */command可以查找哪个包提供特定命令yum history查看操作历史,可以撤销特定操作常见问题解决:
/var/run/yum.pid解决APT(Advanced Packaging Tool)是Debian/Ubuntu系列的包管理工具,功能与YUM类似但语法略有不同:
apt update只更新包列表,不升级软件apt full-upgrade会处理依赖关系的变更apt-cache search搜索包apt show显示包详细信息apt purge彻底删除包及其配置文件配置源文件在/etc/apt/sources.list和/etc/apt/sources.list.d/目录下。修改后需要执行apt update。
经验分享:在生产环境中,建议使用
apt-mark hold锁定关键软件包的版本,避免意外升级导致服务中断
systemd是现代Linux系统的初始化系统,systemctl是其管理工具。除了基本的start/stop外,还有:
systemctl list-units:列出所有单元systemctl list-unit-files:列出所有已安装的单元文件systemctl enable --now:启用并立即启动服务systemctl mask:完全禁用服务(创建指向/dev/null的符号链接)systemctl daemon-reload:重新加载修改过的单元文件服务状态解读:
loaded:单元文件已加载active(running):正在运行active(exited):成功完成一次性配置active(waiting):运行中但等待事件inactive:未运行failed:单元失败创建自定义服务需要编写.service文件,通常放在/etc/systemd/system/下。一个简单的示例:
ini复制[Unit]
Description=My Custom Service
After=network.target
[Service]
Type=simple
User=myuser
ExecStart=/usr/bin/python3 /path/to/script.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
关键参数说明:
Type:可以是simple, forking, oneshot等Restart:配置服务失败时的重启策略WantedBy:指定服务所属的target创建后需要执行:
bash复制sudo systemctl daemon-reload
sudo systemctl enable my-custom-service
sudo systemctl start my-custom-service
Linux中有两种链接类型:
软链接(符号链接)
ln -s创建硬链接
ln(不带-s)创建实际应用场景:
/usr/bin/python指向具体版本ls -i可以查看文件的inode号date命令的格式化输出在脚本中非常有用。一些实用示例:
bash复制# 获取时间戳
timestamp=$(date +%s)
# 生成带时间的日志文件名
logfile="backup-$(date +%Y%m%d-%H%M%S).log"
# 计算7天前的日期
seven_days_ago=$(date -d "7 days ago" +%Y-%m-%d)
# 计算脚本执行时间
start=$(date +%s)
# 执行一些命令
end=$(date +%s)
echo "耗时: $((end-start))秒"
时区配置的注意事项:
/etc/localtime是时区文件/usr/share/zoneinfo/包含所有可用时区-Duser.timezone时间同步建议:
ntp.aliyun.comchronyc tracking或ntpq -p网络接口配置文件位置:
/etc/sysconfig/network-scripts/ifcfg-<接口名>/etc/network/interfaces现代Linux系统也使用Netplan(Ubuntu)或NetworkManager。配置静态IP示例(Netplan):
yaml复制network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
主机名修改的持久化方法:
/etc/hostname和/etc/hostshostnamectl set-hostname/etc/hosts中有对应的解析(127.0.1.1)ping的高级用法:
ping -c 4 -i 0.5 example.com:发送4个包,间隔0.5秒ping -s 1472 -M do example.com:测试MTU大小ping -6 example.com:强制使用IPv6traceroute和mtr可以诊断网络路径问题:
bash复制# 安装mtr
sudo yum install mtr -y # RHEL/CentOS
sudo apt install mtr -y # Debian/Ubuntu
# 使用mtr
mtr -rw example.com
curl的实用技巧:
bash复制# 显示详细请求信息
curl -v example.com
# 跟随重定向
curl -L example.com
# 测试网站响应时间
curl -w "%{time_total}\n" -o /dev/null -s example.com
# 发送POST请求
curl -X POST -d "param1=value1¶m2=value2" example.com/api
ss是比netstat更现代的端口查看工具:
bash复制# 查看所有监听端口
ss -tulnp
# 查看TCP连接
ss -t
# 查看UDP连接
ss -u
lsof可以查看文件/端口关联信息:
bash复制# 查看哪个进程占用80端口
sudo lsof -i :80
# 查看某个进程打开的文件
sudo lsof -p <PID>
# 查看某个用户打开的文件
sudo lsof -u username
防火墙管理:
bash复制# firewalld基本命令
sudo firewall-cmd --list-all
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
# ufw(Ubuntu)
sudo ufw allow 22/tcp
sudo ufw enable
ps的更详细用法:
bash复制# 查看进程树
ps auxf
# 按内存排序
ps aux --sort=-%mem | head
# 按CPU排序
ps aux --sort=-%cpu | head
# 查看特定用户的进程
ps -u username
htop是top的增强版,提供更友好的界面:
bash复制# 安装htop
sudo yum install htop -y # RHEL/CentOS
sudo apt install htop -y # Debian/Ubuntu
# 使用htop
htop
在htop中,可以:
vmstat查看系统整体状态:
bash复制vmstat 1 # 每秒刷新一次
输出字段说明:
r:运行队列中的进程数b:等待I/O的进程数swpd:使用的虚拟内存量free:空闲内存量si:从磁盘交换到内存的量so:从内存交换到磁盘的量us:用户CPU时间sy:系统CPU时间id:空闲CPU时间dstat是更强大的综合监控工具:
bash复制# 安装dstat
sudo yum install dstat -y # RHEL/CentOS
sudo apt install dstat -y # Debian/Ubuntu
# 使用dstat
dstat -cdngy 1
iotop监控磁盘I/O使用情况:
bash复制# 安装iotop
sudo yum install iotop -y # RHEL/CentOS
sudo apt install iotop -y # Debian/Ubuntu
# 使用iotop
sudo iotop -o # 只显示有I/O活动的进程
iostat的深入解读:
bash复制iostat -dx 1 # 每秒钟显示一次详细设备统计
关键指标:
%util:设备利用率,接近100%表示I/O饱和await:平均I/O响应时间(毫秒)svctm:平均服务时间(已弃用)r/s和w/s:读写请求数查看环境变量的几种方法:
bash复制# 打印特定变量
echo $PATH
# 查看所有环境变量
env
printenv
# 查看某个命令的环境变量
env | grep PATH
环境变量配置文件加载顺序:
/etc/profile:系统全局配置/etc/profile.d/*.sh:系统全局脚本~/.bash_profile:用户个人配置(登录shell)~/.bashrc:用户个人配置(非登录shell)重要提示:在脚本中设置环境变量只影响该脚本及其子进程,不会影响父shell
安全地添加PATH:
bash复制# 避免重复添加
if [[ ":$PATH:" != *":/new/path:"* ]]; then
export PATH="/new/path:$PATH"
fi
常用路径添加建议:
bash复制# 在~/.bashrc或~/.bash_profile中添加
export PATH="$HOME/bin:$PATH"
export PATH="/usr/local/go/bin:$PATH"
export PATH="$HOME/.local/bin:$PATH"
通过环境变量配置常用工具:
bash复制# 设置默认编辑器
export EDITOR=vim
# 设置语言
export LANG=en_US.UTF-8
# 设置历史记录大小
export HISTSIZE=10000
export HISTFILESIZE=20000
# 设置时区(某些程序使用)
export TZ=Asia/Shanghai
除了rz/sz外,还有其他传输方式:
SCP:
bash复制# 从本地复制到远程
scp file.txt user@remote:/path/to/dest
# 从远程复制到本地
scp user@remote:/path/to/file.txt .
# 递归复制目录
scp -r dir user@remote:/path/to/dest
SFTP:
bash复制sftp user@remote
# 交互式命令:
# put:上传
# get:下载
# ls:列出远程文件
# lls:列出本地文件
rsync(更高效的同步工具):
bash复制# 基本同步
rsync -avz /local/path user@remote:/remote/path
# 排除特定文件
rsync -avz --exclude='*.tmp' /local/path user@remote:/remote/path
# 增量备份
rsync -avz --delete /source/ /backup/
tar的更多用法:
bash复制# 只打包不压缩
tar -cvf archive.tar /path/to/dir
# 使用不同压缩算法
tar -cvjf archive.tar.bz2 /path/to/dir # bzip2
tar -cvJf archive.tar.xz /path/to/dir # xz
# 排除特定文件
tar -cvzf archive.tar.gz --exclude='*.log' /path/to/dir
# 查看压缩包内容
tar -tvf archive.tar.gz
# 提取特定文件
tar -xvzf archive.tar.gz path/to/specific/file
zip的高级用法:
bash复制# 分卷压缩(每个卷100M)
zip -r -s 100m archive.zip /large/dir
# 加密压缩
zip -e secure.zip sensitive.txt
# 设置压缩级别(0-9)
zip -r -9 maximum.zip /path/to/dir
安全删除(移动到回收站):
bash复制# 在~/.bashrc中定义
trash() {
mv "$@" ~/.Trash/
}
查找并处理文件:
bash复制# 查找并删除7天前的日志
find /var/log -name "*.log" -mtime +7 -delete
# 查找并压缩大文件
find /data -type f -size +100M -exec gzip {} \;
批量重命名:
bash复制# 将所有.jpg文件改为小写
for file in *.JPG; do mv "$file" "${file,,}"; done
# 添加前缀
for file in *.txt; do mv "$file" "backup_$file"; done
获取系统信息:
bash复制#!/bin/bash
echo "===== 系统信息 ====="
echo "主机名: $(hostname)"
echo "操作系统: $(lsb_release -d | cut -f2-)"
echo "内核版本: $(uname -r)"
echo "启动时间: $(uptime -s)"
echo "运行时间: $(uptime -p)"
echo -e "\n===== CPU信息 ====="
lscpu | grep -E "Model name|Socket|Core|Thread|MHz"
echo -e "\n===== 内存信息 ====="
free -h
echo -e "\n===== 磁盘信息 ====="
df -h | grep -v tmpfs
监控脚本示例:
bash复制#!/bin/bash
LOG_FILE="/var/log/system_monitor.log"
ALERT_THRESHOLD=90
# 记录时间
echo "===== $(date) =====" >> $LOG_FILE
# 检查CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
echo "CPU使用率: ${CPU_USAGE}%" >> $LOG_FILE
# 检查内存
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
echo "内存使用率: ${MEM_USAGE}%" >> $LOG_FILE
# 检查磁盘
df -h | while read -r line; do
USE_PERCENT=$(echo $line | awk '{print $5}' | tr -d '%')
if [ ! -z "$USE_PERCENT" ] && [ "$USE_PERCENT" -gt "$ALERT_THRESHOLD" ]; then
echo "警告: $line" >> $LOG_FILE
fi
done
安装tmux:
bash复制sudo yum install tmux -y # RHEL/CentOS
sudo apt install tmux -y # Debian/Ubuntu
基本操作:
tmux new -s session_name:创建新会话Ctrl+b d:分离会话tmux attach -t session_name:重新连接会话tmux ls:列出所有会话tmux kill-session -t session_name:终止会话窗口管理:
Ctrl+b c:创建新窗口Ctrl+b n:下一个窗口Ctrl+b p:上一个窗口Ctrl+b ,:重命名窗口Ctrl+b &:关闭当前窗口窗格管理:
Ctrl+b %:垂直分割Ctrl+b ":水平分割Ctrl+b 方向键:切换窗格Ctrl+b z:放大当前窗格Ctrl+b x:关闭当前窗格在~/.tmux.conf中添加自定义配置:
ini复制# 设置前缀为Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 设置从0开始编号窗口
set -g base-index 1
setw -g pane-base-index 1
# 启用鼠标支持
set -g mouse on
# 设置状态栏
set -g status-interval 1
set -g status-justify left
set -g status-left-length 200
set -g status-right-length 200
set -g status-left "#[fg=green]Session: #S #[fg=yellow]Window: #I #[fg=cyan]Pane: #P"
set -g status-right "#[fg=magenta]%H:%M:%S #[fg=white]%Y-%m-%d"
# 设置复制模式为vi风格
setw -g mode-keys vi
常用插件:
安装插件方法:
bash复制git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
~/.tmux.conf中添加:ini复制# 插件列表
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# 自动恢复设置
set -g @continuum-restore 'on'
# 初始化TMUX插件管理器
run '~/.tmux/plugins/tpm/tpm'
Prefix + I(大写i)安装插件jq:JSON处理工具
bash复制# 安装
sudo yum install jq -y # RHEL/CentOS
sudo apt install jq -y # Debian/Ubuntu
# 使用示例
curl -s https://api.github.com/users/octocat | jq '.login, .id'
bat:带语法高亮的cat替代品
bash复制# 安装
sudo yum install bat -y # RHEL/CentOS (可能需要EPEL)
sudo apt install bat -y # Debian/Ubuntu
# 使用
bat /path/to/file
fzf:模糊查找工具
bash复制# 安装
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
# 使用
vim $(fzf) # 交互式选择文件并用vim打开
kill -9 $(ps aux | fzf | awk '{print $2}') # 选择进程并杀死
ncdu:磁盘使用分析器
bash复制# 安装
sudo yum install ncdu -y # RHEL/CentOS
sudo apt install ncdu -y # Debian/Ubuntu
# 使用
ncdu /path/to/dir
glances:高级系统监控
bash复制# 安装
pip install glances
# 使用
glances
tldr:简化的man页面
bash复制# 安装
npm install -g tldr
# 使用
tldr tar
SSH安全加固:
bash复制# 禁用root登录
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 禁用密码认证(仅密钥)
sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
# 限制用户登录
echo "AllowUsers yourusername" | sudo tee -a /etc/ssh/sshd_config
# 更改SSH端口
sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
# 重启SSH服务
sudo systemctl restart sshd
防火墙规则:
bash复制# 仅允许特定IP访问SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
日志轮转配置(/etc/logrotate.conf示例):
bash复制/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/usr/sbin/nginx -s reload
endscript
}
自动化安全更新:
bash复制# 对于RHEL/CentOS
sudo yum install -y yum-cron
sudo systemctl enable yum-cron
sudo systemctl start yum-cron
# 对于Debian/Ubuntu
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
常见排查步骤:
journalctl -xbdf -hfsck /dev/sda1排查流程:
systemctl status service-namejournalctl -u service-namenginx -t或apachectl configtestss -tulnp | grep :portldd /path/to/binaryCPU问题:
bash复制# 查看CPU使用率
top -o %CPU
# 查看CPU负载
uptime
# 查看每个CPU核心使用情况
mpstat -P ALL 1
内存问题:
bash复制# 查看内存使用
free -h
# 查看内存详细使用
cat /proc/meminfo
# 查找内存消耗大的进程
ps aux --sort=-%mem | head
I/O问题:
bash复制# 查看磁盘I/O
iostat -dx 1
# 查看I/O等待
vmstat 1
# 查找高I/O进程
iotop -o
网络问题:
bash复制# 检查连通性
ping -c 4 example.com
mtr example.com
# 检查带宽
iftop
# 检查连接数
ss -s
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
掌握这些Linux实用操作技巧,可以让你在系统管理、故障排查和日常工作中事半功倍。建议定期练习这些命令,并根据自己的需求创建个性化的快捷方式和脚本。