Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Основы интерактивной работы в оболочке bash



Оболочка (shell) или командный интерпретатор в Unix-системах обеспечивает два набора функций:

- интерпретация командного языка и исполнение команд, введенных пользователем или подготовленных заранее в текстовом файле;

- интерактивное взаимодействие с пользователем, т. е. предоставление пользователю возможности редактирования и ввода команд.

Ниже рассмотрены особенности работы второй группы из набора функций, т. е. интерактивные возможности командной оболочки bash, которая является стандартной для систем GNU/Linux, и может быть установлена в других Unix-подобных системах. Оболочка bash предоставляет пользователю развитые средства интерактивной работы. В частности, она поддерживает редактирование командной строки, повтор символов, макросы, «карман» (буфер), а также историю команд (т. е. возможность повторить ранее введенную команду) и настраиваемое автоматическое дополнение. Следует отметить, что умение пользоваться интерактивными возможностями оболочки значительно повышает эффективность работы в Unix-системе (особенно в сочетании с хорошим знанием командного языка). Более того, работа непосредственно в командной оболочке часто оказывается значительно более продуктивной по сравнению с использованием файловых менеджеров, таких как Norton Commander, Far Manager или Windows Explorer. Обратная сторона преимуществ работы в оболочке Unix заключается в длительном начальном периоде изучения. Далее рассмотрим лишь некоторые наиболее используемые приемы интерактивной работы. Для более полного описания возможностей оболочки следует пользоваться руководством по использованию bash (команда man bash).

Редактирование командной строки

Классические оболочки Unix позволяли вводить команды как последовательность символов, завершая ввод нажатием клавиши Enter. Современные версии командных оболочек, такие как bash, включают развитые средства редактирования. Для многих функций редактирования используются комбинации клавиш с модификаторами CTRL и META. Модификатор CTRL имеется на клавиатуре IBM-совместимых компьютеров, а в качестве META чаще всего используется клавиша ALT. Работоспособность модификатора META зависит от настройки терминала, графической среды или программы удаленного доступа. Если с помощью клавиши ALT не удается добиться желаемого результата, можно использовать альтернативный способ ввода META-комбинаций. Для этого перед символом нужно нажать (и отпустить) клавишу Esc. Таким образом, например, комбинацию клавиш META-d можно заменить последовательностью нажатий Esc, d. Для ввода комбинаций наподобие META-_ (знак подчеркивания) или META-> (знак «больше») необходимо нажимать и удерживать клавишу Shift. Одному действию соответствует, как правило, несколько разных комбинаций клавиш, т. к. их работоспособность может зависеть от типа терминала. Поэтому, если не работает какая- либо из клавиш (например, Home), вместо нее может быть использована альтернативная комбинация (например, CTRL-a). Также следует отметить, что многие из комбинаций клавиш имеют аналогичное или похожее назначение и в других программах, распространенных в Unix.



Команды перемещения по командной строке

- Вправо CTRL-f: Перемещение на один символ вправо

- Влево CTRL-b: Перемещение на один символ влево

- META-вправо META-f: Перемещение на одно слово вправо

- META-влево META-b: Перемещение на одно слово влево

- Home CTRL-a: Перемещение в начало строки

- End CTRL-e: Перемещение в конец строки

Удаление и вставка фрагментов команд

- Backspase CTRL-h: Удалить символ слева от курсора

- Del CTRL-d: Удалить символ в позиции курсора

- CTRL-u: Вырезать часть строки слева от курсора

- CTRL-k: Вырезать часть строки справа от курсора

- META-Backspaсe CTRL-w: Вырезать слово слева от курсора

- META-d: Вырезать слово справа от курсора

- CTRL-y: Вставить последний вырезанный текст в позицию курсора

- CTRL-/ CTRL-_: Отменить последнюю операцию редактирования

Прочие комбинации клавиш

- Enter: Выполнить текущую команду (положение курсора не имеет значения)

- CTRL-L: Очистить экран и поместить текущую команду в верхней строке экрана

