Можно уничтожить эти процессы. При уничтожении процессов надо вы должны иметь то же имя пользователя, какое было приписано уничтожаемым процессам (или иметь имя привилегированного пользователя). 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Можно уничтожить эти процессы. При уничтожении процессов надо вы должны иметь то же имя пользователя, какое было приписано уничтожаемым процессам (или иметь имя привилегированного пользователя).



Если параллельно обрабатывается или создается файл с ОДНИМ именем (например, несколько пользователей вызвали в редактор один и тот же файл), то в системе продолжит существование тот вариант файла, который возвращен (записан) в систему последним. Это частая ошибка пользователей персональных компьютеров, которые редактируют один файл параллельно с нескольких экранов.

Круглые скобки "()", кроме выполнения функции группировки, выполняют и функцию вызова нового экземпляра интерпретатора shell.

Пусть мы находились в начальном каталоге "/mnt/lab/asu"

Тогда в последовательности команд

Cd..; ls; ls

две команды "ls" выдадут 2 экземпляра содержимого каталога "/mnt/lab", а последовательность

(cd..; ls) ls

выдаст сначала содержимое каталога "/mnt/lab", а затем содержимое "/mnt/lab/asu", т.к. при входе в скобки вызывается новый экземпляр shell, в рамках которого и осуществляется переход. При выходе из круглых скобок происходит возврат в старый shell и в старый каталог.

МАНИПУЛЯЦИИ С SHELL-ПЕРЕМЕННЫМИ

Несмотря на то, что shell-переменные в общем случае воспринимаются как строки, т.е "35" - это не число, а строка из двух символов "3" и "5", в раде случаев они могут интерпретироваться иначе, например, как целые числа. Разнообразные возможности имеет команда "expr". Проиллюстрируем некоторые на примерах:

Выполнение командного файла:

x=7 y=2

a=`expr $x + $y`; echo a=$a

a=`expr $a + 1`; echo a=$a

b=`expr $y - $x`; echo b=$b

c=`expr $x '*' $y`; echo c=$c

d=`expr $x / $y`; echo d=$d

e=`expr $x % $y`; echo e=$e

Выдаст на экран

a=9

a=10

b=-5

c=14

d=3

e=1

Операция умножения ("*") обязательно должна быть заэкранирована, поскольку в shell этот значек воспринимается, как спецсимвол, означающий, что на это место может быть подставлена любая последовательность символов. Следует обратить также внимание на обязательные пробелы, отделяющие переменные и знаки операций.

С командой "expr" возможны не только (целочисленные) арифметические операции, но и строковые:

A=`expr 'cocktail': 'cock'`; echo $A

B=`expr 'cocktail': 'tail'`; echo $B

C=`expr 'cocktail': 'cook'`; echo $C

D=`expr 'cock': 'cocktail'`; echo $D

На экран будут выведены числа, показывающее число совпадающих символов в цепочках (от начала). Вторая из строк не может быть длиннее первой:

И наконец, об условной замене переменных. Если переменные, скажем "х", "y", "z", не определены, то при обращении к переменным

${x-new} - в качестве значения "x" будет выдано "new",

${y=new} - в качестве значения "у" будет присвоено "new",

${z?new} - в качестве значения "z" будет выдано "z: new" и соответствующая процедура прекращается.

Во всех этих случаях, если переменная была к этому времени определена, то ее значение используется обычным образом.

А в следующем случае наоборот, пусть переменная "v" имеет какое-то значение, тогда

${z+new} - в качестве значения "z" будет выдано "new", а если не было присвоено значение, то пустая строка.

УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:

-f file - файл "file" является обычным файлом;

-d file - файл "file" - каталог;

-с file - файл "file" - специальный файл;

-r file - имеется разрешение на чтение файла "file";

-w file - имеется разрешение на запись в файл "file";

-s file - файл "file" не пустой.

Примеры. Вводя с клавиатуры командные строки в первом случае получим подтверждение (код завершения "0"), а во втором - опровержение (код завершения "1"). "specific" - имя существующего файла.

[ -f specific ]; echo $?

[ -d specific ]; echo $?

УСЛОВИЯ ПРОВЕРКИ СТРОК:

str1 = str2 - строки "str1" и "str2" совпадают;

str1!= str2 - строки "str1" и "str2" не совпадают;

-n str1 - строка "str1" существует (непустая);

-z str1 строка "str1" не существует (пустая).

Примеры.

x="who is who"; export x; [ "who is who" = "$x" ]; echo $?

