Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы / Куликова Н.В., Петровская Е.Н. (ч.1,2)

.pdf
Скачиваний:
57
Добавлен:
11.06.2015
Размер:
2.62 Mб
Скачать

Управление доступом к файлу: chmod

Команда вызывается так:

chmod <режим доступа> имя-файла

Пример: режим доступа – восьмиричное число, по цифре на режим доступа для владельца, группы и остальных (1 – 'x', 2 –

'w', 4 – 'r', цифры складываются):

 

 

bobby:~% ls -l

file

lab5

756

-rw-r--r--

1

ivanov

Feb 14 20:17 file

775 file

 

 

bobby:~% chmod

 

 

bobby:~% ls -l

file

lab5

756

-rwxrwxr-x

1

ivanov

Feb 14 20:17 file

Здесь устанавливается разрешение на чтение, запись и выполнение (4+2+1=7) для владельца и группы, и только чтение и исполнение (4+1=5) – для всех остальных.

Можно также указывать режим доступа в символьном виде, например, u=rw,g=r,o=. Подробнее про символьное указание режима доступа можно почитатьна man-странице команды chmod.

Символьные линки: ln -s

Символьный линк – это специальный вид файла, который не является собственно файлом, а есть ссылка на другой файл. Неким бледным подобием символьных линков являются «ярлыки»

(файлы .lnk) в Windows95/NT.

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

Символьные линки могут указывать как на файлы, так и на директории, и даже на другие символьные линки (возможна цепочка типа symlink1->symlink2->symlink3->real_file).

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

(symlink->/etc/termcap), так и относительными (symlink- >../../etc/termcap), в этом случае файл, на который ссылается

121

линк, ищется не относительно текущей директории, а относительно директории, в которой расположен линк.

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

Символьный линк может ссылаться как на существующий файл, так и на несуществующий, в этом случае он является «висячим линком». Можно даже сделать символьный линк, ссылающийся «сам на себя» (link->link).

Для создания символьного линка используется команда «ln» с ключом «-s», при этом указывается что слинковать и куда – порядок параметров такой же, что в командах cp и mv. При просмотре листинга директории в «детальном» формате, кроме имени самого линка, показывается также, куда он указывает, а самым первым символом (тип файла) ставится «l».

bobby:/tmp/ex1% ls -l

 

 

total 1

1 ivanov

lab5

756 Feb 14

-rw-r--r--

20:43 file.txt

 

 

 

bobby:/tmp/ex1% ln -s file.txt locallink bobby:/tmp/ex1% ln -s /etc/fstab abslink bobby:/tmp/ex1% ln -s ../../etc/termcap rel-

link

 

 

 

 

 

 

bobby:/tmp/ex1% ls -l

 

 

 

 

total 1

1

ivanov

lab5

10

Feb

14

lrwxrwxrwx

20:45 abslink -> /etc/fstab

lab5

756

Feb

14

-rw-r--r--

1

ivanov

20:43 file.txt

1

ivanov

lab5

8

Feb

14

lrwxrwxrwx

20:44 locallink -> file.txt

lab5

17

Feb

14

lrwxrwxrwx

1

ivanov

20:45 rellink -> ../../etc/termcap

 

 

 

Возможности, упрощающие работу с командной строкой

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

122

<Tab> может «дописать» имя файла или команды.

Если набрать часть имени файла или команды и нажать <Tab>, то остальная часть имени «допишется» автоматически, если начало однозначно определяет имя.

Быстрое копирование текста. Отметив фрагмент текста в консоли или в окне X, можно вставить его, набрав с клавиатуры или нажав среднюю кнопку мыши (если мышь двухкнопочная – две одновременно в X, или правую кнопку в консоли).

Текст, «уехавший» за верх экрана, еще не исчезает.

Нажав <Shift>+<PgUp>, можно проскроллировать консоль или окно xterm в X .

Оболочки LINUX

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

1.BASH – оболочка, используемая по умолчанию (добавлено редактирование командной строки).

2.CSH (С) – широко известная оболочка, но в ней отсутствует редактирование командной строки.

3.SH – исходныйвариантоболочкиБорна, совместимаясBASH.

4.PDKSH – общедоступная оболочка Корна, сочетающая в себе лучшие черты оболочек Борна и С (редактирование командной строки и история команд).

5.TCSH – улучшенная версия оболочки С с поддержкой редактирования командной строки;

6.ASH – усеченная оболочка, используемая при дефиците памяти.

Чтобы знать, какая оболочка используется, необходимо выполнить команду

echo $SHELL.

Стандартный ввод и вывод

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

123

Стандартный ввод программы из файла (вместо ввода символов с клавиатуры):

cat < data – командаcat получаетвходныеданныеизфайлаdata. Перенаправление вывода в файл:

ls > listings – результаты команды ls направляются в файл listings

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

Печать файла из командной строки – команда lpr lpr имя_файла

