您知道您可以在 iOS 设备上运行 Linux 命令行吗?您可能会问:“我为什么要在我那小小的 iPhone 上使用基于文本的应用程序?” 好吧,说得有道理。这是一个非常合理的问题。但是,如果您正在阅读 Opensource.com,您可能知道答案:Linux 用户希望能够使用任何设备,并且他们也希望使用自己的自定义设置。
最重要的是,他们想要挑战。
我有一个用了七年的 iPad 2 Mini,它仍然可以很好地用于阅读电子书和其他任务。但是我也想用它来访问命令行,以运行应用程序和我那套离不开的程序和脚本。我想要我习惯的环境,以及我的标准开发环境。 这是我实现的方法。
连接键盘
在手机或平板电脑的屏幕键盘上使用命令行进行编程并不是一件有趣的事情。 我建议连接一个外部键盘,可以通过蓝牙连接,也可以使用相机连接套件适配器连接有线键盘(这是我的首选)。 将我的 Kinesis Advantage 分离式键盘插入我的 iPhone 6 会产生一些奇怪的视觉效果,就像经典桌面角色扮演游戏《暗影狂奔》中的 公司网络控制台。
在 iOS 上获取 Shell
您有两种选择可以在 iOS 上运行完整的 Linux 系统:
- 通过安全 Shell (SSH) 连接到 Linux 计算机
- 使用 iSH 运行一个虚拟化的 Alpine Linux 系统,它是开源的,但必须使用 Apple 的专有 TestFlight 应用程序进行安装
或者,还有两个开源终端仿真器应用程序,它们在受限环境中提供开源工具。 这是最有限的选择 - 它实际上不允许您运行 Linux,但您正在运行 Linux 工具。 这些应用程序对您可以在设备上执行的操作有很大的限制,但它们确实为您提供了一些命令行功能。
我将首先研究最简单的方法,然后再探索更具挑战性的解决方案。
选项 1:沙盒 Shell
入门最简单的方法之一是使用 iOS 应用程序 LibTerm。 这是一个沙盒化的开源命令行 Shell,捆绑了 80 多个命令,售价 0 美元。 它附带 Python 2.7、Python 3.7、Lua、C、Clang 等。
类似的是 a-Shell,它被描述为“基于文本的、面向屏幕平台的的用户界面”。 a-Shell 是开源的,正在积极开发中,可以访问文件系统,并附带 Lua、Python、Tex、Vim、JavaScript、C 和 C++,以及 Clang 和 Clang++。 它甚至允许您使用 pip 安装 Python 包。
选项 2:随处 SSH
比下载应用程序更进一步的是配置 SSH 客户端。 长期以来,可以使用 iOS 上的许多 SSH 客户端应用程序之一来连接到运行 Linux 发行版或 BSD 的服务器。 使用 SSH 的优势在于您的服务器可以运行您喜欢的任何发行版和任何软件。 您远程工作,您的输出只是通过管道传输到您的 iOS 设备的终端仿真器。
Blink shell 是一个流行的付费 开源 SSH 应用程序。 除了小屏幕,使用此软件类似于通过任何其他命令提示符连接到服务器。 Blink 的终端看起来很漂亮,有许多包含的主题,并且可以创建自己的主题,包括自定义和添加新字体。
选项 3:运行 Linux
使用 SSH 连接到运行 Linux 的服务器是一种访问提示符的好方法,但它确实需要访问外部服务器和连接。 这不是最糟糕的入门障碍,但它并非完全可以忽略不计,您可能希望在没有此服务器要求的情况下使用 Linux。
如果是这种情况,您将不得不突破一些更前沿的东西。 TestFlight 是一种专有服务,用于在将开发中的应用程序提交到 Apple 的 App Store 之前进行部署。 您可以从商店下载 TestFlight 应用程序,然后注册多个测试应用程序。 TestFlight 中的应用程序允许有限数量的外部 Beta 测试人员(通常最多 10,000 个),持续有限的时间。 要下载测试应用程序,您必须直接从您的设备访问链接,该链接通常可以在测试应用程序开发人员的网站上找到。
使用 iSH 运行 Alpine Linux
iSH 是一个 开源的 TestFlight 应用程序,它可以开箱即用地运行一个虚拟机,其中包含 Alpine Linux 发行版(但您可以通过更多的调整来运行其他发行版)。
一个重要的警告:*这是实验性的*。 由于 iSH 目前是一个测试版应用程序,因此不要期望永久或强大的服务。 TestFlight 应用程序具有时间限制。 我当前的构建持续 60 天。 这意味着 60 天后,我将被锁定,并且必须重新加入 iSH 的下一个测试阶段。 此外,除非我使用 iOS 上的 Files 导出它们,或者将它们备份到 Git 主机或 通过 SSH,否则我会丢失我的文件。 需要明确的是:*不要指望它会继续工作! 不要把任何重要的东西放在这里! 将您的工作备份到其他地方!*
安装 iSH
首先通过 App Store 安装 TestFlight。 然后通过 从其网站获取安装链接来安装 iSH。 还有另一种使用 AltStore 的安装方法,但我还没有尝试过。 或者,如果您有付费的开发者帐户,您可以从 GitHub 下载 iSH 的存储库并自行部署。
使用该链接,TestFlight 会在您的设备上安装 iSH 应用程序。 像任何其他应用程序一样,它会出现在您的屏幕上并带有图标。
管理软件包
iSH 运行一个带有 Alpine Linux 的 x86 仿真器。 Alpine 是一个非常小的发行版,小于 5MB。 这是我第一次运行 Alpine,我以为我会对这么小的发行版感到沮丧,但实际上我真的很喜欢它。

