Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

2004 г.

10.18. Краткий справочник по командам UNIX

Семёнов Ю.А. (ГНЦ ИТЭФ), book.itep.ru

Первая версия 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% ниже по производительности, чем версия на ассемблере). Система открытая, рассчитанная на многозадачность и большое число пользователей.

Интерфейс системных вызовов предоставляет набор услуг ядра и определяет формат запросов. Ядро состоит из трех частей:

  1. Файловая система

  2. Система управления процессами и памятью

  3. Система ввода/вывода.

Файловая система обеспечивает интерфейс доступа к данным на дисковых накопителях и в периферийных устройствах ввода/вывода. Одни и те же функции 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 типов файлов:

  1. Обычный файл (regular)

  2. Каталог (directory)

  3. Файл внешнего устройства

  4. Канал с именем (FIFO)

  5. Связь (link)

  6. socket

Обычный файл является наиболее распространенным типом. Для операционной системы такой файл представляется простой последовательностью байтов. Интерпретация содержимого такого файла находится в зоне ответственности прикладной программы, которая с ним работает.

Каталог - это файл, содержащий имена находящихся в нем файлов и указатели на информацию, позволяющую ОС производить операции над этими файлами. Запись в каталог имеет право только ядро. Каталог представляет собой таблицу, каждая запись в которой соответствует некоторому файлу.

Файл внешнего устройства обеспечивает доступ к этому прибору. UNIX различает символьные и блочные файлы. Символьные файлы служат для не буферизованного обмена, а блочные предполагают обмен порциями данных фиксированной длины.

Каналы с именем (FIFO) - это файлы, служащие для связи между процессами.

Файловая система допускает наличие нескольких имен у одного файла. Связь имени файла с его метаданными называется жесткой связью. С помощью команды ln можно создать еще одно имя для файла. Особым типом файла является символическая связь, позволяющей косвенно обращаться к файлу. Символическая связь является особым типом файла.

Socket служит для взаимодействия между процессами. Интерфейс socket используется, например, для доступа к сети TCP/IP.

Любой файл имеет двух владельцев - собственно создателя и группу (chown, chgrp и chmod). Файл создается не пользователем, а процессом, им запущенным. Атрибуты этого процесс присваиваются и файлу (r, w и x). Имеется также несколько дополнительных атрибутов, среди них sticky bit, который требует сохранения образа \исполняемого файла в памяти после завершения его работы. Атрибуты SUID и GUID позволяют изменить права пользователя в направлении расширения (до уровня создателя файла) на время исполнения данной программы (это используется, например, в случае работы с файлом /etc/passwd). В случае каталогов sticky bit позволяет стереть только файлы, которыми владеет пользователь.

Различается несколько типов процессов.

  1. Системные процессы являются частью ядра и резидентно размещены в оперативной памяти. Они запускаются при инициализации ядра системы. Системными процессами являются, например, kmadaemon (диспетчер памяти ядра), shed (диспетчер свопинга), bdfflush (диспетчер кэша), init (прародитель всех остальных процессов).

  2. Демоны - не интерактивные процессы, запускаемые путем загрузки в память соответствующих программ и выполняемые в фоновом режиме. Демоны не ассоциируются ни с одним из пользователей (они служат, например, для организации терминального ввода, печатающего устройства, сетевого доступа).

  3. Прикладные процессы - это остальные процессы принадлежащие, как правило, пользователям.

Процессы создаются процедурой 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), запущенного последним.

Таблица 1. Сигналы

Имя сигналаФункция по умолчаниюОписание
SIGABRT

Завершение + ядро

Результат системного вызова abort

SIGALRMЗавершение

Результат срабатывания таймера, установленного системными вызовом alarm или setitimer

SIGBUSЗавершение + ядро

Результат аппаратной ошибки. Сигнал посылается при обращении к виртуальному адресу, для которого отсутствует соответствующая физическая страница памяти.

SIGCHLDИгнорирование

Сообщает родительскому процессу о завершении исполнения дочернего

SIGEGVЗавершение + ядро

Формируется при попытке обращения к неверному адресу или области памяти, для которой у процесса нет привилегий.

SIGFPEЗавершение + ядро

Сигнал возникает в случае деления на нуль или при переполнении в операциях с плавающей запятой.

SIGHUPЗавершение

Посылается хозяину сессии, связанной с консолью, когда ядро обнаружит, что терминал отключился. Сигнал передается всем процессам текущей группы при завершении сессии хозяина. Этот сигнал иногда используется для взаимодействия процессов, например, для уведомления демонов о необходимости обновления конфигурационных данных.

SIGILLЗавершение + ядро

Посылается ядром при попытке процесса выполнить недопустимую команду.

SIGINTЗавершение

Посылается ядром всем процессам при нажатии комбинации клавиш <Del> или <Crtl><C>.

SIGKILLЗавершение

Сигнал прерывает выполнение процесса. Перехват или игнорирование этого сигнала невозможно.

SIGPIPEЗавершение

Результат попытки записи в канал или сокет, когда получатель данных закрыл соответствующий дескриптор.

SIGPOLLЗавершение

Результат реализации определенного события для устройства, которое опрашивается.

SIGPWRИгнорирование

Результат угрозы потери питания (при переключении на UPS).

SIGQUITЗавершение + ядро

Посылается ядром всем процессам текущей группы при нажатии клавиш <Crtl><\>.

SIGSTOPСтоп

Посылается всем процессам текущей группы при нажатии пользователем комбинации клавиш <Crtl><Z>. Процесс останавливается.

SIGSYSЗавершение + ядро

Посылается ядром при попытке некорректного системного вызова

SIGTERMЗавершение

Предупреждение о скорой ликвидации процесса (ликвидировать временные файлы, прервать текущие обмены) Команда kill посылает именно этот сигнал.

SIGTTINСтоп

Формируется ядром при попытке фонового процесса выполнить чтение с консоли.

SIGTTOUСтоп

Формируется ядром при попытке фонового процесса выполнить запись в консоль

SIGUSR1Завершение

Предназначен для прикладных задач, как средство взаимодействия процессов.

SIGUSR2Завершение

Предназначен для прикладных задач, как средство взаимодействия процессов.

Сигнал может игнорироваться, могут быть предприняты действия, предусмотренные по умолчанию, или процесс может взять на себя функцию обработки сигнала. Если процесс не остановился, существует способ заставить его выполнить это требование, послав команду:

kill -9 pid

