Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы (2 семестр).docx
Скачиваний:
3
Добавлен:
12.11.2019
Размер:
193.38 Кб
Скачать

Завдання 3

Джерелом вхідних даних для всіх варіантів цього завдання може бути команда печатки вмісту каталогів ls або команда пошуку файлів find. Вихідний потік першої команди направляється в конвеєр, де він може послідовно оброблятися командами обробки текстів: grep, sed, cut, sort і т.п. Якщо в завданні потрібно підрахувати число елементів, в останній ланці конвеєра може бути застосована команда wc.

При виконанні завдання слід мати у виді, що користувацькі групи в системі збігаються з кодами студентських груп (наприклад: "ap109", "ap070b" і т.д.), усе коди починаються з букв "ap"; а імена користувачів формуються як: ім'я_группыnn, де nn - порядковий номер у групі.

Завдання 3 варіант 1

Визначити загальна кількість студентських груп.

Розв'язок:

ls -ld ../* |

Команди виконуються з домашнього каталогу користувача - /home/ім'я_користувача, а інформацію про створених для груп каталогах можна одержати з каталогу /home/, який може адресуватися з поточного каталогу як: ../. Виводимо інформацію про вміст цього каталогу. Опція -l вказується, щоб одержати повну інформацію, включаючи групу, опція -d запобігає обходу підкаталогів. Печатка команди ls перенаправляється в потік.

grep "d.\{24\}ap" |

Ознака підкаталогу - буква "-d" у першій позиції видачі команди ls, а імена груп починаються c 25-й позиції видачі. Команді grep задається шаблон, який визначає ознака каталогу в 1-й позиції й ім'я групи, що починається з букв "ap".

sed -n 's/[ ]\{2,\}/ /gp' |

Оскільки далі буде потрібно виділяти поля, позбудемося множинних пробілів за допомогою команди sed.

cut -f4 -d ' ' |

Виділяється 4-е поле, що містить ім'я групи.

sort |

Результат сортується, це знадобиться для наступної команди. Оскільки зараз у тексті залишився тільки один стовпець, ніяких опцій для сортування ми не вказуємо.

uniq |

Та сама група повторюється для багатьох каталогів, тому слід позбутися від повторюваних рядків.

wc -l

Команда wc підраховує число рядків, що залишилися, результат виводиться на печатку.

Протокол виконання:

Script started on Thu Sep 5 08:20:56 2002

bash2-2.05$ ls -lad ../* | grep "d.\{24\}ap" | sed -n 's/[ ]\{2,\}/ /gp' | cut -f4 -d ' ' |

> sort +0 -1 | uniq | wc -l

7

bash2-2.05$

Script done on Thu Sep 5 08:21:03 2002

Завдання 3 варіант 2

Визначити файли в каталозі /etc, які є символічними посиланнями. Вивести імена файлів і імена тих файлів, на які вони посилаються, упорядкувавши список по першому імені.

Розв'язок:

ls -ld /etc/* |

Виводиться інформація про вміст каталогу, що цікавить нас. Печатка команди ls перенаправляється в потік.

grep "[l]" |

Виділяються ті рядки, які мають в 1-й позиції букву "l" - ознака м'якого посилання.

sort +8 -9 |

Виконується сортування по 9-му стовпцю - імені файлу

sed -n 's/[ ]\{2,\}/ /gp' |

Множинні пробіли заміняються одним пробілом.

cut -f9-100 -d' '

Виділяються поля, починаючи з 9-го - і до кінця.

Протокол виконання:

Script started on Thu Sep 5 08:21:44 2002

bash2-2.05$ ls -ld /etc/* | grep "[l]" | sort +8 -9 | sed -n 's/[ ]\{2,\}/ /gp' | cut -f9-100 -d' '

/etc/grub.conf -> ../boot/grub/grub.conf

/etc/init.d -> rc.d/init.d

/etc/rc -> rc.d/rc

/etc/rc0.d -> rc.d/rc0.d

/etc/rc1.d -> rc.d/rc1.d

/etc/rc2.d -> rc.d/rc2.d

/etc/rc3.d -> rc.d/rc3.d

/etc/rc4.d -> rc.d/rc4.d

/etc/rc5.d -> rc.d/rc5.d

/etc/rc6.d -> rc.d/rc6.d

/etc/rc.local -> rc.d/rc.local

/etc/rc.sysinit -> rc.d/rc.sysinit

/etc/rmt -> ../sbin/rmt

bash2-2.05$

Script done on Thu Sep 5 08:21:51 2002