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

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

Содержание


1.2. Регистрация в системе
1.3. Пользователи системы и владельцы файлов
1.4. Структура файловой системы
1.4.1 Типы файлов
2. Командный язык системы unix. интерпретатор shell
Пример. Переход к начальному каталогу пользователя: cd $HOME
2.2. Получение справки
2.3. Команды работы с каталогами
A. Тип файла
B. Права на использование файла
С. Число связей
D. Пользователь-владелец файла E. Группа-владелец файла
F. Размер файла в байтах G. Дата последней модификации файла H. Имя файла
2.4. Команды работы с файлами
Числовая нотация команды chmod
Символьная нотация команды chmod
Создание жесткой связи
2.5. Команды вывода содержимого файла
2.6. Поиск в файловой системе
Регулярные выражения
...
Полное содержание
Подобный материал:
  1   2

ЛАБОРАТОРНАЯ РАБОТА №1. КОМАНДНЫЙ ИНТЕРПРЕТАТОР

Цель лабораторной работы – ознакомление с командным языком системы UNIX (особенно с командами работы с файловой системой), с перенаправлением потоков ввода/вывода и с программными каналами.

1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

1.1. Общие положения

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

Работу ОС UNIX можно представить в виде функционирования множества взаимосвязанных процессов. При загрузке системы сначала запускается ядро, которое в свою очередь запускает основную задачу, порождающую все последующие процессы – процесс init (процесс № 1).

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

Важной составной частью UNIX является файловая система. Она имеет иерархическую структуру, образующую дерево каталогов и файлов. Корневой каталог обозначается символом "/", путь по дереву каталогов состоит из имен каталогов, разделенных символом "/"

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

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

Обращение к файлу происходит по имени. Локальное имя файла представляет собой набор символов, в версии System V имеющий длину от 1 до 14. В системах, поддерживающих файловую систему FFS имена файлов могут содержать до 255 символов. В качестве символов следует использовать цифры, буквы латинского алфавита и символ ‘_’. Локальное имя файла хранится в соответствующем каталоге. Путь к файлу от корневого каталога называется полным именем файла. Если обращение к файлу начинается с символа "/", то считается, что указано полное имя файла и его поиск начинается с корневого каталога, в любом другом случае поиск файла начинается с текущего каталога.

1.2. Регистрация в системе

Работа пользователя в системе начинается с того, что активизируется сервер терминального доступа getty, который запускает программу login, запрашивающую у пользователя имя и пароль.

Далее происходит проверка аутентичности пользователя в соответствии с той информацией, которая хранится в файле /etc/passwd. В этом файле хранятся записи, содержащие
  • регистрационное имя пользователя;
  • зашифрованный пароль;
  • идентификатор пользователя;
  • идентификатор группы;
  • информацию о минимальном сроке действия пароля;
  • общая информация о пользователе
  • начальный каталог пользователя
  • регистрационный shell пользователя

Если пользователь зарегистрирован в системе и ввел правильный пароль, login запускает программу, указанную в /etc/passwd - регистрационный shell пользователя.

1.3. Пользователи системы и владельцы файлов

Пользователь системы - это объект, обладающий определенными правами, определяющими возможность запуска программ на выполнение, а также владение файлами. Единственный пользователь системы, обладающий неограниченными правами - это суперпользователь или администратор системы.

Система идентифицирует пользователей по т.н. идентификатору пользователя (UID - User Identifier). Каждый пользователь является членом одной или нескольких групп - списка пользователей, имеющих сходные задачи. Каждая группа имеет свой уникальный идентификатор группы (GID - Group Identifier) Принадлежность группе определяет совокупность прав, которыми обладают члены данной группы.

Права пользователя UNIX - это прежде всего права на работу с файлами. Файлы имеют двух владельцев - пользователя (user owner) и группу (group owner).

Соответственно атрибуты защиты файлов определяют права пользователя-владельца файла (u), права члена группы-владельца (g) и права всех остальных (o).

1.4. Структура файловой системы

Файловая система ОС UNIX имеет иерархическую структуру, образующую дерево каталогов и файлов. Корневой каталог обозначается символом "/", путь по дереву каталогов состоит из имен каталогов, разделенных символом "/", например:

/home/work/document

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

Каталог «/» root имеет несколько важных системных директорий, которые

содержат:

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

Иногда файл ядра находится прямо в корневом каталоге /;

/sbin – основные исполняемые программы, используемые в процессе

загрузки и при восстановлении системы;

/dev – специальные файлы, которые представляют периферийные