Иногда и это может не помочь, например, в случае процессов зомби (процесса нет а запись о нем имеется), операции в NFS или с ленточным ЗУ.

Атрибуты пользователя в файле /etc/passwd (одна строка - одна запись):

имя:passwd-encod:UID:GID:комментарии:home-dir:shell

имя уникальное регистрационное имя пользователя (вводится при login)

passwd-encod закодированный пароль пользователя. Часто пароль хранится в отдельном файле, а здесь вместо него проставляется символ х. Если в этом поле стоит символ *, то данный пользователь в систему войти не может (используется для псевдопользователей)

UID Идентификатор пользователя, который наследуется порожденными им процессами. ROOT имеет UID=0.

GID Идентификатор первичной группы пользователя, который соответствует идентификатору в файле /etc/group, где содержится список имен пользователей-членов группы.

Комментарии Обычно здесь записывается истинное имя пользователя, здесь может быть записана дополнительная информация, например, телефон или e-mail пользователя, считываемые программой finger.

home-dir Базовый каталог пользователя, где он оказывается после входа в систему.

Shell Название программы, используемой системой в качестве командного интерпретатора (например, /bin/sh). Разные интерпретаторы используют разные скрипты инициализации (.profole, .login и т.д.).

В первой строке скрипта помещается строка #! /bin/sh, указывающая на тип и размещения интерпретатора. Поскольку скрипт исполняется интерпретатором, работает он медленно. Значение PID сохраняется в переменной $$, что можно использовать при формировании имен временных файлов, гарантируя их уникальность. Переменные $1, $2 и т.д. несут в себе значения параметров, переданных скрипту. Число таких параметров записывается в переменной $#. Результат работы скрипта заносится в переменную $?. Ненулевое значение $? свидетельствует об ошибке. В переменной $! Хранится PID последнего процесса, запущенного в фоновом режиме. Переменная $* хранит в себе все переменные, переданные скрипту в виде единой строки вида: “$1 $2 $3 …”. Другое представление переданных параметров предлагает переменная $@= “$1” “$2” “$3” …

Таблица 2. Перенаправление потоков ввода/вывода

ОбозначениеВыполняемая операция
>файлСтандартный вывод перенаправляется в файл
>>файлДанные из стандартного вывода добавляются в файл
<файлСтандартный ввод перенаправляется в файл
p1|p2

Вывод программы p1 направляется на вход программы p2

n>файл

Перенаправление вывода из файла с идентификатором n в файл

n>>файл

Тоже, что и в предыдущей строке, но данные добавляются к содержимому файла

n>&mОбъединение потоков с идентификаторами n и m
<<str

“Ввод здесь” - используется стандартный ввод до подстроки str. При этом осуществляется подстановка метасимволов интерпретатора

<<\str

То же, что и в предшествующей строке, но без подстановки.

Символ | иногда называется конвейером. Например, команда:

ps - ef | grep proс

осуществляет вывод данных о конкретном процессе proс. Несколько более корректна команда:

ps - ef | grep proс grep -v grep

так как в потоке, формируемом командой ps, присутствуют две строки, содержащие proс - строка процесса proс и строка процесса grep с параметром proс.

Для запуска выполнения команды в фоновом режиме достаточно завершить ее символов &.

Виртуальная память процесса состоит из сегментов памяти. Размер, содержимое и размещение сегментов определяется самой программой (например, применением библиотек). Исполняемые файлы могут иметь формат COFF (Common Object File Format) и ELF (Executable and Linking Format).

Функция main() является первой, определенной пользователем. Именное ей будет передано управление после формирования соответствующего окружения запускаемой программы. Функция main определяется следующим образом.

main(int argc, char *argv[], char *envp[]);

Аргумент argc определяет число параметров, переданных программе. Указатели на эти параметры передаются с помощью массива argv[], так через argv[0] передается имя программы, argv[1] - несет в себе первый параметр и т.д. до argv[argc-1]. Массив envp[] несет в себе список указателей на переменные окружения, передаваемые программе. Переменные представляют собой строки имя=значение_переменной.

В среде UNIX существует два базовых интерфейса для файлового ввода/вывода.

  1. Интерфейс системных вызовов, непосредственно взаимодействующих с ядром ОС.

  2. Стандартная библиотека ввода-вывода.

С файлом ассоциируется дескриптор, который в свою очередь связан с файловым указателем смещения, начиная с которого будет произведена последующая операция чтения/записи. Каждая операция чтения или записи увеличивает этот указатель на число переданных байтов. При открытии файла указатель принимает значение нуль.

Процессы

Процесс характеризуется набором атрибутов и идентификаторов. Важнейшим из них является идентификатор процесса PID и идентификатор родительского процесса PPID. PID является именем процесса в ОС. Существует еще 4 идентификатора, которые определяют доступ к системным ресурсам.

  1. Идентификатор пользователя - UID.

  2. Эффективный идентификатор пользователя - ЕUID

  3. Идентификатор группы GID

  4. Эффективный идентификатор группы ЕGID.

Процессы с идентификаторами SUID и SGID ни при каких обстоятельствах не должны порождать других процессов.

Процесс при реализации использует разные системные ресурсы - память, процессор, возможности файловой системы и ввод/вывод. ОС создает иллюзию одновременного исполнения нескольких процессов (предполагается, что имеется только один процессор), распределяя ресурсы между ними и препятствуя злоупотреблениям.

Выполнение процесса может происходить в двух режимах - в режиме ядра (kernel mode) и в режиме пользователя (user mode). В режиме пользователя процесс исполняет команды прикладной программы, доступные на непривилегированном уровне. Для получения каких-либо услуг ядра процесс делает системный вызов. При этом могут исполняться инструкции ядра, но от имени процесса, реализующего системный вызов. Выполнение процесса переходит в режим ядра, что защищает адресное пространство ядра. Следует иметь в виду, что некоторые инструкции, например, изменение содержимого регистров управления памятью, возможно только в режиме ядра.

По этой причине образ процесса состоит из двух частей: данных режима ядра и режима пользователя. Каждый процесс представляется в системе двумя основными структурами данных - proc и user, описанными в файлах <sys/proc.h> и <say/user.h>, соответственно. Структура proc является записью системной таблицы процессов, которая всегда находится в оперативной памяти. Запись этой таблицы для активного в данный момент процесса адресуется системной переменной curproc. Каждый раз при переключении контекста, когда ресурсы процессора передаются другому процессу, соответственно изменяется содержимое переменной curproc, которая теперь будет указывать на proc активного процесса.

