А.П. Строляров, И.Г. Головин, И.А. Волкова - Операционная система Unix (1114677), страница 3
Текст из файла (страница 3)
Чтобы запустить редактор joe, доста13Ctrl-K DCtrl-K XCtrl-CCtrl-YCtrl-K BCtrl-K KCtrl-K CCtrl-K MCtrl-K YCtrl-K LCtrl-Shift-’-’Ctrl-^Ctrl-K FCtrl-Lсохранить файлсохранить и выйтивыйти без сохраненияудалить текущую строкуотметить начало блокаотметить конец блокаскопировать выделенный блок в новое местопереместить выделенный блок в новое местоудалить выделенный фрагментнайти строку по номеруотменить последнее действие (undo)снова выполнить отмененное действие (redo)поиск ключевого словаповторный поискТаблица 4: Наиболее употребительные команды редактора joeточно дать команду joe myfile.c. Если файла myfile.c не существует,он будет создан при первом сохранении изменений.В отличие от редактора vim, интерфейс редактора joe покажетсяболее похожим на привычные для большинства пользователей экранные редакторы текстов.
Стрелочные клавиши, Enter, Backspace и т.п.работают в своей обычной роли, в большинстве случаев также доступна клавиша Delete. Команды редактору даются с помощью комбинацийклавиш, большинство из которых начинается с Ctrl-K. В частности,Ctrl-K h покажет в верхней части экрана памятку по наиболее употребительным командам редактора (см. таблицу 4).2.3.3Встроенный редактор оболочки Midnight CommanderОболочка (файловый монитор) Midnight Commander представляетсобой клон некогда популярного файлового менеджера под MSDOS,известного как Norton Commander.
Запуск оболочки производится командой mc. Вызов встроенного редактора текстов для редактированиявыбранного файла производится клавишей F4; если вы хотите создатьновый файл, используйте комбинацию Shift-F4.Интерфейс этого редактора достаточно понятен на интуитивномуровне, поэтому подробное описание мы опускаем. Ограничимся однойрекомендацией. Если не предпринять специальных мер, редактор будет вставлять в текст символ табуляции вместо групп из восьми про14белов, что может оказаться неудобным при использовании других редакторов. Единственный способ отключить такой стиль заполнения –установить опцию «Fill tabs with spaces». Чтобы добраться до диалогас настройками, нажмите F9, выберите пункт меню «Options», в нём –пункт «General».Чтобы настройки не потерялись при выходе из Midnight Commander,сохраните их. Для этого, выйдя из редактора, нажмите F9, выберитепункт меню «Options», а в нём - пункт «Save Setup».2.4Права доступа к файламС каждым файлом в ОС Unix связано 12-битное слово, называемое«правами доступа» к файлу2 .Младшие 9 бит этого слова объединены в три группы по три бита; каждая группа задаёт права доступа для владельца файла, для егогруппы и для всех остальных пользователей.
Три бита в каждой группеотвечают за право чтения файла, право записи в файл и право исполнения файла.Чтобы узнать права доступа к тому или иному файлу, можно воспользоваться командой ls -l, например:$ ls -l /bin/cat-rwxr-xr-x 1 rootroot14232Feb 4 2003 /bin/catРасположенная в начале строки группа символов -rwxr-xr-x показывает тип файла (первый символ; минус означает, что мы имеем делос обыкновенным файлом, буква d означала бы каталог и т.п.) и правадоступа, соответственно, для владельца (в данном случае rwx, т.е.
чтение, запись и исполнение), группы и всех остальных (в данном случаеr-x, т.е. права на запись отсутствуют). Таким образом, файл /bin/catдоступен любому пользователю на чтение и исполнение, но модифицировать его может только пользователь root (т.е. администратор).Поскольку группа из трёх бит соответствует ровно одной цифревосьмеричной системы счисления, общепринятой является практика записи слова прав доступа к файлу в виде восьмеричного числа, обычнотрёхзначного.
При этом младший разряд (последняя цифра) соответствует правам для всех пользователей, средняя - правам для группы истаршая (обычно она идёт самой первой) цифра обозначает права длявладельца. Права на чтение соответствуют 1, права на запись - 2, правана чтение - 4; соответствующие значения суммируются, т.е., например,2Ванглийском оригинале - permissions15права на чтение и запись обозначаются цифрой 6 (4 + 2), а права начтение и исполнение - цифрой 5 (4 + 1).Таким образом, права доступа к файлу /bin/cat из нашего примераможно закодировать восьмеричным числом 07553 .Для каталогов интерпретация битов прав доступа несколько отличается.
Права на чтение каталога дают возможность просмотреть егосодержимое. Права на запись позволяют модифицировать каталог, т.е.создавать и уничтожать в нём файлы (причем удалить можно и чужой файл, а также такой, на который прав доступа нет, т.к. достаточноиметь права доступа на запись в сам каталог). Что касается бита прав«на исполнение», для каталога этот бит означает возможность какимлибо образом использовать содержимое каталога, в том числе, например, открывать файлы, находящиеся в каталоге. Таким образом, еслина каталог установлены права чтения, но нет прав исполнения, мы можем его просмотреть, но воспользоваться увиденным нам не удастся.Напротив, если есть права исполнения, но нет прав чтения, мы можемоткрыть файл из этого каталога только в том случае, если точно знаемимя файла.
Узнать имя мы никак не можем, т.к. возможности просмотреть каталог у нас нет.Оставшиеся три (старших) разряда слова прав доступа называютсяSetUid Bit (04000), SetGid Bit (02000) и Sticky Bit (01000).Если для исполняемого файла установить SetUid Bit, этот файл будетпри исполнении иметь права своего владельца (чаще всего - пользователяroot) вне зависимости от того, кто из пользователей соответствующий файлзапустил. SetGid Bit работает похожим образом, устанавливая эффективнуюгруппу пользователя (в отличие от эффективного идентификатора пользователя).
Примером suid-программы является passwd.Sticky Bit, установленный на исполняемом файле, в некоторых версияхОС Unix обозначает, что сегмент кода программы следует оставить в памятидаже после того, как программа будет завершена; это позволяет экономитьвремя на загрузке в память программ, исполняемых чаще других.Для каталогов SetGid Bit означает, что, какой бы пользователь ни создалв этом каталоге файл, в качестве «группы владельца» для этого файла будетустановлена та же группа, что и у самого каталога.
Sticky Bit означает, что,даже если пользователь имеет право на запись в данный каталог, удалить онсможет только свои (принадлежащие ему) файлы.Для изменения прав доступа к файлам используется командаchmod4 . Эта команда позволяет задать новые права доступа в виде вось3 Обратите внимание, что число записано с нулём впереди; согласно правиламязыка C это означает, что число записано в восьмеричной системе4 сокращение слов Change Mode16меричного числа, например:chmod 644 myfile.cустанавливает для файла myfile.c права записи только для владельца,а права чтения - для всех.Права доступа также можно задать в виде мнемонической строкивида [ugoa][+-=][rwxsXtugo] Буквы u, g, o и a в начале означают, соответственно, владельца (user), группу (group), всех остальных (others)и всех сразу (all).
+ означает добавление новых прав, - – снятие старыхправ, = – установку указанных прав и снятие всех остальных. Послезнака буквы 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 выдаёт все сообщения об ошибках и предупреждения в стандартный поток ошибок.