第一次接触Linux终端时,那个闪烁的光标和黑底白字的界面总让人心生畏惧。但就像学骑自行车一样,掌握几个核心命令后,你会发现这个看似复杂的系统其实比图形界面更高效。我在运维岗位工作的第一周,老工程师只教了我五个命令就让我完成了80%的日常工作。
Linux命令行的强大之处在于它的组合性——通过管道符将简单命令连接起来,就能完成图形界面需要多次点击才能实现的功能。比如要找出当前目录下占用空间最大的前5个文件,在图形界面需要多个步骤,而在终端只需一行命令组合。
pwd(print working directory)是我每天使用频率最高的命令之一。它像是一个可靠的GPS,随时告诉我当前所在的位置。新手常犯的错误是在深目录结构中迷失方向,这时只需输入pwd就能立即定位。
ls命令的-l参数(长格式显示)和-a参数(显示隐藏文件)组合使用效果最佳。我习惯设置alias ll='ls -alh',这样既能查看文件详情,又能直观显示文件大小(human-readable)。注意Linux中隐藏文件以点开头,这是很多配置文件的管理方式。
bash复制$ ll /etc/
total 1.4M
drwxr-xr-x 1 root root 12K Jul 15 09:23 .
drwxr-xr-x 1 root root 4.0K Jul 10 14:17 ..
-rw-r--r-- 1 root root 16K Jun 28 2022 passwd
-rw-r----- 1 root shadow 8.5K Jul 15 09:23 shadow
cp命令的-r参数(递归复制)在复制目录时必不可少。我曾因为忘记加这个参数导致只复制了空目录,浪费半小时排查问题。mv命令既用于移动也用于重命名,这是新手容易混淆的点。
rm是Linux中最危险的命令之一,特别是配合-rf参数使用时。我建议新手先使用-i交互模式培养安全意识。有个实用技巧:删除前先用ls确认文件列表,再按上箭头调出命令替换ls为rm。
bash复制$ mkdir test && touch test/{1..5}.txt # 创建测试环境
$ ls test/ # 确认文件
1.txt 2.txt 3.txt 4.txt 5.txt
$ rm -i test/*.txt # 安全删除
df -h是我检查磁盘空间的首选命令,-h参数让输出更人性化。当收到磁盘空间告警时,我会先用这个命令定位问题分区。free -h同理,用于快速查看内存使用情况。
top命令的交互界面初看复杂,但掌握几个关键指标就能快速诊断系统负载。按1显示所有CPU核心详情,M按内存排序,P按CPU排序。我习惯用htop替代,它的彩色界面和鼠标支持更友好。
ps aux | grep nginx这样的命令组合几乎每天都会用到。aux参数组合能显示最全面的进程信息,配合grep过滤目标进程。发现异常进程后,先用kill -15尝试优雅终止,无效时再用kill -9。
bash复制$ ps aux | grep sshd
root 1234 0.0 0.1 82564 5632 ? Ss Jul14 0:00 /usr/sbin/sshd -D
$ kill -15 1234 # 先尝试正常终止
$ kill -9 1234 # 强制终止
grep -rn "error" /var/log/是我排查问题的利器,-r递归搜索,-n显示行号。加上--color=auto参数能让匹配项高亮显示。记住用单引号包裹包含空格的模式,双引号会被shell解释。
bash复制$ grep -rn --color=auto 'Connection refused' /var/log/
/var/log/syslog:45:Jul 10 09:23:01 server sshd[1234]: Connection refused by peer
sed最常用的场景是批量替换文本。我曾用sed -i 's/old/new/g' *.conf一次性修改了50多个配置文件。-i参数直接修改文件,务必先不加-i测试命令是否正确。
awk的字段处理能力在分析结构化文本时无可替代。统计Nginx访问日志中每个IP的访问次数:
bash复制$ awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5
142 203.0.113.45
89 198.51.100.23
76 192.0.2.117
ping和traceroute是诊断网络连通性的基础工具。我习惯用ping -c 4 example.com限制发包数量,避免无限测试。curl -I只获取HTTP头信息,适合快速检查Web服务状态。
bash复制$ curl -I https://example.com
HTTP/2 200
server: nginx
date: Mon, 15 Jul 2023 05:23:01 GMT
ifconfig(或现代系统中的ip addr)查看IP配置,netstat -tulnp查看监听端口。当服务无法连接时,先用这些命令确认服务是否正常监听。注意netstat在某些新系统中已被ss命令取代。
ls -l输出的权限字符串如-rwxr-xr--需要熟练掌握解读。我教新人的记忆法是:三组rwx分别对应属主、属组、其他人,-表示无权限。chmod 755 script.sh比符号模式更简洁高效。
sudo不是命令而是权限机制,合理配置/etc/sudoers能提高工作效率又保证安全。我建议个人用户将自己加入wheel组(CentOS)或sudo组(Ubuntu),而不是直接修改root权限。
bash复制$ usermod -aG sudo username # Ubuntu添加用户到sudo组
$ visudo # 安全编辑sudoers文件
将find和xargs组合可以批量处理文件。例如删除7天前的日志文件:
bash复制$ find /var/log/ -name "*.log" -mtime +7 | xargs rm
nohup command &让命令在退出终端后继续运行,jobs查看后台任务,fg调回前台。对于长时间运行的任务,我更喜欢用screen或tmux这类终端复用器。
.bashrc中设置别名能极大提升效率。我的常用别名包括:
bash复制alias ll='ls -alh'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
export PATH=$PATH:/new/path临时添加环境变量,要永久生效需要写入.bashrc或.bash_profile。注意不同发行版的配置文件加载顺序可能不同。