Проверка состояния очереди печати – команда lpq (выводится информация о принтере, статус незавершенных заданий печати и индентификаторы заданий).

Отмена задания – команда lprm

lprm 213 (213 – идентификатор задания).

Выход из системы

Для завершения сессии надо набрать команду logout. После этогона экранедолжно появиться приглашение для входа всистему.

bobby:~% logout

Red Hat Linux release 5.2 (Apollo) Kernel 2.0.36 on an i586

bobby login: _

Хотя компьютеры под Unix (и Linux в том числе) обычно не выключают неделями и месяцами, иногда возникает потребность перезагрузить машину (например, под другую ОС). Самый простой способ сделать это – нажать <Alt>+<Ctrl>+<Del>. При этом Linux корректно завершит работу и перезагрузит ПК.

Если же надо выключить машину, то можно также нажать <Alt>+<Ctrl>+<Del>, дождаться перезагрузки, и после появления приглашения «LILO boot:» можно смело выключать питание (но до того, как начнется загрузка ОС!).

Литература

1.Фолькердинг П., Рейчард К., Фостер-Джонсон Э. Установка

иконфигурирование LINUX: учебный курс. – СПб: Питер, 1999.

2.Билл Болл, Хойт Даф и др. Red Hat Linux 8/9 : Настольная книга пользователя, Изд. DiaSoft, 2004.

124

РАЗДЕЛ 7. СКРИПТЫ В LINUX

Настройка оболочки

Оболочка предоставляет множество механизмов создания индивидуальных условий для работы. Оболочка это больше, чем интерпретатор команд. Оболочка является также языком программирования. Методика написания скриптов командной оболочки является большой темой.

При выполнении скриптов различные оболочки используют различные синтаксисы, например, оболочка TCSH использует синтаксис, похожий на язык программирования C, тогда как оболочка BOURNE SHELL использует синтаксис другого типа.

Скрипты будут исполняться оболочкой BOURNE SHELL.

Скрипты командной оболочки

При частом использовании некоторой последовательности команд можно сократить время ввода этих команд, сгруппировав их в одну команду. Например, для объединения файлов chapter1, chapter2 и chapter3 в файл с именем book, выдачи ко-

личества строк и печати этого файла будет использоваться последовательность из трех команд:

/home/larry\# \tinput{cat chapter1 chapter2 chapter3 $>$ book} \\ /home/larry\# \tinput{wc -l book} \\

/home/larry\# \tinput{lp book}

Вместо того, чтобы вводить эти три команды с клавиатуры,

их можно объединить в скрипт командной оболочки (shell script), который будет исполнять эти три команды:

\begin{verbatim}

#!/bin/sh

# Скрипт для создания и печати книги cat chapter1 chapter2 chapter3 > book wc -l book

lp book

Команда cat – конкатенация файлов: cat [-u] [-s] file…

-u – вывод, символы из входного файла сразу поступают на стандартный вывод;

-s – не надо выводить сообщение об отсутствии аргументов.

125

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

Первая строка скрипта #!/bin/sh идентифицирует этот файл как скрипт и сообщает командной оболочке, как его исполнять. Эта строка сообщает оболочке, что этот файл надо передать на исполнение программе /bin/sh, т.е. самой программной оболочке. Данная строка будет важной потому, что в большинстве систем LINUX файл /bin/sh содержит оболочку типа BOURNE SHELL, например, BASH, и данная строка принуждает работающую в системе оболочку выполнять этот скрипт, используя синтаксис, принятый в оболочке BOURNE SHELL (а не синтаксис на основе языка C, к примеру). Даже если в качестве стартовой оболочки (login shell) используется TCSH, с данной строкой этот скрипт будет выполняться оболочкой BOURNE SHELL.

Вторая строка является комментарием (comment). Комментарии начинаются символом # и продолжаются до конца строки. Командная оболочка комментарии игнорирует. Обычно комментарии используются для того, чтобы указывать назначение скрипта и делать его более понятным.

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

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

chmod mode file …

mode – атрибуты защиты (+x – опция означает сделать файл выполнимым).

В данном случае, если скрипт записан в файл makebook, можно использовать команду

/home/larry\# \tinput{chmod u+x makebook}

126

Эта команда даст право на исполнение скрипта в файле makebook.

Теперь для исполнения всех команд скрипта достаточно одной команды

/home/larry\# \tinput{makebook}

Переменные оболочки и окружение

Подобно большинству языков программирования, командные оболочки позволяют создавать переменные (variables). Переменные это некоторые данные, которым дано имя.

Оболочка TCSH и некоторые другие оболочки имеют синтаксис, основанный на языке C.

В следующем примере показывается, как переменной присваивается значение оператором «=», и как можно извлекать это значение, приписывая символ $ перед именем переменной

/home/larry\# \tinput{foo=«hello there»}

Переменной foo присваивается значение hello there.

