CLI.NEWS / TUTORIAL
如何在 Linux 上使用 CLI
从包管理器、权限模型到服务管理和 SSH,这篇教程把 Linux 命令行作为日常开发与运维环境系统梳理一遍。
发行版与终端入口
Linux 并不是一个单一版本的系统。Ubuntu、Debian、Fedora、Arch 等发行版,在命令行体验上大体相通,但在包管理器、更新节奏和部分系统路径上会有差异。
所以,学习 Linux CLI 的第一条心智模型应该是: shell 体验相对稳定,而系统管理层要看发行版。
在桌面 Linux 上,你通常会通过 GNOME Terminal、Konsole、Alacritty、WezTerm 或 Ghostty 这样的终端模拟器进入命令行;在服务器上,你往往直接从 SSH 会话开始,甚至根本没有图形界面。不管入口是否带窗口,本质上你面对的都是同一套系统控制面。
# 查看当前 shell
$ echo $SHELL
/bin/bash
# 查看发行版信息
$ cat /etc/os-release
# 查看内核版本
$ uname -a
当你能识别发行版、shell 和当前用户时,其实已经掌握了 Linux 工作面的很大一部分。
Shell 与包管理器
很多 Linux 系统默认仍然使用 Bash,不过 Zsh、fish 等 shell 在开发者中也很常见。Bash 重要的原因在于,它几乎是教程、Docker 镜像、CI 任务和远程机器里的最低公共分母。
Linux 的第二个关键差异点是包管理器。大多数情况下,你不是去网页上下载安装包,而是通过发行版自己的软件源来安装工具。
| 发行版家族 | 常见包管理器 | 示例命令 |
|---|---|---|
| Debian / Ubuntu | apt | sudo apt install git curl ripgrep |
| Fedora / RHEL | dnf | sudo dnf install git curl ripgrep |
| Arch | pacman | sudo pacman -S git curl ripgrep |
| openSUSE | zypper | sudo zypper install git curl ripgrep |
# Debian/Ubuntu 下刷新软件源索引
$ sudo apt update
# 安装常见工具
$ sudo apt install git curl build-essential
# 搜索软件包
$ apt search tmux
系统层包 shell 工具、编译器和底层依赖优先交给发行版包管理器。
语言层包 进入具体语言生态后,再使用
npm、pip、cargo、uv等工具管理项目依赖。
文件系统与权限
Linux 采用以 / 为根的 Unix 风格文件系统。开发者很快就会接触到 home 目录、隐藏文件、可执行位,以及文件归属关系。
| 命令 | 用途 | 示例 |
|---|---|---|
pwd | 显示当前目录 | $ pwd |
ls -la | 列出文件,包括隐藏文件 | $ ls -la ~/.config |
chmod | 修改权限 | $ chmod +x script.sh |
chown | 修改所有者 / 用户组 | $ sudo chown user:user file.txt |
sudo | 以更高权限执行命令 | $ sudo systemctl restart nginx |
# 查看文件权限
$ ls -l deploy.sh
-rwxr-xr-x 1 stone stone 914 Mar 20 09:14 deploy.sh
# 添加执行权限
$ chmod +x deploy.sh
# 查看当前用户和所属组
$ whoami
$ id
Linux 会不断奖励你用“所有者、组、最小权限”来思考问题。很多 “permission denied” 并不是程序坏了,而是系统在提醒你: 现在是谁在尝试对哪个文件或服务执行动作。
进程与服务
很多人正是在 Linux 上第一次强烈感受到,终端不只是操作文件的地方,它也是进程、后台服务和日志的控制平面。
# 查看正在运行的进程
$ ps aux | head
# 交互式进程查看
$ top
# 查看服务状态
$ systemctl status ssh
# 查看近期日志
$ journalctl -u ssh --since today
在很多现代发行版里,systemd 是默认的服务管理器,这意味着 systemctl 和 journalctl 会成为日常工具。你会用它们启动服务、设置开机自启、在故障后查看日志。
进程视角
ps、top、htop、kill这类命令帮助你判断什么正在运行,以及必要时如何停掉它。服务视角
systemctl、journalctl这类命令帮助你管理那些会长期驻留在后台的软件。
SSH 与远程工作
Linux 和 SSH 几乎是绑定出现的。哪怕你一开始只在本地桌面环境里练习,很多真实工作流最终还是会移动到远程服务器、虚拟机、容器或者云主机上。
# 连接远程服务器
$ ssh user@example.com
# 上传文件
$ scp app.tar.gz user@example.com:/srv/app/
# 高效同步目录
$ rsync -avz ./dist/ user@example.com:/srv/www/dist/
一个实用的 Linux 工作环境,通常要尽早掌握 SSH key、~/.ssh/config 的基本写法,以及在执行破坏性命令前先确认“我现在在哪台机器上”的习惯。
# 生成 SSH 密钥
$ ssh-keygen -t ed25519 -C "you@example.com"
# 一个 SSH config 示例
Host my-prod
HostName prod.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519
开发工具链
当 shell、包管理器和权限模型理顺后,Linux 会变成一个很高效的开发基础面。接下来的常见步骤通常是 Git、编辑器、语言运行时、容器工具以及搜索工具。
# 常见基础工具
$ sudo apt install git curl tmux jq ripgrep fd-find
# 配置 Git 身份
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
# 查看语言运行时
$ python3 --version
$ node --version
$ go version
很多 Linux 开发者还会高度依赖下面几类工具:
tmux,用于保持长时间会话不断开。ripgrep和fd,用于快速搜索代码和文件。- Docker 或 Podman,作为本地容器化环境。
make、just或 shell 脚本,来固化重复任务。
Linux 尤其奖励“可组合的小工具”。当工作越来越可重复时,CLI 就会更像基础设施,而不是一堆零散命令。
效率习惯
一个好的 Linux CLI 工作流,并不是靠背下几百条命令构成的,而是靠少数几个可重复的习惯堆出来的。
# 查看命令手册
$ man rsync
# 搜索历史命令
$ history | grep docker
# 创建别名
$ echo 'alias gs="git status -sb"' >> ~/.bashrc
# 重新加载 shell 配置
$ source ~/.bashrc
值得尽早养成的习惯有:
- 在复制陌生命令前先读文档。
- 让自己的 dotfiles 和 alias 保持可理解。
- 多步骤重复动作尽早写成脚本。
- 出问题先看日志,而不是先猜。
- 需要长期会话时尽早学会
tmux。
下一步
Linux 一旦不再被你看成“那个很难的系统”,而是被看成“把内部逻辑更直接暴露给 CLI 的系统”,理解难度就会明显下降。
完成这篇教程后,一个很自然的下一步路径是:
- 先把包管理和权限问题练熟。
- 在本地虚拟机或云测试机上练 SSH。
- 学会
systemctl、日志和进程排查。 - 用 Git、Docker 或 shell 脚本固化一条自己的开发流程。
如果说 macOS 和 Windows 教程更像“如何在自己的电脑上使用命令行”,那么 Linux 教程更像“为什么 CLI 会成为服务器、基础设施和自动化世界的共同语言”。