📚 Termux 无 Root 学习开发系列
当前进度:阶段一 · 2/28
阶段一:环境搭建与终端基础
01 Termux 简介与安装
02 包管理与终端基础(当前篇)
03 共享存储与文件管理
04 Vim/Neovim 与 tmux 终端工作流(上):Neovim 编辑器基础
05 Vim/Neovim 与 tmux 终端工作流(下):tmux 多窗口工作流
阶段二至九共 23 篇,后续持续更新

02 包管理与终端基础:pkg命令与Shell操作

掌握 pkg 包管理器与 Shell 文件操作,理解 Termux 文件系统布局——一切后续操作的地基
难度:入门 前置:01 Termux 简介与安装
读完本篇你将能:使用 pkg 命令搜索、安装、卸载软件包,安装 10+ 常用终端工具,理解 Termux 的 $PREFIX 与 $HOME 目录结构;熟练使用 ls/cp/mv/rm 等文件操作命令,理解管道与重定向的组合威力,配置 ~/.bashrc 个性化环境,用 grep 和 find 精准搜索文件内容,并编写你的第一个 bash 脚本。
📑 本文目录
01pkg 命令:Termux 的软件管家
02常用工具安装:打造你的工具箱
03Termux 文件系统:手机里的 Linux 目录树
04实操:探索你的 Termux 全貌
05Shell 文件操作:日常命令六件套
06管道与重定向:连接命令的胶水
07环境变量与 PATH:定制你的终端
08文本搜索双雄:grep 与 find
09实操项目:统计目录文件数量的脚本

01 pkg 命令:Termux 的软件管家

上一篇文章中你已经完成了 Termux 安装和换源,现在该往这个空荡荡的终端里装东西了。Termux 用的是自己的包管理器 pkg,它是 apt 的简化封装,命令更短、更好记。把 pkg 想象成手机上的应用商店,只不过你用文字而不是手指来操作。

安装软件:pkg install

最常用的命令,没有之一。一次可以装多个包:

Bash
pkg install python git tree

执行后会看到下载进度条和解包信息。如果遇到 E: Unable to locate package 错误,说明你的源没更新,先跑一遍 pkg update。

搜索软件:pkg search

不确定包名时用搜索。比如想找一个截图工具:

Bash
pkg search screenshot

会列出所有名字或描述里含 "screenshot" 的包。注意搜索结果中的包名是 包名/版本号 格式,斜杠前面才是你要填给 pkg install 的名字。

卸载软件:pkg uninstall

卸载时加 -y 跳过确认:

Bash
pkg uninstall -y tree

查看已装:pkg list-installed

列出当前已安装的所有包,配合 grep 可以快速筛选:

Bash
pkg list-installed | grep python

这条命令的输出类似 python/3.12.3-1 aarch64,包含包名、版本号和 CPU 架构。管道符 | 的用法后文会详细讲。

更新一切:pkg update && pkg upgrade

update 刷新软件源索引(不装东西),upgrade 升级所有已安装的包到最新版。养成定期跑的习惯:

Bash
pkg update && pkg upgrade -y
💡 小贴士
pkg 底层调用的还是 apt,所以 apt install、apt search 等命令也能用,只是 pkg 更短,适合手机键盘输入。两者效果完全相同。
命令 作用 示例
pkg install 安装软件包 pkg install python
pkg search 搜索软件包 pkg search nginx
pkg uninstall 卸载软件包 pkg uninstall tree
pkg list-installed 列出已装包 pkg list-installed
pkg update 刷新源索引 pkg update
pkg upgrade 升级所有包 pkg upgrade -y

02 常用工具安装:打造你的工具箱

刚装好的 Termux 是个毛坯房,连 tree 命令都没有。下面这批工具是后续所有操作的标配,一次性装齐:

Bash
pkg install -y coreutils findutils grep sed awk tree unzip zip tar less

每个包的作用:

• coreutils:核心工具包,含 ls、cp、mv、rm、cat、head、tail 等基础命令
• findutils:提供 find、xargs 等文件查找工具
• grep:文本搜索,后续找代码全靠它
• sed + awk:流式文本编辑和数据处理,Linux 三剑客之二
• tree:以树形结构显示目录,比 ls 更直观
• unzip + zip + tar:压缩解压三件套
• less:分页查看长文本,比 cat 更适合阅读大文件

安装完后验证一下 tree 是否就绪:

Bash
tree -L 1 /data/data/com.termux/files/usr
# 输出示例:
# .
# ├── bin
# ├── etc
# ├── include
# ├── lib
# ├── share
# └── tmp
⚠️ 常见错误
pkg install httpie — Termux 没有原生 httpie 包
✓ 正确:用 pip install httpie(Python 包)或 pkg install curl(替代方案)。并非所有桌面 Linux 的包名都能在 Termux 中找到,遇到找不到时先 pkg search 搜一下。

