Каждая из заметок – моя шпаргалка на пару, чтобы не забыть, что по плану нужно рассказать (по сути – тезисы) + расшифровка, чтобы было понятно и неподготовленному читателю. Так что будьте аккуратны – с каждой заметкой вы становитесь чуть ближе к высшему образованию в областях "компьютерные науки" и "компьютерная безопасность".
История
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
Основные принципы:
-
Всё является файлом
-
Каждая программа делает ровно одну вещь, но хорошо
-
Текст — универсальный интерфейс (взаимодействия программ, хранения настроек)
-
Вывод любой программы может стать вводом другой, так что вывод не должен быть загромождён посторонней информацией
Но это не точно. Более того – это не правда.
Всё является файлом
В том же 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 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.
ДЗ
Хоткеи терминала (будет пятиминутка)
Создать файл с именем * и удалить его