Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 5196 Лабораторна робота №2 на тему Розробка вихідних текстів мовою bash, Операційні системи

Лабораторна робота №2 на тему Розробка вихідних текстів мовою bash, Операційні системи

« Назад

Мета: Ознайомитися зі специфікою опцій команд та отримати практичні навички з розробки вихідних текстів мовою bash.

Теоретичні відомості

Застосування заданих дій по відношенню до всіх файлів заданих розділів файлової системи забезпечує утиліта find.

Синтаксис виклику:

find [шлях [шлях2...]] [вираз]

find рекурсивно досліджує розділи файлової системи, задані аргументами шлях, шлях2... і застосовує по відношенню до кожного файлу дії, задані аргументом вираз.

Примітки щодо застосування.

По замовчанню досліджує розділ файлової системи, що починається з поточного каталогу. Дії по замовчанню – просто виведення повного імені файлу.

Вираз складається з опцій, тестів та дій, розділених операторами. Порядок обробки виразу залежить від операторів та значень (“істина” або “не істина”), які повертають елементи виразу (опції, тести та дії).

Опції модифікують режим роботи find. Завжди повертають істину.

Тести задають критерій відбору файлів. Можуть повертати як істину, так і не істину.

Дії визначають порядок обробки знайдених файлів. Можуть повертати як істину, так і не істину.

Оператори: () (модифікатор порядку виконання), !, not (логічна інверсія), -a, -and (логічне “ТА”), -o, -or (логічне “АБО”),, (кома) (оператор послідовного виконання). Логічне “ТА” є оператором по замовчанню.

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

Якщо два елементи виразу розділені логічним “ТА”, і перший елемент не є істиною, другий елемент не обробляється.

Якщо два елементи виразу розділені логічним “АБО”, і перший елемент є істиною, другий елемент не обробляється.

Якщо елементи розділені оператором послідовного виконання (комою), всі елементи обробляються (зліва направо); причому за результат послідовності приймається результат останнього елемента.

Приклади опцій:

- maxdepth кількість_рівнів

Спускатися не більше ніж на кількість_рівнів рівнів у глибину каталогів.

- mindepth кількість_рівнів

Не застосовувати будь-яких тестів або дій стосовно файлів, що містяться менше ніж на кількість_рівнів рівнів у глибину каталогів, указаних у якості аргументів.

Приклади тестів:

- empty

Істина для порожніх файлів.

- user ім’я_користувача

Істина для файлів, що належать користувачу ім’я_користувача (символьний ідентифікатор).

- group ім’я_групи

Істина для файлів, що належать групі ім’я_групи (символьний ідентифікатор).

- nouser

Істина для файлів, користувач-власник яких не існує.

- nogroup

Істина для файлів, користувач-група яких не існує.

- name шаблон

Істина для файлів із коротким ім’ям шаблон.

- newer файл

Істина для файлів, останній раз модифікованих пізніше ніж файл.

- type тип

Істина для файлів типу, заданого аргументом тип (звичайних файлів, якщо c дорівнює f, каталогів, якщо d, символічних зв’язків, якщо l, іменованих каналів, якщо p, сокетів, якщо s, файлів блочних пристроїв, якщо b, файлів символьних пристроїв, якщо c).

- size розмір[bckw]

Істина для файлів, розмір яких відповідає розмір (у блоках по 512б, якщо вказана літера b, у байтах, якщо c, у кілобайтах, якщо k, у двохбайтових словах, якщо w).

Числові аргументи тестів можуть задаватись у наступних формах:

+n (більше або дорівнює n);

-n (менше або дорівнює n);

n (дорівнює n).

Приклади дій:

- exec команда;

Виконати команду команда. Істина, якщо команда повертає 0. На місце {} серед аргументів команди підставляється ім’я поточного файлу.

- print

Вивести ім’я файлу в новому рядку. Завжди істина. Виконується по замовчанню.

Приклади застосування.

find / -maxdepth 1

Виводить зміст кореневого каталогу.

find /bin /usr/bin /usr/local/bin –name bash

Виводить абсолютні імена всіх файлів із короткими іменами bash, що містяться в каталогах /bin, /usr/bin, /usr/local/bin та всіх їх підкаталогах.

find doc -type f -exec cp {} back \;

Копіює всі звичайні файли з каталогу doc та всіх його підкаталогів у каталог back.

Хід роботи:

1. Створіть два файли ps1.txt і ps2.txt, що містять повний список поточних процесів. Отримайте файл patch.txt з відмінностями ps1.txt від ps2.txt. Видаліть ps2.txt і відновіть його вміст по файлах ps1.txt і patch.txt.

2. Виведіть вміст файлу.Bashrc, замінивши кожен символ табуляції двома пробілами.

3. Отримайте список груп користувачів в системі, відсортований за GID у зворотному числовому порядку.

4. За допомогою find, head і sort отримайте список з десяти файлів у домашньому каталозі, що займають найбільший дисковий простір.

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

6. Визначте, для скількох користувачів оболонка за замовчуванням - bash.

7. Визначте, скільки є користувачів, UID яких більше 100?

8. Виведіть пронумерований список файлів у поточному каталозі.

9. Задайте крок нумерації, що дорівнює двом.

10. Виведіть останні три рядки файлу /etc/passwd, замінивши роздільники - двокрапки на роздільники - вертикальні риски (|).

11. Розділіть файл /etc/passwd на частини по 10 рядків таким чином, щоб ці файли знаходилися в поточному каталозі. Імена файлів повинні починатися з passwd. Виведіть пронумерований список файлів поточного каталогу.

12. Створіть в домашньому каталозі кілька неприхованих порожніх каталогів. Видаліть їх, використовуючи команду xargs.

13. Підведення підсумків. Оформлення та захист звітів по лабораторній роботі.

Додаткове завдання

Є 10 файлів..У кожному файлі є рядки із заголовком і відповідними даними під ними.

Заголовок1

Дані1.1

Заголовок2

Дані1.2

......

Потрібно створити результуючий файл, в якому під заголовками будуть рядки з даними, послідовно склеєними з усіх 10 файлів.

Заголовок1

Дані1.1Дані1.2Дані1.3...

Заголовок2

Дані2.1Дані2.2Дані2.3...

......

З повагою ІЦ "KURSOVIKS"!