Ios что это такое linux

iSH — Оболочка Linux для iOS

Не для кого не секрет, что Apple подходит к безопасности своих продуктов весьма серьёзно. Это сильно ограничивает пользователей, жаждущих вытворять всякие разные вещи со своими айфонами, айпадами и прочими эпловскими мобильными устройствами.

Думаю многие знают что такое джейлбрейк и с чем его едят, однако в данной статье пойдёт речь о том, как обойтись без него (хоть и пожертвовав превосходящим количеством возможностей, которые он даёт)

iSH — одно из немногих приложений, которые расширяют круг возможностей для опытного пользователя. Оно даёт использовать линуксовый терминал прямо в устройстве на ios.
Важный момент — iSH доступа к железу напрямую не имеет, так что если хотите делать более серьёзные вещи с вашим телефоном, ставьте джейлбрейк.

Как установить

Установка займёт чуть больше времени, чем если бы вы просто скачивали приложение с того же Appstore.

Для начала необходимо скачать к себе на мобильное устройство TestFlight. Это эпловская программа для тестирования приложений. Затем перейти на сайт iSH и нажать «Get iSH beta». Вас перебросит в TestFlight, где останется только скачать сам iSH Shell.

Работа с iSH Shell

Запускаем скаченный iSH и вот перед нами Alpine Linux — минималистичный дистрибутив на основе BusyBox.

Установка пакетов здесь работает по принципу apk install
Для начала работы советую установить следующие пакеты:

Что дальше?

Дальше этот терминал можно использовать, например, для тестирования своих сетей на защищенность.

Как вариант — советую установить koadic. Это фреймворк с открытыми исходниками, предназначенный для постэксплуатации в среде Windows.

Ставится он в несколько команд:

В этом файле будут хранится библиотеки, которые нужно установить через pip3 install . Возможно, удастся поставить не все, но ничего страшного.

Больше информации о koadic вы можете найти в сети, так как есть немало статей на эту тему.

На худой конец, можно использовать iSH как ssh-клиент:

Источник

Что общего между ядром Linux и iOS?

Естественно, в двух больших системах всегда найдутся общие концепции. Например, сложно избежать использования базовых алгоритмов и структур данных. Таких, как списки, массивы, деревья. Но я хочу рассказать не об этом.

iOS является объектно-ориентированной штукой. Где-то ниже Objective-C (а скоро мы сможем говорить уже и о Swift) залегают огромные пласты не-объектного кода, и под ними — Unix (а точнее BSD) система. И на том уровне у Linux и у iOS много общего. Но я и не об этом.

Давайте сравним основные структуры ядра Linux с объектно-ориентированной частью iOS.

1. Основные структуры

В обеих системах присутствует некоторое количество фундаментальных структур. Например, в iOS это будут:

Строки (NSSrting);
Массивы (NSArray);
Коллекции (NSSet);
Словари (NSDictionary);
Представление числовых примитивов (NSNumber);
Скаляры (NSRange).

Я оставляю за скобками различные вариации всех этих типов (NSSet / NSMutableSet / NSCountedSet и прочее).

Все эти типы данных реализованы как классы. Легко заметить, что тут нет нескольких фундаментальных структур: связных списков (linked lists) и бинарных деревьев (binary tree). Нет их по той простой причине, что они уже инкапсулированы в другие типы данных. Так, NSArray можно использовать вместо связного списка, а NSDictionary вместо бинарного дерева, не особенно заботясь о внутренней их реализации.

Хорошо. А какие же основные типы мы можем найти в ядре Linux? Тут ситуация выглядит с точностью до наоборот. Сложно выделить какие-либо стандартные для ядра типы данных. Наибольшие претенденты на это звание:

Двойной связный список, определенный в файле include/linux/list.h;
Красно-черные деревья, определенные в файле include/linux/rbtree.h;
Радиксные деревья (radix tree), определенные в файле include/linux/radix-tree.h;
Битовые массивы (bit arrays), определенные в файле include/linux/bitmap.h;
Ну а также семафоры и спинлоки, которые не присутствуют в iOS в явном виде — то есть, их не нужно алоцировать, они скрыты в методах.

