03 Python 进阶(上):文件读写与模块系统 ✅04 Python 进阶(下):异常处理与综合实战 ✅08 Linux 命令行:文件、权限与进程管理(当前篇)Linux 命令行:文件、权限与进程管理
从目录导航到进程控制,让四台设备在你的指尖运转自如读完本篇你将能:在命令行中自如导航文件系统,创建和操作文件目录,理解 rwx 权限模型并用 chmod 精确控制访问,使用管道和重定向组合命令处理文本,管理前台和后台进程,在四台设备上完成一次完整的服务部署流程。01 从版本控制到命令行
上一篇你掌握了 Git——代码有了版本管理,多台设备间的同步也有了方案。但代码不是只存在于 Git 仓库里,它最终要运行在操作系统上。当你在云服务器上部署应用、在树莓派上启动服务、在 Termux 里练习代码时,面对的都不是图形界面,而是一个闪烁的光标——命令行。
好消息是:你的四台设备全部运行类 Unix 系统。macOS 底层是 Darwin 内核,Termux 提供 Android 上的 Linux 环境,树莓派跑 Debian,云服务器通常是 Ubuntu 或 CentOS。这意味着同一套命令在四台设备上几乎通用——命令行是开发者跨平台的"通用语言"。
把文件系统想象成一座城市:目录是街区(/home 是住宅区,/etc 是行政区,/var 是仓储区),文件是建筑,权限是门禁卡(决定谁能进、谁能改),进程是城市中运转的车辆(有的在前台奔跑,有的在后台默默运行)。本篇你要学会在这座城市里导航、建造、设门禁、调度交通。
文件操作
导航、创建、复制、移动、删除、查找——管理项目文件的基本功
权限管理
rwx 模型、chmod 数字与符号模式——控制谁能读、写、执行
进程管理
查看、终止、后台运行——管理正在运行的程序和服务
02 文件系统导航:在目录树中穿梭
Linux 文件系统是一棵倒置的树,根目录是 /,所有目录和文件都从根开始。了解标准目录布局,你才能快速找到配置文件、日志和可执行程序。
| | |
|---|
/home | | |
/etc | | |
/var | | |
/usr/local | | |
/tmp | | |
导航三件套:pwd、ls、cd
在树莓派上打开终端,先弄清自己在哪、周围有什么、怎么去别处:
# drwxr-xr-x 3 pi pi 4096 Aug 10 10:00 projects# -rw-r--r-- 1 pi pi 256 Aug 10 09:30 .bashrc# /home/pi/projects/myapppwd 输出当前所在目录的绝对路径。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 文件操作:创建、复制、移动与删除
你已经会在目录树中导航了,接下来学习如何在这棵树上"建造"——创建文件和目录、复制、移动、删除,以及查找特定文件。这些操作在项目初始化时频繁使用。
创建项目目录结构
用一条命令创建标准项目结构,这是全栈项目初始化的常见操作:
| mkdir-p myapp/{src,tests,docs,config}touch myapp/src/main.py myapp/src/utils.pytouch myapp/tests/test_main.pytouch myapp/config/app.confcp myapp/config/app.conf myapp/config/app.conf.bakfind myapp -name"*.py"-type f |
mkdir -p 的 -p 参数递归创建父目录,花括号 {} 展开生成多个子目录。find 命令按名称、类型、大小等条件搜索文件,输出如下:
移动、重命名与删除
mv 既能移动文件到其他目录,也能在同目录下重命名。rm 删除文件,加 -r 递归删除目录,加 -f 强制删除不询问:
mv myapp/config/app.conf.bak myapp/config/backup.confmv ~/notes.txt myapp/docs/ln-s /usr/bin/python3.11 ~/.local/bin/python3rm -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 个字符就是权限信息:
# -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,三组权限相加得到三位数字。这是最常用的权限设置方式:
# 数字模式:755 = rwxr-xr-x(所有者全部权限,其他人读和执行)# 644 = rw-r--r--(配置文件标准权限)chmod 644 config/app.confsudochown pi:www-data app/部署 Web 应用时的标准权限配置:代码文件设为 644(Web 服务器可读不可写),上传目录设为 755(可读写执行),脚本设为 755(可执行),所有者设为部署用户,组设为 www-data。这样 Web 服务器能读取代码但无法篡改,安全性最高。05 文本处理:管道、重定向与 grep
命令行的真正威力在于组合——把一个命令的输出传给另一个命令作为输入。管道 | 和重定向 >>> 是连接命令的胶水,让你像搭积木一样组合出强大的处理流水线。
查看文件内容
head-5 /var/log/nginx/access.logtail-f /var/log/nginx/access.log管道与 grep:过滤日志中的关键信息
服务器出了 404 错误?一条管道命令就能统计出所有 404 请求的数量:grep 过滤含 "404" 的行,wc -l 统计行数。
| grep"404" /var/log/nginx/access.log | wc-lgrep-rn"TODO" myapp/src/ --include="*.py"# myapp/src/main.py:15: # TODO: 添加错误处理# myapp/src/utils.py:8: # TODO: 优化算法 |
grep -rn 中 -r 递归搜索子目录,-n 显示行号,--include 限定文件类型。管道 | 把左侧命令的标准输出连接到右侧命令的标准输入。
重定向:保存命令输出到文件
echo"Deploy completed" >> deploy.logpython3 app.py > app.log 2>&1python3 app.py > app.log 2> app.log — 标准输出和错误输出分别重定向到同一文件,会互相覆盖导致数据丢失 ✓ 正确:用 2>&1 将错误输出合并到标准输出,再一起重定向:python3 app.py > app.log 2>&106 进程管理:查看、控制与后台运行
你在终端运行的每一条命令都是一个进程——操作系统分配资源的基本单位。开发时经常需要同时运行多个服务:API 服务器、前端开发服务器、数据库。学会管理进程,你才能在一台设备上同时运转多个服务而不混乱。
查看进程
# pi 1234 0.5 1.2 28000 12000 ? S 10:00 0:01 python3 app.pyps aux 输出中最重要的列:PID(进程 ID,用于 kill)、%CPU/%MEM(资源占用)、COMMAND(启动命令)。top 提供实时动态视图,按 CPU 占用排序。
后台运行与进程控制
在命令末尾加 & 让进程在后台运行,终端可以继续输入其他命令。但关闭终端后后台进程会被杀死——用 nohup 可以让进程忽略挂断信号:
| python3 -m http.server 8080 &# [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 随时查看运行状态,最终在云服务器上做生产部署。整个过程只用命令行。
步骤一:在树莓派上拉取代码并配置
| cd ~/projects/myapp &&git pull origin main |
步骤二:后台启动服务并验证
| nohup python3 -m http.server 8080 > server.log 2>&1 &ps aux | grep"http.server"# pi 12345 0.3 0.8 25000 8000 ? S 10:00 0:00 python3 -m http.server 8080 |
步骤三:从 Termux 远程查看状态
ssh pi@raspberrypi.local "ps aux | grep python"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 阶段一总结与动手练习
本篇是全栈开发学习系列阶段一(编程基础)的终篇。八篇文章从环境搭建到命令行操作,构建了全栈开发的核心基础。回顾这段旅程:
这八项技能构成了全栈开发的底层基座: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 / rmfind 查找文件rwx 权限模型chmod 755 / 644chown 修改所有者管道 | 与重定向 >grep 文本搜索ps / top 进程查看kill 终止进程nohup 后台运行四设备协作部署下一阶段将进入后端开发:用 FastAPI 构建 RESTful API,连接数据库,实现用户认证与部署。Python 基础、C 内存模型、数据结构、Git 协作、Linux 命令行——这八块基石已铺好,全栈开发之路正式启程。