устройства (например, консоль, построчно-печатное устройство, терминалы пользователя и диски). В длинном листинге ls -l для каждого файла устройства вместо размера указывается два числа: major number и minor number. Major number идентифицирует для ядра драйвер устройства; аналогичные устройства имеют одинаковые major numbers. Minor number идентифицирует конкретный экземпляр устройства.


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

/home – корневой каталог для каталогов пользователей;

/tmp – временные файлы;

/var – корневой каталог для часто изменяющихся файлов (например, файлыlog); В подкаталогах каталога /var хранятся временные или служебные файлы различных программ. Основные подкаталоги каталога /var:

/var/log - журналы регистрации событий в системе.

/var/adm - журналы регистрации событий административного контекста.

/var/mail - новая (непрочитанная) поста пользователей.

/var/spool - различные очереди (на печать, на отправку почты, на выполнение заданий по расписанию).

/var/tmp - различные временные файлы.

/usr – другие каталоги, включая lib и bin.

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

Каждый каталог и файл файловой системы имеет уникальное полное имя - имя, задающее полный путь, оно задает полный путь от корня файловой системы через цепочку каталогов к соответствующему каталогу или файлу). Каталог, являющийся корнем файловой системы (корневой каталог), в любой файловой системе имеет предопределенное имя "/" (слэш). Этот же символ используется как разделитель имен в пути. Полное имя файла, например, /bin/sh означает, что в корневом каталоге должно содержаться имя каталога bin, а в каталоге bin должно содержаться имя файла sh. Коротким или относительным именем файла называется имя (возможно, составное), задающее путь к файлу от текущего рабочего каталога (существует команда и соответствующий системный вызов, позволяющие установить текущий рабочий каталог).

В каждом каталоге содержатся два специальных имени, имя ".", именующее сам этот каталог, и имя "..", именующее "родительский" каталог данного каталога, т.е. каталог, непосредственно предшествующий данному в иерархии каталогов.

Так, например, для структуры, показанной на следующем рисунке доступ к отмеченному на рисунке файлу из текущего каталога возможен по полному имени:

/home/apalko/file2

или по относительному имени:

./../../apalko/file2



Рис.1 Пример дерева каталогов

Каталогам или файлам любые имена в соответствии со следующими правилами:
  • допустимы все символы, за исключением /;
  • некоторые имена лучше не использовать, такие как пробел, табуляция и следующие: ? " # $ ( ) ; < > [ ] | \ * @ ' ~ &. Если Вы воспользуетесь символами пробела или табуляции в имени файла или справочника, то Вы должны заключить имя в двойные кавычки в командной строке;
  • избегайте использования знаков + - или . в качестве первого символа в имени файла;
  • система UNIX различает большие и маленькие буквы именах файлов и каталогов.

Каждый файл ОС UNIX может быть однозначно специфицирован некоторой структурой данных, называемой описателем файла или дескриптором. Эта структура описана в файле , она занимает 64 байта и содержит следующую информацию:

struct dinode

{      unsigned short di_mode;      /* режим доступа и тип файла */

short di_nlink;            /* счетчик числа ссылок на файл */

short di_uid;            /* идентификатор его владельца */

short di_gid;            /* идентификатор группы */

off_t di_size;            /* счетчик числа байт в файле */

char di_addr[40];      /* указатели на блоки диска,

в которых хранится сам файл */

time_t di_atime;      /* дата последнего доступа */

time_t di_mtime;      /* дата последней модификации */

time_t di_ctime;      /* дата создания */

}

Поле di_mode состоит из 16-ти разрядов:



Рис.3. Режим доступа и тип файла

Поле di_addr используется для хранения указателей местоположения блоков диска, содержащих информацию, помещенную в данный файл. В этом поле может храниться 13 указателей, из которых первые 10 относятся к первым десяти блокам файла. Если файл занимает больше места, то в 11-й указатель заносится информация о местоположении первичного блока косвенности, состоящего из ста двадцати восьми 32-битных указателей на блоки файла; 12-й указатель указывает на вторичный блок косвенности, содержащий 128 указателей местоположения первичных блоков косвенности, а 13-й указатель, соответственно, указывает на местоположение третичного блока косвенности, включающего 128 указателей вторичного блока косвенности. Таким образом, используя эту схему адресации, можно обращаться к файлу, состоящему не более чем из (128x128x128+128x128+128+10) блоков. Все эти рассуждения справедливы для блоков размером 512 (128x4) байт.

