Лабораторная работа 1 Изучение основных команд для работы с файлами. 1 Общие сведения
Скачать 408.5 Kb.
|
1 Редактор vi Vi экранный текстовый редактор. Большая часть экрана используется для отображения редактируемого файла. Последняя строка экрана используется для ввода команд и вывода различной информации. Редактор может находиться либо в режиме редактирования, либо в режиме ввода команд. Для того, чтобы совершать какие либо действия Вы должны находиться в нужном режиме. После запуска редактор находится в командном режиме. Для перехода из режима редактирования в командный режим используется клавиша Esc. Для того, чтобы начать редактирование файла используется команда vi имя_файла. Основные возможности в командном режиме • Перемещение по файлу: h, left-arrow переместить курсор влево на один символ j, down-arrow переместить курсор вниз на одну строку k, up-arrow переместить курсор вверх на одну строку l, right-arrow переместить курсор вправо на один символ /text можно использовать клавиши n и Shift-n для перемещения к следующему или предыдущему включению строки. • Переход в режим редактирования: i начать ввод текста перед курсором a начать ввод текста после курсора o вставить строку после текущей и начать ввод текста в ней O вставить строку перед текущей и начать ввод текста в ней • Копирование, вставка и удаление: yy y$ yw скопировать строку, строку от позиции курсора до конца, слово. dd d$ dw удалить строку, строку от позиции курсора до конца, слово. x удалить символ p вставить содержимое буфера после курсора P вставить содержимое буфера перед курсором u отменить последнюю операцию • Сохранение и чтение файлов, выход из редактора: :w :w filename<cr>-сохранить файл под указанным именем; :r filename<cr>-вставить содержимое указанного файла; :q :wq :q! Лабораторная работа №3 Простейшие команды для работы с текстом. 1 Описание команд head [-n count] [file...] Выводит первые countстрок файла (по умолчанию 10). tail [-f] [-n count] [file...] Выводит последние countстрок файла (по умолчанию 10). Если указан ключ -f, то ожидает добавления данных в конец файла и выводит их. comm [-123] file1 file2 Считывает файлы file1 и file2, которые должны быть предварительно отсортированы, и выводит три колонки текста. В первой колонке строки имеющиеся только в file1, во второй имеющиеся только в file2, в третьей имеющиеся в обоих файлах. Параметры -1, -2, -3 позволяют подавить вывод соответствующей колонки. cut {-c list|-f list[-d delim]} [file...] Вырезает из каждой строки указанные символы и выводит их. Аргумент list— список чисел и диапазонов чисел разделенных запятыми. Для -c числа указывают номера символов подлежащих выводу, для -f номера полей. Поля разделены символом delim(по умолчанию символ табуляции). sort [-c|-m] [-o output] [-urnb] [file...] Производит сортировку строк файлов, их объединение или проверяет отсортирован файл или нет. Значения параметров: -c только проверить правильность сортировки -m объединить предварительно отсортированные файлы -u удалять повторяющиеся элементы -r сортировка в обратном порядке -n сортировка чисел -b игнорировать лидирующие пробелы -o output производить вывод в файл output wc [-c|-m][-lw][file...] Читает один или более входных файлов и, по умолчанию, выводит число символов новой строки, слов и байт содержащихся в каждом файле на стандартный вывод. Значения параметров: -c Вывести число байт в каждом входном файле -l Вывести число символов новой строки в каждом входном файле -m Вывести число символов в каждом входном файле -w вывести число слов в каждом входном файле iconv -f codepage1 -t codepage2 [file...] Конвертирует файлы из кодировки codepage1 в кодировку codepage2 и выводит результат на стандартный вывод. Например, iconv -f windows-1251 -t koi8-r file перекодирует файл из кодировки CP1251 в кодировку KOI8-R. 2 Практическое задание Скопируйте в домашний каталог файл /home/labs/text.txt. Выведите первые 10 строк файла text.txt. Выведите последние 10 строк файла text.txt. Отсортируйте строки файла, исключив повторяющиеся, и выведите в файл отчета (lab2.txt) строки с 205-й по 215-ю из полученного результата. (Выполнить одним конвейером, используя команды sort, head, tail). Скопируйте в домашний каталог файл /home/labs/text1.txt. Добавьте в файл отчета все строки файла text.txt которых нет в файле text1.txt. Используйте команду comm, не забудьте отсортировать файлы перед тем, как подавать их на вход команды comm. Подсчитайте число слов в файле text.txt и добавьте его в файл отчета. Файл /etc/passwd содержит учетные записи пользователей. Каждая учетная запись содержится в отдельной строке и состоит из нескольких полей разделенных двоеточиями. Первое поле содержит имя пользователя, третье поле содержит его идентификатор. Выведите отсортированный список пользователей и их идентификаторов в файл отчета. (Воспользуйтесь командами cut и sort). Отредактируйте файл отчета при помощи редактора vi: Добавьте в начало файла строки содержащие номер лабораторной работы и Ваше имя. Скопируйте пять строк файла начиная с пятой и вставьте их в конце файла. Удалите предпоследнюю строку. Лабораторная работа №4 Команды для управления процессами. 1 Процессы Процесс (process) — блок адресного пространства в котором выполняются одна или более нитей, экземпляр выполняемой программы. Любой процесс может запускать другие процессы. Таким образом, процессы в среде UNIX образуют иерархическую структуру. На вершине этой структуры находится процесс init, являющийся предком всех остальных процессов. 1.1 Атрибуты процессов С каждым процессом связан набор атрибутов, которые помогают системе контролировать выполнение процессов и распределять между ними ресурсы системы. Идентификатор процесса (process ID) это целое число однозначно идентифицирующее процесс. Процесс с идентификатором 1 это процесс init. Идентификатор родительского процесса (parent process ID) указывает на родительский процесс. Идентификатор группы процессов (process group ID). Процессы могут объединяться в группы. Каждая группа обозначается идентификатором группы. Процесс, идентификатор которого совпадает с идентификатором группы, называется лидером группы. Идентификатор сеанса (session ID). Каждая группа процессов принадлежит к сеансу. Сеанс связывает процессы с управляющим терминалом. Когда пользователь входит в систему, все создаваемые им процессы будут принадлежать сеансу, связанному с его текущим терминалом. Программное окружение (programm environment) это просто набор строк, заканчивающихся нулевым символом. Строки называются переменными окружения и имеют следующий формат: имя переменной = значение переменной Дескрипторы открытых файлов. Дескриптор файла — некоторое число, которое используется для обращения к файлу. При запуске процесс наследует дескрипторы от родительского процесса. Текущий рабочий каталог это каталог от которого система производит разрешение относительных имен. Текущий корневой каталог это каталог от которого производится разрешение абсолютных имен. Процесс не имеет доступа к файлам находящимся выше корневого каталога. Идентификаторы пользователя и группы. С каждым процессом связаны действительные идентификаторы пользователя (real user ID) и группы (real group ID), совпадающие с соответствующими идентификаторами пользователя, запустившего процесс. Кроме того, с процессом связаны эффективные идентификаторы пользователя (effective user ID) и группы, определяющие права процесса в системе. Обычно, действительные и эффективные идентификаторы совпадают. Приоритет (nice). Значение nice ("дружелюбность") показывает готовность процесса уступить свое процессорное время другим процессам. Чем больше значение nice, тем ниже приоритет процесса. 2 Основные сведения о работе с процессами Основным средством для создания процессов является системный вызов fork. При выполнении данного вызова ядро создает новый процесс, который является копией процесса вызвавшего fork. Созданный процесс называется дочерним, а процесс осуществивший вызов fork — родительским. В дочернем процессе вызов возвращает значение ноль, а в родительском он возвращает идентификатор дочернего процесса. Дочерний процесс наследует дескрипторы открытых файлов и значения переменных окружения родительского процесса. Другой системный вызов для работы с процессами — exec. Он позволяет сменить выполняемую программу. Вызову exec передаются в качестве аргументов имя программы которую надо выполнить и список ее аргументов. При выполнении вызова в пространство памяти вызывающего процесса загружается новая программа, которая запускается с начала. При выполнении вызова exec дескрипторы открытых файлов сохраняют свое значение. Для завершения процесса используется системный вызов exit. Вызов имеет целочисленный аргумент называемый кодом завершения процесса. Как правило при успешном завершении процесса код завершения равен нулю, а в случае возникновения ошибки отличен от нуля. Родительский процесс может получить статус завершения дочернего процесса выполнив системный вызов waitили waitpid. 3 Механизмы межпроцессного взаимодействия UNIX имеет большое число механизмов межпроцессного взаимодействия. Наиболее популярными средствами являются сигналы, программные каналы (pipes) и именованные каналы (FIFO). 3.1 Сигналы Сигналы обеспечивают простой метод прерывания работы процессов. Сигналы используются в основном для обработки исключительных ситуаций. Процесс может определять действия выполняемые при поступлении сигнала, блокировать сигналы, посылать сигналы другим процессам. Существует более двадцати различных сигналов. Основные: SIGCHLD сигнал о завершении дочернего процесса. SIGHUP сигнал освобождения линии. Посылается всем процессам, подключенным к управляющему терминалу при отключении терминала. Многие демоны при получении данного сигнала заново просматривают файлы конфигурации и перезапускаются. SIGINT сигнал посылается всем процессам сеанса, связанного с терминалом, при нажатии пользователем клавиши прерывания (CTRL-C). SIGTERM сигнал приводит к немедленному прекращению работы получившего сигнал процесса. SIGKILL сигнал приводит к немедленному прекращению работы получившего сигнал процесса. В отличие от SIGTERM процесс не может блокировать и перехватывать данный сигнал. SIGSEGV сигнал посылается процессу, если тот пытается обратиться к неверному адресу памяти. SIGSTOP сигнал приводящий к остановке процесса. Для отправки сигнала SIGSTOP активному процессу текущего терминала можно воспользоваться комбинацией клавиш (CTRL-Z). SIGCONT сигнал возобновляющий работу остановленного процесса. SIGUSR1,SIGUSR2 сигналы определяемые пользователем. Для того, чтобы отправить процессу сигнал можно использовать команду kill. Для того, чтобы процесс мог отправить сигнал другому процессу необходимо чтобы эффективные идентификаторы пользователя у посылающего процесса и у процесса получателя совпадали. Процессы с эффективным идентификатором пользователя равным нулю могут посылать сигналы любым процессам. 3.2 Каналы Часто возникает ситуация когда два процесса последовательно обрабатывают одни и те же данные. Для обеспечения передачи данных от одного процесса к другому в подобных ситуациях используются программные каналы. Программный канал (pipe) служит для установления связи, соединяющей один процесс с другим. Запись данных в канал и чтение из него осуществляются при помощи системных вызовов write и read, т.е. работа с каналами аналогична работе с файлами. Для создания программного канала используется системный вызов pipe. Вызов возвращает два дескриптора файлов, первый из которых открыт для чтения из канала, а второй для записи в канал. Каналы используются, например, при организации конвейера. При выполнении команды: find /usr/bin -name a* | sort создается канал, команда find выводит в него результаты своей работы, а команда sort считывает из этого канала данные для сортировки. Главным недостатком программных каналов является то, что они могут использоваться только для связи процессов имеющих общее происхождение (напр., родительский процесс и его потомок). Другой недостаток ограниченное время существования канала (программные каналы уничтожаются после завершения обращающегося к ним процесса). Именованные каналы идентичны программным в отношении записи и чтения данных, но они являются объектами файловой системы. Именованный канал имеет имя, владельца и права доступа. Открытие и закрытие именованного канала осуществляется как открытие и закрытие любого файла, но при чтении и записи он ведет себя аналогично каналу. Для создания именованного канала используется команда mkfifo. Если некоторый процесс открывает именованный канал для записи, то этот процесс блокируется до тех пор, пока другой процесс не откроет этот канал для чтения, и наоборот. 4 Команды для работы с процессами ps [-axewjlu] [-o формат] [-U пользователь] [-p pid] Выводит список и статус процессов работающих в системе. Без аргументов выводит список процессов текущего пользователя, подключенных к терминалу. Значения параметров следующие: -a вывести информацию о процессах всех пользователей. -x вывести информацию о процессах не подключенных к терминалу. -e вывести значения переменных окружения процесса. -w использовать строки длиной 132 символа. Если указан несколько раз, то строки не обрезаются совсем. -j, -l, -u меняют формат вывода информации. -o формат вывести информацию в указанном формате. -U пользователь вывести информацию о процессах указанного пользователя. -p pidвывести информацию о процессе с указанным идентификатором. Значение формата для параметра -o является списком из следующих ключевых слов разделенных запятыми (без пробелов): command командная строка и аргументы. nice уровень nice (приоритет). pgid идентификатор группы процессов. pid идентификатор процесса. ppid идентификатор родительского процесса. rgid, ruid реальные идентификаторы группы и пользователя. uid реальный идентификатор пользователя. tty управляющий терминал Для различных систем параметры и ключевые слова могут сильно различаться. Подробности об использовании ps на конкретной системе можно получить при помощи команды man ps. kill [-s signal| -signal] pid Посылает сигнал указанному процессу. Если значение сигнала опущено, предполагается SIGTERM. signal — символическое имя сигнала без префикса SIG, либо номер сигнала. Пример: kill -HUP 172 — послать сигнал SIGHUP процессу с идентификатором 172. nice [-nice] команда [аргументы] Выполняет команду с меньшим приоритетом. Если niceне задан, то предполагается 10. Значение niceможет быть от -20 (наивысший приоритет) до 20 (наименьший приоритет). Отрицательные числа задаются как –nice. Увеличение приоритета может выполнить только суперпользователь. Пример: nice -10 john users — запустить программу john с пониженным приоритетом. mkfifo [-m режим_доступа] имя Создает именованный канал с указанным именем и режимом доступа. tty Выводит имя текущего терминала. who [am i] Выводит список пользователей работающих в системе. uname [-amnrsv] Выводит информацию о системе. uptime Выводит время работы системы и ее среднюю загрузку за последние 5, 10 и 15 минут. |