ЛАБОРАТОРНАЯ РАБОТА №1 УПРАВЛЕНИЕ ОС LINUX, ИНТЕРПРЕТАТОР BASH
Цель работы – изучить основные объекты, команды, типы данных и операторы управления интерпретатора BASH; создать скрипт-файл. Теоретическая часть Bash - это sh-совместимый интерпретатор командного языка, выполняющий команды, прочитанные со стандартного входного потока или из файла. Скрипт-файл – это обычный текстовый файл, содержащий последовательность команд bash, для которого установлены права на выполнение. Пример скрипта, выводящего содержимое текущего каталога на консоль и в файл: #!/bin/bash Dir dir > 1.txt Следующие переменные используются командным интерпретатором.
Пример простого скрипта, выводящего на консоль и в файл содержимое каталога, где имя каталога передаётся скрипту в качестве аргументов при запуске: Запуск скрипта: >./home/stud 1.sh Скрипт: #!/bin/bash dir $1 dir $1 > 1.txt Можно создать собственную переменную и присвоить ей значение: A=121 A=”121” let A=121 let “A=А+1” Вывод значения на консоль: echo $A Проверка условия: test[expr] где expr: а) для строк: S1 = S2S1 содержит S2 S1 != S2S1 не содержит S2 -n S1 если длина S1 >0 -z S1 если длина S1 =0 б) целые i1и i2 i1 – ge i2 i1 – gt i2 i1 – ie i2 i1 – et i2 i1 – nt i2 в) файлы -d name_file является ли файл каталогом -f name_file является ли файл обычным файлом -r name_file доступен ли файл для чтения -s name_file имеет ли файл ненулевую длину -w name_file доступен ли файл для записи -x name_file является ли файл исполняемым г) логически операции !exp логическое отрицание (не) exp1 –a exp2 умножение условий (и) exp1 –o exp2 сложение условий (или) Проверка условия: if [expr ] then com 1 Если условие expr=true то команда … (elif expr2 … ) Else … fi Проверка нескольких условий: case string1 in Str 1) … ; ; Str 2) … ; ; Str 3) … ; ; *) // default … ; ; Esac Функция пользователя: fname2 (arg1,arg2...argN) { Организация циклов: 1. for var1 in list do … Done 2. while exp … End 3. until exp // аналог do-while do … Done Порядок выполнения работы 1. Изучить теоретическую часть лабораторной работы. 2. В консольном режиме создать, используя команды из табл.1, в домашней папке подкаталог: /номер_группы/ФИО_студента, где в дальнейшем будут храниться все файлы студента. Перейти в корневой каталог и вывести его содержимое используя команды dir и ls –all , проанализировать различия. 3. Проверить действие команд ps, ps –x, top, htop. Найти в справочной системе используя команду man справку по функциям fprintf, fputc и команде ls. 4. В текстовом редакторе joe (вызов: joe 1.c) написать программу 1.c, выводящую на экран фразу “HELLO SUSE Linux”. Компилировать полученную программу компилятором gcc: gcc 1.c –o 1.exe. Запустить полученный файл 1.exe на выполнение: ./1.exe 5. Написать скрипт, выводящий на консоль и в файл все аргументы командной строки. 6. Написать скрипт, выводящий в файл (имя файла задаётся пользователем в качестве первого аргумента командной строки) имена всех файлов с заданным расширением (третий аргумент командной строки) из заданного каталога (имя каталога задаётся пользователем в качестве второго аргумента командной строки). 7. Написать скрипт, компилирующий и запускающий программу (имя исходного файла и exe- файла результата задаётся пользователем в качестве аргументов командной строки). В случае ошибок при компиляции вывести на консоль сообщение об ошибках и не запускать программу на выполнение.
Варианты индивидуальных заданий
1. Написать скрипт для поиска файлов заданного размера в заданном каталоге (имя каталога задаётся пользователем в качестве третьего аргумента командной строки). Диапазон (мин.- мах.) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки. 2. Написать скрипт с использованием цикла for, выводящий на консоль размеры и права доступа для всех файлов в заданном каталоге и всех его подкаталогах (имя каталога задается пользователем в качестве первого аргумента командной строки). На консоль выводится общее число просмотренных файлов. 3. Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех его подкаталогов (строка и имя каталога задаются пользователем в качестве первого и второго аргумента командной строки). На консоль выводятся полный путь и имена файлов, в содержимом которых присутствует заданная строка, и их размер. Если к какому-либо каталогу нет доступа, необходимо вывести соответствующее сообщение и продолжить выполнение. 4. Написать скрипт поиска одинаковых по содержимому файлов в двух каталогов, например, Dir1 и Dir2. Пользователь задаёт имена Dir1 и Dir2 в качестве первого и второго аргумента командной строки. В результате работы программы файлы, имеющиеся в Dir1, сравниваются с файлами в Dir2 по их содержимому. На экран выводятся число просмотренных файлов и результаты сравнения. 5. Написать скрипт, находящий в заданном каталоге и всех его подкаталогах все файлы, владельцем которых является заданный пользователь. Имя владельца и каталог задаются пользователем в качестве первого и второго аргумента командной строки. Скрипт выводит результаты в файл (третий аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводится общее число просмотренных файлов. 6. Написать скрипт, находящий в заданном каталоге и всех его подкаталогах все файлы заданного размера. Диапазон (мин.- мах.) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки. Скрипт выводит результаты поиска в файл (третий аргумент командной строки) в виде: полный путь, имя файла, его размер. На консоль выводится общее число просмотренных файлов. 7. Написать скрипт подсчитывающий суммарный размер файлов в заданном каталоге и всех его подкаталогах (имя каталога задаётся пользователем в качестве аргумента командной строки). Скрипт выводит результаты подсчёта в файл (второй аргумент командной строки) в виде каталог (полный путь), суммарный размер файлов число просмотренных файлов. ЛАБОРАТОРНАЯ РАБОТА №2 РАБОТА С ФАЙЛАМИ И КАТАЛОГАМИ ОС UNIX Цель работы – изучить основные системные вызовы и функции в ОС UNIX для работы с файлами и каталогами. Теоретическая часть
Функция int main( int argc[] , char *argv[ ] [, char *envp[ ] ] ); Данное объявление позволяет удобно передавать аргументы командной строки и переменные окружения. Определение аргументов: argc - количество аргументов, которые содержатся в argv[] (всегда больше либо равен 1); argv - в массиве строки представляют собой параметры из командной строки, введенные пользователем программы. По соглашению, argv [0] –это команда, которой была запущена программа, argv[1] – первый параметр из командной строки и так далее до argv[argc] – элемент, всегда равный NULL; envp - это массив строк, которые представляют собой переменные окружения. Массив заканчивается значением NULL. Для выполнения операций записи и чтения данных в существующем файле его следует открыть при помощи вызова open (). int open (const char *pathname, int flags, [mode_t mode]); int fopen (const char *pathname, int flags, [mode_t mode]); Второй аргумент системного вызова open - flags - имеет целочисленный тип и определяет метод доступа. Параметр flagsпринимает одно из значений, заданных постоянными в заголовочном файле fcnt1.h. В файле определены три постоянных: O_RDONLY – открыть файл только для чтения, O_WRONLY – открыть файл только для записи, O_RDWR – открыть файл для чтения и записи, или “r”, “w”, “rw” для fopen(). Третий параметр mode устанавливает права доступа к файлуи является необязательным, он используется только вместе с флагом O_CREAT. Пример создания нового файла: # include <sys / types.h> # include <sys / stat.h> # include <fcnt1.h> int Fd1; FILE *F1; F1=fopen (“Myfile2.txt”, “w”, 644); Fd1=open (“Myfile1.txt”, O_CREAT, 644); Системные вызовы stat и fstat позволяют процессу определить значения свойств в существующем файле. #include <sys/types.h> #include <sys/stat.h> int stat (const char *pathname, struct stat *buf); int fstat (int filedes, struct stat *buf); Пример: stat(“1.exe”, &st1); Где pathname – полное имя файла, buf –структура типа stat. Эта структура после успешного вызова будет содержать связанную с файлом информацию. Поля структуры stat включает следующие элементы: struct stat { dev_t st_dev; /* логическое устройство, где находится файл */ ino_t st_ino; /* номер индексного дескриптора */ mode_t st_mode; /* права доступа к файлу */ nlink_t st_nlink; /* количество жестких ссылок на файл */ uid_t st_uid; /* ID пользователя-владельца */ gid_t st_gid; /* ID группы-владельца */ dev_t st_rdev; /* тип устройства */ off_t st_size; /* общий размер в байтах */ unsigned long st_blksize; /* размер блока ввода-вывода */ unsigned long st_blocks; /* число блоков, занимаемых файлом */ time_t st_atime; /* время последнего доступа */ time_t st_mtime; /* время последней модификации */ time_t st_ctime; /* время последнего изменения */ }; Права доступа в Linux. Права доступа к файлам представлены в виде последовательности бит, где каждый бит означает разрешение на запись (w), чтение (r) или выполнение (x). Права доступа записываются для владельца-создателя файла (owner); группы, к которой принадлежит владелец–создатель файла (group); и всех остальных (other). Например, при выводе команды dir запись типа: -rwx r-x r-w 1.exe означает, что владелец файла 1.exe имеет права на чтение, запись и выполнение, группа имеет права только на чтение и выполнение, все остальные имеют права только на чтение. В восьмеричном виде получится значение 0754. В действительности манипулирует файлами не сам пользователь, а запущенный им процесс. Для просмотра прав доступа можно использовать функцию stat. Для записи прав доступа служит функция chmod: #include <sys/types.h> #include <sys/stat.h> int chmod(const char *pathname, mode_t mode); Пример: chmod(“1.exe”, 0777); Каталоги в ОС Linux –это особые файлы. Для открытия или закрытия каталогов существуют вызовы: #include <dirent.h> DIR *opendir (const char *dirname); int closedir( DIR *dirptr); Для работы с каталогами существуют системные вызовы: int mkdir (const char *pathname, mode_t mode) – создание нового каталога, int rmdir(const char *pathname) – удаление каталога. Первый параметр – имя создаваемого каталога, второй – права доступа: retval=mkdir(“/home/s1/t12/alex”,0777); retval=rmdir(“/home/s1/t12/alex”);Заметим, что вызов rmdir(“/home/s1/t12/alex”) будет успешен, только если удаляемый каталог пуст, т.е. содержит записи “точка” (.) и “двойная точка” (..). Для чтения записей каталога существует вызов: struct dirent *readdir(DIR *dirptr);Структура dirent такова: struct dirent { long d_ino; off_t d_off; unsigned short d_reclen; char d_name [1]; };Поле d_ino - это число, которое уникально для каждого файла в файловой системе. Значением поля d_off служит смещение данного элемента в реальном каталоге. Поле d_name есть начало массива символов, задающего имя элемента каталога. Данное имя ограничено нулевым байтом и может содержать не более MAXNAMLEN символов. Тем самым описываемая структура имеет переменную длину, хранящуюся в поле d_reclen.Пример вызова: DIR *dp; struct dirent *d; d=readdir(dp);При первом вызове функция readdir в структуру dirent будет считана первая запись каталога. После прочтения всего каталога в результате последующих вызовов readdir будет возвращено значение NULL. Для возврата указателя в начало каталога на первую запись существует вызов: void rewindir(DIR *dirptr);Чтобы получить имя текущего рабочего каталога существует функция: char *getcwd(char *name, size_t size);Время в Linux отсчитывается в секундах, прошедшее с начала этой эпохи (00:00:00 UTC, 1 Января 1970 года). Для получения системного времени можно использовать следующие функции: #include <sys/time.h> time_t time (time_t *tt); int gettimeofday(struct timeval *tv, struct timezone *tz); struct timeval { long tv_sec; /* секунды */ long tv_usec; /* микросекунды */ };
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... ![]() ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (2883)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |