"Мобильная" разработка. [Операционные системы и терминал]
Tags: learning, beginners, linux, bash
Published: 2023-08-17 20:09:11

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

> **А зачем нам вообще этот терминал и Bash?**
> 
> Дело в том, что когда мы занимаемся разработкой на ПК, у нас есть огромный выбор IDE (Integrated Development Environment - интегрированная среда разработки) и текстовых редакторов, которые упрощают работу с утилитами, предназначенными для анализа кода и его выполнения, до нажатия лишь пары кнопок.
> В Android такого разнообразия нет (а навык работы с терминалом и Bash будет полезен даже на ПК), поэтому мы будем использовать терминал для выполнения нужных нам команд: установки зависимостей, управления проектом, запуска кода и др.

## Основные ОС

**Операционные системы** - это основные программные платформы, на которых работают наши компьютеры. Хотя между ними есть множество различий, многие операционные системы имеют общие корни и идеи. Особое внимание в этом контексте нам стоит уделить системе Unix, поскольку этот исторический стандарт оказал огромное влияние на все современные системы.

В мире операционных систем существует несколько крупных игроков: Windows от Microsoft; Linux, представляющий собой множество дистрибутивов на базе одноимённого ядра (например Android, Ubuntu, Arch и др.); macOS от Apple. Один из ключевых аспектов, определяющих работу и эффективность операционных систем - это файловая система. 

**Файловая система** - это способ, с помощью которого ОС хранит и организует данные на диске, получает к ним доступ. В этой статье мы рассмотрим основные файловые системы, используемые в каждой из этих ОС.

### Unix

**Unix** - это не только операционная система, но и культурное наследие, заложившее основы для многих современных ОС. Два ключевых элемента, которые демонстрируют философию Unix: терминал (или командная строка) и файловая система.

1. **Терминал Unix**:
    - _Основы_. Терминал в Unix - это интерфейс для взаимодействия с операционной системой через текстовые команды. Он предоставляет пользователю возможность запускать программы, управлять файловой системой и выполнять другие задачи без графического интерфейса.
    - _Философия_. Одной из ключевых концепций Unix является принцип: "Делай одно дело и делай его хорошо". Большинство инструментов терминала предназначены для выполнения конкретной задачи, и их можно комбинировать для создания сложных рабочих процессов.
    - _Примеры команд_. `ls` (список файлов), `grep` (поиск текста), `chmod` (изменение прав доступа к файлам).
2. **Файловая система Unix**:
    - _Иерархия_. Файловая система Unix организована в иерархической структуре, начиная с корневого каталога `/`. От корня распространяются различные каталоги, такие как `/bin` (базовые команды), `/etc` (конфигурационные файлы) и `/home` (домашние каталоги пользователей).
    - _Всё является файлом_. В Unix принято считать, что "всё является файлом". Это означает, что устройства, сокеты и даже процессы можно представить в виде файлов в файловой системе.
    - _Права доступа_. В Unix каждый файл и каталог имеют набор прав доступа, который определяет, кто может читать, писать или выполнять данный файл. Это обеспечивает гибкое управление безопасностью.

А теперь посмотрим, каким именно образом Unix повлиял на все основные ОС, их файловые системы и использование в них терминала.
#### Linux и Unix

- _Совместимость с Unix_. Linux прямо произошел из Unix-подобных систем и во многом соответствует стандартам Unix. Это означает, что большинство команд и интерфейсов, характерных для Unix, также применимы в Linux.
- _Терминал_. Терминал Linux практически идентичен терминалу Unix. Здесь можно использовать широкий спектр инструментов и команд Unix.
- _Файловая система_. Файловая система Linux (например, ext4) вдохновлена файловой системой Unix. Иерархическая структура директорий начинается с корневого каталога (/), что схоже с Unix.

#### macOS и Unix

- _Совместимость с Unix_. macOS основан на Darwin, который, в свою очередь, произошёл от NeXTSTEP и BSD Unix. Таким образом, macOS наследует многие черты Unix.
- _Терминал_. Терминал macOS предоставляет доступ к большинству стандартных Unix-команд благодаря его происхождению от BSD.
- _Файловая система_. HFS+ и APFS - основные файловые системы для macOS. Они уникальны для Apple, но сохраняют многие Unix-подобные атрибуты, такие как права доступа и символические ссылки.

#### Windows и Unix

- _Совместимость с Unix_. Изначально Windows не имел прямых наследований от Unix, но с дальнейшим его развитием, особенно с внедрением подсистемы Windows для Linux (WSL), появилась возможность работы с Unix-подобными инструментами.
- _Терминал_. Стандартный командный интерпретатор Windows (cmd) сильно отличается от Unix-терминала. Однако с внедрением WSL пользователи смогли запускать полноценный Linux-терминал в Windows.
- _Файловая система_. NTFS - основная файловая система Windows. Она имеет множество отличий от Unix-подобных систем, хотя с внедрением WSL добавилась поддержка файловых систем Linux.

## Android

**Android** - это операционная система, в первую очередь известная как платформа для мобильных устройств. Но что многие не осознают, так это тот факт, что своими корнями она как раз тесно связана Unix, потому что в Android практически всё взаимодействие организовано через готовые программы для упрощения использования смартфонов. Исследование этой связи раскроет нам интересные детали работы Android и её схожести с другими операционными системами.

1. **Android и Unix**:
    - _Основы_. Android базируется на ядре Linux, которое, в свою очередь, является Unix-подобной операционной системой. Это означает, что многие особенности и принципы Unix также присутствуют в Android.
    - _Безопасность_. Принципы безопасности Unix, такие как разделение привилегий и права доступа к файлам, также используются в Android для обеспечения безопасности данных и приложений.
2. **Терминал Android**:
    - _Доступ_. В Android по умолчанию нет терминала, как в традиционных Unix-системах. Однако существует множество сторонних приложений (например, Termux, который мы будем использовать далее), предоставляющих терминальный интерфейс для продвинутых пользователей и разработчиков.
    - _Команды_. С использованием терминала в Android можно выполнять многие из команд Unix. Однако некоторые команды или инструменты могут отсутствовать или быть изменёнными в зависимости от конкретной сборки Android и установленных ограничений.
3. **Файловая система Android**:
    - _Основы_. Файловая система Android, также как и Unix, организована в иерархической структуре. Однако есть некоторые уникальные каталоги и особенности, характерные только для Android.
    - _Доступ_. По умолчанию Android ограничивает доступ к некоторым частям файловой системы для обеспечения безопасности. Однако с правами суперпользователя (root) можно получить полный доступ ко всем файлам и каталогам.

*Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента:* https://t.me/MainArthur