Л. любит «принципы» — так проще описывать сложные системы. Всё можно понять — это значит, ничего не запрещено понимать и вся информация налицо.

Все мы процессы, потому что не пользователь удаляет файл с диска, а запущенный им процесс (действующий субъект). С объектами (файлами) работают только процессы, они получают или не получают доступ и т. п. «Процесс — Полномочный Представитель Пользователя в системе».

Все они, т. е. объекты системы — файлы («всё — файл»). Если что-то может получать и отдавать данные потоком (write и read), это что-то надо сделать файлом. Имя (полный путь) файла — идентификатор, как ключевое поле в БД.

Все наши файлы, то есть файлы, которые мы напрямую модифицируем и читаем — текстовые. Причём текст этот размеченный.

Для каждой подзадачи существуют удобные программки — «утилиты». Shell ими управляет, заставляет взаимодействовать, вот и получается управление системой.

О примерах.

При нажатии на ссылку с примером запустится окно DemoScreen, если ещё не запущен. Он тут же уедет на соседний рабочий стол. Их три. Первый — для презентации, второй — для окна с примерами, третий — на всякий случай.

Выполненная команда отображается в дополнительной нижней строке DemoScreen.

Процессы

Только процессы имеют доступ к файлам. Каждый процесс имеет уникальный номер — PID. ps показывает таблицу процессов, которые выводят на тот же терминал. Можно посмотреть все процессы. Это очень старая утилита.

Когда вы регистрируетесь в системе, запускается Shell. Этот Shell получает ваш UID. И все процессы, которые он породит, тоже получают ваш UID, наследуют его. PID-ы у всех разные. Но есть отношение «дочерний–родительский». Дочерних может быть много, из них только один и выводит на экран, и вводит с клавиатуры («активный»), а остальные могут только выводить («фоновые»). “&” для запуска процесса в фоне, когда shell не дожидается конца работы. tclock — это часы такие. Процесс запустился, у него есть PID. Как узнать PID? из ps или из pidof процесс. Можно послать сигнал. Сигнал — короткое сообщение, которое процесс обязан обработать; а если не умеет, за него обработает система. В этом случае процесс, скорее всего, остановится. Команда kill посылает сигнал (по умолчанию — KILL) процессу с указанным PID. Команда killall — всем процессам с указанным именем (выполняет pidof).

Файлы

Если всё — файл, то файловая система — это такая БД, где у каждой записи есть ключ — имя файла (точнее, путь от корневого каталога). Если предусмотреть много полезных утилит для файлов (а их в Linux сотни), можно будет удобно работать. При наличии документации.

Про файлы и каталоги, и почему они образуют дерево корнями вверх, всё и так ясно. Просмотр каталога — ls (т. е. «list»). У ls очень много разных ключей, см. man ls. Просмотр файла (точнее, выдача на стандартный вывод содержимого) — cat («catenate»). Настоящий просмотр (постраничный, с поиском и пр.) — less.

Создание и удаление каталога — mkdir и rmdir. Непустой каталог удалить нельзя. (Можно, но другой командой). Копирование файлов — cp («copy»), переименование и перемещение — mv («move»), удаление — rm («remove»). Как создать файл? В следующей лекции рассказано, на самом деле это редко надо.

Рабочий (текущий) каталог: если имя файла начинается не с “/”, то файл ищется в рабочем каталоге. Вместо /home/altlinux/.bashrc можно писать просто .bashrc (относительное имя файла), если каталог /home/altlinux — текущий. pwd — «print work directory». Он всегда имеет второе имя — “.”, а родительский — “..”. Смена рабочего каталога — cd («change directory»). Домашний каталог- это тот, который делается текущим сразу после входа в систему. cd без параметров переводит в домашний каталог.

Если имя файла начинается с “/” — это полное имя (путь) файла, список всех вложенных подкаталогов, в самом внутреннем из которых он лежит.

Каталоги Linux

Есть некоторая группа товарищей, стандартизирующая (по мере разумного) названия всех каталогов в дереве — Filesystem Hierarchy Standard (FHS). Это удобно: всегда знаешь, где лежат программы, где — библиотеки, где — настроечные файлы и т. п. В “/” лежит только необходимое (“/bin” — программы, “/etc” — настройки, “/tmp” — временные файлы и т. п.). В “/usr” снова есть “/usr/bin” — все остальные программы (которые не нужны при начальной загрузке). В “/var” лежат файлы, размер и количество которых может всё время меняться (напр., системные журналы).