Структура user, называемая также u-area или u block, содержит данные о процессе, которые нужны ядру при выполнении процесса. В отличие от структуры proc, адресуемой с помощью указателя curproc, данные user размещаются в определенном месте виртуальной памяти ядра и адресуются через переменную u. u area также содержит стек фиксированного размера - системный стек или стек ядра (kernel stack). При выполнении процесса в режиме ядра операционная система использует стек, а не стек процесса.

Современные процессоры поддерживают разбивку адресного пространства на области переменного размера - сегменты, и области фиксированного объема - страницы.

Процессоры Intel позволяют разделить память на несколько логических сегментов. Виртуальный адрес при этом состоит из двух частей - селектора сегмента и смещения в пределах сегмента. Поле селектора INDEX указывает на дескриптор сегмента, где записано его положение, размер и права доступа RPL (Descriptor Privilege Level).

При запуске программы командный интерпретатор порождает процесс, который наследует все 4 идентификатора и имеет те же права, что и shell.Так как в сеансе пользователя прародителем всех процессов является login shell, то их идентификаторы будут идентичны. При запуске программы сначала порождается новый процесс, а затем загружается программа.

Процесс порождается с помощью системного вызова fork:

#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);

Порожденный процесс (дочерний) является точной копией родительского процесса. Дочерний процесс наследует следующие атрибуты:

  • идентификатор пользователя и группы

  • все указатели и дескрипторы файлов

  • диспозицию сигналов и их обработчики

  • текущий и корневой каталог

  • переменные окружения

  • маску файлов

  • ограничения, налагаемые на процесс

  • управляющий терминал

Конфигурация виртуальной памяти также сохраняется (те же сегменты программ, данных, стека и пр.). После завершения вызова fork оба процесса будут выполнять одну и ту же инструкцию. Отличаются эти процессы PID, PPID (идентификатор родительского процесса), дочерний процесс не имеет сигналов, ждущих доставки, отличаются и код, возвращаемый системным вызовом fork (родителю возвращается PID дочернего процесса, а дочернему - 0). Если код =0, то возврат осуществляется только в родительский процесс.

Для загрузки исполняемого файла используется вызов exec (аргумент - запускаемая программа). При этом существующий процесс замещается новым, соответствующим исполняемому файлу.

  • идентификаторы PID и PPID

  • все указатели и дескрипторы файлов, для которых не установлен флаг FD_CLOEXEC

  • идентификаторы пользователя и группы

  • текущий и корневой каталог

  • переменные окружения

  • маску файлов

  • ограничения, налагаемые на процесс

  • управляющий терминал

Процессы могут уведомлять друг друга о произошедших событиях с помощью сигналов, каждый из которых имеет символьное имя и номер. Сигнал может инициировать попытка деления на 0 или обращение по недопустимому адресу.

ОС UNIX создает иллюзию одновременного исполнения процессов, стараясь эффективно распределять между ними имеющиеся ресурсы. Выполнение процесса возможно в режиме ядра (kernel mode) и в режиме задачи (user mode). В последнем случае процесс реализует инструкции прикладной программы, допустимые на непривилегированном уровне защиты процессора. При этом системные структуры данных недоступны. Для получения таких данных процесс делает системный вызов (на время происходит переход процесса в режим ядра).

Каждый процесс представляется в системе двумя основными структурами данных - proc и user, описанными в файлах <sys/proc.h> и <sys/user.h>. Структура proc представляет собой системную таблицу процессов, которая находится в оперативной памяти резидентно. Текущий процесс адресуется системной переменной curproc. Структура user размещается в виртуальной памяти. Область user содержит также системный стек и стек ядра.

Распределение оперативной памяти всегда бывает динамическим. Процессы выполняются в своем виртуальном адресном пространстве. Виртуальные адреса преобразуются в физические на аппаратном уровне при активном участии ОС. Объем виртуальной памяти может значительно превышать объем физической. Процессоры обычно поддерживают разделение адресного пространства области переменного размера - сегменты и фиксированного размера - страницы. Для каждой страницы может быть задано собственная схема преобразования виртуальных адресов в физические. Intel поддерживает работу с сегментами (сегментные регистры), где задается селектор сегмента (дескриптор) и смещение в пределах сегмента.

Распределение ресурсов процессора осуществляется планировщиком, который выделяет кванты времени каждому из активных процессов. Здесь приложения делятся на три класса:

  1. Интерактивные

  2. Фоновые

  3. Реального времени

Каждый процесс в UNIX имеет свой контекст (контекст сохраняется при прерывании процесса). Контекст определяется следующими составляющими:

  • Адресное пространство процесса в режиме user

  • Управляющая информация (proc и user).

  • Окружение процесса (в виде пар переменная=значение).

  • Аппаратный контекст (регистры процессора)

Работа планировщика UNIX основана на использовании приоритетов процессов. Если процесс имеет наивысший приоритет и готов к работе, планировщик прервет работу текущего процесса, если у него более низкий приоритет, даже при условии, что он не выбрал до конца свой квант времени. Работа программы ядра обычно не прерывается. Это касается и процессов user, если они в данный момент осуществляют системный вызов.

Каждый процесс имеет два атрибута приоритета - текущий и относительный (nice). Первый служит для реализации планирования, второй присваивается при порождении процесса и воздействует на значение текущего приоритета. Текущий приоритет может характеризоваться кодами 0 (низший) - 127 (высший). Для режима user используются коды приоритета 0-65, а для ядра - 66-94 (системный диапазон).

Процессы с кодами 96-127 имеют фиксированный приоритет, который не может изменить ОС (обычно служат для процессов реального времени).

Процессу, ожидающему освобождения какого-то ресурса, система присваивает значение кода приоритета сна, выбираемое из диапазона системных приоритетов (в версии BSD большему коду соответствует меньший приоритет). Процессы типа “ожидание ввода с клавиатуры” имеют высокий приоритет сна и им сразу предоставляется ресурс процессора. Фоновые же процессы, забирающие много времени ЦПУ, получают относительно низкий приоритет.

Каждую секунду ядро пересчитывает текущие значения кодов приоритета для процессов, ожидающих запуска (коды<65), повышая вероятность получения ими требуемого ресурса. Так 4.3BSD использует для расчета приоритета процесса следующую формулу:

p_cpu = p_cpu*(2*load)/(2*load+1), где load - среднее число процессов в очереди за последнюю секунду. В результате после долгого ожидания даже низкоприоритетный процесс имеет определенный шанс получить требуемый ресурс.

