📚 全栈开发学习系列 · 阶段一(编程基础)
01 路线总览与环境搭建 ✅
02 Python 语法基础 ✅
03 Python 进阶(上):文件读写与模块系统 ✅
04 Python 进阶(下):异常处理与综合实战 ✅
05 C 语言与内存:指针、分配与释放 ✅
06 数据结构与算法:链表、栈与队列 ✅
07 Git 版本控制:分支、合并与冲突解决 ✅
08 Linux 命令行:文件、权限与进程管理(当前篇)
Linux 命令行:文件、权限与进程管理
从目录导航到进程控制,让四台设备在你的指尖运转自如
基础篇
Linux
命令行
阶段一完结
读完本篇你将能:在命令行中自如导航文件系统,创建和操作文件目录,理解 rwx 权限模型并用 chmod 精确控制访问,使用管道和重定向组合命令处理文本,管理前台和后台进程,在四台设备上完成一次完整的服务部署流程。
📑 本文目录
01从版本控制到命令行
02文件系统导航:在目录树中穿梭
03文件操作:创建、复制、移动与删除
04权限管理:rwx 模型与 chmod
05文本处理:管道、重定向与 grep
06进程管理:查看、控制与后台运行
07四设备协作实战:部署一个 Python 服务
08阶段一总结与动手练习
01 从版本控制到命令行
上一篇你掌握了 Git——代码有了版本管理,多台设备间的同步也有了方案。但代码不是只存在于 Git 仓库里,它最终要运行在操作系统上。当你在云服务器上部署应用、在树莓派上启动服务、在 Termux 里练习代码时,面对的都不是图形界面,而是一个闪烁的光标——命令行。
好消息是:你的四台设备全部运行类 Unix 系统。macOS 底层是 Darwin 内核,Termux 提供 Android 上的 Linux 环境,树莓派跑 Debian,云服务器通常是 Ubuntu 或 CentOS。这意味着同一套命令在四台设备上几乎通用——命令行是开发者跨平台的"通用语言"。
把文件系统想象成一座城市:目录是街区(/home 是住宅区,/etc 是行政区,/var 是仓储区),文件是建筑,权限是门禁卡(决定谁能进、谁能改),进程是城市中运转的车辆(有的在前台奔跑,有的在后台默默运行)。本篇你要学会在这座城市里导航、建造、设门禁、调度交通。
文件操作
导航、创建、复制、移动、删除、查找——管理项目文件的基本功
权限管理
rwx 模型、chmod 数字与符号模式——控制谁能读、写、执行
进程管理
查看、终止、后台运行——管理正在运行的程序和服务
02 文件系统导航:在目录树中穿梭
Linux 文件系统是一棵倒置的树,根目录是 /,所有目录和文件都从根开始。了解标准目录布局,你才能快速找到配置文件、日志和可执行程序。
| 目录 |
用途 |
开发场景 |
/home |
用户主目录 |
项目代码存放处 |
/etc |
系统配置文件 |
Nginx、SSH、环境变量配置 |
/var |
可变数据(日志、缓存) |
查看应用日志 /var/log/ |
/usr/local |
本地安装的软件 |
手动编译安装的程序 |
/tmp |
临时文件 |
脚本中间产物,重启清空 |
导航三件套:pwd、ls、cd
在树莓派上打开终端,先弄清自己在哪、周围有什么、怎么去别处:
Bash
pwd
# /home/pi
ls -la
# drwxr-xr-x 3 pi pi 4096 Aug 10 10:00 projects
# -rw-r--r-- 1 pi pi 256 Aug 10 09:30 .bashrc
cd projects/myapp && pwd
# /home/pi/projects/myapp
pwd 输出当前所在目录的绝对路径。ls -la 中 -l 显示详细信息(权限、所有者、大小、时间),-a 显示隐藏文件(以 . 开头的文件)。cd 后可跟绝对路径(/home/pi)或相对路径(projects/myapp)。
cd 快捷符号
cd ~ 回主目录 · cd .. 回上级 · cd - 回上一个目录
ls 常用参数
-h 人类可读大小 · -t 按时间排序 · -R 递归列出子目录
💡 小贴士
tree 命令可以可视化目录树结构,但默认未安装。在 Debian/Ubuntu 上用 sudo apt install tree 安装,然后用 tree -L 2 只显示两层深度,避免输出过长。
03 文件操作:创建、复制、移动与删除
你已经会在目录树中导航了,接下来学习如何在这棵树上"建造"——创建文件和目录、复制、移动、删除,以及查找特定文件。这些操作在项目初始化时频繁使用。
创建项目目录结构
用一条命令创建标准项目结构,这是全栈项目初始化的常见操作:
Bash
|
1
2
3
4
5
6
7
8
9
|
# 创建项目目录结构
mkdir -p myapp/{src,tests,docs,config}
touch myapp/src/main.py myapp/src/utils.py
touch myapp/tests/test_main.py
touch myapp/config/app.conf
# 复制配置文件作为备份
cp myapp/config/app.conf myapp/config/app.conf.bak
# 查找所有 Python 文件
find myapp -name "*.py" -type f
|
mkdir -p 的 -p 参数递归创建父目录,花括号 {} 展开生成多个子目录。find 命令按名称、类型、大小等条件搜索文件,输出如下:
输出
myapp/src/main.py
myapp/src/utils.py
myapp/tests/test_main.py
移动、重命名与删除
mv 既能移动文件到其他目录,也能在同目录下重命名。rm 删除文件,加 -r 递归删除目录,加 -f 强制删除不询问:
Bash
# 重命名文件
mv myapp/config/app.conf.bak myapp/config/backup.conf
# 移动文件到 docs 目录
mv ~/notes.txt myapp/docs/
# 创建软链接:让 python3 指向特定版本
ln -s /usr/bin/python3.11 ~/.local/bin/python3
⚠️ 常见错误
rm -rf / 或 rm -rf ~ — 这会删除整个系统或主目录,不可恢复
✓ 安全习惯:删除前先用 ls 确认路径,使用 rm -i 逐个确认。绝不在 sudo 下执行 rm -rf 带通配符的命令。
| 命令 |
功能 |
关键参数 |
touch |
创建空文件 / 更新时间戳 |
无 |
mkdir |
创建目录 |
-p 递归创建 |
cp |
复制文件 / 目录 |
-r 递归复制目录 |
mv |
移动 / 重命名 |
无 |
rm |
删除文件 / 目录 |
-rf 强制递归删除 |
find |
按条件查找文件 |
-name -type -size |
ln -s |
创建软链接(快捷方式) |
-s 符号链接 |
04 权限管理:rwx 模型与 chmod
文件操作解决了"建什么"的问题,权限管理解决"谁能用"的问题。你在上一篇用 Git 管理代码时,所有文件都是你的——但在服务器上部署应用时,Web 服务器进程以 www-data 用户运行,它需要读取你的代码文件但不能修改。这就需要权限控制。
解读 ls -l 的权限字符串
执行 ls -l deploy.sh,输出中的前 10 个字符就是权限信息:
Bash
ls -l deploy.sh
# -rwxr-xr-- 1 pi www-data 512 Aug 10 09:00 deploy.sh
# | | | | | |
# 类型 权限 链接数 所有者/组 大小 时间 文件名
权限字符串 rwxr-xr-- 分四段:第一个字符是文件类型(- 普通文件,d 目录,l 软链接)。后 9 个字符分三组,每组三个字母:
所有者 (user)
rwx — 可读、可写、可执行
组 (group)
r-x — 可读、不可写、可执行
chmod:修改权限的两种模式
r、w、x 对应数字 4、2、1,三组权限相加得到三位数字。这是最常用的权限设置方式:
Bash
# 数字模式:755 = rwxr-xr-x(所有者全部权限,其他人读和执行)
chmod 755 deploy.sh
# 644 = rw-r--r--(配置文件标准权限)
chmod 644 config/app.conf
# 符号模式:给所有者加执行权限
chmod u+x test.py
# 修改所有者和组
sudo chown pi:www-data app/
| 数字 |
权限 |
典型用途 |
| 755 |
rwxr-xr-x |
脚本、可执行文件、目录 |
| 644 |
rw-r--r-- |
配置文件、文档 |
| 600 |
rw------- |
SSH 私钥、敏感文件 |
| 775 |
rwxrwxr-x |
团队共享目录 |
💡 小贴士
部署 Web 应用时的标准权限配置:代码文件设为 644(Web 服务器可读不可写),上传目录设为 755(可读写执行),脚本设为 755(可执行),所有者设为部署用户,组设为 www-data。这样 Web 服务器能读取代码但无法篡改,安全性最高。
05 文本处理:管道、重定向与 grep
命令行的真正威力在于组合——把一个命令的输出传给另一个命令作为输入。管道 | 和重定向 > >> 是连接命令的胶水,让你像搭积木一样组合出强大的处理流水线。
查看文件内容
Bash
# 查看文件前 5 行
head -5 /var/log/nginx/access.log
# 实时跟踪日志新增内容(Ctrl+C 退出)
tail -f /var/log/nginx/access.log
# 分页查看长文件(空格翻页,q 退出)
less /var/log/syslog
管道与 grep:过滤日志中的关键信息
服务器出了 404 错误?一条管道命令就能统计出所有 404 请求的数量:grep 过滤含 "404" 的行,wc -l 统计行数。
Bash
|
1
2
3
4
5
6
7
8
|
# 统计 404 错误数量
grep "404" /var/log/nginx/access.log | wc -l
# 输出: 42
# 在项目源码中递归搜索关键词
grep -rn "TODO" myapp/src/ --include="*.py"
# myapp/src/main.py:15: # TODO: 添加错误处理
# myapp/src/utils.py:8: # TODO: 优化算法
|
grep -rn 中 -r 递归搜索子目录,-n 显示行号,--include 限定文件类型。管道 | 把左侧命令的标准输出连接到右侧命令的标准输入。
重定向:保存命令输出到文件
Bash
# 覆盖写入(文件原有内容被替换)
date > deploy.log
# 追加写入(在文件末尾添加)
echo "Deploy completed" >> deploy.log
# 合并标准输出和错误输出到日志
python3 app.py > app.log 2>&1
⚠️ 常见错误
python3 app.py > app.log 2> app.log — 标准输出和错误输出分别重定向到同一文件,会互相覆盖导致数据丢失
✓ 正确:用 2>&1 将错误输出合并到标准输出,再一起重定向:python3 app.py > app.log 2>&1
06 进程管理:查看、控制与后台运行
你在终端运行的每一条命令都是一个进程——操作系统分配资源的基本单位。开发时经常需要同时运行多个服务:API 服务器、前端开发服务器、数据库。学会管理进程,你才能在一台设备上同时运转多个服务而不混乱。
查看进程
Bash
# 查看所有进程(BSD 风格)
ps aux | grep python
# pi 1234 0.5 1.2 28000 12000 ? S 10:00 0:01 python3 app.py
# 实时监控(q 退出)
top
ps aux 输出中最重要的列:PID(进程 ID,用于 kill)、%CPU/%MEM(资源占用)、COMMAND(启动命令)。top 提供实时动态视图,按 CPU 占用排序。
后台运行与进程控制
在命令末尾加 & 让进程在后台运行,终端可以继续输入其他命令。但关闭终端后后台进程会被杀死——用 nohup 可以让进程忽略挂断信号:
Bash
|
1
2
3
4
5
6
7
8
9
|
# 后台启动开发服务器
python3 -m http.server 8080 &
# [1] 12345
# 查看后台任务
jobs
# [1]+ Running python3 -m http.server 8080 &
# 关闭终端后仍保持运行
nohup python3 app.py > app.log 2>&1 &
|
终止进程用 kill PID 发送优雅终止信号(SIGTERM),进程可以清理资源后退出。如果进程无响应,用 kill -9 PID 强制杀死(SIGKILL),但可能导致数据丢失。
💡 小贴士
在树莓派或云服务器上部署长期运行的服务时,nohup ... & 是最简单的方式。更专业的做法是用 systemd 管理服务(自动重启、开机启动、日志收集),这在后续阶段学习 Docker 和部署时会深入讲解。
07 四设备协作实战:部署一个 Python 服务
前面六章学的命令是零件,现在把它们组装成一台运转的机器。场景:你在 macOS 上写好了代码并用 Git 推送到远程仓库,现在要把代码部署到树莓派上运行,同时用 Termux 随时查看运行状态,最终在云服务器上做生产部署。整个过程只用命令行。
macOS 开发
→
Git 推送
→
树莓派部署
→
Termux 监控
步骤一:在树莓派上拉取代码并配置
Bash(树莓派)
|
1
2
3
4
5
6
7
|
# SSH 连接到树莓派
ssh pi@raspberrypi.local
# 拉取最新代码
cd ~/projects/myapp && git pull origin main
# 给启动脚本执行权限
chmod 755 start.sh
|
步骤二:后台启动服务并验证
Bash(树莓派)
|
1
2
3
4
5
6
7
8
|
# 后台启动服务,日志写入文件
nohup python3 -m http.server 8080 > server.log 2>&1 &
# [1] 12345
# 验证进程在运行
ps aux | grep "http.server"
# pi 12345 0.3 0.8 25000 8000 ? S 10:00 0:00 python3 -m http.server 8080
# 实时查看日志
tail -f server.log
|
步骤三:从 Termux 远程查看状态
Bash(Termux)
# 从手机 SSH 到树莓派查看进程
ssh pi@raspberrypi.local "ps aux | grep python"
# 查看最近 10 行日志
ssh pi@raspberrypi.local "tail -10 ~/projects/myapp/server.log"
# 如果服务异常,远程重启
ssh pi@raspberrypi.local "kill 12345 && cd ~/projects/myapp && nohup python3 -m http.server 8080 > server.log 2>&1 &"
一条 SSH 命令就能在手机上查看树莓派的运行状态——这就是命令行的威力。同样的命令在云服务器上也适用,只需把 raspberrypi.local 换成云服务器的公网 IP。四台设备形成了完整的开发闭环:macOS 写代码、Git 同步、树莓派测试、云服务器部署、Termux 随时监控。
08 阶段一总结与动手练习
本篇是全栈开发学习系列阶段一(编程基础)的终篇。八篇文章从环境搭建到命令行操作,构建了全栈开发的核心基础。回顾这段旅程:
| 篇目 |
核心技能 |
| 01 路线总览 |
四设备协作策略、开发环境搭建 |
| 02 Python 语法 |
变量、数据类型、控制流、函数 |
| 03 Python 进阶上 |
文件读写、with 语句、模块系统 |
| 04 Python 进阶下 |
try/except、自定义异常、综合实战 |
| 05 C 语言与内存 |
指针、malloc/free、动态内存管理 |
| 06 数据结构 |
链表、栈、队列、时间复杂度 |
| 07 Git 版本控制 |
分支、合并、冲突解决、多设备同步 |
| 08 Linux 命令行 |
文件操作、权限管理、进程控制 |
这八项技能构成了全栈开发的底层基座:Python 提供后端编程能力,C 语言让你理解内存和底层机制,数据结构培养算法思维,Git 解决协作问题,Linux 命令行打通部署运维链路。下一阶段将进入后端开发——用 FastAPI 构建 RESTful API,连接数据库,实现用户认证,最终在云服务器上跑起来。
动手练习
🟢 基础验证
在你的任一设备上创建一个 practice 目录,内含 src 和 docs 两个子目录。创建一个 hello.sh 脚本,用 chmod 赋予执行权限,运行后输出 "Hello, Linux!"。用 ls -l 验证权限设置为 rwxr-xr-x。
🟡 组合应用
编写一个 Python 脚本 server.py,用 http.server 模块启动一个 8080 端口的 Web 服务器。用 nohup 后台运行,输出重定向到 server.log。然后用 ps aux | grep 找到进程 PID,用 tail -f 查看日志,最后用 kill 停止进程。提示:需要组合本篇的进程管理、重定向和文本处理知识。
🔴 开放挑战
在树莓派(或云服务器)上完成一次完整的部署流程:SSH 登录 → 克隆 Git 仓库 → 创建虚拟环境 → 安装依赖 → 设置文件权限 → 后台启动服务 → 验证服务可访问 → 查看运行日志。将整个过程的命令记录到一个 deploy.sh 脚本中,实现一键部署。提示:虚拟环境用 python3 -m venv venv,激活用 source venv/bin/activate。
📖 知识回顾
pwd / ls / cd 导航
mkdir / cp / mv / rm
find 查找文件
rwx 权限模型
chmod 755 / 644
chown 修改所有者
管道 | 与重定向 >
grep 文本搜索
ps / top 进程查看
kill 终止进程
nohup 后台运行
四设备协作部署
阶段一 · 编程基础 · 完结
🎉 8/8 篇全部完成
下一阶段将进入后端开发:用 FastAPI 构建 RESTful API,连接数据库,实现用户认证与部署。Python 基础、C 内存模型、数据结构、Git 协作、Linux 命令行——这八块基石已铺好,全栈开发之路正式启程。