Санкт-Петербургский Государственный Политехнический Университет
Факультет Технической Кибернетики
Кафедра Компьютерных систем и Программных технологий
Отчет
о лабораторной работе №1
«ИНТЕРПРЕТАТОРЫ КОМАНДНОЙ СТРОКИ ОС LINUX»
по дисциплине «Системное программное обеспечение».
Работу выполнил студент группы 4081/2
Преподаватель:
Санкт-Петербург
2010
1. Цель работы.
1.1. Изучение основных команд пользовательского интерфейса.
1.2. Изучение цикла подготовки и исполнения программ.
1.3. Изучение команд и утилит обработки текстов.
1.4. Знакомство с существующими интепретаторами.
2. Выполнение работы.
2.1. Основы работы с командным интерфейсом.
В ходе выполнения лабораторной работы используется режим терминала. В этом режиме обработку командных строк осуществляет интерпретатор командной строки - shell.
Синтаксис команд в большинстве случаев имеет вид: имя_команды [флаги] [аргументы] .
Команда передается системе только после нажатия <Enter>.
Информационные команды.
Печать даты.
$ date
Thu Oct 14 12:52:16 UTC 2010
Вывод результатов выполнения в файл lab1.txt. Информация дописывается к уже имеющейся (при использовании символа ‘>’ вместо ‘>>’ информация пишется с начала файла).
$ date >> lab1.txt
Кто находится в системе.
$ who
gr40812 ttyp0 17 Nov 15:04
Активный пользователь (входное имя).
$ who am i
gr40812 ttyp0 17 Nov 15:04
Полное имя терминала.
$ tty
/dev/ttyp0
Имя UNIX-системы.
QNX
Приостановка терминала.
Приостановка терминала на 5 секунд. Возможность ввести и выполнить команду появится через 5 секунд.
$ sleep 5
Приостановка терминала на 10000 секунд. Из простоя терминал можно вывести нажатием комбинации клавиш ctrl+v.
$ sleep 10000
[4] + Stopped sleep 10000
Справочное руководство.
Вывод информации о команде who (справка).
$ use who
who - display logged in users
Usage:
who [<user>] Print list of all logged in users or if <user> is logged in.
who am I Print the terminals you are logged into.
Работа с файлами.
Вывод информации о содержимом каталога.
$ ls
lab1.txt lab1term.txt
Некоторые из возможных ключей:
-d - Вывод информации о каталогах, как об обычных файлах.
-p - Вывод полного пути к файлам.
-R - Рекурсивный просмотр подкаталогов.
Вывод подробной информации о содержимом каталога (тип файла (обычный, директория, очередь), права, количество жестких ссылок, владелец, размер, дата последней модификации, имя файла).
$ ls -l
total 8
-rw-rw-r-- 1 gr40811_9 100 519 Oct 14 13:14 lab1.txt
-rw-rw-r-- 1 gr40811_9 100 2929 Oct 14 13:10 lab1term.txt
Вывод информации о конкретном содержимом.
$ ls lab1.txt
lab1.txt
Не указано расширение!
$ ls lab1
ls: No such file or directory (lab1)
Открытие файла.
cat lab1.txt
Файлы откроются один за другим.
cat lab1.txt lab1term.txt
Создали новый файл.
$ cat > name1.txt
[6] + Stopped cat
Вывод содержимого каталога.
$ ls
lab1.txt lab1term.txt name1.txt
Переименование (пересылка от одного имени к другому).
$ mv name1.txt name2.txt
Вывод содержимого каталога (вместо name1 уже name2).
$ ls
lab1.txt lab1term.txt name2.txt
Открыть файл с именем name1 уже не получится.
$ cat name1.txt
name1.txt: No such file or directory
А открыть файл с именем name2 возможно.
$ cat name2.txt
аaa
Копирование файла в файл с именем copyn2 (в текущий каталог).
$ cp name2.txt copyn2.txt
Теперь в каталоге есть и файл copyn2.
$ ls
copyn2.txt lab1.txt lab1term.txt name2.txt
Скопируем еще раз.
$ cp name2.txt copy2n2.txt
Появился еще один файл.
$ ls
copy2n2.txt lab1.txt name2.txt
copyn2.txt lab1term.txt
Удалим вторую копию.
$ rm copy2n2.txt
Удаление прошло успешно.
$ ls
copyn2.txt lab1.txt lab1term.txt name2.txt
Работа с каталогами.
Определение полного имени текущего каталога.
$ pwd
/home/gr40811_9/Radzivillovich
Содержимое корневого каталога.
$ ls /
bin dev fs lib opt proc sbin usr x86
boot etc home net pkgs root tmp var
При исполнении $ ls –l / будет выведена подробная информация о содержимом корневого каталога.
Переход в вышележащий каталог.
$ cd ..
Будем последовательно переходить в вышележащий каталог, определять его полное имя и содержимое.
$ cd ..
$ pwd
/home/gr40811_9
$ ls
Agamalian dir help9.txt newhelp9.txt prog3.c
Radzivillovich eqv help9_1.txt prog1.c prog3.out
a.out filelog.txt myfile prog1.out report.txt
alex help10.txt myfile.txt prog2.c un_report.txt
cmp_result.txt help9 myfile2.txt prog2.out
$ cd ..
$ pwd
/home
$ ls
LABS gr40811_9 gr40812 gr40812_9
$ cd ..
$ pwd
/
$ ls
bin dev fs lib opt proc sbin usr x86
boot etc home net pkgs root tmp var
$ cd ..
$ pwd
/
$ ls
bin dev fs lib opt proc sbin usr x86
boot etc home net pkgs root tmp var
При нахождении в корневом каталоге при попытке перейти в вышележащий каталог будем все время попадать в тот же корневой каталог.
Определим владельцев каталогов /, /bin, /home.
$ ls –ld /
drwxr-xr-x 15 root root 4096 Oct 03 2008 .
$ ls –ld /bin
drwxrwxr-x 2 root root 8192 Oct 03 2008 .
$ ls –ld /home
drwxrwxr-x 6 root root 4096 Sep 17 2009 .
В домашний каталог можно вернуться командой cd без аргументов.
Создать каталог можно с помощью команды mkdir.
$ cp ../prog.c .
Таким образом мы скопируем файл prog.c из вышележащего каталога в текущий.
Удалять можно только пустые каталоги.
$ rmdir folder1
folder1: Directory not empty
$ rm folder1/prog.c
$ rmdir folder1
Процессы ОС QNX.
Информацию о процессах, связанных с данным терминалом дает утилита ps. С ключом –А эта утилита предоставит информацию о всех процессах, а с ключом –f – выведет полную информацию о процессе.
Поля:
UID – номер владельца процесса
PID – идентификатор процесса
PPID – идентификатор родителя процесса
STIME – время начала процесса
TTY – имя терминала, с которым связан процесс
TIME – процессорное время, затраченное на обработку процесса
CMD –команда, соответствующая процессу
2.2. Изучение цикла подготовки и исполнения программ в ОС Linux.
Цикл выполнения программ в UNIX аналогичен большинству других ОС. Файлы с исходными текстами С-программ должны иметь расширение '.с'. Команда вызова компилятора имеет следующий вид: сс <имя_программы>
При успешном исходе компиляции после нее будет выполнено редактирование связей и сгенерирован выполняемый файл 'a.out'. Для управления процессом компиляции и редактирования связей команда 'сс' имеет несколько опций. Некоторые из них:
-с - подавляется фаза редактирования связей. Генерируется объектный файл, который может быть использован для редактирования связей с помощью команды 'сс' без опции -с; - о <вых.файл> - выполняемый файл, полученный после редактирования связей, будет иметь имя <вых.файл>, а не 'a.out'.
Создадим файл prog.c, содержащий следующий исходный текст С-программы:
#include <stdio.h> main () { printf ("Hello, everybody! "); }
Собрали объектный файл (имя prog.o).
$ cc –с prog.c
Собрали исполняемый файл (имя a.out).
$ cc prog.o
Собрали исполняемый файл с именем hello.
$ cc prog.c -o hello
Запуск исполняемого файла с именем hello.
$ ./hello
Hello, everybody!
Запуск исполняемого файла с именем a.
$ ./a.out
Hello, everybody!
Переназначим вывод в файл:
$ ./hello >> res.txt
В файле записано:
Hello, everybody!
Информация или управляющие параметры могут передаваться в С-программу как аргументы командной строки при запуске программы. При этом указанные в командной строке аргументы передаются функции main() через два ее параметра, первый из которых содержит количество аргументов, а второй является массивом указателей на цепочки символов, содержащие передаваемую в качестве аргументов информацию. Argc - целое число, равное количеству передаваемых аргументов. Это число всегда больше или равно 1, поскольку сама команда считывается первым аргументом, и argv[0] является указателем на цепочку символов, представляющую команду.
Создадим программу, которая получала бы аргументы из командной строки и использовала их в процессе работы, результат работы пусть будет выведен на экран.
#include <stdio.h> main ( argc, argv ) int argc; char *argv []; { if (argc > 1) { if (fopen(argv[1],"r") == NULL) printf("%s: неудача при попытке открыть файл %s",argv[0],argv[1]); else printf("%s: файл %s открыт",argv[0],argv[1]); } else printf("открываемый файл не указан"); }
Откомпилируем и запустим с разными аргументами КС:
$ сс progKS.c –o progKS
$ ./progKS
file to open is not managed$
$ ./progKS qwer
./progKS: can’t open file qwer$
$ ./progKS res.txt
$ ./progKS res.txt txt is opened$
В ОС UNIX есть возможность направлять выходной поток одной программы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.