Ядро генерирует и посылает процессу сигнал в ответ на определенные события, вызванные самим процессом, другим процессом, прерыванием (например, терминальным) или внешним событием. Это могут быть Alarm, нарушение по выделенным квотам, особые ситуации, например деление на нуль и т.д. Некоторые сигналы можно заблокировать, отложить их обработку, или проигнорировать, для других (например, SIGKILL и SIGSTOP) это невозможно.

Взаимное влияние процессов в UNIX минимизировано (многозадачность!), но система была бы неэффективной, если бы она не позволяла процессам обмениваться данными и сигналами (IPC - Inter Process Communications). Для реализации этой задачи в UNIX предусмотрены:

  • каналы

  • сигналы

  • FIFO (First-In-First-Out - именованные каналы)

  • очереди сообщений

  • семафоры

  • совместно используемые области памяти

  • сокеты>

Для создания канала используется системный вызов pipe int pipe(int *filedes); который возвращает два дескриптора файла filedes[0] - для записи в канал и filedes[1] для чтения из канала. Когда один процесс записывает данные в filedes[0], другой получает их из filedes[1]. Здесь уместен вопрос, как этот другой процесс узнает дескриптор filedes[1]?

Нужно вспомнить, что дочерний процесс наследует все дескрипторы файлов родительского процесса. Таким образом, к дескрипторам имеет доступ процесс, сформировавший канал, и все его дочерние процессы, что позволяет работать каналам только между родственными процессами. Для независимых процессов такой метод обмена недоступен. Канальный обмен может быть запущен и с консоли. Например:

cat file.txt | wc

Здесь символ | олицетворяет создание канала между выводом из файла file.txt и программой wc, подсчитывающей число символов в словах. Процессы эти не являются независимыми, так как оба порождены процессом shell.

Метод FIFO (в BSD не реализован) сходен с канальным обменом, так как также организует лишь однонаправленный обмен. Такие каналы имеют имена, что позволяет их применять при обмене между независимыми процессами. FIFO - это отдельный тип файла в файловой системе UNIX. Для формирования FIFO используется системный вызов mknod.

int mknod(char *pathname, int mode, int dev);

где pathname - имя файла (FIFO),
mode - флаги владения и прав доступа,
dev - при создании FIFO игнорируется.

Допускается создание FIFO и из командной строки: mknod name p.
FIFO также как и обычные канала работают с соблюдением следующих правил.

  • Если из канала берется меньше байтов, чем там содержится, остальные остаются там для последующего чтения.

  • При попытке прочесть больше байт, чем имеется в канале, читающий процесс должен соответствующим образом обработать возникшую ситуацию.

  • Если в канале ничего нет и ни один процесс не открыл его на запись, при чтении будет получено нуль байтов. Если один или более процессов открыло канал на запись, вызов read будет заблокирован до появления данных.

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

  • При попытке записать большее число байтов, чем это позволено каналом или FIFO, вызов write блокируется до освобождения нужного места. Если процесс предпринимает попытку записи в канал, не открытый ни одним из процессов для чтения, процессу посылается сигнал SIGPIPE, а вызов write присылает 0 с кодом ошибки errno=EPIPE.

Сообщения

Очереди сообщения являются составной частью UNIX System V. Процесс, заносящий сообщение в очередь, может не ожидать чтения этого сообщения каким-либо другим процессом. Сообщения имеют следующие атрибуты:

  • Тип сообщения

  • Длина данных в байтах

  • Данные (если длина ненулевая)

Очередь сообщений имеет вид списка в адресном пространстве ядра. Для каждой очереди ядро формирует заголовок(msqid_ds), где размещаются данные о правах доступа к очереди (msg_perm), о текущем состоянии очереди (msg_cbytes - число байтов msg_qnum - число сообщений в очереди), а также указатели на первое и последнее сообщение. Создание новой очереди сообщений осуществляется посредством системного вызова msgget:

#include <sys/types.h>
#include <sys/ipc.h>
#include e <sys/ipc.h>
int msgget( key_t key, int msgflag );

Эта функция выдает дескриптор элемента очереди, или -1 - в случае ошибки. Процесс может с помощью оператора msgsnd поместить сообщение в очередь, получить сообщение из очереди посредством msgrcv и манипулировать сообщениями с помощью msgctl.

Семафоры

Для управления доступом нескольких процессов к разделяемым ресурсам используются семафоры. Семафоры являются одной из форм IPC (Inter-Process Communication). Для обеспечения работы нужно обеспечить выполнение следующих условий:

  • Семафор должен быть доступен разным процессам и, по этой причине, находиться в адресной среде ядра.

  • Операция проверки и изменения семафора должна быть реализована в режиме ядра.

Помимо значения семафора в структуре sem записывается идентификатор процесса, вызвавшего последнюю операцию над семафором, число процессов, ожидающих увеличения значения семафора.

Разделяемая память

Активное использование каналов, FIFO и очередей сообщений может привести к снижению производительности машины. Это сопряжено с тем, что передаваемые данные сначала из буфера передающего процесса в буфер ядра, и только затем в буфер принимающего процесса. Техника разделяемой памяти позволяет избавиться от этих потерь, предоставив доступ двум или более процессам доступ общей зоне памяти.

Пока один процесс читает данные из разделяемой памяти, другой не должен туда писать и наоборот. Такого рода согласование работы осуществляется посредством семафоров.

Файловая система

В настоящее время UNIX использует виртуальную файловую систему, которая допускает работу с несколькими физическими файловыми системами самых разных типов. Система S5FS занимает раздел диска и состоит из трех компонентов.

  • Суперблока, где хранится общая информация о файловой системе, о ее архитектуре, числе блоков, и индексных дескрипторов (inode).

  • Массива индексных дескрипторов (ilist), где записаны метаданные всех файлов системы. Индексный дескриптор содержит статусные данные о файле и информацию о расположении этих данных на диске. Ядро обращается к inode по индексу массива ilist. Один inode является корневым, через него происходит доступ к структуре каталогов и файлов после монтирования файловой системы.

  • Блоки данных файлов и каталогов. Размер блока кратен 512 байтам.

Индексный дескриптор (inode) несет в себе информацию о файле, необходимую для обработки метаданных файла. Каждый файл ассоциируется с одним inode. При открытии файла ядро записывает копию inode в таблицу in-core inode.

