Linux 核心知识与常用命令指南
这指南专为“有一定基础、想快速掌握实用 Linux 技能”的开发者设计。我们不堆砌冷门命令,只聚焦于日常开发、运维、Debug 中 80% 场景下会用到的 20% 核心知识与命令。
一、 核心心智模型 (Mental Models)
在学习命令前,记住 Linux 的三个核心设计哲学:
- 一切皆文件 (Everything is a file):不仅是文本和图片,目录、硬件设备(网卡、硬盘)、进程(
/proc)在 Linux 眼中都是文件。这意味着你可以用同一套命令(如cat,echo,grep)去操作几乎所有东西。 - 小而美的程序 (Do one thing and do it well):Linux 命令通常只做一件事,但通过 管道 (Pipe
|) 可以将它们无限组合。 - 数据流 (Data Streams):
- 标准输入 (stdin, 0):默认是键盘。
- 标准输出 (stdout, 1):默认是屏幕。
- 标准错误 (stderr, 2):默认是屏幕。
二、 核心命令速查表 (The “Must-Have” Commands)
1. 文件与目录操作(生存基本功)
| 命令 | 核心用法 | 实用场景 / 技巧 |
|---|---|---|
ls | ls -lah | 列出所有文件(含隐藏文件 . 开头),显示详细大小(human-readable)。 |
cd | cd - | 快速返回上一次所在的目录。cd ~ 回到家目录。 |
pwd | pwd | 显示当前绝对路径。 |
mkdir | mkdir -p a/b/c | 递归创建多级目录,不用一层层建。 |
rm | rm -rf <path> | 递归且强制删除。注意: 永远不要运行 rm -rf /,操作重要目录时多加小心! |
cp | cp -r src/ dest/ | 递归复制文件夹。 |
mv | mv old.txt new.txt | 移动或重命名文件/目录。 |
ln | ln -s target link_name | 创建软链接(快捷方式),在配置环境或管理版本时极常用。 |
2. 文本查看与处理(读日志/改配置必备)
在服务器上,80% 的工作是在与日志和配置文件打交道。
cat:适合看小文件。看大日志绝对不要用cat,会刷屏甚至撑爆终端。less:看大文件/日志的神器。支持翻页、搜索(输入/关键词),按q退出。不会一次性加载整文件,省内存。tail:tail -n 100 app.log:看最后 100 行。tail -f app.log:实时滚动查看新追加的日志(按Ctrl + C退出),排查线上问题最常用。
grep:文本过滤。grep "ERROR" app.log:找出含有 ERROR 的行。grep -rn "TODO" ./:递归(r)查找当前目录下所有文件中包含 “TODO” 的行并显示行号(n)。
- 管道符
|与重定向>/>>:cat info.log | grep "UID:10086":把前面命令的输出作为后面命令的输入。echo "env=prod" > .env:覆盖写入文件。echo "new_log" >> app.log:追加写入文件末尾。
3. 进程与资源监控(服务器卡了怎么办?)
当系统变慢或程序无响应时,用以下命令排查:
top/htop:系统资源监控器。能看到 CPU、内存占用以及哪些进程吃资源最多。建议安装htop(交互界面更友好,带颜色)。ps:查看进程快照。ps -ef | grep python:找出系统里所有正在运行的 Python 进程。
kill:结束进程。kill -9 <PID>:强制杀死指定进程号(PID)的进程。
df -h:查看磁盘空间占用情况(避免磁盘满导致服务挂掉)。du -sh *:查看当前目录下每个文件/文件夹占用的磁盘空间,方便揪出“空间杀手”。
4. 网络与连通性排查
ping <ip/domain>:测试网络连通性。curl -i https://api.github.com:在命令行发 HTTP 请求,i可以显示 Response Header。排查 API 连通性极好用。netstat/ss:查看端口占用。ss -ntlp或netstat -ntlp:查看当前系统哪些端口在监听(Listen),以及是哪个进程在占用(需 root 权限)。- 比如排查“3000端口被占用”:
ss -ntlp | grep 3000。
5. 用户、权限与安全
Linux 是多用户系统,权限控制非常严格。
chmod:修改文件权限。chmod +x run.sh:给脚本赋予执行权限。chmod 600 id_rsa:设置私钥文件仅自己可读写(SSH 密钥安全要求)。
chown:修改文件所属用户和组。sudo chown -R nginx:nginx /var/www:把网页目录的所有者改成 nginx 用户。
sudo:以超级用户(root)权限执行命令。- 用户与组管理(系统管理员必备):
useradd/adduser:创建新用户。例如sudo useradd -m tom(m表示同时创建家目录/home/tom)。passwd:修改用户密码。例如sudo passwd tom为 tom 设置或重置密码。usermod:修改用户属性。例如sudo usermod -aG sudo tom将用户 tom 追加(a)到sudo管理员组(G)。userdel:删除用户。例如sudo userdel -r tom(r表示同时删除其家目录)。groupadd:创建用户组。例如sudo groupadd dev创建一个名为 dev 的开发组。groupdel:删除用户组。例如sudo groupdel dev。
[!CAUTION] 关键账号安全防范 系统关键账号(如
root、系统默认的admin等)是系统的控制核心,绝不要随意删除、禁用或剥夺其权限。在实际工作中,应避免直接使用root账号日常操作,而是创建普通用户,并通过sudo临时获取特权,以此来提供操作审计与安全屏障。
三、 新手必须跨过的三道坎 (The Three Hurdles for Beginners)
只懂命令还不够,在真正干活时,你一定会遇到这三个核心概念。掌握了它们,你才算真正“入门”:
1. 软件安装 (Package Management)
在 Linux 上装软件不像 Windows 双击 exe,而是通过命令行包管理器。最常用的两个主流派系:
* Debian/Ubuntu 派系 (使用 apt):
* 更新软件源列表:sudo apt update(装软件前习惯先运行这个)
* 安装软件(例如安装 nginx):sudo apt install nginx
* 卸载软件:sudo apt remove nginx
* CentOS/RedHat 派系 (使用 yum 或 dnf):
* 安装软件:sudo yum install nginx
2. 环境变量 (Environment Variables) —— 为什么提示 “Command not found”?
当你运行一个命令(比如 node 或 python),系统怎么知道去哪里找它?答案是 PATH 环境变量。
* 查看当前 PATH:echo $PATH(你会看到一堆由冒号 : 隔开的路径,系统会依次去这些路径下寻找你输入的命令)。
* 临时添加环境变量(关闭终端就失效):
bash export PATH=$PATH:/usr/local/go/bin
* 永久添加环境变量:
需要将上述 export 语句写入你的 Shell 配置文件中(通常是家目录下的 ~/.bashrc 或 ~/.zshrc),然后运行 source ~/.bashrc 使其立即生效。
3. Vim 极简求生指南 (Vim Survival Guide)
在没有图形界面的 Linux 服务器上,Vim 是最常用的文本编辑器。很多新手被卡在 Vim 里不知道怎么出来。记住这四个状态和按键即可:
graph TD
A["刚进入 Vim (Normal 模式)"] -->|按 'i' 键| B["编辑文件 (Insert 模式)"]
B -->|按 'Esc' 键| A
A -->|输入 ':wq' 并回车| C["保存并退出"]
A -->|输入 ':q!' 并回车| D["不保存强制退出"]
A -->|输入 '/关键词'| E["向下搜索文本"]- 进入编辑:按
i键(底部会出现- INSERT --),此时可以打字。 - 返回正常模式:无论你在做什么,按
Esc键。 - 退出 Vim(必须在按了
Esc之后输入)::wq: 保存并退出。:q!: 不保存,强制退出。
- 搜索文本:按
Esc,然后输入/加上你要找的内容(如/port),按Enter确认,按n键找下一个匹配项。
💡 附:Shell 的两个提效神技
- Tab 键双击:最伟大的功能! 输入命令或文件名时,按一下或两下
Tab键,系统会自动帮你补全路径或命令,避免手打出错。 Ctrl + R历史搜索:按下后直接输入你以前运行过的命令的部分字符,它会自动帮你把那条长命令找出来,按回车直接运行。
四、 实战高频场景工作流 (Real-World Scenarios)
场景 A:服务器磁盘满了,如何排查并清理?
- 运行
df -h定位是哪个挂载分区满了。 - 进入该分区,运行
du -sh * | sort -hr | head -n 10,找出当前目录下占用空间最大的前10个文件或文件夹。 - 重复上述步骤进入子目录,定位到具体的无用大日志文件。
- 清空日志(不要直接
rm正在被程序写入的日志,否则空间可能无法释放):cat /dev/null > huge_app.log(将其截断为0字节)。
场景 B:服务启动失败,提示“Address already in use”
- 找出占用该端口(假设是 8080)的进程 PID:
sudo ss -lptn 'sport = :8080'或者sudo netstat -ntlp | grep 8080 - 确认进程无误后,将其杀掉:
sudo kill <PID>(如果杀不掉,用sudo kill -9 <PID>) - 重新启动你的服务。
场景 C:查找最近 24 小时内修改过的日志文件
- 使用
find命令:find /var/log -mtime -1 -name "*.log"
五、 进阶自学路线与技巧
- 善用
man和-help:- 想知道某个命令怎么用?输入
man <command>查看官方手册。 - 快速查找参数:
<command> --help(如mkdir --help)。
- 想知道某个命令怎么用?输入
- 理解常见的配置文件路径:
/etc/:系统和绝大多数服务的配置文件存放地(如/etc/nginx/nginx.conf)。~/.bashrc或~/.zshrc:当前用户的 Shell 配置文件,用来定制别名(Alias)和环境变量。
- 在本地搭建练习环境:
- 绝不要在生产环境乱试危险命令。
- 推荐方式:在本地使用 Docker 运行一个轻量级的 Ubuntu 或 Alpine 容器,随时玩坏,随时重建:
docker run -it --name learn-linux ubuntu:latest /bin/bash