История, философия, общие моменты
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 на большинстве серверов, в большинстве смартфонов и т.д.
Основные принципы:
Всё является файлом
Каждая программа делает ровно одну вещь, но хорошо
Текст — универсальный интерфейс (взаимодействия программ, хранения настроек)
Вывод любой программы может стать вводом другой, так что вывод не должен быть загромождён посторонней информацией
Но это не точно. Более того – это не правда.
В том же 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
– бриф про права на файлы, типы файлов.
Осознали, смотрим на корневые файлы:
/bin — содержит основные утилиты GNU, такие как bash, dir, echo.
/boot — образы ядер Linux для загрузки, конфигурация загрузчика GRUB.
/dev — файлы устройств.
/home — пользовательские директории.
/media — внешние устройства (флешки, диски и т.д.)
/proc — procfs - специальная файловая система, дающая доступ к процессам, процессору и многому другому как к файлам. Яркий пример - /proc/cpuinfo — информация о процессорах компьютера.
/root — домашний каталог суперпользователя.
/sbin — системные утилиты.
/tmp — временные файлы. Каталог автоматически очищается при перезагрузке.
/usr — вторичная иерархия данных и программ пользователя. Программы обычно устанавливаются в /usr/bin. Также существует и третичная иерархия — /usr/local — туда можно также устанавливать программы.
/var — каталог для часто меняющихся данных (журналы, файлы баз данных, кеши).
/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:
#!/bin/bash echo Hello world!
Запускается через
$ bash ./hello Hello world!
$ ./hello Permission denied
Даём права на исполнение:
$ chmod +x hello $ hello Hello world!
#!/bin/bash – заголовок файла, говорящий через что запускать (путь до интерпретатора). Этот заголовок использует сам Linux, чтобы понять – что делать. Более подробно – man execve.
Хоткеи терминала (будет пятиминутка)
Создать файл с именем * и удалить его