- CTRL-d: Выйти из оболочки bash, аналогично вводу команды logout (только при условии что командная строка пуста)



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

Оболочка bash поддерживает историю команд, т. е. запоминает введенные ранее команды. Это позволяет вернуться к любой ранее введенной команде, а также использовать отдельные фрагменты команд из истории для ускорения ввода новых команд. История сохраняется при выходе из оболочки в файле с именем .bash_history в домашнем каталоге пользователя и загружается вновь при следующем запуске bash. Таким образом, история команд не пропадает в перерывах между сеансами работы. Впрочем, существует ограничение на количество запоминаемых команд (например, 1000), и при превышении этого ограничения самые ранние команды будут автоматически удаляться. Чтобы просмотреть историю команд, можно использовать команду history. Если после имени этой команды указан числовой аргумент, то будет выведено соответствующее число последних введенных команд.

Например

$ history 5

4995 mkdir tmp/work

4996 cd tmp/work

4997 cp ~/work/log.txt.

4998 joe log.txt

4999 history 5

Как видно из вывода команды history, каждой команде поставлен в соответствии ее порядковый номер в истории. Чтобы выполнить одну из команд истории, можно ввести в командной строке заданный номер, предварив его восклицательным знаком. Например:

$ !4996

cd tmp/work

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

$ !cd

cd tmp/work

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

Некоторые комбинации клавиш для навигации по истории команд

- Вверх, CTRL-p: Перейти к предыдущей команде

- Вниз, CTRL-n: Перейти к следующей команде

- META-<: Перейти в начало истории команд

- META->: Перейти в конец истории команд (т. е. к текущей команде)

- CTRL-r: Осуществить обратный инкрементальный поиск в истории команд (см. описание ниже)

- META-.: Вставить последнее слово предыдущей команды в текущую позицию курсора

- CTRL-o: Аналогично Enter, но после выполнения команды показать следующую строку истории

Самый простой способ использования истории заключается в переходе на команду, подобную той, что требуется ввести, ее редактировании и нажатии клавиши Enter. Если же при этом вместо Enter нажать комбинацию CTRL-o, то это позволит повторить ввод серии последовательных команд, сохраненных в истории. Отдельного внимания заслуживает возможность инкрементального поиска в истории (комбинация клавиш CTRL-r). Это, пожалуй, наиболее мощный способ использования истории команд. После нажатия комбинации клавиш CTRL-r обычное приглашение к вводу команд исчезает и появляется индикатор режима инкрементального поиска