Обращение к файлу происходит по имени. Локальное имя файла – это набор произвольных символов. Если в среди них встречается точка, то за ней следует так называемое расширение, которое обычно служит для определения типа файла. Например, файлы, хранящие текст, чаще всего имеют расширение "txt" или "doc" (title.doc, book.txt и т.д.), файлы с текстом программ на языке С – расширение "c" (progr.c, code.c и т.п.), исполняемые файлы – расширение "out" или вовсе без расширений. Расширений может быть несколько (например, имя "progr.c.b" может означать старую версию (bak-файл) программы на языке С).

Локальное имя файла хранится в соответствующем каталоге. Путь к файлу от корневого каталога называется полным именем файла. Если обращение к файлу начинается с символа "/", то его поиск начинается с корневого каталога, в любом другом случае поиск файла начинается с текущего каталога. У любого файла может быть несколько имен. Фактически, имя файла является ссылкой на файл, специфицированный номером описателя. Таким образом, располагая имена одного и того же файла в разных каталогах можно в каждом каталоге иметь возможность обращаться к файлу напрямую, а не с помощью указания полного пути.

1.4.1 Типы файлов

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

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

Каталог – это файл особого типа, отличающийся от обычного файла наличием структуры и ограничением по записи: осуществить запись в каталог может только ядро ОС UNIX. Каталог устанавливает соответствие между файлами (точнее, номерами описателей) и их локальными именами. Пример каталога для файловой системы ОС UNIX System V – Рис.2 (2 байта – номера описателей, 14 байтов – локальные имена).

Номер описателя

Имя файла

5412

.

81

..

3009

bin

3413

text.txt

0

cross.c

3601

move.o

Рис.2. Пример каталога UNIX System V

Номер описателя, соответствующий имени ".", – это ссылка на файл, в котором содержится информация о самом каталоге. Номер описателя, соответствующий имени "..", – это ссылка на родительский каталог текущего каталога. Номер описателя равный 0 означает, что ссылка на соответствующий файл удалена из каталога и эта запись каталога считается свободной.

Совокупность всех каталогов специфицирует структуру файловой системы в целом.

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

Канал – это программное средство, связывающее процессы ОС UNIX буфером ввода/вывода


2. КОМАНДНЫЙ ЯЗЫК СИСТЕМЫ UNIX. ИНТЕРПРЕТАТОР SHELL

2.1. Общие положения

В этом разделе описаны команды и символы, имеющие специальное

значение, которые позволяют:

– находить с помощью шаблона и манипулировать группами файлов;

– запускать команду в фоновом режиме или в определенное время;

– выполнять последовательно группу команд;

– перенаправлять стандартные ввод и вывод;

– завершать работающие программы.

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

Помимо запуска на выполнение стандартных команд UNIX и исполняемых файлов, интерпретатор включает собственный язык, который по своим возможностям приближается к высокоуровневым языкам программирования. Этот язык позволяет создавать программы (shell-файлы, скрипты), которые могут включать операторы языка и команды UNIX. Такие файлы не требуют компиляции и выполняются в режиме интерпретации, но они должны обладать правом на исполнение (устанавливается с помощью команды chmod).

Общение пользователя с командным интерпретатором осуществляется вводом команд с клавиатуры после появления промпта (приглашения), обычно, символа '$'. Введенную последовательность символов интерпретатор будет рассматривать либо как имя внутренней команды, либо как имя исполняемого файла.

Процедуре (скрипту) shell могут быть переданы аргументы при запуске. Каждому из первых девяти аргументов ставится в соответствие позиционный параметр от $1 до $9 ($0 - имя самой процедуры), и по этим именам к ним можно обращаться из текста процедуры.

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

Ниже приведены метасимволы, используемые shell:

* ? [ ] – позволяют указывать сокращенные имена файлов при поиске по

шаблону;

& – означает, что команда будет выполняться в фоновом режиме;

; – разделяет команды в командной строке;

\ – отменяет специальное значение символов, таких как *, ?, [, ], &, ;, <,

>, | ;

'...' – отменяют значение пробела как разделителя и специальное значение

всех символов;

"..." – отменяют значение пробела как разделителя и специальное значение

всех символов, за исключением $ и \ ;

> – перенаправляет вывод команды в файл;

< – перенаправляет ввод команды из файла;

>> – перенаправляет вывод команды, который должен быть добавлен в

конец существующего файла;

| – создает канал, направляющий вывод одной команды во ввод другой

команды;

`...` – используется в паре; позволяет использовать вывод команды как

аргументы в командной строке;

$ – используется с позиционными параметрами и определенными поль-

зователем переменными, также используется по умолчанию в

качестве подсказки shell.

Кроме того, для удобства работы с файлами почти все командные интерпретаторы интерпретируют символы '?' и '*', используя их как шаблоны имен файлов (т.н. метасимволы):

