Файл: Лабораторная работа 1 по дисциплине Операционные системы и оболочки Руководитель работы канд пед наук, доцент.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 298

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт математики и информационных технологий

Кафедра программного обеспечения вычислительной техники и автоматизированных систем


Лабораторная работа № 1

по дисциплине

«Операционные системы и оболочки»

Руководитель работы

канд. пед. наук, доцент

_____________ Е. Н. Наточая

«__» _______________2023 г.
Исполнитель

студент группы З-21ПИнж(б)РПиС

______________ А.Ю. Шалгенбаев

«__» _______________2023 г.


Оренбург 2023

Задание на лабораторную работу


1. Создайте каталог для выполнения лабораторной работы в директории
/home/user/ Все скрипты создавайте внутри этого каталога или его
подкаталогов. (mkdir lab1)
2. Напишите скрипты, решающие следующие задачи:
i) В параметрах при запуске скрипта передаются три целых числа.
Вывести максимальное из них.
ii) Считывать строки с клавиатуры, пока не будет введена строка "q". После
этого вывести последовательность считанных строк в виде одной строки.
iii) Создать текстовое меню с четырьмя пунктами. При вводе пользователем
номера пункта меню происходит запуск редактора nano, редактора vi,
браузера links или выход из меню.
iv) Если скрипт запущен из домашнего каталога, вывести на экран путь к
домашнему каталогу и завершить работу с кодом 0. В противном случае
вывести сообщение об ошибке и завершить работу с кодом 1.
v) Создать файл info.log, в который поместить все строки из файла
/var/log/anaconda/syslog, второе поле в которых равно INFO.
vi) Создать full.log, в который вывести строки файла
/var/log/anaconda/X.log
, содержащие предупреждения и
информационные сообщения, заменив маркеры предупреждений и
информационных сообщений на слова Warning: и Information:
так, чтобы в получившемся файле сначала шли все предупреждения, а
потом все информационные сообщения. Вывести этот файл на экран.
vii) Создать файл emails.lst, в который вывести через запятую все
адреса электронной почты, встречающиеся во всех файлах каталога
/etc.
viii) Вывести список пользователей системы с указанием их UID,
отсортировав по UID. Сведения о пользователей хранятся в файле
/etc/passwd. В каждой строке этого файла первое поле – имя
пользователя, третье поле – UID. Разделитель полей – двоеточие.
ix) Подсчитать общее количество строк в файлах, находящихся в
директории /var/log/ и имеющих расширение log.
x) Вывести три наиболее часто встречающихся слова из man по команде
bash длиной не менее четырех символов.
3. Предъявите скрипты преподавателю и получите вопрос или задание для
защиты лабораторной работы.

Выполнение работы
1. Создайте каталог для выполнения лабораторной работы в директории
/home/user/ Все скрипты создавайте внутри этого каталога или его
подкаталогов.


2. Напишите скрипты, решающие следующие задачи:

1. В параметрах при запуске скрипта передаются три целых числа. Выведите максимальное число

#!/bin/bash

a=$1

b=$2

c=$3

if [[ "$b" -gt "$a" ]]

then a=$b

fi

if [[ "c" -gt "$a" ]]

then a=$c

fi

echo "$a"




2. Считывать строки с клавиатуры, пока не будет введена строка "q". После
этого вывести последовательность считанных строк в виде одной строки.
#!/bin/bash

b=""

read a

b="$b$a"

while [[ "$a" != "q" ]]

do

read a

b="$b$a"

if [[ "$a" == "q" ]]

then break

fi

done

echo "$b"


3. Создать текстовое меню с четырьмя пунктами. При вводе пользователем
номера пункта меню происходит запуск редактора nano, редактора vi,
браузера links или выход из меню.
#!/bin/bash

echo "Vyberite deystvie:"

echo "1 = nano"

echo "2 = vi"

echo "3 = links"

echo "4 = exit"

read a

case $a in

1 )

/usr/bin/nano

;;

2 )

/usr/bin/vim

;;

3 )

/usr/bin/links

;;

4 )

echo "Goodbye"

exit 0

;;

esac



4. Если скрипт запущен из домашнего каталога, вывести на экран путь к
домашнему каталогу и завершить работу с кодом 0. В противном случае
вывести сообщение об ошибке и завершить работу с кодом 1.
#!/bin/bash

if [[ "$HOME" == "$PWD" ]]

then echo "$HOME"

exit 0

fi

if [[ "$HOME" != "$PWD" ]]

then echo "ERROR"

exit 1

fi


5. Создать файл info.log, в который поместить все строки из файла
/var/log/anaconda/syslog, второе поле в которых равно INFO.
#!/bin/bash

grep -E -r -h "^ACPI.*" /var/log/syslog > info.log

grep -E -r -h "^.*[[:alnum:]]\.[[:alpha:]]" /home/pyatkin/lab1/info.log




6. Создать full.log, в который вывести строки файла
/var/log/anaconda/X.log, содержащие предупреждения и
информационные сообщения, заменив маркеры предупреждений и
информационных сообщений на слова Warning: и Information:
так, чтобы в получившемся файле сначала шли все предупреждения, а
потом все информационные сообщения. Вывести этот файл на экран.
#!/bin/bash

inf="\\(II\\)"


war="\\(WW\\)"

grep -E -h -s $war /var/log/Xorg.0.log | sed -E "s/$war/Warning: /" > full.log

grep -E -h -s $inf /var/log/Xorg.0.log | sed -E "s/$inf/Information: /" >> full.log


7. Создать файл emails.lst, в который вывести через запятую все
адреса электронной почты, встречающиеся во всех файлах каталога
/etc.
#!/bin/bash

mail="[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+"

grep -E -h -s -o -w $mail /etc/* | awk '{printf("%s, ",$1)}' | sed -E "s/$mail,\s$//g" > emails.lst


8. Вывести список пользователей системы с указанием их UID,
отсортировав по UID. Сведения о пользователей хранятся в файле
/etc/passwd. В каждой строке этого файла первое поле – имя
пользователя, третье поле – UID. Разделитель полей – двоеточие.
#!/bin/bash

awk '{ FS=":"; print $3, $1;}' /etc/passwd | sort -n -k 1



9. Подсчитать общее количество строк в файлах, находящихся в
директории /var/log/ и имеющих расширение log.
#!/bin/bash

cat /var/log/*.log | wc –l


10. Вывести три наиболее часто встречающихся слова из man по команде
bash длиной не менее четырех символов.
#!/bin/bash

man bash | grep -o -i "[a-zA-Z]\{4,\}" | tr "[:upper:]" "[:lower:]" | sort | uniq -c | sort -r -n | head -3