(reverse-i-search)`': _

В этом режиме можно вводить символ за символом любую часть команды из истории, и в процессе ввода постоянно видеть наиболее позднюю из совпадающих команд. Например, если происходит поиск команды, содержащей подстроку «web», то после нажатия CTRL-r вводим сначала букву «w»

(reverse-i-search) 'w': cd tmp/work

увидим, что поиск пока не дал нужного результата, и уточняем поиск, вводя следующую букву, «e»

(reverse-i-search) 'we': ./update-web.sh

Теперь видно, что найденная команда уже содержит фрагмент «web» и для ее нахождения было достаточно ввести лишь два символа. Если же найденная команда оказалась не той, что искали, можно использовать CTRL-r для перехода на более ранние команды, также содержащие строку поиска. Продолжая предыдущий пример, повторно нажимаем CTRL-r. При этом будет найдена другая, более ранняя команда, например

(reverse-i-search) 'we': cd work/web/homepage/

Теперь можно выйти из режима поиска несколькими способами. Чтобы перейти на найденную команду в истории, достаточно нажать Esc или комбинацию клавиш CTRL-j. Чтобы отменить поиск и вернуться в исходное состояние, можно нажать CTRL-g. И наконец, нажатие Enter приведет к немедленному исполнению найденной команды.

Использование автоматического дополнения в командной строке

Автоматическое дополнение (completion) позволяет значительно ускорить ввод команд, имен файлов, имен переменных и имен машин в командной строке. Например, пусть в системе установлена программа bunzip2 и нет ни одной другой программы или команды, начинающейся буквами «bun». В таком случае в bash достаточно набрать в начале командной строки эти три буквы и нажать клавишу Tab. При этом остальные символы, формирующие имя команды, будут вставлены автоматически. В оболочке bash поддерживается несколько типов дополнения и множество комбинаций клавиш для их активизации. Рассмотрим лишь две наиболее полезные возможности выполнять автоматическое дополнение

- Tab: Дополнение наиболее подходящим окончанием

- META-Tab: Дополнение на основе фраз из истории команд (поскольку роль модификатора META часто исполняет клавиша ALT, а комбинация ALT-Tab обычно используется графической средой для вызова этой команды рекомендуется использовать последовательность нажатий Esc, Tab). Дополнение с помощью Tab может работать по-разному в зависимости от использования контекста.

Возможности автоматического дополнения в командной строке

- Начало строки: Дополнение имени команды (поиск среди имен встроенных команд оболочки и программ в переменной среды PATH)

- После символа $: Дополнение имени переменной (поиск среди имен установленных переменных среды)

- После символа @: Дополнение имени машины (поиск среди имен машин в файле /etc/hosts)

- После символа ~: Дополнение имени пользователя (поиск среди имен известных системе пользователей)

- После шаблона имени файла: Замена шаблона, только если найден лишь один подходящий файл (в данном случае производится не дополнение, а замена шаблона на подходящее имя файла)

- В остальных случаях: Дополнение имени файла (поиск среди имен файлов и каталогов)

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

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

Особенности формирования файлового пространства

Файловое пространство Unix–систем представляет собой иерархию файлов, которая имеет единый общий корень – так называемый корневой каталог, обозначаемый знаком прямой косой черты «/». Чтобы однозначно идентифицировать любой файл, можно указать путь к этому файлу от корневого или текущего каталога. Все элементы пути отделяются друг от друга символом прямой косой черты. Если первый символ строки также косая черта, то путь берет начало в корневом каталоге, в противном случае – в текущем. Путь с единственным именем обозначает файл в текущем каталоге. Примеры

- docs.ps – файл с именем docs.ps в текущем каталоге;

- /usr/doc/FAQ/README – файл с именем README в каталоге /usr/doc/FAQ;

- work/thesis.tex – файл thesis.tex в подкаталоге work текущего каталога.

Понятие текущего каталога несколько отличается от такового в системе MS-DOS или Windows. В Unix у каждого процесса собственный текущий каталог. Корневой каталог файлового дерева Unix обычно содержит следующие подкаталоги (в разных системах эта структура может отличаться)

- /bin – минимальный набор исполняемых файлов, необходимый для работоспособности системы;

- /etc – файлы конфигурации системы;

- /dev – файлы устройств;

- /home – домашние каталоги пользователей;

- /lib – основные системные библиотеки и модули;

- /root – каталог администратора системы root;

- /proc – файлы-образы выполняющихся процессов;

- /sbin – минимальный набор утилит администратора;

- /tmp – каталог для временных файлов;

- /usr – основной объем файлов системы: установленные программы, библиотеки, исходные тексты ядра, файлы данных и прочее;

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

Следует отметить, что символ косой черты не является частью имен каталогов, а лишь указывает, что данные элементы находятся в корневом каталоге. В каждом каталоге также существует два особых «подкаталога» с именами «две точки» и «точка». Первый из них служит указателем на однозначно определенный родительский каталог (вышестоящий), а второй – на данный текущий каталог. Например, путь «../readme» указывает на файл «readme», который находится в родительском каталоге (на ступень выше), а путь «./readme.now» укажет на файл «readme.now», который находится в текущем каталоге. Большая часть файлового дерева Unix обычно сосредоточена в каталоге /usr. Как правило, там можно найти следующие подкаталоги

- /usr/bin – исполняемые файлы;

- /usr/doc – документация в различных форматах;

- /usr/etc – файлы конфигурации программного обеспечения, установленного дополнительно;

- /usr/include – включаемые файлы для программ, например на языке C;

- /usr/info – документация пользователя в гипертекстовом формате info;

- /usr/lib – разделяемые библиотеки;

- /usr/local – локальное программное обеспечение, файлы данных и библиотеки (этот каталог в некоторых системах может не использоваться);

- /usr/man – руководства пользователя (manual pages);

- /usr/sbin – утилиты администратора;

- /usr/share – данные, совместно используемые различными прикладными программами;

- /usr/src – исходные тексты различных компонент системы, включая ядро.

Описанная в данном случае структура каталогов относится к ОС Red Hat Enterprise Linux 5.2.

Формирование имен файлов

В связи с тем, что зачастую для одного языка существует несколько кодировок (например, для русского языка существуют следующие кодировки: CP866, CP1251, KOI-8R и т. д., хотя в последнее время с распространением UTF8 ситуация постепенно улучшается), то рекомендуется, чтобы имя файла или каталога составлялось из следующих символов

- прописные и строчные латинские буквы;

- цифры;

- символ подчеркивания;

- символ точки;

- знак минуса (не должен быть первым символом имени);

- знак плюса (использовать не рекомендуется).

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

Максимальная длина имени файла варьируется в разных системах и зависит скорее от используемой файловой системы, чем от самой ОС. Обычно можно использовать достаточно длинные имена файлов (до 255 символов). Максимальный размер файла в файловой системе также зависит от ее типа и параметров, заданных при форматировании. Для современных файловых систем размер файла более 4 Гбайт не является проблемой.

Как отмечалось выше, прописные и строчные буквы в системе Unix различаются, т. е. имена «filename», «FILENAME» и «FileName» являются разными. При этом файлы, отличающиеся только регистром букв, могут находиться в одном каталоге. В отличие от системы MS-DOS, знак точки является обычным символом, допустимым в любом месте имени файла, а такого понятия, как расширение имени файла, строго говоря, в системе Unix нет. Тем не менее, последние части имен файлов, отделенные от остальной части имени точками, часто указывают на тип файла. В качестве примера имя файла «my-photo.tiff.gz» может означать, что файл представляет собой изображение в формате TIFF, сжатое программой сжатия gzip.

Точка, являющаяся первым символом имени файла или каталога, имеет особое значение: такие имена по умолчанию не выводятся в листинге содержимого каталогов (хотя к ним можно свободно обращаться), для получения полного списка файлов вместо ls, нужно ввести ls -a. Другими словами, чтобы сделать файл «скрытым», нужно начать его имя с точки. Этим часто пользуются для именования служебных файлов, на которые не имеет смысла обращать особое внимание.

Просмотр и интерпретация прав доступа к файлам

ОС семейства Unix – традиционно многопользовательские системы. Чтобы начать работать, пользователь должен «войти» в систему, введя со свободного терминала свое регистрационное имя и пароль. Человек, зарегистрированный в учетных файлах системы и, следовательно, имеющий учетное имя, называется зарегистрированным пользователем системы. Регистрацию новых пользователей обычно выполняет администратор системы. Основными минимальными данными, требуемыми для регистрации пользователя в системе, являются

- имя пользователя;

- название группы, к которой относится пользователь;

- пароль.

В Unix базовые права доступа к файлам включают три составляющие

- разрешение чтения (обозначается буквой «r», от слова Read);

- разрешение записи (буква «w», от слова Write);

- разрешение выполнения (буква «x», от слова eXecute).

Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов – просматривать перечень имен файлов в каталоге (используя, например, команду ls). Разрешение на запись позволяет пользователю писать в файл, т. е. изменять его содержимое. Для каталогов это дает право создавать в каталоге новые файлы и каталоги или удалять файлы в этом каталоге. Наконец, разрешение на выполнение позволяет пользователю запускать файлы на исполнение (как программы в машинном коде, так и командные файлы). Если на файле стоит атрибут выполнения, то независимо от его имени он считается программой, которую можно запустить (в отличие от DOS или Windows, в Unix возможность исполнения файла не зависит от «расширения» имени файла, такого как .exe). Разрешение на выполнение применительно к каталогам означает возможность перехода в этот каталог (например, командой cd). Поэтому для каталогов право выполнения часто называют правом поиска. Отметим, что для каталогов биты чтения и выполнения (r и x) чаще всего используются в паре, т. е. либо присутствуют оба, либо отсутствуют.

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

- владельца (у каждого файла в Unix есть один владелец);

- группы (с каждым файлом связана группа пользователей этого файла);

- всех остальных пользователей.

Набор прав доступа для конкретных файлов можно просмотреть с помощью команды ls -l.

Например:

$ ls -l tmp/

drwxrwxr-x 10 john users 1024 Aug 30 2002 newdir

-rw-r----- 1 john users 173727 Jan 13 23:48 archive-0113.zip

В этом примере видно, что владельцем файлов является пользователь john, а группой владельцев является группа users. Набор букв и прочерков в левой части определяет тип файла (первый символ) и права доступа к файлу (остальные девять символов). В приведенном примере первая запись относится к каталогу (первая буква d) и демонстрирует права доступа rwxrwxr-x. Вторая запись относится к обычному файлу (прочерк на месте первого символа) и показывает права rw-r-----. Девять символов прав доступа определяют возможность чтения (r), записи (w) и выполнения (x) для владельца файла (первые три символа), группы владельца (следующие три символа) и всех остальных (последние три символа). Прочерки означают отсутствие соответствующих прав. Следовательно, в приведенном примере

- john и все пользователи группы users могут просматривать и изменять содержимое каталога newdir, а также переходить в него, а остальные пользователи могут читать и переходить в этот каталог, но не могут создавать или удалять в нем новые файлы;

- john может читать и изменять файл archive-0113.zip, пользователи группы users могут только читать содержимое этого файла, а все остальные не имеют к нему никаких прав доступа.

Кроме символьного представления прав доступа часто используется цифровая форма. В цифровом представлении права доступа составляются из трех восьмеричных цифр, каждая из которых определяет набор из трех битов полномочий rwx. Чтобы перевести права доступа из символьного представления в числовое, следует:

- представить набор прав в двоичном виде (например, 110100000 для набора прав rw-r-----);

- перевести полученное двоичное число в восьмеричную систему счисления (например, восьмеричным представлением двоичного числа 110100000 будет 640).

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

- 400 – владелец имеет право на чтение;

- 200 – владелец имеет право на запись;

- 100 – владелец имеет право на выполнение;

- 040 – группа имеет право на чтение;

- 020 – группа имеет право на запись;

- 010 – группа имеет право на выполнение;

- 004 – остальные имеют право на чтение;

- 002 – остальные имеют право на запись;

- 001 – остальные имеют право на выполнение.

Можно заметить, что для прав доступа rw-r----- получим:

400 + 200 + 040 = 640.

Типы файлов

В ОС Unix имеются следующие основные типы файлов

- обычные файлы (regular files);

- каталоги (directories);

- символьные ссылки (symbolic links);

- файлы физических устройств (device files);

- именованные каналы (named pipes);

- сокеты (sockets).

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

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

Файлы устройств в Unix являются средством общения прикладных программ с драйверами оборудования компьютера. Для того, чтобы передать данные драйверу какого-либо устройства, прикладная программа должна произвести запись в соответствующий специальный файл. По аналогии, операция чтения из файла устройства означает получение данных от его драйвера. Обычно каталог с файлами имеет имя «/dev».

Символьные ссылки подобны «ярлыкам» в Windows. Они позволяют создавать альтернативные имена файлов, причем могут указывать на файлы в других каталогах. При открытии программой символьной ссылки фактически открывается файл, на который она указывает. Символьные ссылки могут указывать как на обычные файлы, так и на каталоги и файлы других типов.

Именование каналы еще называют буфером FIFO (First In First Out). Через файлы такого типа два независимых процесса могут обмениваться данными: все, что записано в файл одним процессом, может быть прочитано другим.

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

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

Как было представлено выше, к файловой системе Unix могут быть подключены сторонние файловые системы, например файловые системы других ОС или файловые системы, расположенные на внешних носителях (флоппи-дисках, CD-ROM и др.). Чтобы сторонняя файловая система была доступна ОС Unix, необходимо осуществить операцию ее монтирования.

Фактически, монтирование – это указание того, куда системе следует адресовываться при обращении к объектам сторонней файловой системы. Для системы это указание называется точкой монтирования. Теоретически можно указать системе произвольное место точки монтирования, но на практике для монтирования сторонних файловых систем существует каталог /mnt. В нем необходимо создать подкаталог, который будет служить точкой монтирования. Например файловую систему Windows, физически расположенную на первом логическом разделе того же винчестера (на диске C), можно сделать доступной для Unix, примонтировав ее с помощью команды mount (предварительно нужно создать каталог /mnt/windows)

mount -t vfat /dev/hda1 /mnt/windows (пример для Linux),

mount -t msdos /dev/ad0s1 /mnt/windows (пример для FreeBSD),

где ключ t и аргумент vfat (msdos) означают тип монтируемой сторонней файловой системы (в данном случае FAT), /dev/hda1 – первый раздел первого жесткого диска, к которому система обращается с помощью файла устройства; /mnt/windows – каталог, представляющий собой точку монтирования.

Системный файл регистрации пользователей

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

- регистрационное имя пользователя;

- зашифрованный (чаше хешированный) пароль;

- значение UID;

- значение GID основной группы;

- комментарий (может содержать расширенную информацию о пользователе, например, имя, должность, телефоны и т. п.);

- домашний каталог;

- командная оболочка пользователя.

Файл /etc/passwd должен быть доступен для чтения всем пользователям, т. к. к нему должны обращаться многие программы, запускаемые от имени рядового пользователя (например, чтобы узнать соответствие UID регистрационному имени). Но доступность для чтения всех хешей паролей серьезно уменьшает безопасность системы, потому что современные вычислительные мощности позволяют сравнительно быстро подбирать пароли (в особенности, неудачно выбранные некоторыми пользователями). Поэтому часто используется схема теневых паролей (shadow passwords), при которой поле пароля в /etc/passwd игнорируется, а реальный пароль берется из другого файла (например, /etc/shadow), доступного для чтения только привилегированному пользователю.

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

john:*:1004:101::/home/john:/bin/sh

Дополнительную информацию о формате файла /etc/passwd можно получить, набрав команду man по теме passwd в разделе 5 (форматы файлов). Эта команда будет выглядеть так

man 5 passwd

Файл регистрации групп пользователей

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

- регистрационное имя группы;

- пароль группы (обычно это поле пустое, так как группам обычно не назначают пароли);

- значение GID, соответствующее данной группе;

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

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

Определение идентификаторов пользователей и групп

Чтобы определить UID пользователя, GID и имя его основной группы, а также список прочих групп, в который включен пользователь, можно использовать команду id. В случае ее использования без аргументов, команда выведет информацию о текущем пользователе. Если же указать в качестве аргумента имя зарегистрированного пользователя, вывод команды будет соответствовать указанному пользователю. Частным случаем команды id является команда groups. Она выдает список имен всех групп, в которые включен текущий или указанный пользователь.

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

Как обычно, дополнительную информацию о всех перечисленных командах можно получить с помощью команды man, например

$ man who

Изменение владельцев файлов

Владельцем файла становится пользователь, создавший этот файл. Группой владельца по умолчанию становится основная группа регистрации пользователя. Для изменения владельцев предназначена стандартная команда chown (change owner). Однако в современных системах владельца файлов может изменять только привилегированный пользователь (root). У обычного пользователя существует возможность изменения только группы владельцев, и то лишь в пределах тех групп, в которые входит сам пользователь. Для изменения группы владельцев удобно использовать команду chgrp (change group). Например, чтобы сделать группой владельцев каталога newdir группу student, можно ввести

chgrp student newdir

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

chgrp -R student newdir

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

Изменение прав доступа к файлам

Изменить права доступа к файлу может либо его владелец, либо привилегированный пользователь (root). Делается это командой chmod (change mode). Существует два формата использования этой команды: с использованием символьного и числового представления прав доступа. Использование числового представления позволяет одной командой изменить полный набор прав доступа, например

chmod 770 newdir

Данная команда установит права доступа в числовое значение 770, т. е. rwxrwx---, что даст полные права владельцу и группе владельца, и никаких прав всем остальным. Использование символьного представления прав доступа в команде chmod может показаться несколько сложнее, но позволяет манипулировать отдельными битами прав доступа. Например, чтобы снять бит записи для группы владельца каталога newdir, достаточно ввести

chmod g-w newdir

Условный синтаксис этой команды таков

chmod {u,g,o,a}{+,-,=}{r,w,x} файлы ...

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

- «u» – владелец-пользователь (user),

- «g» – владелец-группа (group),

- «o» – остальные пользователи (others),

- «a» – все вышеперечисленные группы вместе (all).

Операцию, которую необходимо произвести с правами доступа:

- «+» – добавить,

- «-» – убрать,

- «=» – присвоить;

Права доступа («r», «w», «x») назначаемы каталогам и файлам. Как и в команде chgrp, в chmod может использоваться ключ R, позволяющий рекурсивно обрабатывать содержимое подкаталогов.

Права доступа по умолчанию, команда umask

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

Например, маска 022 приведет к сбросу битов записи для группы владельца и остальных пользователей. Заметим, что для обычных файлов (не каталогов) все биты выполнения (x) в правах по умолчанию будут сброшены независимо от текущей маски.

Пример, демонстрирующий эффект команды umask:

$ umask

$ mkdir dir1

$ ls -l

drwxrwxr-x 2 john users 1024 Apr 21 07:29 dir1

$ umask 072

$ umask

$ mkdir dir2

$ ls -l

drwxrwxr-x 2 john users 1024 Apr 21 07:29 dir1

drwx---r-x 2 john users 1024 Apr 21 07:30 dir2

Задание на работу

1. Ознакомиться с теоретическим материалом.

2. Зарегистрироваться в системе под именем student.

3. Ознакомиться со следующими командами для пользовательской работы в ОС Unix: man, apropos, ls, cd, pwd, mkdir, rmdir, cp, mv, rm, cat, echo, less, touch, grep, date, history. Определить параметры, которые следует считать основными при использовании данных команд.

4. Определить абсолютный путь своего домашнего каталога и узнать его размер в килобайтах.

5. Определить значения следующих переменных окружения: PATH, MANPATH, PAGER.

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

7. Проверить, возможно ли вмешательство в личное файловое пространство другого пользователя.

8. Ознакомиться с командами определения прав доступа к файлам и их изменения (команды id, groups, ls -l, stat, chmod, chown, chgrp, umask).

9. Найти запись в файле /etc/passwd, соответствующую учётной записи student.

10. Определить свой UID, узнать, к каким группам относится пользователь student, объяснить вывод команд id, groups.

11. Определить список групп, в которые входит пользователь root.

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

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

14. Сделать свой домашний каталог видимым для всех пользователей группы users.

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

Требования к отчету

Отчет должен содержать следующие разделы:

1. Титульный лист, оформленный согласно утвержденному образцу.

2. Цели выполняемой лабораторной работы.

3. Задание на лабораторную работу.

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

- краткое описание действия;

- вводимая команда или команды;

- реакция системы на ввод команд (если объем выводимых данных превышает несколько строк, всю информацию включать в отчет не следует).

5. Выводы.


Лабораторная работа 3.
Программирование в BASH в среде Linux

Цель работы: Изучить основные shell-оболочки, используемые в операционных системах класса Unix. Получить навыки создания BASH-скриптов в ОС Linux.

Замечание: при написании bash-скриптов следует уделять особое внимание регистру ключевых слов и расстановке пробелов, поскольку интерпретатор чувствителен к ним.


Эта страница нарушает авторские права

allrefrs.ru - 2018 год. Все права принадлежат их авторам!