? – один любой символ;

* – произвольное количество любых символов.

Например:      *.c – задает все файлы с расширением "c";

pr???.* – задает файлы, имена которых начинаются с "pr", содержат пять символов и имеют любое расширение.

Переменные языка shell

Язык shell позволяет работать с переменными (без предварительного объявления). Имена переменных начинаются с буквы и могут включать буквы и цифры. Обращение к переменным начинается со знака '$'.

Пример. Переход к начальному каталогу пользователя:

cd $HOME

Оператор присваивания. Присвоение значений переменным осуществляется с помощью оператора ‘=’ без пробелов.

Пример:                        s=Hello

echo $s

2.2. Получение справки


Команда

man файл


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

1: Команды пользователя

1M: Команды для системного администрирования

2: Системные вызовы

3 (3B,3S,...): Библиотечные функции

4: Форматы файлов

5: Заголовки, таблицы, макросы, разное

6: Демонстрации

7: Интерфейсы устройств и сети

При упоминании какой-либо команды, функции или системного файла в литературе по Unix часто в скобках указывается номер раздела справочника man, например: "команда ls(1) предназначена для вывода списка файлов". Как правило man сам находит раздел с требуемой справкой, просматривая все разделы по очереди, поэтому для получения справки по команде ls достаточно ввести

man ls

Управление скролингом текста:
  • <пробел> - страница вниз
  • <Enter> - строка вниз
  • <Ctrl>+B - страница вверх
  • /word - поиск слова word
  • q - выход

Однако иногда требуемый термин может находиться сразу в нескольких разделах (printf - команда и библиотечная функция); в этом случае man выдаст документ из первого найденного раздела. Для получения документа из другого раздела используется ключ -s раздел. Для получения списка разделов, в которых встречается требуемый термин используется ключ -l. Ключ -a дает указание вывести все найденные справки из всех разделов друг за другом.

type команда

вывод данных о типе команды

which команда

определение в каком каталоге находится программа

2.3. Команды работы с каталогами

pwd – печать имени текущего каталога. Например:

ls – вывод на экран содержимого каталога:

$ ls [-ключи] [имя каталога]

Если имя каталога не указано, выводится содержимое текущего каталога. Ключи определяют формат выдачи, например:

-l – вывод полной информации о каждом файле;

-a – вывод полного списка файлов, включая "." и "..";

-t – сортировка списка по времени создания;

-C – вывод списка в несколько колонок по алфавиту и т.п.

Пример:       ls -l

выводит список файлов с их атрибутами, например:

-rwxr-xr-- 1 vm97 students 24380 Feb 3 2000 hello

ABBBBBBBBB C DDDD EEEEEEEE FFFFF GGGGGGGGGGGG HHHHH - см. ниже описание полей листинга

A. Тип файла


- обычный файл;

d каталог (фактически, каталог - это специальный файл, в котором перечислены файлы этого каталога);

l символическая связь (файл, содержащий имя другого файла - является сылкой на этот файл; подробности ниже в команде ln);

c символьное устройство (устройство, с которым операции чтения-записи производятся побайтно);

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

p конвейер (pipe; программный канал, организованный в виде очереди, для передачи данных между двумя процессами).


B. Права на использование файла


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

для обычных файлов:

r - право на чтение содержимого файла

w - право на изменение содержимого файла

x - право на исполнение (запуск) файла

для каталогов:

r - право на получение списка файлов каталога

w - право на создание и удаление файлов в каталоге

x - право на "поиск" в каталоге

Набор прав --x для каталога позволяет войти в него и прочитать файл, имя которого заранее известно (при условии наличия прав чтения этого файла). Можно также выполнить команды ls и ls -l для этого файла. При этом получить список файлов (ls (-l) для каталога), а также создать или удалить файл нельзя.

Право r-- для каталога позволяет произвести чтение каталога, то есть получить список имен его файлов. При этом ни войти в каталог, ни узнать атрибуты файлов (ls -l), ни прочесть файл (даже при наличии прав чтения этого файла) нельзя. Создать или удалить файл, естественно, нельзя.

Модификация файла требует прав на запись в файл, так как это операция над файлом. Удаление файла требует прав на запись в каталог, в котором находится этот файл - это операция над каталогом. Наличие права записи в файл не обязательно означает возможность его удалить (хотя можно размер файла уменьшить до нуля).

С. Число связей


Число жестких связей (имён) файла - подробнее см. ниже команду ln. Для каталога - число его подкаталогов (как минимум два - '.' точка и '..' две точки).

