精通 Linux:开发者必备的 50 个核心命令行工具
在图形界面日益强大的今天,为什么我们仍需精通命令行?因为在云服务器、Docker 容器和自动化脚本的世界里,命令行是与系统交互最直接、最高效的语言。无论是服务部署、故障排查,还是性能监控,命令行都是开发者不可或缺的核心技能。
本文为你精选了 50 个在开发与运维工作中频繁使用的 Linux 命令。我们摒弃了晦涩的参数列表,聚焦于最实用的场景和用法,希望能成为你日常工作中的得力助手。
文件与目录操作:构建工作区的基础
这是每个 Linux 用户的起点,用于在文件系统中导航和组织文件。
ls
- 列出目录内容ls -l
: 以长列表格式显示,包含权限、所有者、大小、修改日期等详细信息。ls -a
: 显示所有文件,包括以.
开头的隐藏文件。ls -lh
: 结合-l
和-h
(human-readable),以更易读的单位(如 KB, MB)显示文件大小。
cd
- 切换目录cd /var/log
: 进入指定目录。cd ..
: 返回上一级目录。cd ~
或cd
: 返回当前用户的主目录。
pwd
- 显示当前工作目录的绝对路径。mkdir
- 创建新目录mkdir myapp
: 创建一个名为myapp
的目录。mkdir -p myapp/logs
:-p
参数可以递归创建多层目录。
touch
- 创建空文件或更新文件时间戳。touch config.js
: 如果文件不存在,则创建一个空的config.js
文件。
cp
- 复制文件或目录cp source.txt destination.txt
: 复制文件。cp -r src_dir/ dest_dir/
:-r
参数用于递归复制整个目录。
mv
- 移动或重命名文件/目录。mv old_name.txt new_name.txt
: 重命名文件。mv my_file.txt /tmp/
: 将文件移动到/tmp
目录。
rm
- 删除文件或目录rm file.txt
: 删除文件。rm -r old_dir
:-r
参数用于递归删除目录。rm -rf data/
:-f
(force) 参数将强制删除,无提示。此命令极其危险,使用前请再三确认路径。
文本查看与搜索:洞察文件内容
日志分析、配置检查都离不开对文本内容的操作。
cat
- 查看文件全部内容(适用于小文件)。less
- 分页查看文件内容(适用于大文件),支持上下滚动和搜索。head
/tail
- 查看文件的开头/结尾部分。head -n 20 app.log
: 查看日志文件的前 20 行。tail -n 20 app.log
: 查看日志文件的末尾 20 行。tail -f app.log
:-f
(follow) 参数可以实时跟踪文件的新增内容,是查看实时日志的神器。
grep
- 在文本中搜索匹配的行。grep "error" /var/log/syslog
: 在syslog
文件中搜索包含 "error" 的行。grep -i "error" app.log
:-i
参数表示忽略大小写。grep -r "API_KEY" .
:-r
参数表示在当前目录下递归搜索。
find
- 在文件系统中查找文件。find /etc -name "*.conf"
: 在/etc
目录下查找所有以.conf
结尾的文件。find . -type f -mtime -7
: 查找当前目录下 7 天内修改过的文件。
进程管理:掌控系统运行状态
当服务变慢或无响应时,你需要这些命令来诊断问题。
ps
- 显示当前用户的活动进程。ps aux
: 显示系统中所有用户的全部进程,信息非常详细。通常与grep
结合使用。ps aux | grep nginx
: 查找与nginx
相关的所有进程。
top
/htop
- 实时显示系统进程动态。top
: 经典的进程监视器,显示 CPU、内存占用率等。htop
:top
的增强版,提供更友好的交互界面和更丰富的功能(可能需要单独安装)。
kill
- 终止进程。kill 12345
: 向进程 ID 为12345
的进程发送终止信号(SIGTERM),让其优雅退出。kill -9 12345
: 向进程发送强制杀死信号(SIGKILL)。这是一种最后的手段,因为它不会给进程清理资源的机会。
权限与用户管理:保障系统安全
正确配置权限是系统安全的第一道防线。
chmod
- 修改文件或目录的权限。chmod +x deploy.sh
: 为deploy.sh
脚本添加可执行权限。chmod 644 config.yaml
: 将文件权限设置为rw-r--r--
(所有者读写,组用户和其他用户只读)。
chown
- 更改文件或目录的所有者和所属组。chown www-data:www-data /var/www/html
: 将目录所有权赋予www-data
用户和组。
sudo
- 以超级用户(root)权限执行命令。
网络诊断与连接:确保服务联通
ping
- 测试与目标主机的网络连通性。ping google.com
curl
-强大的 URL 传输工具,可用于 API 测试、文件下载等。curl https://api.github.com
ssh
- 安全地远程登录到另一台主机。ssh user@your-server-ip
scp
- 在本地和远程主机之间安全地复制文件。scp local_file.txt user@remote_host:/remote/path/
ip
/ifconfig
- 查看和管理网络接口。ip a
或ifconfig
: 显示所有网络接口的 IP 地址和状态(ip
是更现代的命令)。
netstat
/ss
- 显示网络连接、路由表、接口统计等信息。ss -tuln
: 显示所有正在监听的 TCP 和 UDP 端口(ss
是netstat
的现代替代品,速度更快)。
系统信息与性能监控
df
- 查看磁盘空间使用情况。df -h
: 以人类可读的格式显示。
du
- 估算文件和目录的磁盘使用空间。du -sh /var/log
:-s
(summary) 统计总大小,-h
(human-readable) 易读格式。
uptime
- 显示系统已运行时间、登录用户数和平均负载。uname
- 显示系统内核和操作系统信息。uname -a
: 显示所有可用信息。
free
- 显示系统内存使用情况。free -h
: 以易读格式显示。
归档与压缩
tar
- 打包和解包.tar
文件,通常与压缩结合。tar -czvf archive.tar.gz /path/to/dir
: 将目录打包并用gzip
压缩。tar -xzvf archive.tar.gz
: 解压并解包。
zip
/unzip
- 创建和解压.zip
文件。
Shell 高级技巧与数据流处理
这些命令通常通过管道符 |
串联起来,构建强大的数据处理流水线。
history
- 查看历史执行过的命令。alias
- 为长命令创建别名。alias ll='ls -lAh'
export
/env
- 管理环境变量。export DATABASE_URL="user:pass@host/db"
: 设置环境变量。env | grep 'PATH'
: 查看包含'PATH'的环境变量。
awk
- 强大的文本行处理工具,擅长按列处理数据。awk '{print $1, $7}' access.log
: 打印 Nginx 日志的第一列(IP)和第七列(URL)。
sed
- 流编辑器,用于对文本进行替换、删除等操作。sed -i 's/old-text/new-text/g' file.txt
: 在文件中直接替换文本。
cut
- 按列剪切文本。cut -d':' -f1 /etc/passwd
: 以冒号为分隔符,提取/etc/passwd
文件的第一列(用户名)。
sort
- 对文本行进行排序。uniq
- 报告或省略重复的行。uniq -c
: 统计每行出现的次数。
组合使用示例:统计访问日志中访问量最高的 10 个 IP。
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
总结
掌握这些命令,并非要你成为一个命令行“大师”,而是为了在遇到问题时,能有清晰的思路和趁手的工具去分析和解决。命令行是赋予开发者精确控制系统能力的强大工具。