А.В. Столяров, И.Г. Головин, И.А. Волкова - Операционная система Unix (1115132), страница 4
Текст из файла (страница 4)
+ означает добавление новых прав, - – снятие старыхправ, = – установку указанных прав и снятие всех остальных. Послезнака буквы r, w, x означают, как можно догадаться, права на чтение, запись и исполнение, буква s – установку/снятие Set-битов (имеетсмысл для владельца и группы), t обозначает Sticky Bit. Буква X (заглавная) означает установку/снятие бита исполнения только для каталогов, а также для тех файлов, на которые хотя бы у кого-нибудь естьправа исполнения.Если команду chmod использовать с ключом -R, она проведёт сменуправ доступа ко всем файлам во всех поддиректориях заданной директории.Например, команда chmod a+x myscript сделает файл myscript исполняемым; команда chmod go-rwx * снимет со всех файлов в текущемкаталоге все права, кроме прав владельца.
Очень полезной может оказаться командаchmod -R u+rwX,go=rX ~на случай, если вы случайно испортите права доступа в своей домашнейдиректории; эта команда, скорее всего, приведёт всё в удовлетворительное состояние.2.5Перенаправления ввода-вывода в интерпретаторе Bourne ShellКак известно, практически все программы в ОС Unix следуют соглашению, по которому поток ввода-вывода с дескриптором 0 объявляется потоком стандартного ввода, поток с дескриптором 1 — потокомстандартного вывода и поток с дескриптором 2 — потоком для выводасообщений об ошибках.Осуществляя обмен данными через стандартные потоки, большинство программ не делает предположений о том, с чем на самом делесвязан тот или иной поток. Это позволяет использовать одни и те же17запустить программу cmd1, направив её вывод в файл file1.
Если файл существует,он будет перезаписан с нуля, если не существует – будет создан.>> file1запустить программу cmd1, дописав её вывод в конец файла file1. Если файла несуществует, он будет создан.< file2запустить программу cmd2, подав ей содержимое файла file2 в качестве стандартного ввода. Если файла не существует, произойдёт ошибка.> file1 < file2 запустить программу cmd3, перенаправивкак ввод, так и вывод.| cmd2запустить одновременно программы cmd1 иcmd2, подав данные со стандартного вывода первой на стандартный ввод второй.2> errfileнаправить поток сообщений об ошибках вфайл errfile.2>&1 | cmd6объединить потоки стандартного вывода ивывода ошибок программы cmd5 и направить всё на стандартный ввод программеcmd6cmd1 > file1cmd1cmd2cmd3cmd1cmd4cmd5Таблица 5: Примеры перенаправлений ввода-выводапрограммы как для работы с терминалом, так и для чтения из файлаи/или записи в файл.Командные интерпретаторы, в том числе классический Bourne Shell,предоставляют возможности для управления вводом-выводом запускаемых программ.
Для этого используются символы <, >, >>, >& и | (см.таблицу 5).Обычно в ОС Unix присутствует программа less, позволяющая постранично просматривать содержимое файлов, пользуясь клавишами"Стрелка вверх", "Стрелка вниз", PgUp, PgDn и др. для прокрутки.Эта же программа позволяет постранично просматривать текст, поданный ей на стандартный ввод. Использование программы less полезно вслучае, если информация, выдаваемая какой-либо из запускаемых вамипрограмм, не умещается на экран.
Например, командаls -lR | less18позволит вам просмотреть список всех файлов, находящихся в текущейдиректории и всех её поддиректориях.Учтите, что компилятор gcc выдаёт все сообщения об ошибках и предупреждения в стандартный поток ошибок. Поэтому, чтобы просмотреть постранично сообщения, выдаваемые в ходе компиляции, следуетдать, например, такую команду:gcc -Wall -g myprog.c -o myprog 2>&1 | less2.6ПроцессыСписок процессов, выполняющихся в настоящий момент, можно получить командой ps:$ psPID TTY2199 pts/52241 pts/5TIME CMD00:00:00 bash00:00:00 psКак видно, команда по умолчанию выдаёт только список процессов,запущенных в данном конкретном сеансе работы.К сожалению, опции команды ps очень сильно отличаются в зависимости от версии (в частности, для FreeBSD и Linux).
За подробнойинформацией следует обращаться к документации по данной конкретной ОС; здесь мы ограничимся замечанием, что команда ps ax выдастсписок всех существующих процессов, а команда ps axu дополнительновыдаст информацию о владельцах процессов5 .В некоторых случаях может оказаться полезной программа top, работающая интерактивно. Она выдаёт на экран список наиболее активных процессов, обновляя его один раз в секунду. Чтобы выйти из программы top, необходимо ввести букву q.Снять процесс можно с помощью сигнала.
Обычно применяют сначала сигнал SIGTERM (15), а если после этого процесс не завершился –сигнал SIGKILL (9). Сигнал SIGTERM может быть перехвачен программой, например, с целью корректного завершения; сигнал SIGKILL уничтожает процесс безусловным образом, не оставляя возможности произведения каких-либо действий по подготовке к корректному завершению.5 Это верно для ОС Linux и FreeBSD. В других ОС, например в SunOS/Solaris,опции команды ps имеют совершенно иной смысл19Для передачи сигнала процессу используется команда kill.
Поумолчанию передаётся сигнал SIGTERM, т.е., например, командаkill 2763 приведёт к тому, что процесс 2763 получит сигнал SIGTERM.Задать другой сигнал можно либо по номеру, либо по названию (TERM,KILL и т.п.). Следующие две команды эквивалентны; обе передают процессу 2763 сигнал SIGKILL:kill -9 2763kill -KILL 27632.7Выполнение в фоновом режимеНекоторые программы выполняются ощутимое время, при этом нетребуя взаимодействия с пользователем через стандартные потоки ввода/вывода. Во время выполнения таких программ удобно иметь возможность продолжать давать команды командному интерпретатору,чтобы не тратить время.Допустим, нам потребовался список всех файлов в файловой системе.
Такой список можно получить с помощью команды ls -lR /.Естественно было бы перенаправить её вывод в файл, чтобы позднееиметь возможность его анализа. Заметим, что такая команда будет выполняться несколько минут и ждать её окончания нам бы не хотелось,поскольку эти несколько минут мы могли бы, например, использоватьдля набора текста в редакторе. Чтобы запустить команду в фоновомрежиме, к ней следует в конце приписать символ &, например:$ ls -lR / >list.txt 2>/dev/null &[1] 2437Здесь мы перенаправили поток вывода сообщений об ошибках в устройство /dev/null6 , чтобы сообщения о невозможности чтения некоторыхкаталогов не мешали нашей дальнейшей работе.В ответ на нашу команду система сообщает, что задание запущенов фоновом режиме в качестве фоновой задачи №1, причем номер запущенного процесса – 2437.
Текущий список выполняемых фоновых задачможно узнать командой jobs:$ jobs[1]+ Runningls -lR / >list.txt 2>/dev/null &6 Устройство /dev/null предназначено для поглощения потоков данных, которыенам не нужны; в него можно записывать что угодно, данные при этом попростуисчезают20По окончании выполнения задачи командный интерпретатор нам обэтом сообщит. В случае успешного завершения сообщение будет выглядеть так:[1]+Donels -lR / >list.txt 2>/dev/null &В случае, если программа завершилась с кодом, отличным от нуля, сообщение будет иметь другой вид:[1]+Exit 1ls -lR / >list.txt 2>/dev/null &Наконец, если фоновый процесс снять сигналом, сообщение будет примерно таким (для сигнала SIGTERM):[1]+Terminatedls -lR / >list.txt 2>/dev/null &При отправлении сигналов процессам, являющимся фоновыми задачами данного конкретного экземпляра командного интерпретатора,можно ссылаться на номера процессов по номерам фоновых задач,добавляя к номеру символ %.
Так, команда kill %2 отправит сигналSIGTERM второй фоновой задаче. Символ % без указания номера обозначает последнюю из фоновых задач.Если задача уже запущена не в фоновом режиме и нам не хочется ждать её завершения, мы можем сделать обычную задачу фоновой.Для этого следует нажать Ctrl-Z, в результате чего выполнение текущей задачи будет приостановлено. Затем с помощью команды bg7 приостановленную задачу можно снова поставить на выполнение, но уже вфоновом режиме.Также возможно сделать текущей (т.е. такой, окончания которойожидает командный интерпретатор) любую из фоновых и приостановленных задач.
Это делается с помощью команды fg8 .2.8Электронная документацияДистрибутивы ОС Unix обычно содержат большое количество документации, доступ к которой можно получить непосредственно в процессе работы. Большая часть такой документации оформлена в видефайлов, отображаемых с помощью традиционной команды man, либо спомощью более современной программы info.7 От8 Отанглийского background – фонанглийского foreground212.8.1Команда manКоманда man служит для поиска и отображения установленной всистеме справочной информации. Справочник охватывает команды ОСUnix, системные вызовы, библиотечные функции языка C (и другихустановленных в системе языков), форматы файлов, некоторые общиепонятия и т.д.К примеру, если вы хотите узнать все опции команды ls, следуетдать команду$ man lsа если вы, допустим, забыли, в каком порядке идут аргументы системного вызова waitpid(), вам поможет$ man waitpidПрограмма man найдет соответствующий документ в системном справочнике и запустит программу его отображения.
Появившийся наэкране документ можно листать с помощью клавиш «стрелка вверх»и «стрелка вниз», можно использовать клавишу «пробел», чтобы пропустить сразу страницу текста. Выход из просмотра справочного документа осуществляется клавишей q (от слова quit).Если нужный вам справочный документ имеет большой объем, а вамнеобходимо найти в нем определенное место, может оказаться удобнымпоиск подстроки.
Это делается вводом символа /, после которого следует набрать строку для поиска и нажать Enter. Повторный поиск той жестроки осуществляется вводом / и нажатием Enter (то есть саму строку можно опустить). Чтобы выполнить поиск в обратном направлении,можно воспользоваться символом ? вместо /.В некоторых случаях системный справочник может содержать болееодного документа с данным именем. Так, в системе существует командаwrite и системный вызов write. Команда write вам вряд ли понадобится, так что, если вы набрали man write, скорее всего, вы имели ввиду системный вызов; к сожалению, система этого не знает и выдаствам совсем не тот документ, который вам нужен.Эту проблему можно решить указанием номера секции системногосправочника.
Так, в нашем примере команда$ man 2 writeвыдаст именно документ, посвященный системному вызову write, поскольку секция №2 содержит справочные документы по системным вызовам. Перечислим другие секции системного справочника:22• 1 – пользовательские команды ОС Unix (такие команды, как ls,rm, mv и т.п. описываются в этой секции)• 2 – системные вызовы ядра ОС Unix• 3 – библиотечные функции языка C (к этой секции можно обратиться, например, за информацией о функции sprintf)• 4 – описания файлов устройств• 5 – описания форматов системных конфигурационных файлов• 6 – игровые программы• 7 – общие понятия (например, man 7 ip выдаст полезную информацию о программированием с использованием TCP/IP)• 8 – команды системного администрирования ОС Unix (например,в этой секции вы найдете описание команды mount, предназначенной для монтирования файловых систем).Система может содержать и другие секции, причем не обязательно обозначающиеся цифрой; так, при установке в системе интерпретатораязыка Tcl его справочные страницы обычно оформляются в отдельнуюсекцию, которая может называться “n”, “3n” и т.п.2.8.2Команда infoЕсли команда man служит для отображения отдельных документов,то команда info позволяет осуществлять просмотр целых наборов страниц, связанных между собой гиперссылками; иначе говоря, документыв формате info представляют собой гипертекст, а сама команда – браузер (просмотрщик) гипертекста, работающий в текстовом режиме.Система info часто содержит более подробную информацию о томже предмете, чем man.