Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
122
Добавлен:
20.06.2014
Размер:
6.61 Mб
Скачать

16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.

Система каталогов в Unix отличается от windows. Отсутствуют буквы, обозначающие устройства. Путь прописывается через прямой слеш. После входа в систему, оказываемся в домашнем каталоге – место для хранения личных файлов. Чтобы узнать имя текущего каталога вводят команду pwd. Домашний каталог – личное пространство. Узнать, какие файлы находятся в текущем каталоге можно с помощью команды ls. Имеет несколько ключей: ls –lrt

t – сортировка по времени

r – сортировка в обратном порядке

cd – смена каталога, если без параметров, то переход в домашний каталог. cd/ - в корневой, cd bin – переход в bin, находящийся в текущем. cd.. – на уровень выше.

cp –r dir1 dir2 - все содержимое dir1 рекурсивно копируется в dir2. Если dir2 существует, то внутри него будет создан dir1.

mv /dir1 /dir2 – переименовать dir1 в dir2.

rm –r /dir2 – удаление dir2 и все, что в нем (с каталогами работают рекурсивно

mkdir work – создание каталога в текущем

rmdir work – удаление пустого каталога

17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.

С каждым файлом в Unix связано 12-битное слово, называемое правами доступа к файлу. Младшие 9 бит этого слова объединены в три группы по три бита; каждая группа задает права доступа для владельца файла, для его группы и для всех остальных пользователей. Три бита в каждой группе отвечают за право на чтение, запрос и использование файла.

Чтобы узнать права доступа к тому или иному файлу, можно воспользоваться командой ls –l, например:

$ ls -l /bin/cat

-rwxr-xr-x l root root 14232 Feb 4 2003 /bin/cat

Расположенная в начале строки группа символов -rwxr-xr-x показывает тип файла (первый символ; минус означает, что мы имеем дело с обыкновенным файлом, буква d означала бы каталог и т.п.) и права доступа, соответственно, для владельца (в данном случае rwx, т.е. чтение, запись и исполнение), группы и всех остальных (в данном случае r-x , т.е. права на запись отсутствуют). Таким образом, файл /bin/cat доступен любому пользователю на чтение и исполнение, но модифицировать его может только пользователь root (т.е. администратор).

1 – количество ссылок. (у каталога минимум 2: ссылка на себя и на родителя)

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

14232 – размер файла в байтах

Feb 4 2003 – дата и время последнего изменения

/bin/cat – имя файла

Можно записать слово прав доступа к файлу в виде восьмеричного числа (3 знака  восьмеричная цифра), трехзначного (владелец, группа, остальные пользователи) каждый знак в этом трехзначном восьмеричном числе формируется как сумма прав: 4 права на чтение, 2 права на запись, 1  на использование (из двоичной триады): (111)2=20+21+22=(1+2+4)10.

Например, 7 = 1 + 2 + 4  права r w x: 4 2 1

6 = 0 + 2+ 4  права r: 4 2 0

В трехзначном числе задания прав: 744 для владельца определены все права, для группы  только чтение, для остальных пользователей  только на чтение.

Для использования прав доступа к файлам используется команда chmod, которая позволяет задать новые права доступа в виде восьмеричного числа, например: $ chmod 744 filel.c.

cp f1 f2 – копирует содержимое f1 в f2, если f2 уже существует

-I – для запроса на подтверждение, если не существует, то тогда создаст новый f2

cp f1 f2 /active – копирует f1 и f2 в каталог /active

mv f1 f2 – переименование f1 в f2

mv f1 /dir1 – перемещение f1 в dir1

mv f1 /dir1/f2 - перемещение f1 в dir1 и переименование в f2

rm f1 f2 – удаление f1 и f2

touch f1 – создание файла f1

cat f1 – вывод содержимого файла на экран

cat > f1 – создание f1 с вводом информации с клавиатуры

wc f1 – подсчет строк, слов и символов в файле, если – l – только строки

Перенаправление ввода/вывода.

В Unix каждая программа имеет поток стандартного ввода, стандартного вывода и поток сообщений об ошибках. Им присваиваются дескрипторы – числовые значения, являющиеся указателями на соответствующий поток. Для ввода – 0, вывода – 1, вывода ошибок – 2. Перенаправлять потоки можно, используя эти стандартные дескрипторы.

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

Интерпретатор Bourne Shell предоставляет возможность управления вводом/выводом запускаемых программ. Для перенаправления используются специальные символы: <, >, >>, >$, |

cmd1 > file1 – запустить программу cmd1, направив ее вывод в file1.

cmd2 < file2 – запустить программу cmd2, предоставив ей содержимое file2 в качестве стандартного потока ввода, если файл не существует – произойдет ошибка.

cmd3 > file1 < file2 – запустить cmd3 перенаправив как ввод, так и вывод

cmd1|cmd2 – запустить одновременно cmd1 и cmd2, подав данные со стандартного вывода cmd1 на стандартный ввод cmd2 по конвеерую

cmd4 2 >errfile – направить поток об ошибках при выполнении cmd4 в errfile

cmd5 2 >&1|cmd6 – объединить потоки стандартного вывода и вывода ошибок программы cmd5 и направить все это на стандартный ввод cmd6.

Подавить ввод ошибок:

run 2>/dev/null

/dev/null – псевдоустройство, удаляющее все введенные в него символы.

  1. Управление процессами на уровне интерпретатора. Командные файлы (пример программы).

Список процессов, выполняющихся в настоящий момент:

ps – выдает список процессов, запущенных в данном сеансе работы:

PID TTY TIME CMD

2199 pts/5 00:00:00 bsh

TTY – управляющий терминал процесса.

-ax – список всех существующих процессов.

-axu - список всех существующих процессов + информация о владельцах.

Снять процесс можно сигналами

Kill 2736 – снимает процесс с указанным номером, если процесс не предпринял специальных мер.

Kill -9 2736 – уничтожает процесс в любом случае.

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

inf.j &

Результат: [1] 9112; [1] – номер задания, 9112 – PID задания.

В команде управления заданиями можно указать номер задания.

stop %1 – остановить 1-ое задание

job – выводит информацию о приостановленных и фоновых заданиях с указанием их номеров.

Ctrl + Z – приостановить задачу.

Организация командных файлов. Скрипт – обычный текстовый файл, в котором записаны инструкции интерпретатора. Фактически это файл с программой для выполнения. Первой командой должна быть команда обращения к интерпретатору: #!/bin/sh – тогда последующий текст скрипта будет интерпретироваться именно Bourne Shell.

Язык Bourne Shell поддерживает работу с переменной. Чтобы присвоить ей значение надо написать оператор присваивания: var=value. В имени переменной и вокруг знака присваивания не должно быть пробелов, иначе знак = пойдет как один из параметров командной строки, что не правильно.

Вывести значение переменной на экран можно с помощью команды echo. Для обращения к содержимому переменной требуется спецсимвол $

echo $MyFile – вывод содержимого переменной на экран.

При необходимости скомпоновать слитый текст из значений переменных можно, если имена переменных заключить в {}

I=10

echo ${I}abc вывод: 10abc

cmd1; cmd2 Последовательное выполнение команд cmd1 & Выполнение в фоновом режиме (демон)

cmd1 && cmd2 Выполнение cmd2 в случае успешного завершения cmd1

cmd1 || cmd2 Выполнение cmd2 в случае ненормального завершения cmd1

Для выполнения арифметических действий – двойные круглые скобки:

I=$(($I+5))

Встроенная функция test осуществляет проверку выполнения условия, если условие истина, команда имеет нулевой успешный код возврата, иначе 1 – неуспех. Синоним команды test – квадратные скобки [].

Условия проверки файлов

-f file Файл "file" является обычным файлом. -d file Файл "file" является каталогом -c file Файл "file" является специальным файлом -r file Файл "file" имеет разрешение на чтение -w file Файл "file" имеет разрешение на запись -x file Файл "file" имеет разрешение на исполнение -s file Файл "file" не пустой Условия проверки строк string1=string2  Строки string1 и string2 совпадают string1!=string2 Строки string1 и string2 не совпадают. -n string1          Строка string1 существует -z string1          Строка string1 не существуетУсловия операций с целыми числами

x -eq y            x равно y

x -ne y            x не равно y

x -gt y            x больше y x -ge y            x больше или равно y

x -lt y             x меньше y x -le y             x меньше или равно y В этом случае команда test воспринимает строки именно как целые числа. Нулевому значению так же соответствует пустая строка. Логические операции в контексте test ! (not) Логическое "НЕ" -o (or) Логическое "ИЛИ" -a (and) Логическое "И" Условный оператор "if"   Общий вид использования условного оператора if представляется следующим образом:   if <условие>   then <список команд>   [ elif <условие>   then <список> ]   [else <список> ]   fi   Выражения, выделенные в квадратных скобках, являются необязательными. Т.е. можно представить наиболее употребительную "порезанную" модификацию условного оператора:   if <условие>   then <список команд>   fi   В этом случае если <условие> выполнено (код завершения 0 ) то выполняется <список команд>. В противном случае <список команд> пропускается.   Оператор вызова case   В общем случае синтаксис оператора case выглядит следующим образом:   case <строка> in     шаблон1)            cmd1            cmd2            ........                ;;

           ....      *)           cmdn            ........                ;;    esac   Значение <строка> сравнивается с шаблонами, по порядку. Если было найдено совпадение, тогда выполняются команды соответствующего раздела. Следует отметить, что шаблоны допускают использование масок. Если совпадения не было найдено, тогда выполняются команды из раздела с шаблоном "*" ( аналогично default селектора switch в Си).