Теперь это значение можно извлечь из переменной, приписав перед именем символ $:

/home/larry\# \tinput{echo \$foo} \\ hello there \\

/home/larry\#

даст те же результаты, что и команда

/home/larry\# \tinput{echo «hello there»} \\ hello there \\

/home/larry\#

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

Кроме этого, оболочка позволяет экспортировать (export) переменные в (внешнее) окружение (environment). Окружение представляет собой набор переменных, к которым имеют доступ все исполняемые команды. После того, как переменная, создан-

127

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

Здесь опять имеются различия между командными оболочками BASH и TCSH. Если используемой оболочкой является TCSH, то для установки переменных окружения используется другой синтаксис (а именно, команда setenv).

Окружения играют очень важную роль в системе UNIX. Задавая некоторые переменные окружения, которые известны определенным командам, можно конфигурировать эти команды.

Пусть переменная окружения PAGER используется командой man и указывает, что надо выводить экранную документацию по одному экрану за один раз. Если установить значением переменной PAGER имя некоторой команды, то она будет использоваться для вывода документации на экран вместо команды more, используемой по умолчанию.

Установим для переменной PAGER значение cat. При этом вывод команды man станет выводиться на экран сразу целиком, а не страница за страницей. Сначала переменной присваивается значение

/home/larry\# \tinput{PAGER=cat}

Затем переменную PAGER надо экспортировать

/home/larry\# \tinput{export PAGER}

Теперь переменная PAGER стала частью окружения. Можно попробовать ввести команду man ls. При этом экранная документация целиком промелькнет по экрану вместо того, чтобы выдаваться экран за экраном с приглашением.

Изменим значение переменной PAGER на more. Теперь для вывода документации будет использоваться команда more

/home/larry\# \tinput{PAGER=more}

После изменения значения переменной PAGER команду export использовать не нужно: переменная экспортируется один раз, и все изменения в ней, сделанные после этого, автоматически распространяются на окружение.

Для того, чтобы оболочка не трактовала некоторые символы как специальные, часто строки приходится заключать в кавычки. Например, для того, чтобы оболочка не интерпретировала неко-

128

торым специальным образом символы *, ? или пробелы, используются кавычки. Есть еще много символов, которые надо защищать от интерпретирования.

Экранная документация укажет также, использует ли команда какие-либо переменные окружения. Например, экранная документация к команде man объясняет, что для назначения программы постраничной выдачи используется переменная PAGER.

Иногда несколько команд используют одну и ту же переменную окружения. Например, многим командам нужна переменная окружения EDITOR, чтобы определить имя редактора, вызываемого (когда требуется) по умолчанию.

Окружение также используется для того, чтобы следить за важной информацией о сеансе работы в системе (login session). Примером может служить переменная окружения HOME, которая содержит имя вашего домашнего каталога (home directory):

/home/larry/papers\# \tinput{echo \$HOME} \\ /home/larry

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

/home/larry\# \tinput{PS1={$\,{\rm ”}\!\!\!$} Your command, please: {$\,\,{\rm ”}$} } \\

Your command, please:

Для того, чтобы вернуться к старому значению этой переменной (так, чтобы в приглашении было имя текущего каталога, за которым следует символ #), можно ввести команду

Your command, please: \tinput{PS1={$\,{\rm «}\!\!$} }$\backslash$\tinput{w\# {$\,\,{\rm «}$} } \\

/home/larry\#

4. Скрипты инициализации командных оболочек

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

скрипты инициализации (initialization scripts). Эти скрипты ис-

полняются при входе пользователя в систему.

129

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

Как оболочка BASH, так и оболочка TCSH делают различия между начальной оболочкой (login shell) и другими ситуациями, когда вызывается оболочка. Начальная оболочка вызывается при входе в систему, и, как правило, это единственная оболочка, с которой можно работать. Однако, когда временно выходите (shell out) из некоторой программы, например, из редактора VI, запускается другой сеанс (instance) оболочки, который будет отличаться от сеанса начальной оболочки. Кроме того, новый сеанс оболочки автоматически запускается всякий раз, когда нужно исполнить скрипт.

Инициализационными файлами, используемыми оболочкой BASH, являются

/etc/profile (создается системным администратором и исполняется всеми пользователями оболочки bash при входе в систему);

$HOME/.bash_profile (исполняется при запуске оболочки

BASH);

$HOME/.bashrc (исполняется остальными сеансами оболочки

BASH).

Если файла .bash_profile нет, вместо него исполняется файл

.profile.

Оболочка TCSH использует следующие скрипты инициализации:

/etc/csh.login (исполняется всеми пользователями оболочки TCSH при входе в систему);

$HOME/.tcshrc (исполняется при входе в систему и при каждом запуске TCSH);

$HOME/.login (исполняется при входе в систему вслед за

.tcshrc).

Если файла .tcshrc нет, вместо него исполняется файл .cshrc.

130