Слабой точкой файловой системы F5FS является суперблок. Он записан на диске в одном экземпляре и по этой причине уязвим. Низкая производительность этой файловой системы связана с тем, что метаданные файлов размещены в начале диска, а данные на относительном расстоянии от них. Это вызывает постоянные перемещения считывающих головок, снижая быстродействие системы.

Имена файлов хранятся в специальных файлах, называемых каталогами. По этой причине любой реальный файл данных может иметь любое число имен. Каталог файловой системы представляет собой таблицу, каждый элемент которой имеет длину 16 байтов: 2 байта номер индексного дескриптора, 14 - его имя. Число inode не может превышать 65535. Имя файла в этой системе (S5FS) не должно превышать 14 символов.

При удалении имени файла из каталога номер соответствующего inode устанавливается равным 0. Ядро не удаляет свободные элементы, по этой причине размер каталога при удалении файлов не уменьшается.

Новая файловая система FFS (Berkeley Fast File System) использует те же структуры длинные имена файлов (до 255 символов). Записи каталога имеют следующую структуру:

d_namlen - Длина имени файла
d_name[] - Имя файла

Имя файла имеет переменную длину, дополняемую нулями до 4-байтовой границы. Метаданные активных файлов, на которые ссылаются один или более процессов, представлены в памяти в виде in-core inode. В виртуальной файловой системе в качестве in-core inode выступает vnode. Структура vnode одинакова для всех файлов и не зависит от типа файловой системы. vnode содержит данные, необходимые для работы виртуальной файловой системы, а также характеристики файла, такие как его тип.

Получение описания инструкций (Help): man <имя объекта>

Уход из UNIX Ctrl-d или logout.
passwdСмена пароля пользователя
Вызов редактораed - строчный редактор; sed - потоковый редактор
pwdВыдача полного имени текущего каталога
clearОчистка экрана терминала.

ls [-флаги...] имя... Распечатка каталога

Флаги:
-aпечатает все имена файлов в каталоге;
-cсортирует список файлов по времени последней модификации;
-dпечатает информацию только о каталогах (эквивалентно -l);
-fдля каждого подкаталога выводит его содержимое, этот флаг выключает все другие флаги;
-gвместо идентификатора владельца печатается идентификатор группы;
-lпечатает полную информацию о файлах;
-rсортирует список в обратном порядке;
-sвыводит размер файлов в блоках;
-tсортировка по времени;
-uсортирует список файлов по времени последнего доступа.
lcВывод содержимого каталога по столбцам (аналогична ls, но присутствует не во всех системах);

 
Образование нового каталогаmkdir

Например: mkdir A B (образует 2 каталога)
Переход из каталога в каталогcd
Возвращение в предыдущий каталогcd ..
Переход в параллельный каталог bcd ../b
Возврат в базовый каталогcd ../../
Удаление каталогаrmdir <имя_каталога>

Доступ к каталогу. Проверка существования файлов и каталогов, а также установленных для них возможностей.

test <параметр> <файл>

Команда test позволяет также сравнивать целые числа (напр., test "$X" -eq "$Y"). <параметр> возвращает значение true, если файл существует и:
-bявляется блочным специальным файлом;
-cсимвольным специальным файлом;
-dкаталогом;
-fобычным файлом (не каталогом);
-gустановлен бит идентификатора группы;
-kвторой промежуточный бит округления;
-rдоступен для чтения;
-sимеет ненулевой размер;
-t[fds]

открытый файл с дескриптором fsd связан с терминалом (по умолчанию fsd=1);

-uустановлен бит идентификатора пользователя;
-wдоступен для записи;
-xдля исполнения.
cat [файл1 файл2 ...]Слияние файлов (если указано одно имя команда выводит содержимое на терминал, эквивалентно команде page)

Копирование файлов (файла в файл или файлов в каталог)

cp файл1 файл2 или cp файл1 файл2 .... файлN каталог.
uucpделает то же, что и cp, но между двумя UNIX машинами в сети.

uucp [флаги] файл1 имя_ЭВМ!файл2

имя ЭВМ отделяется от имени файла с помощью "!". Перед именем файл2 необходимо указать также имя каталога или поставить "~", если оно неизвестно.
Например:/usr/ivanov/news или ~ivanov/news.

Флаги:
-mпосылает сообщение отправителю о доставке файла1;
-nпосылает аналогичное сообщение получателю.

Переименование файлов или каталогов

mv файл1 файл2 или mv каталог1 каталог2

Печать файлов

Печать содержимого одного или нескольких файлов c автоматическим разбиением на страницы и с заголовком на каждой странице;

pr [флаги]...[файл]...

Флаги:
-hзадает заголовок;
-lnзадает длину страницы в n строк (по умолчанию - 60);
-mПечатать все файлы одновременно в своих колонках;
-nв n колонок;
+nначиная со страницы n;
-tне печатать 5 строк заголовка и 5 последних строк страницы;
-wnзадает ширину стр. в n символов (по умолчанию - 72);

 
more [файл]Отображает файл поэкранно.

Печать файлов одновременно с выполнением других операций

lpr [флаги]...[файл]...

Флаги:
-ccкопировать файл перед печатью;
-mотправить почтовое сообщение по завершении печати;
-nне сообщать по почте о завершении печати (по умолчанию);
-rудалить файл после печати.

lp [флаги] [файл_1, файл_2,....файл_N]

Флаги:
-dзадает имя принтера;
-oслужит для задания субпараметров печати;
-n[число]задает число копий печати;
-mвыводит на терминал сообщение по завершении печати;
-q[приоритет]определяет уровень приоритета для запросов печати (максимальный - 0, минимальный -39);
-sблокирует сообщение "request идентификатор";
-Rудаляет напечатанные файлы;
-Lиспользует подключенный к вашему терминалу локальный принтер;
lprintэквивалент команды pr -L;
lpstatвыдает сообщение о статусе принтера;
cancelотменяет запрос вывода на печать.

Сравнение файлов

Сравнение файлов и выдача отчета о различиях;

cmp [-l][-s] файл1 файл2

Флаги:
-lвыдача полного списка различий;
-sвыдача кода результата; (если равны - 0; неравны - 1; хотя бы один недоступен - 2);

Удаление файлов

rm [флаги] файл

Флаги:
-fесли для файла запрещена запись/чтение;
-iудаление в интерактивном режиме; ( * означает - все файлы каталога);
-r* удаление всех файлов и подкаталогов;

Поиск файлов

find каталог ... аргументы ...

