1000h是什么意思 org_在 iOS 上玩转 Linux Shell 是一种什么体验?

b576640f5880695f21d834c39a4cb978.png

如果你是一位 iPhone/iPad 用户,同时又是一位程序员,一定非常希望在 iPhone/iPad 上有一款功能齐全的终端工具。由于终端操作很多都涉及到底层操作,而苹果是禁止应用去访问底层的,所以此类应用要上架还是比较困难。当然越狱的设备可以直接获得终端的所有能力,但安全起见,并不建议这么做。现在 App Store 上也有不少类终端工具,如 LTerminal, iTerminal,不过今天向大家推荐另一款终端工具:iSH Shell。

iSH Shell 是使用用户模式 x86 仿真,并通过 syscall 来做转换,因此可以在 iOS 上运行 Linux Shell 环境。

2e4dbe7889121bc435fb410ba3f1117e.png

值得一提的是,iSH Shell 是第一个基于 Alpine Linux 完整发行版的应用。Alpine Linux 发行版没有用户界面,而是专注于提供性能良好的 Linux 内核。Alpine Linux 官方自己的介绍是如下:

Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.

即 Alpine Linux 是基于 musl libc 和 busybox 的面向安全的轻量级 Linux 发行版本。Alpine Linux 有许多特性,正如其官网宣传语一样:小巧、简单、安全。这也是 iSH Shell 选用它的原因。

c97fa7d928cf2e3d773d36d4ff6419d8.png

如果对 Alpine Linux 有兴趣,可以访问官方网站 https://alpinelinux.org/ 获取更多的信息。

这款应用的界面非常简单,即一个终端界面和一个设置页面。打开应用程序,直接就是终端页面,而在终端界面的键盘上,还有 Tab、Control、Escape 和移动箭头几个虚拟键,而在 iPad 上,iSH Shell 可以在外部键盘的支持下,提供更好的用户体验。

我们可以使用 sed/cat/vi 等命令来编辑文件,也可以使用 wget 来获取包,使用 tar 来解压文件等。Alpine Linux 默认的包管理工具是 apk,可以用来管理源和安装软件。而 App Store 版本因为审核的原因,并没有把 apk 加进来,所以我们必须手动安装。不过我们可以自己安装。很简单,只需要三步:

  • 运行 wget http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86/apk-tools-static-2.10.5-r1.apk,这个看网速,可能会消耗一些时间
  • 运行 tar xf apk-tools-static-2.10.5-r1.apk sbin/apk.static
  • 运行 ./sbin/apk.static add apk-tools 来安装 apk

54f812adb14939a84b98cce6c54ea64b.png

安装好 apk 后,我们就可以设置软件源了,可以通过 sed 命令

sed -i 's/ http:// dl-cdn.alpinelinux.org/ mirrors.tuna.tsinghua.edu.cn/g ' /etc/apk/repositories

或直接 vi /etc/apk/repositories 来手动添加。然后使用 apk update 来更新源。

26f37c800ce574c34417efd7e1105f6d.png

更新好源后,就可以使用 apk add 命令来安装想要的软件了,比如 git、zsh、curl 等。然后就可以“为所欲为”了。你甚至可以像美化 macOS 终端一样来美化 iSH,同时把 iSH 整成一个 IDE。apk 的具体使用可以参考 https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Add_a_Package。

另外还有很重要的一点了,iSH Shell 是完全开源的,Github 的地址是 https://github.com/ish-app/ish,上面还有中文 README.md,有兴趣的读者可以去下载下来研究研究。README.md 上有段很有意思的关于 JIT 的说明:

可能我在写 iSH 中最有趣的部分就是 JIT 了. 它实际上不是真正的 JIT, 因为它不以机器代码为目标. 相反,它生成一个指向称为 gadgets 的函数的指针数组, 并且每个 gadget 都以对下一个函数的尾调用结束; 就像一些 Forth 解释器使用的线程化代码技术一样. 最终结果就是, 与纯仿真相比, 速度提高了大约3-5倍.
不幸的是, 我决定用汇编语言编写几乎所有的 gadgets。这可能从性能方面来说是一个很好的决定(虽然我永远也不确定), 但是从可读性、可维护性和我的理智来说, 这是一个可怕的决定. 我所不得不忍受的来自编译器/汇编程序/链接器的大量的乱七八糟的东西数量是疯狂的. 仿佛在那里面有一个魔鬼, 让我的代码足够畸形,就算没有急性, 也会编造愚蠢的理由告诉我为什么它不能够编译. 为了在编写代码时保持理智, 我不得不忽略代码结构和命名方面的最佳实践。您将发现宏和变量具有诸如 sssa等描述性的名称. 汇编器的宏嵌套超出传统的写法. 最重要的是, 几乎没有注释.
所以一个警告: 长期接触此代码可能会导致你失去理智, 对 GAS 宏和链接器错误产生噩梦,或是任何其他使人虚弱的副作用. 在加利福尼亚州众所周知的是,这些代码会导致癌症、出生缺陷和生殖伤害.

个人感觉这款应用还是不太适合在 iPhone 上使用,直接用手在屏幕上输入太过费劲,通过上下虚拟键来切换命令还是很劲,而在 iPad 上配合键盘使用就会舒服很多。

8309237c1d443788d4c63a7aef620cce.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值