你知道你可以在你的 iOS 设备上运行 Linux 命令行吗?您可能会问,“我为什么要在我的小 iPhone 上使用基于文本的应用程序?”好,可以。这是一个很合理的问题。但是,如果您正在阅读 Opensource.com,您可能知道答案:Linux 用户希望能够使用任何设备,并且他们还希望使用自己的自定义设置。

最重要的是,他们想要挑战。

我有一台 7 岁的 iPad 2 Mini,它仍然可以很好地阅读电子书和其他任务。但我也想用它来访问应用程序的命令行以及我似乎离不开的程序和脚本套件。我想要我习惯的环境,以及我的标准开发环境。这就是我的做法。

连接键盘

使用命令行在手机或平板电脑的屏幕键盘上进行编程并不是很有趣。我建议连接外部键盘,通过蓝牙或使用相机连接套件适配器连接有线键盘(我的偏好)。将我的 Kinesis Advantage 分体式键盘插入我的 iPhone 6 会产生一些奇怪的光学效果,例如经典角色扮演游戏Shadowrun 中的corp 的cyberdeck。

获取iOS上的shell

在 iOS 上运行完整的 Linux 系统有两种选择:

  • 安全外壳 (SSH) 进入 Linux 计算机

  • 使用 Alpine Linux 和 iSH 运行虚拟化系统,iSH 是开源的,但必须使用 Apple 专有的 TestFlight 应用程序安装

或者,有两个开源终端仿真器应用程序在受限环境中提供开源工具。这是最有限的选项——它并不能真正让您运行 Linux,但您正在运行 Linux 工具。您可以在设备上使用这些应用程序执行的操作受到严格限制,但它们确实为您提供了一些命令行功能。

更多 Linux 资源

  • Linux 命令备忘单

  • 高级 Linux 命令备忘单

  • 免费在线课程:RHEL 技术概述

  • Linux 网络备忘单

  • SELinux 备忘单

  • Linux 常用命令备忘单

  • 什么是 Linux 容器?

  • 我们最新的 Linux 文章

在探索更具挑战性的解决方案之前,我将先看看最简单的方法。

选项 1:沙盒外壳

最简单的入门方法之一是使用 iOS 应用程序LibTerm。这是一个沙盒开源命令行 shell,在 $0 应用程序中捆绑了 80 多个命令。它附带 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 导出文件或使用 SSH](https://opensource.com/article/20/9/ssh)将它们备份到 Git 主机或[,否则我将丢失我的文件。明确一点:不要依赖这个来继续工作!不要在这里放任何必要的东西!在别处备份您的工作!

安装 iSH

通过 App Store 安装TestFlight开始。然后通过安装 iSH,通过其网站获取安装链接。还有另一种使用 AltStore 的安装方法,但我没有尝试过。或者,如果您有付费开发者帐户,您可以从 GitHub 下载 iSH 的 repo 并自行部署。

使用该链接,TestFlight 会在您的设备上安装 iSH 应用程序。与任何其他应用程序一样,它会在您的屏幕上显示一个图标。

管理包

iSH 使用 Alpine Linux 运行 x86 模拟器。 Alpine 是一个小于 5MB 的小型发行版。这是我第一次运行 Alpine,我以为我会对这样一个最小的发行版感到沮丧,但我真的很喜欢它。

iOS 上的 Alpine Linux

图片来源:

(李图斯曼,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。

换壳

我不了解你,但我需要鱼壳。其他人更喜欢Bash或Zsh。但是Alpine使用灰! Ash 是 Dash shell 的一个分支,它本身就是原始 ash 或Almquist shell的一个分支。它专为速度而设计。我决定以速度换取内置的自动完成、颜色、Vim 键控制和我在fish shell 中熟悉和喜爱的语法突出显示。

安装鱼:

apk add fish

如果你想要 Bash 及其完成和手册页,你需要安装它们和一些额外的东西:

apk add bash bash-doc bash-completion

Alpine 的极简主义思想通常意味着一些在其他发行版中可能是单个包的程序被拆分为多个较小的包。这也意味着您可以完全按照自己的意愿自定义和精简系统。

您可以在本教程](https://www.cyberciti.biz/faq/alpine-linux-install-bash-using-apk-command/)中找到有关安装 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,现在,除了“欢迎来到 Alpine!”开始使用apk的消息和信息,您将看到默认的fish登录欢迎消息:欢迎使用fish,友好的交互式shell。万岁!

Alpine Linux 上的鱼壳

图片来源:

(李图斯曼,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手册,Alpine 并没有安装它。因此,我将它与less寻呼机一起安装:

apk add man man-pages less less-doc

除了 man 之外,我还使用了很棒的tldr pages 项目,它提供了简化的、社区驱动的手册页。

我用 pip 安装了它:

pip install tldr

tldr命令会在遇到对新页面的请求时连接到网络以获取页面。如果您需要学习如何使用命令,只需输入类似tldr curl之类的内容即可获得简单的英文解释以及如何使用该命令的良好示例。

当然,您可以使用dotfiles或安装脚本自动执行所有这些安装工作,但这并不真正属于 Alpine 完全按照您的规范定制最小安装的方式。此外,它并没有花那么长时间,不是吗?

了解更多

iSH wiki 包含一个“what works”页面,其中包含有关当前工作包的报告。值得注意的是,此时npm 似乎无法运行。

另一个 wiki 页面解释了如何从 iOS 文件应用程序访问 iSH 文件。这是您可以移动和传输文件的一种方式。

您还可以安装 Git(是的!apk add git)并将您的工作推送到远程仓库或通过 SSH 将其传输到服务器。当然,您可以从 GitHub 下载并在您的系统上运行任意数量的精彩开源项目。

有关 iSH 的更多信息,请参阅以下链接:

  • iSH 网站

  • Subreddit

  • GitHub 问题

  • 维基

Logo

更多推荐