Просматриваются рекурсивно все подкаталоги для каждого указанного каталога и ищутся файлы отвечающие условиям, заданным в аргументах. Числовые аргументы со знаком "+" означают "больше чем", а числовой аргумент со знаком "-" "меньше чем". Аргументы - это условия поиска; любому аргументу предшествует знак "-", все аргументы считаются соединенными знаком "И". -o соединитель ИЛИ, перед каждым символом "ИЛИ" должен ставиться знак "\";

Допускаются аргументы:
-name имя файлаимя файла совпадает с заданным;
-type cтип файла совпадает с с;
-links nфайл имеет n связей;
-user имяфайл принадлежит пользователю с данным именем;
-group имяфайл принадлежит группе с именем;
-size nдлина файла равна n блокам;
-inum nиндекс файла равен n;
-mtime nпоследняя модификация файла была n дней назад;
-exec командавыполняется команда UNIX;
-ok командато же, что и -exec, но печатается на терминале;
-printпечатается имя текущего файла;
-newer файлтекущий файл был модифицирован позже заданного

Очистка индексного дескриптора

clri файл-система индекс...

Удаляет индексный дескриптор для файла, отсутствующего в каталогах.

Библиотекарь

ar флаги [имя] библиотека [файл...]

Флаги:
aуказывает (совместно с r или m) на то, что файлы следует помещать после заданного файла;
bто же, что и a, но файлы размещаются перед заданным файлом;
cсоздание библиотечного файла;
dудалить файлы из библиотеки;
lпоместить временные файлы библиотекаря в текущем каталоге;
mпереместить файлы в конец библиотеки или вслед за указанным файлом;
pнапечатать содержимое заданных файлов;
qдобавить файлы в конец библиотеки;
rзаменить файлы в библиотеке на новые. Если файлов нет, они просто добавляются;
tперечислить файлы, входящие в библиотеку;
uсовместно с r указывает, что будет заменяться только те файлы библиотеки, которые были модифицированы раньше заданных файлов.
vпечать дополнительной информации (вид действия, имя файла) применяется совместно с d, m, r, x;
xскопировать файлы в текущий каталог;

Построение таблицы с содержанием библиотеки

ranlib [библиотека]

Служит для подготовки работы редактора связей.
Установка кода защиты файлаchmod код

chmod код_защиты файл ...

4000 разрешение смены идентификатора пользователя;
2000 разрешение смены идентификатора группы;
1000 сохранение образа файла после отсоединения всех процессов;
0400 разрешение чтения владельцу файла;
0200 разрешение записи владельцу файла;
0100 разрешение записи, чтения и выполнения владельцу;
0070 разрешение записи, чтения и выполнения группе;
0007 разрешение чтения, записи, исполнения всем.

Символьная форма позволяет установить биты кода защиты индивидуально и имеет вид:

[ugoa][+-=][rwxstugo], где
uвладелец,
gгруппа,
oпрочие,
aвсе категории пользователей (по умолчанию),
+разрешить доступ,
-запретить доступ,
rчтение,
wзапись,
xисполнение,
sсмена идентификатора пользователя или группы,
tсохранение образа файла в области выгрузки,
ugoоставить текущее значение бита доступа.

Проверка корректности каталогов

dcheck [индексы][файловая система]

Сравнивает счетчик числа связей в индексном дескрипторе с числом записей в каталогах, ссылающихся на данный дескриптор. Индексы генерируются командой icheck. Проверка распределения памяти в файловой системе

icheck [-s][-b блок...][файловая система]

Исследуется файловая система, проверяется правильность списков свободных и используемых блоков, выводит общее число файлов, каталогов, число используемых блоков, число свободных блоков и т.д.

Флаги:

-b выдача диагностических сообщений для заданных

блоков.

-s создание списка свободных блоков;

Генерация имен файлов по заданным индексам

nchek [-i индексы] [-a][-s][файловая система]

Генерирует полные имена файлов для заданного списка индексов файловой системы, осуществляет поиск имен поврежденных файлов.

Флаги:
-aпечатает тот же список, что и для флага -i и дополнительно все файлы, имена которых начинаются с "." и "..".
-iпечатает полный список файлов для индексов, перечисленных после данного флага.
-sпечатаются только специальные файлы и файлы с установленным режимом смены идентификатора пользователя.

Создание файловой системы

/etc/mkfs [файловая система][размер]

Создает новую файловую систему на диске или части диска согласно числу блоков, заданному аргументом размер. Такая система может быть присоединена к основной файловой системе с помощью команды mount.

Создание специальных файлов

/etc/mknod имя [c][b] тип устройство

Создание специальных файлов, располагающихся в каталоге /dev, где описываются характеристики драйверов устройств и файловых систем. Аргументы тип и устройство относятся к драйверу и к специальному входу в драйвер.

Монтирование файловой системы

/etc/mount файловая-система [-r] имя файла

Демонтирование файловой системы

/etc/umount файловая-система

Временная смена идентификатора пользователя

su [идентификатор]

Изменяет идентификатор пользователя, и выполняет операции, которые возможно было бы нельзя выполнить с другим идентификатором из-за отсутствия права доступа. Для возврата к исходной среде следует нажать ctrl-d.

Модификация суперблока - sync

Освобождаются буферы и модифицируется файловая система на диске. Sync автоматически выполняется через заданный промежуток времени, задаваемый администратором.

Библиотекарь магнитной ленты (или дискеты)

tar [флаги][имя]

Сохраняет и восстанавливает файлы и каталоги с использованием магнитной ленты (или дискет).

Флаги:
cсоздает новую ленту для записи на нее файлов;
rзаданные файлы записываются в конец ленты;
tпечатает список файлов и каталогов, имеющихся на ленте, из числа заданных в команде;
xчтение с ленты заданных файлов или каталогов, если имеется несколько версий, читается последняя;
uзаданные файлы добавляются на ленту, если их там нет или если это новые версии. Следующие флаги используются для модификации вышеприведенных функций.
bкоэффициент блокирования при чтении и записи, по умолчанию = 1, максимальное значение = 20;
fследующий за f аргумент рассматривается как имя устройства вместо принятого по умолчанию /dev/mt?.
lобеспечивает выдачу сообщения, если при записи не удается получить доступ ко всем файлам;
mсообщает программе tar, что не следует изменять время модификации при записи файлов на ленту;
vпечать имен всех файлов и каталогов, при выполнении данной операции;
wпечатает наименование заданного действия и имя файла, после чего ожидается ответ пользователя. При "y" действие выполняется.
0,...,7определяет номер устройства, на котором установлена лента, по умолчанию 1.