Нет никакого требования использовать именно эти реализации. Если вы чем-то недовольны, то можете написать свою реализацию чего угодно. Ее, правда, могут не принять модераторы, если вы попробуете загрузить свой пэтч. Во всяком случае, его не примут модераторы, если не будет очень веской причины реализовывать это самому вместо использования уже написанных структур.

Итак, на первый взгляд мы имеем два ортогональных подхода к построению системы. iOS предлагает достаточно чистый объектно-ориентированный подход, и Apple старается как только может скрыть внутренности объектов от конечного программиста. Ядро Linux, напротив, определяет очень базовые примитивы, оставляя программиста разбираться с ними. Грубо говоря, iOS это блочное строительство, а ядро Linux предоставляет в ваше распоряжение иногда кирпичи, а иногда просто глину и печь для обжига. Однако и цели программирования в двух системах совершенно различные: никто не ожидает от разработчика ядра создания пользовательского интерфейса, равно как никто и не ждет от программиста в iOS написания поддержки чипа и шины данных.

2. Так что же общего между двумя этими системами?

Референсы. Подсчет ссылок на объекты.

До недавнего времени iOS требовала от программиста вручную уменьшать счетчик объектов. Это делалось с помощью вызова стандартного метода retain для его увеличения, release для уменьшения. В последних версиях Objective-C в этом больше нет необходимости, система делает это автоматически.

Счетчик объектов — совершенно объектно-ориентированная вещь: у тебя есть несколько процессов, совместно использующих объект. Для простоты представим, что это объект только для чтения, то есть ни один из процессов не может его изменить. Но вот вопрос: когда этот объект должен быть освобожден? И кем?

Читайте также:  Windows program data directory

В системах с автоматически управлением памятью каждый объект имеет внутренний счетчик, который увеличивается каждый раз, когда кто-то получает ссылку на этот объект. Когда этот кто-то перестает использовать эту ссылку (например, присваивая Nil), внутренний счетчик объекта уменьшается.

Извиняюсь за занудство, но вот как это происходит. Из своего кода я создаю новую строку в iOS:

После исполнения этого кода создался объект типа NSString. Переменная s держит ссылку на объект, и этот объект имеет внутренний счетчик, равный 1.

После исполнения этой строчки кода переменная s2 также ссылается на тот же объект. И внутренний счетчик рефересов этого объекта будет равен 2.

Теперь переменная s больше не ссылается на объект — и внутренний счетчик референсов в объекте равен 1.

Теперь и переменная s2 больше не держит ссылку на объект. Объект не доступен, его адрес утерян. Внутренний счетчик объекта равен 0. Объект будет автоматически уничтожен системой сбора мусора.

А теперь вернемся к ядру Linux. И сразу откроем файл incluce/linux/kref.h
В этом файле мы можем видеть генерную реализацию именно этого механизма — счетчик референсов. Файл не слишком большой, но необходимый.

Ядро Linux с точки зрения параллельных процессов это очень интересная штука. Если ты забыл про синхронизацию — твой код очень быстро рухнет. Вместе со всем остальным ядром, кстати. Чаще всего для этого нужны доли секунды. Иногда секунды. Если ты забыл про то, что ядро реинтерантно, и твой код может быть прерван в любой момент времени — твой код упадет. Нет никакого способа предотвратить это — даже запрет прерываний не поможет решить проблемы синхронизации. Big Lock, когда-то существовавший в ядре, и позволявший остановить все, кроме твоего процесса, был удален из ядра годы назад, так как им пользовались. Нет, серьезно, это довольно странная ситуация: у тебя есть отличный способ решить все свои проблемы с синхронизацией, но тебе говорят: не надо это использовать, это плохая карма. Но у тебя никогда нет времени, а Big Lock чудесно предотвращает падения твоего кода. Так что в какой-то момент Линус волевым усилием удалил этот механизм.

Так вот, если сделать поиск по ядру, например по функции kref_init, то вы увидите, что он используется более чем в двухстах местах. Что для ядра довольно много. Каким же образом работает kref и зачем он нужен?