x=abc; export x; [ abc = "$x" ]; echo $?

x=abc; export x; [ -n "$x" ]; echo $?

x=""; export x; [ -n "$x" ]; echo $?

УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:

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" воспринимает строки символов как целые (!) числа. Поэтому во всех остальных случаях "нулевому" значению соответствует пустая строка. В данном же случае, если надо обнулить переменную, скажем, "x", то это достигается присваиванием "x=0".

Примеры.

x=abc; export x; [ abc -eq "$x" ]; echo $?

"[": integer expression expected before -eq

x=321; export x; [ 321 -eq "$x" ]; echo $?

x=3.21; export x; [ 3.21 -eq "$x" ]; echo $?

"[": integer expression expected before -eq

x=321; export x; [ 123 -lt "$x" ]; echo $?

ЦЕЛЬ ЛАБОРАТОРНОЙ РАБОТЫ

Цель лабораторной работы заключается в приобретении знаний и навыков работы на командном языке UNIX-подобных операционных систем – «Shell».

Эта лабораторная работа поможет студентам сформировать взгляд на развитие современного математического обеспечения ЭВМ, путях его разработки и совершенствования; увидеть все преимущества и недостат­ки ОС UNIX в сравнении с другими операционными системами.

ЭТАПЫ ПОДГОТОВКИ И ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

Прежде чем приступить к выполнению лабораторной работы, необ­ходимо познакомиться с выполнением системных вызовов и команд ОС UNIX. После этого целесообразно подготовить тексты программ.

Перед выходом на ЭВМ желательно познакомиться с описанием ко­манд одного из текстовых редакторов (EE, VI, ED, EDIT, NANO или др.).

При известных идентификаторе и пароле, а также работающем тер­минале процедура входа в систему осуществляется в следующей последовательности:

Установить связь между ЭВМ и Вашим терминалом. Для этого доста­точно выполнить команду putty.exe c указанием IP адреса, номера порта и протокола обмена. После этого систе­ма ответит коротким простым сообщением:

ИМЯ:

Необходимо представить себя системе, т.е. вслед за подсказкой "ИМЯ"(“LOGIN:”) набрать с клавиатуры свой идентификатор и нажать клавишу <ENTER>. Система откликнется сообщением
ПАРОЛЬ: (PASSWORD:)

Ввести свой пароль (он не отображается на экране).

При успешном выполнении этих операций на экране появится знак #, $ или %. Это сигнализирует об успешном входе в систему и является подсказкой интерпретатора shell (# - для привилегированного пользова­теля). Далее можно вводить любую команду системы, в частности, для ввода и редактирования текста, трансляции программы и т.п.

Например, nano а - запись текста программы в файл а c по­мощью экранного редактора nano.

После создания файла а и записи в него программы, можно приступать к его выполнению:

#sh a

где а - имя выходного загрузочного файла;

ПРИМЕРЫ ВЫПОЛНЕНИЯ

Пример 1:

Задание:

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

Листинг программы на Shell:

#!/bin/bash

##chmod 0777 mave.sh

n=0;

name=" ";

Cconst='C program text';

Cconst2='C++ program text';

if [ -e C.txt ]

then rm C.txt

fi

echo $Cconst >> C.txt

echo $Cconst2 >> C.txt

case "$1" in

"son")

ls -l| awk '{print $1}'>info.txt

;;

*)

./mave.sh son

for name in `cat info.txt`

do

sleep 1

symbol=`echo $name | head -c 1`

case $symbol in

-)

echo "обычный файл"

;;

d)

echo "каталог"

;;

p)

echo "Fifo файл"

;;

c)

echo "специальный файл"

;;

esac

done

;;

esac

Пример 2:

Задание:

Написать программу, осуществляющую трансляцию и выполнение файлов на языке программирования Си, имена которых вводятся по запросу.

 

Листинг программы на Shell:

#!/bin/bash

clear

file=null

xy=ull

while [ "$xy"!= "n" ]

do

file=null

echo -n "Введите имя файла:"

read file

w=$file".out"

if [! -f "$file" ]

then

echo "$file не существует"

echo "Завершение"

fi

echo

echo "----------------"

gcc -o $w $file &&./$w

echo

echo "----------------"

xy=null

echo -n "Хотите ввести имя файла:"

read xy

done

 

ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ

Вариант Задание
  Написать программу, осуществляющую вывод в создаваемый по запросу файл через межпроцессный канал из параллельного процесса полного имени текущего каталога и списка файлов текущего каталога.
  Написать программу, осуществляющую выполнение команды ОС UNIX ls таким образом, чтобы данные на стандартный ввод команды ls (ключи, имена файлов) в параллельном процессе потомке поступали из стандарт­ного вывода основного процесса (где они вводились бы по запросу) че­рез межпроцессный канал.
  Написать программу подсчета количества блоков, занимаемых каждым файлом и общего количества блоков для всех файлов текущего каталога. Информацию переслать через межпроцессный канал. И при считывании ее из канала в параллельном процессе извлечь данные только о том файле, имя которого введено по запросу, а также об общем количестве блоков.
  Написать программу поиска в файле, имя которого вводится по зап­росу неограниченное число раз, строки с заданным шаблоном. Получен­ную информацию через область внешних аргументов переслать в парал­лельный процесс и в нем вывести её в файл.
  Написать программу вывода календаря текущего месяца текущего года и по введенной дате определить день недели.
  Написать программу выдачи списка всех пользователей, работающих в настоящее время в системе (имена связанных с ними терминалов и время входа в систему не указывать). Передать полученную информацию через межпроцессный канал в параллельный процесс, где вывести на экран.
  Написать программу поиска и удаления по запросу во всех катало­гах, имеющих общий родительский каталог, файлов с расширением txt.
  Написать программу определения типа файла, указанного при зап­росе. Полученную информацию через файловую систему передать в парал­лельный процесс, где вывести на печать.
  Написать программу, осуществляющую трансляцию и выполнение файлов на языке программирования Си, имена которых вводятся по запросу.
  Написать программу вывода информации о количестве блоков, занима­емых каждым файлом текущего каталога. Передать эту информацию через межпроцессный канал в параллельный процесс и в нем вывести имена тех файлов, размер которых превышает 4 блока.
  Написать программу сортировки файлов текущего каталога по време­ни последнего доступа. Передать полученную информацию через межпро­цессный канал в параллельный процесс и в нем вывести на экран имена только тех файлов, которые отмечены текущей датой.
  Написать программу, предоставляющую информацию обо всех активных процессах в системе. Передать эту информацию через межпроцессный ка­нал в параллельный процесс и вывести в нем идентификаторы всех про­цессов.
  Написать программу подсчета числа строк, слов и символов указан­ного по запросу текстового файла. Полученную информацию передать через межпроцессный канал в параллельный процесс и в нем вывести толь­ко информацию о количестве слов, записав ее при этом в файл.
  Написать программу, предоставляющую информацию о содержимом оче­реди на печать. Передать эту информацию через файловую систему в па­раллельный процесс и в нем вывести на экран дисплея содержимое тех файлов, которые хотят распечатать.
  Написать программу вывода списка всех пользователей, работающих в настоящее время в системе. Передать полученную информацию через файловую систему в параллельный процесс и вывести на экран только имена задействованных терминалов.
  Написать программу, создающую и заполняющую текстовый файл. Ин­формацию текстового файла передать в параллельный процесс через межпроцессный канал. После каждого символа текста вписать в файл порядковый номер и передать через межпроцессный канал в парал­лельный процесс, где разделить каждый символ со своим номером пробе­лом. Из текущего процесса переслать полученную информацию в исходный процесс и там вывести на печать.
  Написать программу, определяющую права доступа для всех файлов текущего каталога. Передать эту информацию через файловую систему в параллельный процесс и вывести данные только о тех файлах, дата соз­дания которых не превышает семи дней от текущей даты.
  Написать программу, объединяющую два введенных по запросу фай­ла в один. Переслать содержимое полученного файла через межпро­цессный канал в параллельный процесс, где получить информацию о ко­личестве строк, слов и символов этого файла.
  Написать программу сравнения и вывода результата двух введенных по запросу файлов. Информацию переслать через межпроцессный канал в параллельный процесс, где определить число блоков, занимаемых каждым из введенных файлов.
  Написать программу, формирующую командный файл, транслирующий и запускающий на выполнение введенный по запросу и переданный через межпроцессный канал файл.
  Написать программу, определяющую права доступа для всех файлов текущего каталога. Передать информацию через файловую систему в параллельный процесс, вывести данные о файлах, дата соз­дания которых не превышает 5 дней от текущей даты.
  Написать программу поиска и удаления по запросу во всех катало­гах, имеющих общий родительский каталог, файлов с расширением txt.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что вы знаете о командном языке Shell?

2. Структура команд Shell.

3. Средства группировки.

4. Основные манипуляции с Shell переменными.



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 309; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.152.98 (0.058 с.)