Лабораторная работа №1. Командный интерпретатор

Вид материалаЛабораторная работа

Содержание


USER - имя пользователя. PASSWORD
2.9. Перенаправление потоков и программные каналы
2.12 Архивирование и сжатие
Архивирование - tar
Сжатие - gzip, compress, zip
Справочная таблица по быстрой распаковке архивов
Задания на лабораторную работу
3. Записать содержимое домашней директории в файл brig.dat
6. Изменить права доступа к файлу, разрешив запись в него другим пользователям.
8. Определите тип созданного файла с помощью команды file
10. Найдите в домашнем каталоге все объекты, которые являются директориями. Найдите все файлы в директории /tmp, имеющие в своем
12. Получите список всех процессов в систме, а также параметры загрузки системы (с помощью команды top)
14. Запустите процесс top в фоновом режиме. Переведите процесс в интерактивный режим.
16. Сжать файлы с помощью архиваторов tar, gzip, compress, zip и сравнить степень сжатия. Выполнить сортировку по размеру файлов
18. Определите свой идентификатор и группу к которой вы относитесь использую вывод переменных среды (команда set)
Подобный материал:
1   2

2.8. Пользователи


Наличие или отсутствие пользователя в системе определяется записью в файле /etc/passwd. Каждая запись представляет собой строку, состоящую из семи полей, разделенных двоеточиями.

%more /etc/passwd

Поля, слева направо, имеют следующие значения:
  1. USER - имя пользователя.
  2. PASSWORD - в старых версиях Unix в этом поле хранился зашифрованный пароль пользователя; в современных версиях поле содержит "x", а зашифрованный пароль хранится в файле /etc/shadow, который доступен для чтения только суперпользователю.
  3. UID - идентификатор пользователя - целое положительное число, 0 зарезервирован для суперпользователя.
  4. GID - идентификатор группы, в которую входит пользователь.
  5. GECOS - произвольный текстовый комментарий (как правило, имя и фамилия пользователя).
  6. HOME - домашний каталог пользователя.
  7. 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


    1. vi. Текстовый редактор

Запуск редактора: vi [+[n]] имя_файла

+            вывести на экран конец файла;

n            вывести на экран текст файла, начиная со строки n.

Текстовый полноэкранный редактор vi работает в двух основных режимах: в режиме “ввод текста” и в режиме “команда”.

Режим “ввод текста”. В этот режим редактор переводится с помощью клавиш и :

            набор текста в текущую строку;

< i >            вставка текста в текущую строку перед курсором;

            выход из режима “ввод текста” в режим “команда”.

Режим “команда”. Это - основной режим редактирования текста:

            уничтожение текущего символа, выделенного курсором;

      замена текущего символа на символ, набранный вслед за командой ;

            замена одного или нескольких символов текстом. Например: 2sTEXT - замена двух текущих символов на слово TEXT;

            вставить пустую строку после текущей;

[n]      уничтожить текущее слово или n слов;

[n]
      уничтожить текущую строку или n строк.

Выход из редактора

:wq!            Выход с сохранением;

:q!            Выход без сохранения.


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)


  1. Посчитать количество пользователей в системе.
  2. Отсортировать список файлов текущей директории в обратном порядке и записать его в файл.
  3. Посчитать количество файлов текущего каталога, содержащих подстроку "include".
  4. Посчитать, сколько раз пользователь X вошел в систему.
  5. Отсортировать список текстовых файлов текущей директории в алфавитном порядке и записать его в файл.
  6. Удалить из текущего каталога все файлы, содержащие подстроку "text".
  7. Объединить все файлы с расширением ".txt" в один файл.
  8. Посчитать, сколько процессов запущено с данного терминала.
  9. Вывести на экран отсортированный в алфавитном порядке список файлов, содержащих подстроку "include".
  10. Написать скрипт, удаляющий все файлы содержащие кодовую сигнатуру из указанного каталога.



  1. Контpольные вопpосы
    1. Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд.
    2. Какие существуют средства группирования команд? Приведите примеры использования.
    3. Как осуществляется перенаправление ввода-вывода?
    4. В чем сущность конвейера команд? Приведите примеры использования.
    5. Как средствами Shell выполнить арифметические действия над Shell-переменной?
    6. Каковы правила генерации имен файлов?
    7. Как выволняется подстановка результатов выполнения команд?
    8. Как интерпретировать строку cmd1 & cmd2 & ?
    9. Как интерпретировать строку cmd1 && cmd2 & ?
    10. Как интерпретировать строку cmd1 || cmd2 & ?
    11. В каком режиме выполняется интерпретатор команд Shell?
    12. Кем и в каком режиме осуществляется чтение потока символов с терминала интерпретатором Shell?