Отвечая на второй вопрос: он нужен для того же, для чего нужен и счетчик референсов в объектах iOS — это механизм синхронизации управления объектами с точки зрения управления памятью. Естественно, в ядре приходится реализовывать все методы удаления объекта своими руками, здесь нет сборщика мусора, как в iOS (точнее говоря, он есть, но в другом месте, делает совершенно другие вещи, и он никак не связан с kref).

— Если суммировать логику работы kref, то она следующая:
— Создал объект? Сразу увеличь ему kref.
— Взял ссылку на объект? Увеличь у объекта kref на единицу (используя kref_get())
— Перестал использовать ссылку на объект? Уменьши kref объекта на единицу (kref_put())
— kref объекта достиг нуля? Объект уничтожается — ссылка на функцию-деструктор передается при вызове kref_put(), и используется из kref_put() автоматически.

3. Заключение

Никакой морали в данной статье нет.

Ни для кого не новость, что ядро Linux во многих отношениях адаптировало объектно-ориентированную парадигму. Тем не менее, модераторы ядра не позволяют разработчикам усложнять его (ядро), и поддерживают инфраструктуру на уровне простейших примитивов. Философия тут заключается в том, чтобы “keep it simple” — позволь разработчику самому сварить свой суп из сырой грудинки, не предлагай ему супный набор или куриный порошок.

iOS, в свою очередь, идет по пути сокрытия деталей реализации от разработчиков. В какой-то момент в iOS появился ARC, Automatic Reference Counting, система, которая следит за счетчиком ссылок объектов и уничтожает их автоматически. В скором будущем, похоже, объекты будут автоматически не только уничтожаться, но и создаваться, на это указывают последние тенденции — в некоторых случаях уже сегодня можно опустить вызов alloc (наример, [NSSting stringWithFormat] работает так же, как [[NSString alloc] initWithFormat:]).

Источник

ISH Shell или возможно ли установить и использовать Linux на iOS

Сегодня я хочу рассказать вам о таком приложении как ISH. ISH — это проект с открытым исходным кодом, позволяющий в виде приложения эмулировать полноценный линукс на вашем iOS (или iPadOS) устройстве. Давайте разберемся как это сделать и есть ли у подобной технологии реальноее применение и будущее или это очередная игрушка для «мамкиных хакеров»

Что такое ISH? ISH (как я писал выше) — это эмулятор терминала линукс. Совсем недавно он был доступен только в виде бета-версии через приложение TestFlight (известном многим iOS пользователям), но теперь iSH доступен для установки в магазине приложений AppStore (Так же вы можете использовать версию из TestFlight, она практически не отличается от версии из AppStore. Ссылку на актуальное приглашение в программу бета тестирования находится на официальном сайте).

После установки перед нами «голый» Alpine Linux — это минималистичный дистрибутив на основе BusyBox. Из коробки он идет абсолютно пустой, скорее всего у вас даже не будет пакетного менеджера apk (вы можете это проверить просто написав в терминал apk). Если apk у вас не установлен, то его можно установить, прописав в терминал команду:

Как вы можете видеть над клавиатурой имеются клавиши, такие как табуляция, стрелки, ctrl.

Теперь мы можем обновить систему и посмотреть, что же всё-таки мы имеем «из коробки». Для обновления системы пишем команду:

Как вы видите, при выполнении обновления я не использую sudo , т. к. по умолчанию мы уже под именем администратора. Попробуем запустить то, что обычно уже установлено практически в любом дистрибутиве linux: curl, python/python3, gcc. как вы можете заметить, ни одно из них не установлено, но это не сложно исправить, просто установив нужные нам приложения, для примера:

Не много о настройках приложения

В настройках приложения вы можете изменить тему приложения, размер и тип шрифта, иконку на рабочем столе и узнать больше информации о разработчике приложения

Читайте также:  Драйверы ati mobility radeon hd 4650 series драйвера windows

Теперь давайте рассмотрим где в нашей системе можно найти непосредственно файловую систему ISH и как с ней взаимодействовать визуально. Для этого нужно перейти в приложение Файлы на вашем iPhone или iPad и там, в разделе «Места» вы можете обнаружить ISH. Перейдя в ISH вы увидите самую обыкновенную, а многим привычную, файловую систему LInux. Для чего нам это нужно? К сожалению мы не можем напрямую из приложения попасть в файловую систему iPhone или iPad и благодаря возможности взаимодействовать с фалами линукса визуально мы можем переносить туда любые нужные нам файлы. Для примера я написал простейший калькулятор в Pythonista и перенес его из папки с фалами Питонисты в папку root в ISH. теперь можно увидеть его написав ls и запустив с помощью команды python3 main.py .

С тем же успехом мы можем установить git и с помощью git clone копировать свои или чужие программы и так же их запускать. Конечно же можно использовать ISH и как SSH клиент, можно проверять свои скрипты на работоспособность в таких-вот «мобильно-спартанских» условиях, можно проверять сети на защищенность.

Если постараться, придумать можно множество сценариев для использования подобного рода программ. Благодаря ним iPad и в правду может стать вполне профессиональным устройством для программистов. Если к этому будет интерес, в будущем я расскажу как записать VScode прямо на iPad`е, и вообще как можно уже сегодня iPad превратить во вполне юзабельное устройство для разработчиков.

Источник

Запускаем командную строку Linux на iOS

А вы знали, что можно запустить командную строку Linux на устройстве iOS? Возможно, вы спросите: «Зачем мне пользоваться текстовыми приложениями на iPhone?» Справедливый вопрос. Но если вы читаете Opensource.com, то, вероятно, знаете на него ответ: пользователи Linux хотят иметь возможность работать с ним на любом устройстве и хотят пользоваться собственными настройками.

Но больше всего они жаждут решения сложных задач.

У меня есть семилетний iPad 2 Mini, который по-прежнему неплохо подходит для чтения электронных книг и других задач. Однако я хочу использовать его и для доступа к командной строке приложений с моим набором программ и скриптов, без которых не могу работать. Мне нужно окружение, к которому я привык, а также моя стандартная среда разработки. И вот как мне удалось этого добиться.

Подключение к клавиатуре

Работать с командной строкой для программирования через экранную клавиатуру телефона или планшета довольно неудобно. Я рекомендую подключить внешнюю клавиатуру, или через Bluetooth, или воспользовавшись адаптером подключения камеры, чтобы подключить проводную клавиатуру (я выбрал второе). При подключении разделённой клавиатуры Kinesis Advantage к iPhone 6 получается странное устройство, напоминающее корпоративный кибердек из классической ролевой игры Shadowrun.

Устанавливаем оболочку на iOS

Для запуска полнофункциональной системы Linux на iOS есть два варианта:

  • Secure shell (SSH), подключаемая к компьютеру с Linux
  • Запуск виртуальной системы с помощью Alpine Linux с iSH, который является open source, но должен устанавливаться с помощью проприетарного приложения TestFlight компании Apple

В качестве альтернативы существуют два приложения-эмулятора терминала в open source, предоставляющие возможность работы с open-source-инструментами в ограниченном окружении. Это самый урезанный вариант — на самом деле так вы запускаете не Linux, а инструменты Linux. При работе с этими приложениями существуют жёсткие ограничения возможностей, однако вы получаете частичную функциональность командной строки.

Прежде чем перейти к сложным решениями, я рассмотрю простейший способ.

Вариант 1: оболочка в «песочнице»

Один из самых простых способов — установить приложение для iOS LibTerm. Это опенсорсная командная оболочка в «песочнице» с поддержкой более 80 команд по цене в ноль долларов. В комплекте с ней поставляются Python 2.7, Python 3.7, Lua, C, Clang и многое другое.

Примерно такой же функциональностью обладает a-Shell, описываемая разработчиками как «тестовый интерфейс пользователя для платформы с экранным вводом». Исходники a-Shell выложены open source, она находится в активной разработке, предоставляет доступ к файловой системе и поставляется с Lua, Python, Tex, Vim, JavaScript, C и C++, а также с Clang и Clang++. Она даже позволяет устанавливать с помощью pip пакеты Python.

Вариант 2: SSH

Ещё одним шагом вперёд по сравнению со скачиванием приложения является настройка SSH-клиента. Уже долгое время мы могли использовать любое из множества приложений SSH-клиентов для iOS, чтобы подключаться к серверу, на котором запущен Linux или BSD. Преимущество использования SSH заключается в том, что на сервере может работать любой дистрибутив с любым программным обеспечением. Вы работаете удалённо и результаты работы просто передаются в эмулятор терминала на устройстве iOS.

Blink shell — это популярное платное SSH-приложение в open source. Если не обращать внимания на маленький экран устройства, то использование этого ПО похоже на подключение к серверу через любую другую командную строку. Терминал Blink замечательно выглядит, имеет множество готовых тем и функцию создания собственных, в том числе возможность настройки и добавления новых шрифтов.

Вариант 3: запуск Linux

Использование SSH для подключения к серверу под Linux — это отличный способ доступа к командной строке, но для него требуется внешний сервер и сетевое подключение. Это не самая большая преграда, но её нельзя полностью игнорировать, поэтому вам может потребоваться работать с Linux без сервера.

Если это ваш случай, то вам нужно будет сделать ещё один шаг вперёд. TestFlight — это проприетарный сервис для установки разрабатываемых приложений ещё до того, как они были выложены в Apple App Store. Приложение TestFlight можно установить из App Store, а затем пользоваться тестовыми приложениями. Приложения в TestFlight позволяют в течение ограниченного времени работать с ними ограниченному количеству бета-тестеров (обычно до 10 000). Чтобы скачать тестовое приложение, нужно перейти со своего устройства по ссылке, которая обычно находится на веб-сайте разработчика тестового приложения.

Запуск Alpine Linux с iSH

iSH — это open-source-приложение TestFlight, запускающее виртуальную машину с готовым дистрибутивом Alpine Linux (немного потрудившись, можно запускать и другие дистрибутивы).

Читайте также:  Как установить linux вместо андроида

Важная особенность: приложение экспериментальное. Так как iSH сейчас пока являются тестовым приложением, не ожидайте постоянной и надёжной работы. Приложения TestFlight ограничены по времени. Моя текущая сборка будет работать всего 60 дней. Это означает, что через 60 дней меня исключат и придётся снова присоединяться к следующему этапу тестирования iSH. Более того, я потеряю все свои файлы, если не экспортирую их с помощью Files на iOS или не скопирую их на Git-хост или через SSH. Иными словами: Не надейтесь, что всё это будет продолжать работать! Не помещайте в систему ничего важного для вас! Выполняйте резервное копирование в отдельное место!

Установка iSH

Начните с установки TestFlight из App Store. Затем установите iSH, получив ссылку на установку с веб-сайта приложения. Есть ещё один способ установки с использованием AltStore, но я его не пробовал. Или, если у вас есть платный аккаунт разработчика, можете скачать репозиторий iSH с GitHub и установить его самостоятельно.

При помощи ссылки TestFlight установит приложение iSH на ваше устройство. Как и в случае с любым другим приложением, на экране появится значок.

Управление пакетами

iSH выполняет эмулятор x86 с Alpine Linux. Alpine — это крошечный дистрибутив размером меньше 5 МБ. Я впервые работал с Alpine, поэтому думал, что такой минимализм будет раздражать, но на самом деле он мне очень понравился.

В Alpine используется менеджер пакетов apk, который проще, чем даже apt или pacman.

Как установить пакет:

Как удалить пакет:

Как узнать другие команды и информацию:

Обновление менеджера пакетов:

Установка текстового редактора

Стандартным текстовым редактором Alpine является Vi, но я предпочитаю Vim, поэтому установил его:

При желании можно установить Nano или Emacs.

Смена оболочки

Не знаю, как насчёт вас, а мне нужна была fish shell. Другие люди предпочитают Bash или Zsh. Однако в Alpine используется ash! Ash — это форк оболочки Dash, которая сама является форком оригинального ash, или Almquist shell. Её приоритетом является скорость. Я решил обменять скорость на встроенное автодополнение, цвета, управление клавишами Vim и подсветку синтаксиса, которые я люблю и знаю по fish shell.

Если вам нужна Bash с её автодополнением и man-страницами, то установите их:

Минималистичная идеология Alpine обычно означает, что некоторые программы, которые в других дистрибутивах являются одним пакетом, будут разделены на несколько пакетов поменьше. Также это означает, что вы можете настраивать и уменьшать размер системы ровно так, как вам этого хочется.

Подробнее об установке Bash можно узнать из этого туториала.

Смена оболочки по умолчанию

После установки fish можно временно переключиться на неё, введя fish и перейдя в оболочку. Но я хочу сделать fish оболочкой по умолчанию, а команда chsh , которую я использовал в других дистрибутивах, не работала.

Сначала узнаем, куда установилась fish:

Вот, что получилось у меня:

Далее изменим login shell на fish. Можете использовать любой удобный вам редактор. Если в новичок, то установите Nano (командой apk add nano ), чтобы можно было отредактировать файлы конфигурации и сохранить их через CTRL+X, подтвердить и выйти.

Но я использовал Vim:

У меня первая строка была такой:

Чтобы сделать fish оболочкой по умолчанию, изменим эту строку на следующую:

Затем сохраним файл и выйдем.

Я уверен, что существует хороший способ изменить путь к оболочке, чтобы её можно было использовать сразу. Но я его не знаю, поэтому рекомендую вернутся в браузер приложений, принудительно выполнить выход из оболочки и для надёжности выключить и перезагрузить iPad или iPhone. Снова откройте iSH и теперь кроме сообщения «Welcome to Alpine!» и информации о запуске с apk вы увидите стандартное приветственное сообщение логина fish: Welcome to fish, the friendly interactive shell. Ура!

Настройка Python и pip

Я решил добавить Python (версию 3.x), не только для того, чтобы писать код, но и потому, что я пользуюсь несколькими программами на Python. Установим его:

Хотя Python 2.x устарел, можно установить и его:

Установим менеджер пакетов Python под названием pip и setuptools:

Для установки и настройки менеджера пакетов понадобится какое-то время, поэтому просто подождите.

Затем можно будет скачать инструмент для передачи файлов по сети curl:

Читаем мануалы

Fish использует встроенное автодополнение на основе man-страниц. Как и другие пользователи командной строки, я пользуюсь мануалом man , а в Alpine он не установлен. Поэтому я установил его с терминальным пейджером less:

В дополнение к man я использую великолепный проект tldr pages, предоставляющий упрощённые и управляемые сообществом man-страницы.

Я установил его с помощью pip:

Команда tldr соединяется с вебом для получения страниц, когда встречает запрос на новую страницу. Если вам нужно узнать, как пользоваться командой, то вы можете написать что-то типа tldr curl и получить описание на простом английском языке и хорошие примеры по использованию команды.

Разумеется, всю эту работу по установке можно автоматизировать с помощью dotfiles или скрипта установки, но на самом деле это не очень соответствует идеологии Alpine — настройке минимальной установки чётко под свои потребности. Кроме того, это ведь заняло так много времени, правда?

Дополнительная информация

В Вики iSH есть страница «what works» с отчётами о том, какие пакеты сейчас работают. Кстати, похоже, что npm сейчас не работает.

На ещё одной вики-странице объясняется, как получить доступ к файлам iSH из приложения iOS Files. Это один из способов, которым можно перемещать и копировать файлы.

Можно также установить Git (да! apk add git ) и пушить свою работу в удалённый репозиторий или передавать его на сервер через SSH. И, разумеется, можно скачивать и запускать любое количество замечательных open-source-проектов с GitHub.

Подробнее об iSH можно узнать по этим ссылкам:

На правах рекламы

Вдсина предлагает виртуальные серверы на Linux или Windows. Используем исключительно брендовое оборудование, лучшую в своём роде панель управления серверами собственной разработки и одни из лучших дата-центров в России и ЕС. Поспешите заказать!

Источник

Оцените статью