03 Termux 文件系统:手机里的 Linux 目录树

你现在已经能装软件了,但要知道 Termux 的文件系统跟桌面 Linux 有一个关键差异:它不是从根目录 / 开始的。因为 Android 不给 App 访问系统根目录的权限,Termux 在 /data/data/com.termux/files/ 下建了自己的迷你 Linux 目录树。

$PREFIX:Termux 的根

Termux 把它的整个系统装在一个叫 $PREFIX 的路径下。输入以下命令查看它的实际值:

Bash
echo $PREFIX
/data/data/com.termux/files/usr

这个路径等价于桌面 Linux 的 /usr,下面装了所有软件包的文件。关键子目录:

• $PREFIX/bin:可执行文件,你安装的命令都在这里
• $PREFIX/etc:配置文件,如 apt/sources.list(软件源列表)
• $PREFIX/lib:库文件,Python 包的 .so 文件在这
• $PREFIX/share:共享数据,如 man 手册、bash 补全脚本
• $PREFIX/tmp:临时文件,重启后可能被清理

$HOME:你的家

Termux 启动时默认在 $HOME 目录,它的实际路径是:

Bash
echo $HOME
/data/data/com.termux/files/home
pwd
/data/data/com.termux/files/home

$HOME 就是你在这个手机 Linux 里的家,你的代码项目、配置文件、SSH 密钥都会放在这里。用 cd ~ 可以随时回到这里(~ 是 $HOME 的简写)。

~/storage/:通往手机存储的桥梁

上一篇你执行过 termux-setup-storage,它在 $HOME 下创建了一组符号链接,指向手机的共享存储:

Bash
ls -la ~/storage/
# 输出示例:
# dcim -> /storage/emulated/0/DCIM
# downloads -> /storage/emulated/0/Download
# movies -> /storage/emulated/0/Movies
# music -> /storage/emulated/0/Music
# pictures -> /storage/emulated/0/Pictures
# shared -> /storage/emulated/0

这意味着你在 Termux 里 cp ~/storage/downloads/report.txt . 就能把手机下载目录的文件拷贝到工作区。后文会详细讲文件操作命令,这里先记住这条路径。

💡 小贴士
用 echo $PREFIX 和 echo $HOME 随时查看这两个路径。写脚本时用变量名 $PREFIX 而非硬编码路径,这样脚本在任何设备上都能跑。

04 实操:探索你的 Termux 全貌

把前面学到的命令串起来,完整地审视你的 Termux 环境。依次执行以下命令:

Bash
1
2
3
4
5
6
7
8
9
10
11
# 查看已安装了多少个包
pkg list-installed | wc -l
# 查看 $PREFIX 的树形结构(只看一级目录)
tree -L 1 $PREFIX
# 查看家目录内容
ls -la ~
# 确认存储链接是否就绪
ls ~/storage/downloads

第 2 行的 wc -l 是统计行数命令,配合管道符 | 把 pkg list-installed 的输出行数出来。刚装好的 Termux 大约有 60-80 个包,装完上面的工具后会到 90+ 。

如果 ls ~/storage/downloads 能列出你手机下载目录的文件,说明存储权限配置成功,后面传文件就畅通无阻了。如果报 No such file or directory,回到 01 篇执行 termux-setup-storage 并授权。

pkg 命令
→
安装工具
→
理解目录
→
环境就绪

05 Shell 文件操作:日常命令六件套

前面你已经装好了 coreutils,里面的命令就是你接下来每天都要用的。把这批命令分成三组来记:看文件、动文件、读文件。

看文件:ls / cd / pwd

Bash
1
2
3
4
5
6
7
pwd
/data/data/com.termux/files/home
ls -lah
# -l 详细列表 -a 含隐藏文件 -h 人类可读大小
cd ~/storage/downloads

pwd 告诉你现在在哪,ls -lah 列出当前目录的详细内容,cd 切换目录。手机屏幕小,-h 参数让文件大小显示为 KB/MB 而非原始字节数,阅读更友好。

动文件:cp / mv / rm / mkdir

