Программы
Операционные системы. Linux. Начало

Операционные системы. Linux. Начало

История, философия, общие моменты

Оговорюсь заранее:
Каждая из заметок – моя шпаргалка на пару, чтобы не забыть, что по плану нужно рассказать (по сути – тезисы) + расшифровка, чтобы было понятно и неподготовленному читателю. Так что будьте аккуратны – с каждой заметкой вы становитесь чуть ближе к высшему образованию в областях "компьютерные науки" и "компьютерная безопасность".
Изображение Шпаргалка по командам Linux, FreeBSD и MacOS

История

Unix появился в 1969 в Bell Labs. Разработчики: Деннис Ритчи, Кен Томпсон.

Ритчи также создавал C и многое другое, на чём строилось современное IT. Он крутой, а не этот ваш Джобс.

1980-ые – Bell Labs начинают закручивать гайки и монетизировать Unix. Ричард Столлман организует GNU – GNU is Not Unix. Пишутся утилиты, необходимые для создания своего Unix с GPL и антилопами.

Параллельно начали развиваться BSD-системы. По сути - клоны Unix.

1989 – Darwin на базе всё тех же BSD (те самые iOSы).

1991 – Линус Торвальдс (немного фактов о Линусе) выкладывает 0.01-ую версию Linux (ядро).

Так появляется GNU/Linux – ядро Linux и GNU-окружение.

1990-ые – Apache, Perl, бум доткомов – Linux становится известным.

Сейчас Linux/Unix на большинстве серверов, в большинстве смартфонов и т.д.

Философия Unix

Основные принципы:

  1. Всё является файлом

  2. Каждая программа делает ровно одну вещь, но хорошо

  3. Текст — универсальный интерфейс (взаимодействия программ, хранения настроек)

  4. Вывод любой программы может стать вводом другой, так что вывод не должен быть загромождён посторонней информацией

Но это не точно. Более того – это не правда.

Всё является файлом

В том же Plan9 OS сетевые ресурсы – файлы. В Linux – сетевые сокеты (которые всё же имеют файловые дескрипторы). В общем “Только ситхи всё возводят в абсолют”. Но многое – действительно, файлы. Это поначалу странно, потом удобно – единый интерфейс (на самом деле нет).

Каждая программа делает ровно одну вещь, но хорошо

У большинства команд есть 100500 ключей, меняющих целиком поведение программы. Также есть куча программ-комбайнов. Про “хорошо” – тоже есть вопросы.

Текст — универсальный интерфейс (взаимодействия программ, хранения настроек)

Как бы да, но нет. Ctrl+C (который SIGINT), прочая бинарьщина systemd/journald. Но многие утилиты используют именно текстовый интерфейс. Часто это удобно в cli.

Вывод любой программы может стать вводом другой, так что вывод не должен быть загромождён посторонней информацией

Даже, если не цепляться, что это вкусовщина… cowsay

В общем, должен, да не обязан.

Горячие кнопки

Ctrl+Alt+F1/F7
Ctrl+H/U/W/R/L/left/right
Up/Dn/End/Home/PgUp/PgDn

Проверяем наличие известных команд

Документация

help, info, -h/–help, man man, man bash (also tldr).

Файлы

Этот самый “всё есть файл”. Идём знакомиться с корнем

cd / && ls -la

Видим непонятный столбик dwrx-rx-rx – бриф про права на файлы, типы файлов.

Осознали, смотрим на корневые файлы:

  1. /bin — содержит основные утилиты GNU, такие как bash, dir, echo.

  2. /boot — образы ядер Linux для загрузки, конфигурация загрузчика GRUB.

  3. /dev — файлы устройств.

  4. /home — пользовательские директории.

  5. /media — внешние устройства (флешки, диски и т.д.)

  6. /proc — procfs - специальная файловая система, дающая доступ к процессам, процессору и многому другому как к файлам. Яркий пример - /proc/cpuinfo — информация о процессорах компьютера.

  7. /root — домашний каталог суперпользователя.

  8. /sbin — системные утилиты.

  9. /tmp — временные файлы. Каталог автоматически очищается при перезагрузке.

  10. /usr — вторичная иерархия данных и программ пользователя. Программы обычно устанавливаются в /usr/bin. Также существует и третичная иерархия — /usr/local — туда можно также устанавливать программы.

  11. /var — каталог для часто меняющихся данных (журналы, файлы баз данных, кеши).

  12. /etc — файлы настроек системы и программ.

Но на самом деле вся петрушка с bin, sbin, usr/bin, usr/sbin и т.д. Имеет несколько иные причины:

30 ноября 2010 года Дэвид Коллиер (David Collier) писал:

Я заметил, что в busybox ссылки разложены по этим четырём директориям.

Есть ли какое-то простое правило, чтобы определить, в какой директории какая из ссылок должна лежать…

К примеру, kill лежит в /bin, а killall — в /usr/bin… Я не вижу никакой логики в таком разделении.

Вы, наверное, знаете, что Кен Томпсон и Дэннис Ритчи создали Unix на PDP-7 в 1969-ом. Так вот, примерно в 1971 они проапгрейдились до PDP-11 с парой дисков RK05 (по 1,5 мегабайта каждый).

Когда операционная система разрослась и перестала помещаться на первом диске (на котором была расположена корневая ФС), они перенесли часть на второй, где располагались домашние директории (поэтому точка монтирования называлась /usr — от слова user). Они продублировали там все необходимые директории ОС (/bin, /sbin, /lib, /tmp ...) и складывали файлы на новый диск, потому что на старом кончилось место. Потом у них появился третий диск, они примонтировали его в директории /home и перенесли туда домашние директории пользователей, чтобы ОС могла занять всё оставшееся место на двух дисках, а это были целых три мегабайта (огого!).

Hello world

Создаём файл hello:

#!/bin/bash
echo Hello world!

Запускается через

$ bash ./hello
Hello world!
$ ./hello
Permission denied

Даём права на исполнение:

$ chmod +x hello
$ hello
Hello world!

#!/bin/bash – заголовок файла, говорящий через что запускать (путь до интерпретатора). Этот заголовок использует сам Linux, чтобы понять – что делать. Более подробно – man execve.

ДЗ

Хоткеи терминала (будет пятиминутка)

Создать файл с именем * и удалить его