Краткий справочник по командам UNIX
10.18 Краткий справочник по командам UNIX
Первая версия UNIX была создана в 1971 году, в 1979 году была подготовлена 7-я редакция (Bourne Shell и компилятор С, разработанная Керниганом и Ритчи; тогда же фирма Microsoft купила права и разработала свою версию для РС - XENIX). Первая версия BSD (Беркли) была подготовлена в 1978 году. В 1981 году закончена версия, поддерживающая стек протоколов TCP/IP (4.2BSD). В 1990 году в UNIX была встроена система NFS. Несколько лет назад в университете Хельсинки (Линусом Торвальдсом) была разработана версия UNIX, известная под названием LINUX.
UNIX имеет двухуровневую структуру: ядро, где сконцентрированы базовые услуги и оболочка, куда входят редакторы, интерпретаторы, например СС, а также lp, routed, inetd, init
и т.д.
Код UNIX написан на Си (на 30% больше по объему и на 20% ниже по производительности, чем версия на ассемблере). Система открытая, рассчитанная на многозадачность и большое число пользователей.
Интерфейс системных вызовов предоставляет набор услуг ядра и определяет формат запросов. Ядро состоит из трех частей:
- Файловая система
- Система управления процессами и памятью
- Система ввода/вывода.
Файловая система обеспечивает интерфейс доступа к данным на дисковых накопителях и в периферийных устройствах ввода/вывода. Одни и те же функции open(), read(0, write() могут использоваться при чтении/записи на диске и при выводе данных на принтер или терминал. Файловая система управляет правами доступа и привилегиями. Она обеспечивает перенаправление запросов, адресованных периферийным устройствам.
Система управления процессами ЭВМ, причем их число обычно превышает число ЦПУ. Специальной задачей ядра является планирование выполнением процессов (scheduler). Сюда входит управление ресурсами системы (временем ЦПУ, дисковым пространством, распределением памяти и т.д.). Данная система занимается созданием и удалением процессов, синхронизацией их работы и взаимодействием процессов (например, обменом данными).
Система ввода/вывода обслуживает запросы файловой системы и системы управления процессами для доступа к периферийным устройствам (дискам, лентам, печати, терминалам).
Эта система организует взаимодействие с драйверами этих устройств.
Файловая система UNIX представляет собой древовидную структуру. Каждый файл имеет имя, которое определяет его место на дереве файловой системы. Корнем этой системы является корневой каталог с именем /.
В этом каталоге обычно содержатся каталоги:
/bin |
Каталог наиболее популярных системных команд и утилит. |
/dev |
Каталог файлов для периферийных устройств, например дисковых накопителей (/dev/cdrom, /dev/mem, /dev/null или /dev/ttyp10). |
/etc |
Здесь находятся конфигурационные файлы и утилиты администрирования, среди них скрипты инициализации системы. |
/lib |
Каталог библиотечных файлов языка Си и других языков. |
/lost+found |
Каталог “потерянных” файлов. Ошибки при неправильном выключении ЭВМ могут привести к появлению безымянных файлов (содержимое корректно, но нет ссылок на этот файл ни в одном из каталогов). |
/mnt |
Каталог для установления временных связей (монтирования) физических файловых систем с корневой системой. Обычно каталог пуст. |
/home |
Служит для размещения каталогов пользователей (в прежних версиях для этого служил каталог /usr. |
/var |
Предназначен для размещения сервисных подкаталогов, например, электронной почты (/usr/spool), утилит UNIX (/usr/bin), программ, исполняемых на данной ЭВМ (/usr/local), файлов заголовков (/usr/include), системы справочника (/usr/man). |
/tmp |
Служит для записи временных файлов. |
Полные имена остальных файлов содержат путь – список каталогов, размещенных между / и данным файлом. По этой причине полное имя любого файла начинается с символа / (не содержит в отличие от Windows имени диска (например, CD), другого внешнего устройства или удаленной ЭВМ).
UNIX, тем не менее, не предполагает наличия лишь одной файловой системы. Число таких файловых систем в этой ОС не лимитировано, они могут располагаться на одном дисковом накопителе, на разных устройствах или даже на разных ЭВМ.
Каждый файл имеет сопряженные с ним метаданные, записанные в индексных дескрипторах –
inode.
Имя файла является указателем на его метаданные (метаданные не содержат указателя на имя файла). Существует 6 типов файлов:
- Обычный файл (regular)
- Каталог (directory)
- Файл внешнего устройства
- Канал с именем (FIFO)
- Связь (link)
- socket
Обычный файл является наиболее распространенным типом. Для операционной системы такой файл представляется простой последовательностью байтов. Интерпретация содержимого такого файла находится в зоне ответственности прикладной программы, которая с ним работает.
Каталог – это файл, содержащий имена находящихся в нем файлов и указатели на информацию, позволяющую ОС производить операции над этими файлами. Запись в каталог имеет право только ядро. Каталог представляет собой таблицу, каждая запись в которой соответствует некоторому файлу.
Файл внешнего устройства обеспечивает доступ к этому прибору. UNIX различает символьные и блочные файлы. Символьные файлы служат для не буферизованного обмена, а блочные предполагают обмен порциями данных фиксированной длины.
Каналы с именем (FIFO) – это файлы, служащие для связи между процессами.
Файловая система допускает наличие нескольких имен у одного файла. Связь имени файла с его метаданными называется жесткой связью. С помощью команды
ln можно создать еще одно имя для файла. Особым типом файла является символическая связь, позволяющей косвенно обращаться к файлу. Символическая
связь является особым типом файла.
Socket служит для взаимодействия между процессами. Интерфейс socket используется, например, для доступа к сети TCP/IP.
Любой файл имеет двух владельцев – собственно создателя и группу (chown, chgrp и chmod). Файл создается не пользователем, а процессом, им запущенным. Атрибуты этого процесс присваиваются и файлу (r, w и x). Имеется также несколько дополнительных атрибутов, среди них
sticky bit, который требует сохранения образа \исполняемого файла в памяти после завершения его работы. Атрибуты SUID и GUID позволяют изменить права пользователя в направлении расширения (до уровня создателя файла) на время исполнения данной программы (это используется, например, в случае работы с файлом
/etc/passwd).
В случае каталогов sticky bit позволяет стереть только файлы, которыми владеет пользователь.
Различается несколько типов процессов.
- Системные процессы
являются частью ядра и резидентно размещены в оперативной памяти. Они запускаются при инициализации ядра системы. Системными процессами являются, например, kmadaemon (диспетчер памяти ядра), shed (диспетчер свопинга), bdfflush (диспетчер кэша), init (прародитель всех остальных процессов).
- Демоны
– не интерактивные процессы, запускаемые путем загрузки в память соответствующих программ и выполняемые в фоновом режиме. Демоны не ассоциируются ни с одним из пользователей (они служат, например, для организации терминального ввода, печатающего устройства, сетевого доступа).
- Прикладные процессы
– это остальные процессы принадлежащие, как правило, пользователям.
Процессы создаются процедурой
fork и характеризуются набором атрибутов:
PID |
(Process ID) представляет собой уникальное имя процесса (идентификатор нового процесса характеризуется большим кодом, чем идентификатор предыдущего). После уничтожения процесса ликвидируется и его PID и этот идентификатор может быть присвоен новому процессу. |
PPID |
(Parent Process ID) – идентификатор процесса, породившего данный процесс. |
Приоритет процесса |
(Nice Number) учитывается планировщиком при определении очередности запуска процессов. |
TTY |
псевдотерминал, ассоциированный с процессом. Демоны не имеют псевдотерминала. |
RID (Real ID) |
пользователя, запустившего данный процесс. Эффективный идентификатор (EUID) служит для определения прав доступа процесса к системным ресурсам. |
Для запуска задачи процесс должен выполнить системный вызов exec. При этом не порождается новый процесс, а код процесса замещается полностью кодом запускаемой программы.
Так, когда пользователь вводит команду
ls, текущий процесс
shell осуществляет вызов
fork, порождая новый процесс – копию
shell. Порожденный процесс осуществит вызов
exec, указав в качестве параметра имя исполняемого файла (
ls).
Ls замещает
shell, а по завершении работы процесс уничтожается.
Сигналы
Сигналы служат для того, чтобы передавать от одного процесса к другому или от ядра к какому-то процессу, уведомление о происхождении некоторого события. Примером такого события может быть нажатие клавиши мышки или нажатие клавиш <Ctrl><C> (SIGINIT)или <Ctrl><Alt><Del>.
Для отправления сигнала служит команда
kill pid, где
sig_no – номер или символическое название сигнала,
pid - идентификатор процесса, которому адресован сигнал. Для остановки процесса, выполняемого в фоновом режиме можно послать сигнал SIGTERM. Например, kill $!, где $! – переменная, где хранится идентификатор процесса (PID), запущенного последним.
Содержание раздела