Bash
1
2
3
4
5
6
7
8
9
10
11
mkdir -p projects/python projects/bash
# -p 递归创建父目录
cp ~/.bashrc ~/bashrc.bak
# 复制文件做备份
mv ~/bashrc.bak ~/projects/bash/
# 移动文件到目录
rm -rf ~/projects/python/__pycache__
# -r 递归删除目录 -f 强制不询问
⚠️ 常见错误
rm -rf / — 在 Termux 中不会删掉手机系统(SELinux 拦截),但会删掉整个 Termux 环境,所有安装的包和文件都会丢失
✓ 正确:删除前先用 ls 确认路径,或用 echo rm -rf ~/tmp/* 预览将要执行的命令。rm -rf 没有回收站,删了就是删了。

读文件:cat / less / head / tail

Bash
1
2
3
4
5
6
7
8
9
cat ~/.bashrc
# 一次性输出整个文件,适合短文本
less $PREFIX/etc/apt/sources.list
# 分页查看,空格翻页 q退出 /搜索
head -5 ~/.bashrc
tail -10 ~/.bashrc
# 只看前5行 / 后10行

cat 适合看短文件,less 适合看长文件(支持上下翻页和搜索),head/tail 只看开头或结尾几行。在 Termux 软键盘上,less 中的 q 退出键需要先按 Termux 的 Esc 键再按 q。

06 管道与重定向:连接命令的胶水

单个命令的力量有限,真正让 Shell 强大的是把多个命令串起来。管道和重定向就是做这件事的胶水。把命令想象成工厂流水线上的工位,管道负责把上一个工位的成品传给下一个工位,重定向负责把产品存进仓库。

管道 |:前一个命令的输出 = 后一个命令的输入

Bash
ls -la ~/ | grep ".bashrc"
# 只显示含 .bashrc 的行

数据流向:ls -la ~/ 列出家目录所有文件 → 管道 | 把输出交给 grep → grep ".bashrc" 从中筛出含 ".bashrc" 的行。管道可以连续串联多个命令。

重定向 > 和 >>:把输出存进文件

Bash
1
2
3
4
5
6
7
8
pkg list-installed > ~/installed.txt
# 覆盖写入:文件不存在则创建,存在则清空重写
date >> ~/installed.txt
# 追加写入:在文件末尾添加,不覆盖原有内容
cat ~/installed.txt
# 查看结果:包列表 + 当前时间
符号 作用 文件不存在时 文件已存在时
> 覆盖写入 创建新文件 清空后重写
>> 追加写入 创建新文件 末尾添加
< 从文件读取输入 报错 —

组合实战:管道 + 重定向

管道和重定向可以自由组合,这是终端效率的核心:

Bash
1
2
3
4
5
6
7
8
# 统计已安装包数量并保存到文件
pkg list-installed | wc -l > ~/pkg-count.txt
# 找出 bin 目录下最大的 5 个文件
ls -lS $PREFIX/bin/ | head -6
# 合并两个文件的内容
cat ~/.bashrc ~/.profile > ~/shell-config.txt

07 环境变量与 PATH:定制你的终端

环境变量是 Shell 的全局配置,它们决定了终端的行为方式。你之前用过的 $PREFIX 和 $HOME 就是两个环境变量。现在来学习如何查看和自定义它们。

查看环境变量

Bash
1
2
3
4
5
6
7
# 查看所有环境变量
env
# 查看单个变量
echo $PATH
/data/data/com.termux/files/usr/bin
# PATH 决定了 Shell 去哪些目录找命令

PATH 详解

PATH 是最重要的环境变量。当你在终端输入 python 时,Shell 会按 PATH 中列出的目录顺序去查找 python 这个可执行文件。如果某个目录不在 PATH 里,那里的程序就不能直接用名字调用。

比如你自己在 ~/bin/ 下放了一个脚本 mytool.sh,不把 ~/bin/ 加进 PATH 的话,就得每次写完整路径 ~/bin/mytool.sh 才能运行。

~/.bashrc:让配置永久生效

在终端里直接执行 export PATH=$PATH:~/bin 只对当前会话生效,关掉 Termux 再开就没了。要永久生效,需要写进 ~/.bashrc:

Bash
1
2
3
4
5
6
7
8
9
# 把自定义路径追加到 PATH
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
# 设置别名:长命令变短
echo 'alias ll="ls -lah"' >> ~/.bashrc
echo 'alias py="python"' >> ~/.bashrc
# 立即生效(不用重启 Termux)
source ~/.bashrc
💡 小贴士
~/.bashrc 在每次打开新终端会话时自动执行。~/.profile 则在登录时执行。在 Termux 中两者效果基本相同,通常改 ~/.bashrc 即可。修改后用 source ~/.bashrc 立即生效,不用关掉重开。

08 文本搜索双雄:grep 与 find

文件多了之后,你面临两个问题:一是在文件内容里找关键词,二是在一堆文件里找某个文件。grep 解决第一个,find 解决第二个。这两个命令是 Linux 终端使用频率最高的工具之一。

grep:在文件内容中搜索

Bash
1
2
3
4
5
6
7
8
9
# 在单个文件中搜索
grep "PATH" ~/.bashrc
# 递归搜索整个目录,显示行号
grep -rn "import" ~/projects/
# -r 递归子目录 -n 显示行号
# 忽略大小写
grep -i "python" ~/projects/README.md

grep -rn 是最常用的组合:-r 递归搜索子目录,-n 在结果前显示行号。输出格式为 文件路径:行号:匹配行内容,方便你快速定位。

find:按文件名搜索

Bash
1
2
3
4
5
6
7
8
9
10
11
# 按文件名搜索
find ~/projects/ -name "*.py"
# 找所有 .py 文件
# 按文件类型搜索
find ~/ -type d -name "projects"
# -type d 只找目录 -type f 只找文件
# 按修改时间搜索
find ~/ -name "*.py" -mtime -1
# -mtime -1 = 1天内修改过的
💡 小贴士
grep 和 find 可以用管道组合:先 find 找文件,再 grep 搜内容。但更高效的方式是直接用 grep -rn "关键词" 目录/,一条命令搞定。find 更适合按文件名、类型、时间等属性找文件本身。

09 实操项目:统计目录文件数量的脚本

把本篇学到的所有知识综合起来,编写一个 bash 脚本:接收一个目录路径,统计其中各类型文件的数量并输出报告。这个脚本用到了变量、管道、重定向、grep、find 等全部知识点。

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# 文件类型统计脚本
DIR=${1:-.}
# 如果没传参数,默认用当前目录
if [ ! -d "$DIR" ]; then
  echo "错误:$DIR 不是目录"
  exit 1
fi
echo "=== 目录统计:$DIR ==="
echo "总文件数:$(find "$DIR" -type f | wc -l)"
echo "总目录数:$(find "$DIR" -type d | wc -l)"
echo "--- 按扩展名 ---"
find "$DIR" -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn | head -10

保存为 ~/filestats.sh,然后运行:

Bash
1
2
3
4
5
6
7
8
9
chmod +x ~/filestats.sh
bash ~/filestats.sh $PREFIX
# 输出示例:
# === 目录统计:/data/data/com.termux/files/usr ===
# 总文件数:342
# 总目录数:28
# --- 按扩展名 ---
# 87 sh
# 45 so

脚本核心逻辑拆解:第 15 行是最精华的一行管道串联——find 找所有文件 → sed 提取扩展名 → sort 排序 → uniq -c 去重计数 → sort -rn 按数量降序 → head -10 只取前 10 名。六个命令用管道串成一条数据流水线。

✏️ 动手练习
🟢 基础验证
请用 pkg search 搜索 "man" 关键词,找到手册页工具的包名,用 pkg install 安装它。安装后运行 man ls 查看手册。再在 ~/.bashrc 中添加别名 alias p="pkg",source 生效后验证 p list-installed 是否正常工作。
参考解法:搜索会发现包名是 man,执行 pkg install man;然后 echo 'alias p="pkg"' >> ~/.bashrc && source ~/.bashrc;执行 p list-installed 确认输出正常。
🟡 组合应用
请用管道组合命令,找出 $PREFIX/bin 目录下最大的 3 个文件,并将结果保存到 ~/top3-bin.txt。再用 pkg list-installed 配合 grep 筛选出所有名字包含 "python" 的已安装包,用 wc -l 统计有多少个。提示:需要用到 ls -lS(按大小降序)、head 和 >。
参考解法:ls -lS $PREFIX/bin/ | head -4 > ~/top3-bin.txt(head -4 因为第一行是 total 汇总行);pkg list-installed | grep python | wc -l,预期输出 3-5 个。
🔴 开放挑战
扩展本篇的 filestats.sh 脚本,增加一个功能:除了按扩展名统计外,再统计总文件大小(用 du 或 find ... -exec stat),并计算每个扩展名的平均文件大小。提示:可以用 awk 做数学运算,也可以用 bash 的算术扩展 $((...))。
📖 知识回顾
pkg install pkg search pkg uninstall pkg list-installed $PREFIX 目录 $HOME 家目录 ~/storage/ 共享存储 coreutils ls/cd/cp/mv/rm cat/less/head/tail 管道 | 重定向 > >> 环境变量 env PATH 配置 ~/.bashrc grep -rn find -name alias 别名 bash 脚本
下篇预告
03 共享存储与文件管理
将深入 ~/storage/ 目录映射机制,学习 ranger 文件管理器,掌握压缩解压操作,并编写自动整理 Downloads 目录的脚本
关注持续获取系列更新