Отступление: команда ls -l («long»). Первый символ — тип, следующие девять — права доступа, затем количество имён файла (см. ln), хозяин файла, группа пользователей (см. «права доступа»), размер и дата.

Если вся файловая система — одно дерево, значит, надо уметь прививать к нему ветки: внешние носители, разные диски или несколько разделов одного. Это делается командой mount: например, mount /dev/cdrom /media/cdrom — и содержимое файловой системы на CD доступно в подкаталогах /mуdia/cdrom. Обратно — umount (особенно если кеш на запись).

Ещё нужно «поближе положить» — вместо длинного полного пути к файлу использовать что-то короткое. Два варианта. Можно завести ещё одно имя у файла (командой ln, «link», синтаксис — как у cp), это будет несколько имён одного и того же файла. Не работает для каталогов и между каталогами, один из которых смонтирован (между файловыми системами). Второй вариант — т. н. символьная ссылка, команда ln -s что куда, при этом заводится специальный (типа “l”) файл с именем куда, в котором лежит настоящее имя что. При обращении куда заменяется на что.

Специальные файл (файлы-дырки) — объекты файловой системы, имеющие имя, в них можно писать, из них читать, но они не файлы, не лежат на диске в виде последовательности секторов. Например, устройство — такой файл (как правило, в “/dev”) который передаёт и принимает данные от пользовательского процесса к «драйверу устройства» и обратно. Например “/dev/input/mice” — это все мыши. Бывают и ещё файлы-дырки, например, каналы (FIFO), в которые один процесс пишет, а другой тут же читает. Такое дупло, через которое Маша общается с Дубровским. И другие.

Файловая система может вообще не лежать на диске. Её может «сочинять» ядро на ходу. Например, много информации о системе и обо всех процессах есть в каталоге “/proc”, его подкаталоги и файлы — не «настоящие», они нигде не лежат, но при чтении в них появляется актуальная информация. Это виртуальная ФС, ProcFS: “/proc/cpuinfo” — о процессоре, “/proc/loadavg” — загруженность системы и т. п. Есть и другие, например SysFS — информация об аппаратуре, или TmpFS — файловая система в памяти (LiveCD её использует).

Права доступа

Процесс не должны мешать друг другу при работе с системными объектами (в основном это — файлы). Поэтому надо определить, (1) кто, (2) кому, (3) к какому объекту (4) какой доступ разрешает.

У объекта есть UID, указывающий на хозяина, он и разрешает доступ. Есть GID — группа пользователей объекта (может быть несколько пользователей в группе, пользователь может состоять в нескольких группах). Если UID процесса совпадает с UID файла — это процесс-хозяин (user) файла. Если не совпадает, зато GID одной из групп, в которых числится пользователь, совпадает с GID файла — это процесс-член группы (group) файла. Если ни то, ни другое — это чужой (other) по отношению к файлу. Группы имеют название и уникальный номер, свои группы можно посмотреть id.

Три вида доступа: чтение (read), запись (write) и использование (execute). Чтение — право получать информацию, запись — право её изменять, использование — право заставить систему воспользоваться этой информацией. Получается 3 тройки вида “rwx”, где если нет доступа, вместо буквы стоит “-”. Это и отображается в ls -l.

Использование файла — право запустит его как программу, использование каталога — право сделать его рабочим (точнее, право воспользоваться именами файлов в этом каталоге для доступа к самом файлам). Каталог с правами “r--” можно просмотреть, но нельзя посмотреть в файлы, в нём находящиеся, только имена. Каталог “--x” нельзя просмотреть, но если вы знаете имя файла, можно с этим файлом работать.

Специальный пользователь root (UID=0) имеет любой доступ к любому файлу.

Зачем нарушать правила? Чтобы пользователь мог запустит не свою программу, которая изменит файл, самому пользователю недоступный. Например, umount — отключает (размонтирует) файловые системы. Это нельзя давать пользователю, но иногда надо. Выход: программа mount должна как-то получать права root-а, а потом сама проверять, разрешено ли её выполнять. Специальный атрибут файла “s” (setUID): при запуске этой программы UID не наследуется, а делается равным UID-у самого файла, в котором программа. Например, root. Это довольно опасно делать без разбору.

Главы учебника

В учебнике обо всём этом рассказано много подробнее, в целых шести лекциях.