(Lee Tusman, CC BY-SA 4.0)
Alpine 使用 apk 包管理器,它甚至比 apt 或 pacman 更简单。
要安装一个软件包
apk add package
要移除一个软件包
apk del package
查找其他命令和信息
apk --help
更新包管理器
apk update
apk upgrade
获取文本编辑器
Alpine 的默认文本编辑器是 Vi,但我更喜欢 Vim,所以我安装了它
apk add vim
如果您愿意,您可以安装 Nano 或 Emacs。
更改 Shell
我不了解您,但我需要 fish shell。 其他人更喜欢 Bash 或 Zsh。 但是 Alpine 使用 ash! Ash 是 Dash shell 的一个分支,Dash shell 本身又是原始 ash 或 Almquist shell 的一个分支。 它是为速度而设计的。 我决定牺牲速度来换取 fish shell 中我所知道和喜爱的内置自动完成、颜色、Vim 键控制和语法高亮显示。
安装 fish
apk add fish
如果您想要 Bash 及其补全和手册页,则需要安装它们和一些额外的程序
apk add bash bash-doc bash-completion
Alpine 的极简主义理念通常意味着在其他发行版中作为单个软件包的一些程序被拆分为多个较小的软件包。 这也意味着您可以完全按照您想要的方式自定义和精简您的系统。
您可以在 本教程中找到有关安装 Bash 的更多详细信息。
更改默认 Shell
安装 fish 后,您可以通过输入 fish
并进入 Shell 来临时切换到它并试用它。 但是我想将 fish 设置为我的默认 Shell,而我从其他发行版中使用惯用的 chsh
命令不起作用。
首先,找出 fish 的安装位置
which fish
我的输出
/usr/bin/fish
接下来,编辑登录 Shell 以使用 fish。 您可以使用任何您觉得舒服的编辑器。 如果您是初学者,请安装 Nano(使用 apk add nano
),以便您可以编辑配置文件并通过 CTRL+X 保存它们,确认并退出。
但我 使用 Vim
vim /etc/passwd
我的第一行是
root:x:0:0:root:/root:/bin/ash
要使 fish 成为 默认,请将该行 更改为
root:x:0:0:root:/root:/usr/bin/fish
然后保存并退出。
我确信有一种很好的方法可以重新加载 shell,以便您可以立即开始使用它。但我不太确定,所以我建议返回到应用程序浏览器,强制退出 shell,为了万无一失,关闭并重新启动您的 iPad 或 iPhone。重新打开 iSH,现在,除了“Welcome to Alpine!”消息和有关 apk 入门的的信息之外,您还会看到默认的 fish 登录欢迎消息:Welcome to fish, the friendly interactive shell。万岁!

(Lee Tusman, CC BY-SA 4.0)
设置 Python 和 pip
我决定添加 Python(3.x 版本),不仅仅是为了编写代码,还因为我依赖于几个 Python 程序。安装它。
apk add python3
虽然 Python 2.x 已被弃用,但您仍然可以安装它。
apk add python
安装 Python 包管理器 pip 和 setuptools。
python3 -m ensurepip --default-pip
安装和设置包管理器需要一些时间,请耐心等待。
然后,您可以下载 curl,网络传输工具。
apk add curl
阅读手册
Fish 使用基于 man 页面的内置自动补全功能。像其他命令行用户一样,我依赖于 man
手册,但 Alpine 没有预装它。所以,我安装了它以及 less 分页器。
apk add man man-pages less less-doc
除了 man,我还使用出色的 tldr pages 项目,它提供了简化的、社区驱动的 man 页面。
我用 pip 安装了它。
pip install tldr
每当遇到对新页面的请求时,tldr
命令都会连接到网络以获取页面。如果您需要学习如何使用命令,您可以键入类似 tldr curl
的内容,以获得一个简单的英文解释和如何使用该命令的良好示例。
当然,您可以使用 dotfiles 或安装脚本来自动化所有这些安装工作,但这实际上并不符合 Alpine 定制最小安装以完全符合您的规范的方式。此外,这也没花多少时间,不是吗?
了解更多
iSH Wiki 包含一个“what works”页面,其中包含有关当前可用的软件包的报告。值得注意的是,npm 似乎目前无法工作。
另一个 Wiki 页面解释了如何从 iOS 文件应用程序 访问 iSH 文件。这是移动和传输文件的一种方式。
您还可以安装 Git(是的! apk add git
)并将您的工作推送到远程仓库或通过 SSH 传输到服务器。当然,您也可以在系统上下载并运行 GitHub 上的任意数量的出色的开源项目。
有关 iSH 的更多信息,请参考以下链接
2 条评论