1. Linux系统常用命令概述
作为一名Linux系统管理员,我每天都要与各种命令打交道。Linux命令就像是我们与系统对话的语言,掌握它们意味着你能更高效地完成工作。今天我想分享一些我在日常工作中最常用的命令,这些命令涵盖了文件操作、系统管理、网络配置等多个方面。
Linux命令行的强大之处在于它的组合性和灵活性。通过管道(|)和重定向(>、>>)等操作符,我们可以将简单的命令组合起来完成复杂的任务。这也是为什么即使有图形界面,很多资深管理员仍然偏爱命令行操作的原因。
提示:在开始学习具体命令前,建议先了解Linux文件系统的基本结构。Linux中一切皆文件,包括硬件设备、进程信息等都是以文件形式存在的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录操作命令
2.1 基础文件操作
ls命令可能是你使用最频繁的命令之一。它用于列出目录内容,但很多人只用了最基本的功能:
bash复制ls -l # 长格式显示,包含权限、所有者、大小等信息
ls -a # 显示所有文件,包括隐藏文件(以.开头的文件)
ls -lh # 以人类可读的格式显示文件大小(KB,MB等)
cp和mv命令用于文件和目录的复制与移动。这里有个实用技巧:
bash复制cp -r source_dir target_dir # 递归复制目录
mv oldname newname # 重命名文件
rm命令要特别小心使用,特别是rm -rf组合,它会强制递归删除文件且不提示。我曾经不小心删除了整个项目目录,从那以后我都会先使用ls确认要删除的内容,再用rm。
2.2 文件内容查看与搜索
查看文件内容有多种方式,各有适用场景:
bash复制cat filename # 显示整个文件内容
less filename # 分页查看,支持搜索(/keyword)和翻页
head -n 10 file # 显示文件前10行
tail -n 20 file # 显示文件最后20行
tail -f logfile # 实时监控日志文件变化
grep是强大的文本搜索工具,我几乎每天都会用到:
bash复制grep "error" logfile # 在文件中搜索"error"关键词
grep -r "function" /project # 递归搜索目录中所有文件
grep -v "debug" output # 反向搜索,显示不包含"debug"的行
3. 系统管理与进程控制
3.1 系统信息查询
了解系统状态是管理的基础,这些命令能帮你快速获取系统信息:
bash复制uname -a # 显示系统内核信息
df -h # 显示磁盘使用情况(人类可读格式)
free -m # 显示内存使用情况(MB为单位)
top # 动态显示进程和系统资源使用情况
uptime # 显示系统运行时间和负载
ps命令用于查看进程状态,结合grep可以快速找到特定进程:
bash复制ps aux | grep nginx # 查找nginx相关进程
ps -ef --forest # 以树状结构显示进程关系
3.2 进程管理
当程序无响应或需要重启服务时,这些命令非常有用:
bash复制kill -9 PID # 强制终止指定PID的进程
pkill processname # 按进程名终止
killall procname # 终止所有同名进程
我经常使用nohup让程序在后台运行,即使退出终端也不会中断:
bash复制nohup command & # 后台运行命令,输出重定向到nohup.out
4. 网络相关命令
4.1 网络配置与诊断
网络问题是系统管理员经常遇到的挑战,这些命令能帮你快速定位问题:
bash复制ifconfig # 查看网络接口信息(较老系统)
ip addr # 查看IP地址(新系统推荐)
netstat -tulnp # 查看监听的端口和对应程序
ss -tulnp # netstat的现代替代品
ping和traceroute是诊断网络连通性的基础工具:
bash复制ping example.com # 测试到目标主机的连通性
traceroute example.com # 显示数据包经过的路由路径
4.2 文件传输与远程连接
scp命令是我在服务器间传输文件的首选工具:
bash复制scp file.txt user@remote:/path/ # 本地复制到远程
scp user@remote:/path/file.txt . # 远程复制到本地
scp -r dir user@remote:/path/ # 递归复制目录
ssh是远程管理Linux服务器的标准方式:
bash复制ssh user@hostname # 基本连接
ssh -p 2222 user@hostname # 指定非标准端口
ssh -i key.pem user@host # 使用密钥认证
5. 权限与用户管理
5.1 文件权限管理
Linux的权限系统是其安全基础,chmod和chown是最相关的命令:
bash复制chmod 755 script.sh # 设置权限为rwxr-xr-x
chmod +x file # 添加可执行权限
chown user:group file # 改变文件所有者和组
理解权限数字表示法很重要:
- 4 = 读(r)
- 2 = 写(w)
- 1 = 执行(x)
三个数字分别代表所有者、组和其他用户的权限总和。
5.2 用户与组管理
管理用户账户是系统管理员的基本职责:
bash复制useradd newuser # 创建新用户
passwd username # 修改用户密码
usermod -aG group user # 将用户添加到附加组
userdel -r username # 删除用户及其主目录
查看用户信息的命令也很实用:
bash复制id username # 显示用户ID和组信息
whoami # 显示当前用户名
groups username # 显示用户所属组
6. 软件包管理
不同Linux发行版使用不同的包管理系统,掌握你所用系统的包管理命令非常重要。
6.1 基于Debian的系统(如Ubuntu)
bash复制apt update # 更新软件包列表
apt upgrade # 升级所有可升级软件包
apt install package # 安装软件包
apt remove package # 移除软件包(保留配置文件)
apt purge package # 完全移除软件包及配置
apt search keyword # 搜索软件包
6.2 基于RPM的系统(如CentOS)
bash复制yum install package # 安装软件包
yum update # 更新所有软件包
yum remove package # 移除软件包
yum search keyword # 搜索软件包
在较新的RPM系统中,dnf已经取代了yum,但用法基本相同。
7. 文本处理与脚本编写
7.1 强大的文本处理工具
awk和sed是处理文本数据的瑞士军刀。虽然学习曲线较陡,但掌握后能极大提高效率。
bash复制awk '{print $1}' file # 打印每行第一个字段
awk -F: '{print $1}' /etc/passwd # 以冒号分隔,打印第一个字段
sed 's/old/new/g' file # 替换文件中所有old为new
sort和uniq经常一起使用来处理日志等文本数据:
bash复制sort file | uniq -c # 排序并统计每行出现次数
7.2 基础Shell脚本
编写简单的Shell脚本可以自动化重复任务。一个基本的脚本模板:
bash复制#!/bin/bash
# 这是一个注释
echo "脚本开始执行"
for file in *.txt; do
echo "处理文件: $file"
# 在这里添加处理逻辑
done
echo "脚本执行完成"
记得给脚本添加执行权限:chmod +x script.sh
8. 系统监控与性能调优
8.1 实时监控工具
除了之前提到的top,htop提供了更友好的交互式界面:
bash复制htop # 需要先安装(apt install htop或yum install htop)
iotop和iftop分别用于监控磁盘I/O和网络流量:
bash复制iotop # 监控磁盘I/O
iftop # 监控网络流量
8.2 日志分析
系统日志是排查问题的重要资源。主要的日志文件通常位于/var/log/目录下。
bash复制journalctl -xe # 查看系统日志(systemd系统)
dmesg | grep error # 查看内核消息
cat /var/log/syslog # 查看系统日志
对于频繁出现的日志信息,可以使用这个组合命令统计出现次数:
bash复制grep "ERROR" /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr
9. 实用技巧与高级用法
9.1 命令组合与别名
将常用命令组合保存为别名可以节省大量时间。编辑~/.bashrc文件添加:
bash复制alias ll='ls -alF'
alias grep='grep --color=auto'
alias update='sudo apt update && sudo apt upgrade'
然后运行source ~/.bashrc使更改生效。
9.2 历史命令优化
history命令显示之前执行过的命令,但默认可能只保留有限数量。可以修改~/.bashrc增加历史记录:
bash复制HISTSIZE=10000
HISTFILESIZE=20000
使用!可以快速执行历史命令:
!!执行上一条命令!123执行历史记录中编号为123的命令!ssh执行最近一条以ssh开头的命令
9.3 查找文件
find命令功能强大但语法复杂,这些是我常用的例子:
bash复制find / -name "*.conf" # 在全盘查找.conf文件
find . -mtime -7 # 查找7天内修改过的文件
find /var/log -size +10M # 查找大于10MB的日志文件
更快的替代品是locate,但需要先更新数据库:
bash复制sudo updatedb
locate filename
10. 安全相关命令
10.1 SSH安全
管理SSH服务是系统安全的重要部分。编辑/etc/ssh/sshd_config后需要重启服务:
bash复制sudo systemctl restart sshd
检查当前SSH连接:
bash复制who # 显示已登录用户
w # 显示用户及其活动
last # 显示登录历史
10.2 防火墙管理
ufw(Uncomplicated Firewall)简化了iptables的使用:
bash复制sudo ufw allow 22/tcp # 允许SSH连接
sudo ufw enable # 启用防火墙
sudo ufw status verbose # 查看防火墙状态
对于更复杂的配置,可以直接使用iptables:
bash复制sudo iptables -L -n -v # 列出当前规则
11. 磁盘与文件系统管理
11.1 磁盘检查与修复
fsck用于检查和修复文件系统,但必须在未挂载状态下运行:
bash复制umount /dev/sda1
fsck /dev/sda1
对于ext4文件系统,可以使用更具体的工具:
bash复制e2fsck -f /dev/sda1
11.2 挂载与卸载
mount和umount用于管理文件系统挂载:
bash复制mount /dev/sdb1 /mnt/data # 挂载分区
umount /mnt/data # 卸载分区
查看已挂载的文件系统:
bash复制mount # 显示所有挂载点
df -h # 显示磁盘使用情况
lsblk # 显示块设备信息
12. 环境变量与Shell配置
12.1 环境变量管理
查看和设置环境变量:
bash复制echo $PATH # 查看PATH变量
export VAR=value # 设置临时环境变量
永久设置需要添加到~/.bashrc或~/.profile:
bash复制echo 'export JAVA_HOME=/path/to/java' >> ~/.bashrc
source ~/.bashrc
12.2 Shell配置
不同的Shell有不同的配置文件:
- Bash:
~/.bashrc,~/.bash_profile,~/.profile - Zsh:
~/.zshrc
了解$PATH变量的构建顺序很重要,它决定了命令的查找顺序。典型的PATH设置:
bash复制export PATH=$HOME/bin:$PATH
13. 定时任务管理
13.1 cron定时任务
crontab用于管理定时任务:
bash复制crontab -e # 编辑当前用户的cron任务
crontab -l # 列出当前用户的cron任务
cron表达式格式:
code复制* * * * * command
| | | | |
| | | | +----- 星期几 (0 - 6) (星期天=0)
| | | +------- 月份 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
13.2 systemd定时器
现代Linux系统使用systemd的定时器作为cron的替代:
bash复制systemctl list-timers # 列出所有定时器
systemctl status mytimer.timer # 查看定时器状态
14. 压缩与归档
14.1 常用压缩命令
tar是最常用的归档工具,常与压缩算法结合使用:
bash复制tar -czvf archive.tar.gz dir/ # 创建gzip压缩的tar包
tar -xzvf archive.tar.gz # 解压gzip压缩的tar包
tar -cjvf archive.tar.bz2 dir/ # 创建bzip2压缩的tar包
zip和unzip处理ZIP格式压缩包:
bash复制zip -r archive.zip dir/
unzip archive.zip
14.2 大文件分割与合并
处理大文件时,可以分割后再传输:
bash复制split -b 100M bigfile bigfile_part
cat bigfile_part* > bigfile_combined
15. 系统服务管理
15.1 systemd服务管理
现代Linux发行版使用systemd管理服务:
bash复制systemctl start servicename # 启动服务
systemctl stop servicename # 停止服务
systemctl restart servicename # 重启服务
systemctl status servicename # 查看服务状态
systemctl enable servicename # 设置开机启动
systemctl disable servicename # 禁用开机启动
15.2 查看服务日志
journalctl用于查看systemd管理的服务日志:
bash复制journalctl -u nginx.service # 查看nginx服务日志
journalctl -f -u mysql.service # 实时查看mysql日志
journalctl --since "2023-01-01" --until "2023-01-02" # 按时间筛选
16. 终端多路复用器
16.1 tmux基础使用
tmux允许在单个终端窗口中创建多个会话和窗口:
bash复制tmux new -s session_name # 创建新会话
tmux attach -t session_name # 附加到现有会话
在tmux会话中:
Ctrl+b c创建新窗口Ctrl+b n下一个窗口Ctrl+b p上一个窗口Ctrl+b d分离会话
16.2 screen替代方案
screen是另一个终端多路复用器,虽然功能不如tmux强大,但在某些系统上是默认安装的:
bash复制screen -S session_name # 创建新会话
screen -r session_name # 恢复会话
在screen会话中:
Ctrl+a c创建新窗口Ctrl+a n下一个窗口Ctrl+a d分离会话
17. 版本控制系统
17.1 Git基础命令
虽然Git本身不是Linux命令,但开发者几乎每天都在使用:
bash复制git clone https://example.com/repo.git # 克隆仓库
git status # 查看状态
git add file # 添加文件到暂存区
git commit -m "message" # 提交更改
git push origin master # 推送到远程仓库
17.2 查看文件差异
diff命令可以比较文件差异:
bash复制diff file1 file2 # 比较两个文件
diff -r dir1 dir2 # 递归比较两个目录
结合Git使用时:
bash复制git diff # 查看未暂存的更改
git diff --cached # 查看已暂存的更改
18. 性能分析工具
18.1 CPU和内存分析
vmstat和mpstat提供系统整体性能概览:
bash复制vmstat 1 # 每秒显示一次系统状态
mpstat -P ALL 1 # 显示每个CPU核心的使用率
pidstat可以监控特定进程的资源使用:
bash复制pidstat -u -p PID 1 # 监控进程的CPU使用率
pidstat -d -p PID 1 # 监控进程的磁盘I/O
18.2 I/O性能分析
iostat显示磁盘I/O统计信息:
bash复制iostat -x 1 # 每秒显示一次详细磁盘统计
iotop类似于top,但针对磁盘I/O:
bash复制iotop # 需要root权限
19. 系统备份与恢复
19.1 文件系统备份
rsync是强大的文件同步工具,常用于备份:
bash复制rsync -avz /source/ user@remote:/backup/ # 同步到远程
rsync -av --delete /src/ /dst/ # 镜像同步(删除目标多余文件)
dd命令可以创建磁盘或分区的完整映像:
bash复制dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
警告:dd命令非常强大但也很危险,错误的输入输出指定可能导致数据丢失。
19.2 增量备份策略
结合tar和find可以实现增量备份:
bash复制find /data -type f -mtime -1 -print0 | tar -czvf backup_$(date +%F).tar.gz --null -T -
这个命令会备份/data目录中过去24小时内修改过的文件。
20. 容器与虚拟化
20.1 Docker基础命令
虽然Docker不是Linux内置命令,但在现代运维中几乎必不可少:
bash复制docker ps # 列出运行中的容器
docker images # 列出本地镜像
docker run -it ubuntu bash # 运行交互式容器
docker exec -it container bash # 进入运行中的容器
20.2 LXC/LXD容器
Linux原生容器技术LXC的命令:
bash复制lxc list # 列出容器
lxc launch ubuntu:20.04 mycontainer # 创建容器
lxc exec mycontainer -- bash # 在容器中执行命令
21. 内核模块管理
21.1 内核模块操作
lsmod、modprobe等命令用于管理内核模块:
bash复制lsmod # 列出已加载模块
modprobe module_name # 加载模块
modinfo module_name # 显示模块信息
rmmod module_name # 移除模块
21.2 内核参数调整
sysctl用于查看和修改内核参数:
bash复制sysctl -a # 显示所有参数
sysctl kernel.hostname # 查看特定参数
sysctl -w kernel.panic=10 # 设置参数(临时)
永久设置需要添加到/etc/sysctl.conf。
22. 硬件信息查询
22.1 CPU和内存信息
bash复制lscpu # 显示CPU架构信息
cat /proc/cpuinfo # 详细CPU信息
cat /proc/meminfo # 详细内存信息
dmidecode -t memory # 通过DMI获取内存信息
22.2 PCI和USB设备
bash复制lspci # 列出PCI设备
lspci -v # 详细PCI信息
lsusb # 列出USB设备
lsusb -v # 详细USB信息
23. 系统启动管理
23.1 启动过程调试
查看系统启动日志:
bash复制journalctl -b # 本次启动日志
journalctl -b -1 # 上次启动日志
dmesg # 内核环形缓冲区消息
23.2 启动项管理
bash复制systemctl list-unit-files --type=service | grep enabled # 查看启用服务
systemctl list-dependencies graphical.target # 查看图形界面依赖
24. 时间与日期管理
24.1 时间同步
timedatectl管理系统时间和时区:
bash复制timedatectl status # 显示当前时间设置
timedatectl list-timezones # 列出可用时区
timedatectl set-timezone Asia/Shanghai # 设置时区
使用NTP同步时间:
bash复制ntpdate pool.ntp.org # 手动同步(需要安装ntpdate)
systemctl restart systemd-timesyncd # 重启时间同步服务
24.2 定时任务执行时间
计算命令执行时间:
bash复制time command # 测量命令执行时间
更详细的性能分析可以使用/usr/bin/time:
bash复制/usr/bin/time -v command # 显示详细资源使用统计
25. 国际化与本地化
25.1 语言环境设置
locale命令管理语言环境:
bash复制locale # 显示当前locale设置
locale -a # 列出可用locale
sudo dpkg-reconfigure locales # 重新配置locale(Debian)
25.2 字符编码转换
iconv用于转换文件编码:
bash复制iconv -f GBK -t UTF-8 file.txt > newfile.txt # GBK转UTF-8
检查文件编码:
bash复制file -i filename # 显示文件MIME类型和编码
26. 系统救援与恢复
26.1 单用户模式
当系统无法正常启动时,可以进入单用户模式:
- 在GRUB菜单选择内核
- 按e编辑启动参数
- 在linux行末尾添加
single或init=/bin/bash - 按Ctrl+x启动
26.2 从Live CD恢复
使用Live CD/USB启动后,可以挂载原系统分区进行修复:
bash复制mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
27. SELinux与AppArmor
27.1 SELinux管理
bash复制sestatus # 查看SELinux状态
getenforce # 查看当前模式
setenforce 0 # 临时设置为permissive模式
27.2 AppArmor管理
bash复制aa-status # 查看AppArmor状态
apparmor_parser -r /etc/apparmor.d/profile # 重新加载配置
28. 系统审计
28.1 auditd配置
Linux审计系统记录系统事件:
bash复制auditctl -l # 列出当前审计规则
auditctl -w /etc/passwd -p wa -k passwd_changes # 监控passwd文件
ausearch -k passwd_changes # 搜索审计日志
28.2 登录审计
查看用户登录记录:
bash复制lastlog # 显示所有用户最后登录时间
last # 显示登录历史
lastb # 显示失败登录尝试
29. 电源管理
29.1 系统休眠
bash复制systemctl suspend # 挂起到内存
systemctl hibernate # 休眠到磁盘
systemctl hybrid-sleep # 混合休眠
29.2 CPU频率调节
查看和设置CPU频率:
bash复制cpupower frequency-info # 查看频率信息
cpupower frequency-set -g powersave # 设置节能模式
30. 其他实用命令
30.1 计算工具
bash复制bc # 任意精度计算器
echo "2+2" | bc # 计算简单表达式
cal # 显示日历
date +"%Y-%m-%d" # 格式化日期输出
30.2 终端技巧
bash复制clear # 清屏
reset # 重置终端
script session.log # 记录终端会话
掌握这些Linux命令后,你会发现工作效率大幅提升。在实际使用中,建议多查看命令的手册页(man command),里面包含了最权威和详细的用法说明。记住,Linux的强大之处在于命令的组合使用,通过管道和重定向,简单的命令可以完成复杂的任务。