D. Пользователь-владелец файла

E. Группа-владелец файла


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

F. Размер файла в байтах

G. Дата последней модификации файла

H. Имя файла



cd – смена директории (каталога):

$ cd [полное_имя_каталога]

При этом указанный каталог станет текущим. Команда cd без аргументов восстановит в качестве текущего каталога начальный каталог пользователя.

mkdir – создание нового каталога:

$ mkdir [-ключи] имя_нового_каталога

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

rmdir – удаление каталога:

$ rmdir список_каталогов

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

du определение суммарного размера каталогов


выводит информацию о суммарном размере файлов в указанном каталоге и - рекурсивно - его подкаталогах (плюс размер собственно каталога); ключ -k означает, что данные выводятся в килобайтах, иначе - в 512-байтных блоках. Если каталог не указан, подразумевается текущий. Ключ -s подавляет рекурсивный вывод информации о подкаталогах - команда сообщает только суммарный объем.


cp -R каталог-источник каталог-приемник

Рекурсивное копирование каталога в другой каталог


2.4. Команды работы с файлами

touch имя_файла

изменяет время последней модификации файла на текущее. Побочный эффект: если файла нет, он создается с нулевым размером.

rm – удаление файлов (ссылок на файл):

$ rm [-ключи] список_файлов

Эта команда удаляет ссылки на файлы (то есть локальные имена файлов), если у пользователя есть право записи в каталог, содержащий эти имена. Если удаляемый файл защищен от записи, команда запрашивает подтверждение на удаление файла. Ключи:
  • -i – вводит необходимость подтверждения для каждого удаляемого файла;
  • -f – отменяет необходимость подтверждения для любого удаляемого файла;
  • -r – задает режим рекурсивного удаления всех файлов и подкаталогов данного каталога, а затем и самого каталога.


Удаление файла на самом деле представляет собой уменьшение на 1 счетчика его имен в индексном дескрипторе; соответствующий системный вызов называется unlink(2). Физически файл удаляется системой если он закрыт и если счетчик имен равен нулю.

chmod – изменение атрибутов защиты файла:

chmod [-R] права файл_или_каталог [файл2 ...]

Необязательный ключ -R распространяет действие команды рекурсивно на содержимое каталогов, если таковые обнаружатся в списке файлов, переданном в командной строке.

Права указываются в одной из двух нотаций: числовой и символьной.

Числовая нотация команды chmod


Набор прав разбивается на 4 тройки:

sst rwx rwx rwx

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

Примеры

--- rwx rwx rwx

0777

--- rwx r-x r-x

0755

--- rw- r-- ---

0640

ss- rwx r-x r-x

6755

--t rwx r-x r--

1754

Лидирующий ноль можно опускать.

Символьная нотация команды chmod


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

Чьи права изменять

Каким образом

Какие именно права

u (владельца)
g (группы)
o (всех остальных)
a (всех трех категорий)

+ (добавить)
- (убрать)

r
w
x

= (сделать такими же)

u (как у владельца)
g (как у группы)
o (как у всех остальных)

u
g

+
-

s (SUID или SGID)

U

+
-

t (Sticky bit)

Примеры:

Добавить группе право на запись:

%chmod g+w file

Убрать у прочих права на запись и исполнение:

%chmod o-wx file

Добавить владельцу и группе права на чтение и запись:

%chmod ug+rw file

Установить права прочих такими же, как у группы

%chmod o=g file

Установить права прочих и группы такими же, как у владельца

%chmod og=u file

Несколько изменений можно перечислять через запятую:

Добавить вдалеьцу право на исполнение, а у группы и прочих убрать право на запись:

%chmod u+x,go-w file


cat – слияние и вывод файлов на стандартное устройство вывода:

$ cat [-ключи] [входной_файл1[входной_файл2...]]

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

cp – копирование файлов:

$ cp вх_файл_1 [вх_файл_2 [...вх_файл_n]] вых_файл

Эта команда имеет два режима использования:
  • если выходной файл есть обычный файл, то входной файл может быть только один; его содержимое копируется в выходной файл. Если выходной файл существовал, то его старое содержимое утрачивается, а атрибуты защиты остаются; если выходной файл не существовал, то он будет создан и унаследует атрибуты входного файла.
  • если выходной файл есть каталог, то в него скопируются все указанные входные файлы, но каталог естественно должен быть создан заранее.

Пример. Скопировать два файла из текущего каталога в указанный с теми же именами:

$ cp f1.txt f2.txt ../usr/petr


mv – пересылка файлов:

$ mv вх_файл_1 [вх_файл_2 [...вх_файл_n]] вых_файл

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

Пример. Перенести файлы с расширением ".c" из указанного каталога в текущий:

$ mv petr/*.c .


ln управление символическими связями

Символическая связь - особый тип файла, содержащий имя другого файла (в листинге ls -l такие файлы обозначаются буквой l в первой колонке). Чтение-запись в файл-связь на самом деле приводят к чтению-записи в файл, на который он ссылается.

Создание символической связи:

ln -s сущетсвующий_файл файл_связь

Создание жесткой связи


В файловой системе UNIX имя файла является указателем на индексный дескриптор, который содержит атрибуты файла и массив адресов дисковых блоков, в которых находятся данные файла. Однако, индексный дексриптор не содержит ссылки на имя файла, следовательно файл может иметь несколько имен. Дексриптор содержит только счетчик числа этих имен, значение которого показывается во второй колонке листинга ls -l.

Создание жесткой связи - это создание еще одного имени, ссылающегося на тот же самый индексный дескриптор:

ln сущетсвующее_имя_файла новое_имя_файла

2.5. Команды вывода содержимого файла

file имя_файла [имя_файла ...]


определяет тип файла путем анализа его содержимого

cat имя_файла

выводит содержимое файла на терминал.

more имя_файла

пейджер (выводит файл постранично, с остановом).

tail [-число] имя_файла

выводит последние 10 строк файла либо указанное число

head [-число] имя_файла

выводит первые 10 строк файла или сколько указано.

Команды работы с текстовыми файлами

grep – поиск шаблона (подстроки) в файлах:

$ grep [-ключи] подстрока список_файлов

Найденные строки выводятся на стандартный вывод в формате, определяемом ключами. Если файлов несколько, то перед каждой строкой выводится имя соответствующего файла. Ключи:
  • -c – вывод имен всех файлов с указанием количества строк, содержащих шаблон;
  • -i – игнорирование регистра (различия строчных и заглавных латинских букв);
  • -n – вывод перед строкой ее относительного номера в файле;
  • -v – вывод строк, не содержащих шаблона (инверсия вывода);
  • -l – вывод только имен файлов, содержащих шаблон.

wc – подсчет количества строк, слов и символов в файлах:

$ wc [-lwc] [список_файлов]

Подсчет строк – ключ -l, слов – ключ -w и символов – ключ -c (по умолчанию -lwc). Если список файлов пуст, то подсчет ведется в стандартном потоке ввода.
  • sort – сортировка файлов:

sort [-ключи] список_файлов

Эта команда сортирует входные файлы по строкам в соответствии с увеличением кодов символов. Ключи:
    • -r – обратный порядок сортировки;
    • -f – не учитывать различие строчных и прописных латинских букв
    • -n – числовой порядок сортировки и т.д.

cmp – вывод места первого расхождения:

$ cmp файл_1 файл_2

Выводит номер символа и номер строки (в текстовых файлах), в которой впервые встречается расхождение во входных файлах. Работает с любыми файлами.

diff – вывод всех расхождений в файлах:

$ diff файл_1 файл_2

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

2.6. Поиск в файловой системе

Поиск по содержимому файлов (grep)


Команда

%grep [-inv] подстрока файл [файл2 ...]

производит поиск указанной подстроки в указанных файлах. Вообще-то grep ищет не строку символов, а регулярное выражение. Если вы используете только алфавитно-цифровые символы, то никаких отличий нет. Однако, не используйте знаки препинания и другие особые символы, если вы не уверены, что они не будут интерпретированы особым образом - как метасимволы регулярного выражения. Регулярные выражения изучаются позже в этом курсе. Команда выводит строки из указанного файла (файлов), в каковых строках найдена указанная подстрока. Если файлов несколько, строка предваряется именем файла с двоеточием.

Основные ключи:

-i - игнорировать отличия верхнего и нижнего регистра (на нерусифицированных системах работает только для латиницы),

-n - вместе со строками выводить и их номера,

-v - выводить строки, в которых не найдена указанная подстрока.

Регулярные выражения


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

Метасимволы, используемые в регулярных выражениях




начало строки







$

конец строки







[]

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







[]

любой символ, кроме символов, заданных в квадратных скобках







.

любой отдельный символ







\

отменяет специальное значение следующего за ним метасимвола







*

указывает, что предыдущий шаблон встречается 0 или более раз







\{n\}

указывает, что предыдущий шаблон встречается ровно n раз







\{n,\}

указывает, что предыдущий шаблон встречается не менее n раз







\{,n\}

указывает, что предыдущий шаблон встречается не более n раз







\{n,m\}

указывает, что предыдущий шаблон встречается не менее n и не более m раз

Примеры регулярных выражений


the

ищутся строки, начинающиеся с буквосочетания "the"

Be$

ищутся строки, заканчивающиеся буквосочетанием "be"

[Ss]igna[lL]

ищутся строки, содержащие буквосочетания: "signal", "Signal", "signaL" или "SignaL"

\.

ищутся строки, содержащие точку

...th

ищутся строки, содержащие символы "th" в 4-й и 5-й позициях

.*\{53\}th

ищутся строки, содержащие символы "th" в 54-й и 55-й позициях

.*\{10,30\}th

ищутся строки, содержащие символы "th" в любых позициях между 11-й и 31-й

.....$

ищутся строки, состоящие из 5 любых символов

t.*e$

ищутся строки, начинающиеся с буквы "t" и заканчивающиеся буквой "e"

[0-9][a-z]

ищутся строки, содержащие комбинацию: цифра-прописная буква

[123]

ищутся строки, не содержащие цифр "1" или "2" или "3"



find каталог [выражение ... ]


Команда проиpзвзодит рекурсивный поиск в указанном каталоге и его подкаталогах. Для каждого файла вычисляются значения указанных в командной строке логических выражений, которые объединяются по "И". Если в итоге получается "ИСТИННО", то имя файла (точнее путь к нему, начиная от указанного в командной строке каталога, выводится в стандартный вывод). Отсутствие выражений - всегда "ИСТИННО" (то есть в это случае find рекурсивно выводит имена всех файлов каталога и его подкаталогов).

Основные выражения find

(Примечание: ниже везде, где есть числовой параметр N, перед ним можно ставить плюс или минус, при этом справедливо следующее правило: "+N" означает "больше, чем N", "-N" означает "меньше, чем N", просто число N означает "равно N".)

-name шаблон_имени_файла

истинно, если имя файла соответствует шаблону; в шаблоне можно использовать символ '*' и т.п. - при этом шаблон надо взять в одинарные кавычки.

-perm ABCD

истинно, если права доступа к файлу точно равны указанным (ABCD); права записываются в числовой нотации команды chmod.

-perm -ABCD

истинно, если указанные права доступа (ABCD) имеются у файла; права записываются в числовой нотации команды chmod.

-type T

истинно, если тип файла равен указанному типу T, где Т - один из символов: f (обычный файл), d (каталог), l (символическая связь), b или c (блочное или символьное устройство), p (конвейер).

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

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

-group имя_группы

истинно, если файл принадлежит указанной группе.

-size Nc

истинно, если размер файла равен N байт (без символа 'c' размер интерпретируется в 512-байтных блоках).

-mtime N

истинно, если содержимое файла было модифицировано N суток назад (т.е. N*24 часов назад).

-atime N

истинно, если последний доступ к файлу имел место N суток назад (т.е. N*24 часов назад).

-ctime N

истинно, если атрибуты файла были модифицировано N суток назад (т.е. N*24 часов назад).

-newer имя_файла

истинно, если файл был модифицирован позже, чем указанный.

-nouser

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

-nogroup

истинно, если группа-владелец файла не найдена в списке групп (например, группа была удалена, а файлы остались).

-a

операция "И" в явном виде.

-o

операция "ИЛИ".

\( \)

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

Пример :найдите в домашнем каталоге все файлы, начинающиеся на "a":

%find . -name 'a*'

найдите в домашнем каталоге все исполнимые владельцем файлы, начинающиеся на "a":

%find . -name 'a*' -perm -0100

2.7. Подсистема управления заданиями


Подсистема управления заданиями (jobs) предназначена для интерактивной работы пользователя с шеллом. Если шелл поддерживает эту систему (/usr/bin/jsh, /usr/local/bin/bash), то пользователь получает дополнительные возможности манипулировать запущенными процессами: перемещать их с переднего плана (foreground, интерактивное исполнение) в фоновый режим (background) и обратно, приостанавливать и возобновлять работу процессов. Каждая команда или конвейер, вводимые пользователем с терминала, называются заданиями (job). В терминах процессов задание представляет собой группу процессов. Каждое задание существует в одном из следующих состояний: интерактивное (foreground), фоновое (background) или приостановленное (stopped). Эти термины определяются следующим образом:
  1. интерактивное задание выполняется и имеет доступ к управляющему терминалу для чтения и записи;
  2. фоновое задание выполняется без доступа к управляющему терминалу, то есть при попытке осуществить запись или чтение с терминала, все процессы группы получат сигнал SIGTTOU или SIGTTIN и будут приостановлены;
  3. приостановленное задание - это задание, находящееся в подвешенном состоянии в результате получения сигнала SIGSTOP, SIGTTIN или SIGTTOU; процессы присотановленного задания не выполняются, пока не будут переведены в интерактивное или фоновое состояние.

Каждое задание, запускаемое шеллом, получает целый положительный номер, который далее отслеживается шеллом и используется как идентификатор конкретного задания. Если вы запускаете некоторый процесс (конвейер) в фоновом режиме, то шелл выводит идентификатор запущенного процесса (группы процессов) и номер задания.

Вдобавок к этому shell отслеживает состояния "текущего" и "предыдущего" заданий. Текущим заданием является задание, запущенное в фоновом режиме или приостановленное из интерактивного состояния последним. Предыдущим заданием является последнее нетекущее задание. Текущее задание помечается в списке заданий плюсом, предыдущее - минусом.

Синтакис указания идентификатора задания имеет вид

%jobid

где идентификатор jobid может быть указан в одном из следующих форматов:

+

текущее задание

-

предыдущее задание

?string

задание, командная строка которого содержит уникальную строку string.

N

задание номер n

pref

задание, в котором pref является уникальным префиксом имени команды (например, если команда find / запущена в фоновом режиме, на это задание можно сослаться как %find); pref не может содержать пустых символов, если они не взяты в кавычки.

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

bg [%jobid]

Восстанавливает выполнение приостановленного задания, переводя его в фоновый режим. Если идентификатор задания %jobid опущен, то команда относится к текущему заданию.

fg [%jobid]

Восстанавливает выполнение приостановленного задания, переводя его в интерактивный режим; также переводит задание, выполняющееся в фоновом режиме в интерактивный. Если идентификатор задания %jobid опущен, то команда относится к текущему заданию.

jobs [-l] [%jobid]

Выводит список заданий, приостановленных или выполняющихся в фоновом режиме. Если указан %jobid, собщает о конкретном задании. С ключом -l (буква "эль") выводит идентификаторы процессов.

kill [ -СИГНАЛ ] %jobid

Версия команды kill для заданий. Команда посылает процессам указаного задания указанный сигнал, по умолчанию - SIGTERM.

Нажатие комбинации -Z приостанавливает текущее интерактивное задание.

ps – получить список всех процессов:

ps [-ключи]
    • При отсутствии ключей будет выведен список процессов самого пользователя (идентификатор процесса, номер терминала и время процессора, затраченное на процесс). Ключи:

-e

вывести информацию обо всех запущенных процессах;

-u пользователь

вывести информацию о процессах указанного пользователя;

-f

"полный" листинг (см. таблицу ниже);

-l

"длинный" листинг (см. таблицу ниже);

-j

вывести индентификаторы группы процессов и сеанса.

Поля вывода команды ps


Поле

Описание

Ключи*

S

Состояние процесса:

O - выполняется (On processor),

R - готов к запуску (Runnable),

S - находится в состоянии сна (Sleeping),

Z - зомби (Zombie),

T - остановлен (Stopped).

l

UID

Идентификатор пользователя, от имени которого запущен процесс (с ключом -f выводится имя пользователя)

f,l

PID

Идентификатор процесса

все

PPID

Идентификатор родительскогопроцесса

f,l

PGID

Идентификатор группы процессов

j

SID

Идентификатор сеанса

j

PRI

Приоритет процесса (чем больше, тем ниже)

l

NI

Относительный приоритет (Nice Number)

l

SZ

Размер процесса в страницах (размер страницы можно узнать командой pagesize)

l

STIME

Время запуска процесса

f

TTY

Управляющий терминал ('?' - для демонов)

все

TIME

Суммарное время, затраченное процессором на исполнение процесса

все

CMD

Имя процесса (с ключом -f выводятся первые 80 символов командной строки)

все

*) - в колонке Ключи указано, какой ключ надо дать команде ps, чтобы соответствующее поле появилось в выводе. Пометка "все" обозначает, что поле выводится всегда, в том числе и при запуске команды без ключей. Ключи -f, -l, -j можно использовать совместно для получения комбинированного вывода. Ключи -f, -l, -j не определяют, о каких процессах выводить данные , а устанавливают только формат вывода. Для отбора процессов используйте ключи -e, -u.

Команда ps имеет также ключ -o (буква "о"), параметром которого является список полей вывода через запятую. Таким образом можно выбрать только необходимые поля, а также вывести дополнительные данные о процессе, не перечисленные в таблице выше. Наименования полей для ключа -o см. в справочнике man.