Оператор цикла с перечислением for   Синтаксис оператора for в общем случае имеет следующую структуру:   for <имя> [in список значений]      do        <список команд>      done Фрагмент, выделенный в квадратные скобки, может отсутствовать. Оператор for обеспечивает выполнение цикла столько раз, сколько слов в списке значений. При этом переменная <имя> принимает последовательно значения слов из списка. Сам по себе список может формироваться из вывода других команд. Если же список отсутствует, тогда <имя> принимает значения, переданные как позиционные параметры скрипта. Оператор цикла с истинным условием while Синтаксис оператора while в общем случае имеет следующую структуру: while <условие>      do       <список команд>   done Оператор while предпочтителен тогда, когда не известен заранее список значений параметров. Список команд будет выполняться в цикле до тех пор, пока сохраняется истинность условия. При первом входе в цикл условие должно выполняться.   Оператор цикла с ложным условием until   Синтаксис оператора until в общем случае имеет следующую структуру:   until <условие>     do      <список команд>    done   Список команд будет выполняться в цикле до тех пор, пока сохраняется ложность условия. При первом входе в цикл условие не должно выполняться. Следует заметить, что условие цикла проверяется на ложность после каждого, в т.ч. и первой выполненной команды в цикле.

Команда printf берет данные и передает их в поток вывода stdout с возможностью форматирования.

printf “\n Hello_world\n\a” – вывод на новой строке с звуковым сигналом.

Для считывания входных данных – команда read – из потока stdin и если ввод перенаправлен, то можно из файла.

Скрипт сохраняют в файле *.sh и запускают на выполнение в терминале: ./*.sh