Лабораторная работа №1. Командный интерпретатор
Вид материала | Лабораторная работа |
- Шелл программа, запускаемая для обслуживания сеанса работы пользователя в системе., 82.51kb.
- Методические указания к лабораторным работам Лабораторная работа, 357.24kb.
- Лабораторная работа №3 кпк лабораторная работа №3 Тема: карманный персональный компьютер, 173.34kb.
- Курс лабораторных работ Екатеринбург 2007 Лабораторная работа №1 Изучение основных, 920.75kb.
- Методические возможности стенда Особенности работы на стендах уилс-1 Ознакомительное, 1487.3kb.
- Лабораторная работа по курсу «Физические основы микроэлектроники», 136.21kb.
- Лабораторная работа, 166.92kb.
- Самостоятельная работа по учебным пособиям, 471.48kb.
- Конспект урока в 9 классе по теме: «Магний», 84.54kb.
- Контрольная работа по риторике Студентки 4 курса заочного отделения, 263.88kb.
1 2
2.8. Пользователи
Наличие или отсутствие пользователя в системе определяется записью в файле /etc/passwd. Каждая запись представляет собой строку, состоящую из семи полей, разделенных двоеточиями.
%more /etc/passwd
Поля, слева направо, имеют следующие значения:
- USER - имя пользователя.
- PASSWORD - в старых версиях Unix в этом поле хранился зашифрованный пароль пользователя; в современных версиях поле содержит "x", а зашифрованный пароль хранится в файле /etc/shadow, который доступен для чтения только суперпользователю.
- UID - идентификатор пользователя - целое положительное число, 0 зарезервирован для суперпользователя.
- GID - идентификатор группы, в которую входит пользователь.
- GECOS - произвольный текстовый комментарий (как правило, имя и фамилия пользователя).
- HOME - домашний каталог пользователя.
- SHELL - шелл - программа, запускаемая для обслуживания сеанса работы пользователя в системе. Для обычных пользователей это - командный интерпретатор.
Если пользователь должен быть членом более одной группы, то для внесения его в другие группы, следует указать имя пользователя в соответствующей строке файла /etc/group.
%more /etc/group
Группа, которая указана для пользователя в файле /etc/passwd называется первичной группой этого пользователя, остальные группы, в которые он внесен согласно файлу /etc/group, - вторичными. Первчичная группа отличается от вторичных только в следующем:
- Когда пользователь создает файл (и у каталога не установлен бит SGID), то группой-владельцем нового файла будет первичная группа пользователя (владельцем файла будет он сам).
Файл /etc/group таким образом выполняет две функции: во-первых, он определяет имена и идентификаторы групп; во-вторых, указывает участие пользователей во вторичных для них группах.
Чтобы определить, в каких группах вы участвуете, надо подать команду
%groups
После входа пользователя в систему, текущим каталогом для него становится его домашний каталог (указанный в поле HOME в файле /etc/passwd). Перед выводом приглашения командной строки шелл sh выполняет команды, записанный в файле .profile (начинается с точки), находящемся в домашнем каталоге пользователя (bash выполняет файл .bashrc). В этом файле как правило устанавливаются переменные окружения (в первую очередь - переменная PATH) и какие-либо параметры сессии.
%more .profile
Обратите внимание на наличие текущего каталога (".") в списке PATH. Обратите внимание на команду export, которая помечает переменную как "экспортируемую", т.е. перменная будет передаваеться в окуржение дочерних процессов, запускаемых вашим шеллом; иначе она будет видна только внутри процесса шелла.
Рекомендуемое значение переменной PATH:
PATH=/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/ucb:/usr/local/bin:/usr/openwin/bin:.
Изменить переменную PATH "на ходу", добавив в нее еще один путь (в каталог prog, где находится программа hello) можно следующим образом:
%hello
%PATH=$PATH:./prog
%export PATH
%echo $PATH
%hello
(Знак доллара перед именем переменной означает подстановку значения этой переменной в командную строку.)
2.9. Перенаправление потоков и программные каналы
В ОС UNIX существует три стандартных потока: поток ввода, поток вывода и поток стандартного протокола (поток ошибок).
Перенаправление потоков позволяет изменить стандартный ввод (вывод):
< – изменение источника стандартного ввода;
>, >> – изменение приемника стандартного вывода.
Примеры:
cat > filename - перенаправление вывода программы cat в файл filename (если этот файл существует, то его прежнее содержимое будет утеряно);
cat >> filename - добавить содержимое вывода программы cat к содержимому файла filename;
cat < filename - сформировать стандартный ввод программы cat из содержимого файла filename.
Стандартные потоки - поток ввода, поток вывода и поток ошибок (поток протокола) имеют фиксированную нумерацию - 0, 1 и 2 соответственно. Эти номера (номера дескрипторов потоков) можно использовать в явном виде. Например, запись
prog 1>file
эквивалентна записи
prog >file
Для того, чтобы отличить имя потока от имени файла, перед номером потока ставится символ ‘&’:
prog >file 2>&1
Здесь происходит перенаправление стандартного потока вывода в файл file (>file). А кроме того, сообщения об ошибках также будут перенаправлены в файл file: запись 2>&1 означает перенаправление потока ошибок на стандартный поток вывода, который, в свою очередь, был перенаправлен в файл.
Замечание: анализ команды осуществляется интерпретатором справа налево: сначала происходи слияние потоков (2>&1), а затем перенаправляется стандартный поток вывода (1) в файл file.
В связи с этим бывает полезно использование псевдоустройства /dev/null, удаляющего все введенные в него символы. Это используется тогда, когда необходимо полностью игнорировать (подавить) выходные потоки.
Канал - это программное средство, связывающее процессы ОС UNIX буфером ввода/вывода. Запуск процессов в виде
$ процесс_1 | процесс_2 | ... | процесс_n
означает, что стандартный вывод процесса_1 будет замкнут на стандартный ввод процесса_2, стандартный вывод процесса_2 будет замкнут на стандартный ввод процесса_3 и т.д. При этом сначала создается канал, а потом на выполнение одновременно запускаются все процессы, и общее время их выполнения определяется более медленным процессом.
Пример: ls | wc -l
Команда ls выводит на экран (стандартный поток вывода) список файлов текущего каталога, а команда wc -l считает количество строк во входном потоке (в файле, а если файл не указан – в стандартном входном потоке). Таким образом, объединение этих двух команд программным каналом позволяет посчитать количество файлов в текущем каталоге. Те же действия можно организовать так:
ls > buffer
wc -l < buffer
rm -f buffer
Итоговая таблица:
> file | Перенаправление стандартного потока вывода в файл file |
>> file | Добавление в файл file данных из стандартного потока вывода |
< file | Получение стандартного потока ввода из файла file |
p1 | p2 | Передача стандартного потока вывода программы p1 в поток ввода программы p2 |
n > file | Переключение потока вывода из файла с дескриптором n в файл file |
n >> file | Добавление записей потока вывода из файла с дескриптором n в файл file |
n > &m | Слияние потоков с дескрипторами n и m |
- vi. Текстовый редактор
Запуск редактора: vi [+[n]] имя_файла
+ вывести на экран конец файла;
n вывести на экран текст файла, начиная со строки n.
Текстовый полноэкранный редактор vi работает в двух основных режимах: в режиме “ввод текста” и в режиме “команда”.
Режим “ввод текста”. В этот режим редактор переводится с помощью клавиш и :
набор текста в текущую строку;
< i > вставка текста в текущую строку перед курсором;
Режим “команда”. Это - основной режим редактирования текста:
[n]
[n]
Выход из редактора
2.12 Архивирование и сжатие
Архивирование файлов и сжатие файлов по своей природе - разные операции. Архивирование - это операция объединения нескольких файлов (и каталогов) в один файл специального формата, который называется архивом. За счет наличия служебной информации в архиве, размер архива больше суммы размеров входящих в него файлов. Сжатие - это операция уменьшения размера файла с помощью специальных алгоритмов. В Unix архивирование и сжатие выполняется как правило разными программами.
Архивирование - tar
Команда tar предназначена для создания архивов на магнитной ленте, а также в файлах. Признак tar-архива: расширение файла ".tar" или буква "t" в расширении ".tgz". На профессиональном слэнге файл с tar-архивом часто называется tarball. Примеры работы с tar следуют ниже.
создать архив arh.tar, поместив в него файл b.txt и каталог prog со всеми его файлами и подкаталогами:
tar cvf arh.tar b.txt prog
вывести оглавление архива arh.tar:
%tar tvf arh.tar
извлечь файл prog/a.c из архива arh.tar (создается каталог prog {если его не было} и в него записывается файл a.c из архива):
%tar xvf arh.tar prog/a.c
извлечь все файлы из архива arh.tar:
%tar xvf arh.tar
добавить файл uran к архиву:
%tar uvf arh.tar uran
%tar tvf arh.tar
Сжатие - gzip, compress, zip
Наиболее широко используемым компрессором файлов под Unix является утилита gzip (обратная ей утилита - gunzip). Однако, эти утилиты необязательно входят в поставку операционной системы. Признак файла, сжатого програмой gzip - расширение ".gz" или ".tgz" (tar+gzip).
Формат команды
%gzip file
%gunzip file.gz
При сжатии (без дополнительных ключей) исходный файл удаляется, вместо него образуется сжатый файл, имя которого равно имени исходного файла плюс ".gz". При восстановлении происходит обратное: удаляется сжатый файл и создается исходный.
С ОС Unix поставляется стандартный компрессор compress (uncompress). Работа с этими утилитами аналогична работе с gzip (gunzip), но используется расширение ".Z"
Для ОС Unix также имеются программы zip и unzip, которые работают аналогично DOS-версиям, в том числе, в дополнение к сжатию, производят архивирование и распаковку архивов. Формат архивов совместим с форматом DOS pkzip и WinZip. (Для DOS/Windows также уже написаны утилиты gz и tar.)
Формат команды
zip file.zip список_файлов
gunzip file.zip
gunzip file.zip список_файлов
Для более подробной информации обо всех утилитах см. справочник man.
Справочная таблица по быстрой распаковке архивов
Вид файла | Действия |
file.tar | tar xvf file.tar |
file.gz | gunzip file.gz |
file.tar.gz | gunzip -c file.tar.gz | tar xvf - |
file.tgz | gunzip -c file.tgz | tar xvf - |
file.Z | uncompress file.Z |
file.taz | gunzip -c file.taz | tar xvf - |
file.tar.Z | uncompress -c file.tar.Z | tar xvf - |
file.zip | unzip file.zip |
ЗАДАНИЯ НА ЛАБОРАТОРНУЮ РАБОТУ
1. Получить справку по одной из команд SHELL
2. Вывести содержимое текущей директории. Определить тип объектов, права доступа, владельца.
3. Записать содержимое домашней директории в файл brig.dat
4. Добавить в конец файла brig.dat содержимое директории /tmp
5. Создать каталог в домашней директории и скопировать в него файл brig.dat
6. Изменить права доступа к файлу, разрешив запись в него другим пользователям.
7. Вывести содержимое файла в стандартный вывод. Выполнить постраничный вывод содержимого файла.
8. Определите тип созданного файла с помощью команды file
9. Выведите первые 7 и последние 7 строк файла brig.dat
9. Найдите в файле brig.dat все строки, содержащие “dat”
10. Найдите в домашнем каталоге все объекты, которые являются директориями. Найдите все файлы в директории /tmp, имеющие в своем имени символ L
11. Выведите в файл brig3.dat содержимое директории /tmp Определите количество строк в файле. Проведите сравнение файлов brig.dat и brig3.dat. Результаты выведите на консоль.
12. Получите список всех процессов в систме, а также параметры загрузки системы (с помощью команды top)
13. Изучите список всех запущенных в вашей системе процессов. Какой процесс истратил больше всего процессорного времени? Какой процесс занимает больше всего памяти? Сколько демонов запущено в системе? Запустите два процесса (например, find и sort) в фоновом режиме (c подавлением потоков вывода, чтобы не мешали), и два (например, ps и cat) - в интерактивном.
%find / 2>/dev/null | sort >/dev/null 2>&1 &
%ps -ej | cat
Выпишите из листинга команды ps строки, относящиеся к четырем выше указанным процессам и к вашему шеллу. Найдите идентификаторы группы и сеанса для каждого процесса, определите лидеров групп и сеанса.
14. Запустите процесс top в фоновом режиме. Переведите процесс в интерактивный режим.
15. Отредактировать файл brig.dat с использованием редактора vi. Записать изменения в файл brig2.dat
16. Сжать файлы с помощью архиваторов tar, gzip, compress, zip и сравнить степень сжатия. Выполнить сортировку по размеру файлов.
17. Создать символическую ссылку и жесткую ссылку на файл brig.dat. Проверьте параметры файлов с помощью команды ls
18. Определите свой идентификатор и группу к которой вы относитесь использую вывод переменных среды (команда set)
- Посчитать количество пользователей в системе.
- Отсортировать список файлов текущей директории в обратном порядке и записать его в файл.
- Посчитать количество файлов текущего каталога, содержащих подстроку "include".
- Посчитать, сколько раз пользователь X вошел в систему.
- Отсортировать список текстовых файлов текущей директории в алфавитном порядке и записать его в файл.
- Удалить из текущего каталога все файлы, содержащие подстроку "text".
- Объединить все файлы с расширением ".txt" в один файл.
- Посчитать, сколько процессов запущено с данного терминала.
- Вывести на экран отсортированный в алфавитном порядке список файлов, содержащих подстроку "include".
- Написать скрипт, удаляющий все файлы содержащие кодовую сигнатуру из указанного каталога.
- Контpольные вопpосы
- Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд.
- Какие существуют средства группирования команд? Приведите примеры использования.
- Как осуществляется перенаправление ввода-вывода?
- В чем сущность конвейера команд? Приведите примеры использования.
- Как средствами Shell выполнить арифметические действия над Shell-переменной?
- Каковы правила генерации имен файлов?
- Как выволняется подстановка результатов выполнения команд?
- Как интерпретировать строку cmd1 & cmd2 & ?
- Как интерпретировать строку cmd1 && cmd2 & ?
- Как интерпретировать строку cmd1 || cmd2 & ?
- В каком режиме выполняется интерпретатор команд Shell?
- Кем и в каком режиме осуществляется чтение потока символов с терминала интерпретатором Shell?
- Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд.