Интерпретаторы командной строки ос Linux. Изучение основных команд пользовательского интерфейса. Основы работы с командным интерфейсом

Страницы работы

Фрагмент текста работы

Санкт-Петербургский Государственный Политехнический Университет

Факультет Технической Кибернетики

Кафедра Компьютерных систем и Программных технологий

Отчет

о лабораторной работе №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 есть возможность направлять выходной поток  одной программы

Похожие материалы

Информация о работе