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

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

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

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

История

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.

ДЗ

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

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

Также может быть вам интересно:

5 причин не исправлять "ошибки"

Сразу оговорюсь, речь пойдёт не о критических ошибках. Если ваш сервис лежит бездыханный, то конечно — ноги в руки и фиксить.

Читать »

Всё в одном месте и удобно!

Рад, что снова стал преподавать в университете. Ещё в 2013-ом я бы написал с большой буквы, но…

Читать »
Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Шаблон разработки ПО — Model View Controller (MVC)

Шаблон разработки ПО — Model View Controller (MVC)

MVC - один из самых распространённых архитектурных шаблонов разработки. Часто используется в различных фреймворках. В том числе и в Django.

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Маленькая книга о Go (golang)

Маленькая книга о Go (golang)

Маленькая книга о Go распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International license. Вы не должны платить за эту книгу.

Фото И снова sudo, и снова "решето"

И снова sudo, и снова "решето"

В утилите sudo была исправлена очередная уязвимость.

Фото О многозадачности и планировщике задач (шедулер)

О многозадачности и планировщике задач (шедулер)

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

Фото Важна ли Операционная Система для программиста?

Важна ли Операционная Система для программиста?

Влияет ли выбор операционной системы на возможности программиста? Какую ОС выбрать конкретному разработчику?

Фото Как работает Web (этот ваш интернет)

Как работает Web (этот ваш интернет)

Пришло время феерически расставить точки над i в вопросе "а вот есть бекенд и фронтенд, а зачем?"