Смена владельца файла chown

chown имя файл

Смена группы chgrp

chgrp группа файл

Изменение направления ввода/вывода
< >задает направление ввода/вывода;
<< >>задает направление, но добавляет к уже имеющемуся;
|служит для передачи данных от одной команды к другой.

tr [-cds][строка_1][строка_1]

Считывает данные из стандартного ввода. Символы, не совпадающие с символом в аргументе "строка_1", передается на стандартный вывод без изменения. Символы же, совпадающие с символом в аргументе "строка_1", заменяются на соответствующие символы из аргумента "строка_2".

Асинхронное выполнение команд
&поставленное в конце командной строки позволяет продолжить работу, не дожидаясь окончания выполнения команды.

wait вводится, когда нужно подождать завершения какого-то процесса.

Появление приглашения после ввода команды wait указывает на завершение всех запущенных ранее процессов.

at время [дата_и_время][приращение] список_команд

Команда планирования выполнения заданий.

Позволяет выполнить команду в указанный день и час, которые могут модифицироваться необязательным приращением.

at -r идентификатор_задания

Отменяет запрос.

batch планирует задания на то время, когда это будет позволять система.

Системные команды

mail имя файла или mail [-r] [-q] [-p] [-f файл]

Обращение к почтовому серверу.

Флаги:
-fфайл используется в качестве почтового ящика;
-pпечать почты;
-qQUIT (прерывание процедуры);
-rупорядочение - раньше посланное сообщение читается раньше; без флага - обратный порядок.

При чтении почты можно пользоваться командами:
dудаление данного почтового сообщения;
m [имя]переслать сообщение указанному пользователю;
pнапечатать сообщение еще раз и вернуться к предшествующему сообщению;
_вернуться к предыдущему сообщению;
s [файл]записать сообщение в файл;
ctrl/dвернуть сообщение в почтовый ящик и завершить выполнение команды mail (= q).
xвыход без изменения почтового ящика;
!временный выход в SHELL;
?напечатать список команд mail.

Сообщение всем работающим пользователям

wall администратор что-то сообщает всем.

Конец сообщения по ctrl/d.

Посылка сообщения другому пользователю

write имя [терминал]

Разрешение или отмена сообщений

mesg [y] [n] (флаги - "y" и "n") присылаемых другими пользователями.

Команды обработки файлов
comm [-[123]] файл1 файл2поиск одинаковых и разных строк в файлах, флаги "123" обозначают номера колонок. Результат печатается в трех колонках:

1 - строки встречаются только в файле1;
2 - строки встречаются только в файле2;
3 - строки встречаются в обоих файлах.

Преобразование файла
dd [аргументы]позволяет задавать входной и выходной файлы, указывать виды преобразований. Обычно используется для магнитных лент.

Аргументы:
if=имяимя входного файла;
of=имяимя выходного файла;
ibs=nразмер входного блока в байтах (512 по умолчанию);
obs=nразмер выходного блока (512 по умолчанию);
bs=nразмер входного и выходного блоков;
cbs=nразмер буфера преобразования в байтах;
skip=nперед копированием пропустить n входных записей;
files=nскопировать n файлов с входной ленты;
seek=n

установить выходной файл на запись с номером n перед началом копирования;

count=nскопировать n входных записей.

Поиск строк с заданным шаблоном

grep [флаг] ... выражение [файл]

Служит для поиска соответствующих выражений (строк) в одном или нескольких файлах.

Флаги:
-bперед каждой обнаруженной строкой печатается номер блока, где она содержится;
-cпечатается только число строк, содержащих шаблон;
-eиспользуется перед шаблоном, который начинается с символа "-";
-hне печатаются имена файлов перед строками;
-lпечатаются имена файлов, содержащие искомые строки;
-nперед каждой обнаруженной строкой печатается ее порядковый номер в файле;
-sвырабатывается только статус результата выполнения команды;
-vпечатаются все строки, не содержащие шаблона;
-yстрочные буквы в шаблоне считаются совпадающими как со строчными, так и прописными в файле.
egrepмодифицированная версия grep.
fgrepупрощенная версия команды grep. Ищет только фиксированные строки, но работает быстрее чем grep.

Восьмеричный дамп файла

od[-флаги] файл[[+] смещение [.][b]].

Флаги:
-bкаждый байт файла интерпретируется как восьмеричное число;
-cбайты интерпретируются как символы ASCII, неграфические символы выдаются в виде:
 нулевой байт\0
 возврат на шаг\b
 перевод формата\f
 перевод строки\n
 возврат каретки\r
 горизонтальный TAB\t
 остальные ddd
-dкаждое слово интерпретируется как десятичное число;
-oслова интерпретируются как восьмеричные числа;
-xслова интерпретируются как шестнадцатеричные числа.

Сохранение (зашита) файловой системы

dump [флаги[аргумент...] файловая система]

Используется администратором для обеспечения сохранности всех данных в файловой системе.

Флаги:
dзадание плотности записи на ленту.
fзадает устройство для защиты;
sзадание размера ленты;
uзапись времени защиты;
0-9уровень защиты;

Восстановление файловой системы

restor флаги [аргументы]

Чтение магнитных лент, записанных командой dump.

Разбиение файла на части

split [-n][файл[имя]]

разбивает файл на части по n строк (по умолчанию n=1000).

Если задано имя выходного файла, то генерируется последовательность файлов с данным именем и буквами aa, ab, ac,... в конце. Если имя выходного файла не задано, используется имя "x".

Подсчет числа слов

wc[-lwc] [файл]

Определяет число строк, слов и символов в одном или более файлов. Строки в файле разделяются символом "\n", слова - пробелами, горизонтальной табуляцией или переводом строки.

Флаги:
lподсчет числа строк в файле;
wподсчет числа слов в файле;
cподсчет числа символов в файле;

Вывод одинаковых строк файла

uniq [-флаги[+n][-n]][вход][выход]

Находит одинаковые соседние строки файла. По умолчанию все одинаковые строки кроме одной удаляются.

Флаги:
cодинаковые строки удаляются, но в начале строки ставится их исходное число;
dвыводятся только одинаковые строки;
-nпервые n полей при сравнении пропускаются;
+nперед сравнением пропускаются первые n символов;
uвыводятся только разные строки.

Обнаружение различий в файлах

diff[-флаги]файл1 файл2

Определяются изменения, которые должны быть произведены в файлах, чтобы сделать их идентичными.

Позволяет экономить место при хранении ряда версий файла.

Флаги:
-bигнорируются все пробелы и символы табуляции в конце строки, любые комбинации таких символов считаются эквивалентными;
-eвыдает последовательность команд редактора ed, с помощью которых первый файл может быть сделан эквивалентным второму.
-fвырабатывает список изменений;
-hбыстро обнаруживает различия, но не всегда корректно.

Сортировка и слияние файлов

sort[-флаги...][+поз1[-поз2]]...[-o имя][-T каталог][имя]...

соединяет и сортирует файлы, помещает результат в заданный файл. Если ключ сортировки не задан, при сравнении используется вся строка.

Флаги:
bпри сравнении полей игнорируются пробелы и табуляции в начале строки;
cпроверяется, отсортирован ли входной файл в соответствии с заданными правилами;
d"словарная сортировка": в сравнении участвуют только буквы, цифры и пробелы;
fпрописные буквы воспринимаются как строчные;
iпри нечисловых сравнениях игнорируются символы, не входящие в диапазон ASCII 040-0176;
mслияние файлов, которые предполагаются отсортированными;
nсортировка по арифметическому значению;
oимя, идущее после воспринимается как имя выходного файла;
rзадается обратный порядок сортировки;
txбуква t указывает на то, что вместо принятого по умолчанию пробела в качестве разделителя используется горизонтальная табуляция;
Tзадает имя каталога, где размещаются временные файлы;
uесли одному ключу соответствует несколько строк, выводится только одна из них.

Управление выполнением программы

Вывод аргументов

echo[-n][аргумент]

Выводит в стандартный файл заданные ей аргументы, разделяя их пробелами и завершая вывод переводом строки. Служит для сообщения о выполнении последовательности команд. Флаг -n предоставляет возможность отменить перевод строки после вывода аргументов.

Уничтожение процесса

kill [-флаг] процесс...

единственный флаг, допустимый в команде kill, - номер сигнала, например флаг -9 безусловно ликвидирует процесс.

Задержка выполнения команды

sleep время

Задерживает выполнение команды на время, заданное в секундах.

Понижение приоритета команды

nice [-число]команда[аргументы]

Позволяет выполнить другую команду, с более низким приоритетом. Аргумент-число определяет степень понижения приоритета. Чем больше число, тем меньше приоритет.

Дублирование стандартного вывода

tee [флаг]...[флаг]...

команда читает информацию из стандартного ввода и выводит ее одновременно на терминал и в заданные файлы.

Флаги:
-iигнорировать прерывания;
-aвывод будет добавлен к файлу, вместо принятого по умолчанию создания нового файла.

Печать и установка времени

date [ггммддччмм][.сс]]
гггод
мммесяц
дддень
чччас
ммминуты
сссекунды

Кто работает в системе?

who [файл] [am I]

выдает список всех пользователей, работающих в данный момент, и имена их терминалов. [файл] - имя файла, где хранится информация о текущих пользователях. По умолчанию /etc/utmp. [am I] - дает возможность сообщить под каким именем вы вошли в систему.

Получение имени терминала

tty печатает имя терминала, за которым вы работаете.

Состояние процессов

ps [флаг...][файл]

предоставляет информацию об активных процессах в системе.

Флаги:
aвыдается информация обо всех процессах, управляемых терминалами.
xвыдается информация обо всех процессах, не управляемых терминалами (системных).
lвыдается полная информация с указанием состояния каждого процесса.
PIDидентификатор процесса;
TTYномер терминала;
CMDкоманда, выполняемая процессом.
UIDидентификатор пользователя;
PPIDидентификатор процесса, породившего данный процесс;
CPUсистемная составляющая приоритета процесса;
PRIприоритет процесса, чем больше, тем ниже;
NICEпользовательская составляющая приоритета процесса;
ADDRдля резидентного процесса адрес в памяти, в противном случае на диске;
SZразмер образа процесса в блоках;
WCHANсобытие, которого ожидает процесс с состоянием S или W; пустое поле означает, что процесс работает.

pstatсообщает о статусе системы.

Сведения об использовании диска

du[-s][-a][имя...]

Флаги:

-sвыводит только общее количество блоков для всех файлов.
-aпечатает информацию для каждого файла.

Сведения о свободных блоках на диске

df [файловая система]

выводит количество блоков, доступных в заданной файловой системе.
Определение типа файла
file имя...
Определяется тип файла: .OBJ, .C, ASCII и т.д.

Печать календаря

cal [месяц]год

Установка функций терминала

stty [аргументы...]

позволяет узнать состояние любого терминала и настроить его на требуемый режим работы.

Аргументы:
evenвключить контроль по четности;
-evenвыключить контроль по четности;
oddвключить контроль на нечетность;
rawвключить прозрачный режим ввода;
nlконцом строки считать символ "перевода строки";
-nlконцом строки считать символ "возврат каретки";
echoотображать на экране каждый вводимый символ;
-echoне отображать вводимые символы;
lcaseпреобразовывать прописные символы в строчные;
tabsзаменить символы табуляции на пробелы при выводе;
eraseустановит следующий за erase символ в качестве символа стирания;
killустановит следующий за kill символ в качестве символа отмены;

Установка табуляции

tabs [аргументы]

Устанавливает параметры табуляции для любого терминала.

Аргументы:
-nиспользуется, когда левое поле текста не выравнивается;
терминалописывает тип рабочего терминала.

uncompressразархивирует файлы, имеющие расширение .Z;
uncompress имя_файлаработает для файлов без расширения .Z.
uuencode файл указатель

используется для передачи двоичных (иногда и русских) файлов по электронной почте. Преобразует двоичный файл в ASCII-формат. Параметр указатель используется при декодировании и служит для указания маршрута и имени файла для команды uudecode. Результат кодировки можно положить в другой файл или непосредственно переслать по электронной почте.

uudecode файл

используется для передачи двоичных (иногда и русских) файлов по электронной почте. Преобразует двоичный файл в ASCII-формат. Параметр указатель используется при декодировании и служит для указания маршрута и имени файла для команды uudecode. Результат кодировки можно положить в другой файл или непосредственно переслать по электронной почте.

nslookupвыводит IP-информацию о домене;
cryptкодирует файл по заданному пользователем ключу
uunameвыводит список узлов, известных данному узлу;
uuxвыполняет команды на удаленной машине UNIX.

Назад: 10.17. Разводка разъемов
Оглавление: Телекоммуникационные технологии
Вперёд: 10.18.1. Сервер Apache и сетевая безопасность в Red Hat

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...