Linux Professional Institute Learning Logo.
Перехід до основного вмісту
  • Головна
    • Усі ресурси
    • LPI Навчальні матеріали
    • Стати дописувачем
    • Видавничі партнери
    • Cтати видавничим партнером
    • Про нас
    • FAQ
    • Дописувачі
    • Дорожня карта
    • Контакти
  • LPI.org
3.2 Урок 1
Тема 1: Спільнота Linux та кар'єра у світі вільного програмного забезпечення
1.1 Розвиток Linux і популярні операційні системи
  • 1.1 Урок 1
1.2 Основні застосунки з відкритим кодом
  • 1.2 Урок 1
1.3 Відкрите програмне забезпечення та ліцензування
  • 1.3 Урок 1
1.4 ІКТ навички та робота в Linux
  • 1.4 Урок 1
Тема 2: Як знайти свій шлях у системі Linux
2.1 Основи командного рядку
  • 2.1 Урок 1
  • 2.1 Урок 2
2.2 Використання командного рядку для отримання допомоги
  • 2.2 Урок 1
2.3 Використання папок та перегляд списку файлів
  • 2.3 Урок 1
  • 2.3 Урок 2
2.4 Створення, переміщення та видалення файлів
  • 2.4 Урок 1
Тема 3: Потужність командного рядка
3.1 Архівація файлів через командний рядок
  • 3.1 Урок 1
3.2 Пошук та отримання даних з файлів
  • 3.2 Урок 1
  • 3.2 Урок 2
3.3 Перетворення команд у скрипт
  • 3.3 Урок 1
  • 3.3 Урок 2
Тема 4: Операційна система Linux
4.1 Вибір операційної системи
  • 4.1 Урок 1
4.2 Розуміння апаратного забезпечення комп'ютера
  • 4.2 Урок 1
4.3 Де зберігаються дані
  • 4.3 Урок 1
  • 4.3 Урок 2
4.4 Ваш комп'ютер у мережі
  • 4.4 Урок 1
Тема 5: Безпека та права доступу до файлів
5.1 Основи безпеки та визначення типів користувачів
  • 5.1 Урок 1
5.2 Створення користувачів та груп
  • 5.2 Урок 1
5.3 Керування дозволами та правами власності на файл
  • 5.3 Урок 1
5.4 Спеціальні папки та файли
  • 5.4 Урок 1
How to get certified
  1. Тема 3: Потужність командного рядка
  2. 3.2 Пошук та отримання даних з файлів
  3. 3.2 Урок 1

3.2 Урок 1

Сертифікат:

Linux Essentials

Версія:

1.6

Розділ:

3 Потужність командного рядку

Тема:

3.2 Пошук і вилучення даних з файлів

Урок:

1 з 2

Вступ

У цій лабораторній роботі ми зосередимося на переспрямуванні або передачі інформації з одного джерела до іншого за допомогою спеціальних інструментів. Командний рядок Linux перенаправляє інформацію через певні стандартні канали. Стандартним входом (stdin або канал 0) для команди вважається клавіатура, а стандартним виходом (stdout або канал 1) — екран. Існує також інший канал, який призначений для перенаправлення виведення помилок (stderr або канал 2) команди або повідомлень про помилки програми. Вхід та/або вихід можна перенаправляти.

Під час виконання команди іноді ми хочемо передати певну інформацію команді або перенаправити виведення до певного файлу. Кожна з цих функцій буде розглянута в наступних двох розділах.

Перенаправлення введення-виведення (I/O Redirection)

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

Перенаправлення стандартного виведення

Щоб переспрямувати стандартне виведення до файлу замість екрану, нам потрібно використати оператор >, за яким слідує ім’я файлу. Якщо файл не існує, буде створено новий, якщо існує, то інформація перезапише наявний файл.

Щоб побачити вміст файлу, який ми щойно створили, ми можемо використовувати команду cat. За замовчуванням ця команда відображає вміст файлу на екрані. Зверніться до man-сторінки, щоб дізнатися більше про її функції.

Наведений нижче приклад демонструє функціональність оператора. У першому випадку створюється новий файл, що містить текст “Hello World!”:

$ echo "Hello World!" > text
$ cat text
Hello World!

Під час другого виклику той самий файл перезаписується новим текстом:

$ echo "Hello!" > text
$ cat text
Hello!

Якщо ми хочемо додати нову інформацію в кінець файлу, нам потрібно використовувати оператор >>. Цей оператор також створює новий файл, якщо такого файлу не існує.

Перший приклад показує додавання тексту. Як бачимо, новий текст було додано в наступному рядку:

$ echo "Hello to you too!" >> text
$ cat text
Hello!
Hello to you too!

Другий приклад демонструє, що буде створено новий файл:

$ echo "Hello to you too!" >> text2
$ cat text2
Hello to you too!

Перенаправлення стандартної помилки

Щоб перенаправляти лише повідомлення про помилки, користувачу потрібно буде використати оператор 2>, за яким слід зазначити ім’я файлу, до якого будуть записані помилки. Якщо файл не існує, буде створено новий, інакше файл буде перезаписаний.

Як пояснювалося, каналом для переспрямування стандартної помилки є канал 2. Під час перенаправлення стандартної помилки необхідно вказати канал, на відміну від іншого стандартного виводу, де канал 1 встановлено за замовчуванням. Наприклад, наступна команда шукає файл або каталог з назвою games і тільки помилку записує до файлу text-error, одночасно відображаючи стандартне виведення на екрані:

$ find /usr games 2> text-error
/usr
/usr/share
/usr/share/misc
---------Omitted output----------
/usr/lib/libmagic.so.1.0.0
/usr/lib/libdns.so.81
/usr/games
$ cat text-error
find: `games': No such file or directory
Note

Для отримання додаткової інформації про команду find зверніться до її man-сторінки.

Наприклад, наступна команда буде виконуватися без помилок, тому жодної інформації не буде записано до файлу text-error:

$ sort /etc/passwd 2> text-error
$ cat text-error

Крім стандартного виведення, стандартну помилку також можна додати до файлу за допомогою оператора 2>>. Це допише нову помилку в кінець файлу. Якщо файл не існує, буде створено новий. Перший приклад показує додавання нової інформації до файлу, тоді як другий приклад показує, що команда створює новий файл, коли немає існуючого файлу з таким іменем:

$ sort /etc 2>> text-error
$ cat text-error
sort: read failed: /etc: Is a directory
$ sort /etc/shadow 2>> text-error2
$ cat text-error2
sort: open failed: /etc/shadow: Permission denied

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

Існує один конкретний файл, який технічно є bit bucket (файл, який приймає введення і нічого з ним не робить): /dev/null. Ви можете переспрямувати будь-яку непотрібну інформацію, яку ви не бажаєте відображати або перенаправляти до важливого файлу, як показано в прикладі нижче:

$ sort /etc 2> /dev/null

Перенаправлення стандартного введення

Цей тип перенаправлення використовується для введення даних до команди із зазначеного файлу замість клавіатури. У цьому випадку використовується оператор <, як показано в прикладі:

$ cat < text
Hello!
Hello to you too!

Перенаправлення стандартного введення зазвичай використовується з командами, які не приймають файл в якості аргументу. Команда tr є однією з них. Цю команду можна використовувати для модифікації вмісту файлу, змінюючи символи у файлі певними способами, наприклад, видаляючи будь-який конкретний символ із файлу, приклад нижче показує видалення символу l:

$ tr -d "l" < text
Heo!
Heo to you too!

Для отримання додаткової інформації зверніться до man-сторінки команди tr.

Here Documents

На відміну від перенаправлення виведення, оператор << діє інакше порівняно з іншими операторами. Цей вхідний потік також називається here document. Here document представляє собою блок коду або тексту, який можна перенаправити до команди або інтерактивної програми. Різні типи мов сценаріїв, як-от bash, sh і csh, можуть приймати вхідні дані безпосередньо з командного рядку, не використовуючи жодних текстових файлів.

Як видно з прикладу нижче, оператор використовується для введення даних у команду, тоді як слово після цього оператора не визначає назву файлу. Це слово інтерпретується як роздільник введених даних, і воно не буде розглядатися як вміст, тому cat не відображатиме його:

$ cat << hello
> hey
> ola
> hello
hey
ola

Зверніться до man-сторінки команди cat, щоб знайти більше інформації.

Комбінації

Перша комбінація, яку ми розглянемо, поєднує перенаправлення стандартного виведення та стандартного виведення помилок до одного файлу. Використовуються оператори &> та &>>, & представляє комбінацію каналу 1 та каналу 2. Перший оператор перезаписує вміст наявного файлу, інший додає нову інформацію в кінець файлу. Обидва оператори дозволяють створити новий файл, якщо він не існує, як і в попередніх розділах:

$ find /usr admin &> newfile
$ cat newfile
/usr
/usr/share
/usr/share/misc
---------Omitted output----------
/usr/lib/libmagic.so.1.0.0
/usr/lib/libdns.so.81
/usr/games
find: `admin': No such file or directory
$ find /etc/calendar &>> newfile
$ cat newfile
/usr
/usr/share
/usr/share/misc
---------Omitted output----------
/usr/lib/libmagic.so.1.0.0
/usr/lib/libdns.so.81
/usr/games
find: `admin': No such file or directory
/etc/calendar
/etc/calendar/default

Давайте розглянемо приклад з використанням команди cut:

$ cut -f 3 -d "/" newfile
$ cat newfile

share
share
share
---------Omitted output----------
lib
games
find: `admin': No such file or directory
calendar
calendar
find: `admin': No such file or directory

Команда cut вирізає вказані поля з вхідного файлу за допомогою параметра -f, 3-го поля в нашому випадку. Для того, щоб команда знайшла поле, потрібно також вказати роздільник із параметром -d. У нашому випадку роздільником буде символ /.

Щоб дізнатися більше про команду cut, зверніться до її man-сторінки.

Конвеєри у командному рядку

Перенаправлення здебільшого використовується з метою збереження результату команди для обробки іншою командою. Такий тип проміжного процесу може стати дуже втомливим і складним, якщо ви хочете, щоб дані проходили через кілька процесів. Щоб уникнути цього, ви можете зв’язати команди безпосередньо через конвеєри. Іншими словами, виведення першої команди автоматично стає введенням для наступної команди. Це зв’язування здійснюється за допомогою оператора | (вертикальна смуга):

$ cat /etc/passwd | less
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
:

У наведеному вище прикладі команда less, яка стоїть за оператором конвеєра, змінює спосіб відображення файлу. Команда less відображає текстовий файл в такий спосіб, що дозволяє користувачеві прокручувати на один рядок вгору і вниз за один раз. less також використовується за замовчуванням для відображення man-сторінок, як обговорювалося в попередніх уроках.

Можливе використання кількох конвеєрів одночасно. Проміжні команди, які отримують вхідні дані, потім змінюють їх і формують виведення, називаються фільтрами. Давайте візьмемо команду ls -l і спробуємо порахувати кількість слів з перших 10 рядків виведення. Щоб зробити це, нам доведеться використати команду head, яка за замовчуванням відображає перші 10 рядків файлу, а потім підрахувати слова за допомогою команди wc:

$ ls -l | head | wc -w
10

Як згадувалося раніше, за замовчуванням head відображає лише перші 10 рядків зазначеного текстового файлу. Цю поведінку можна змінити за допомогою спеціальних параметрів. Перегляньте man-сторінку команди, щоб знайти більше інформації.

Існує ще одна команда, яка відображає кінець файлу: tail. За замовчуванням ця команда вибирає останні 10 рядків і відображає їх, але як і для head цю кількість також можна змінити. Перевірте man-сторінку tail для отримання додаткової інформації.

Note

Параметр -f може показувати останні рядки файлу під час його оновлення. Ця функція може стати дуже корисною під час моніторингу поточної активності такого файлу, як syslog.

Команда wc (кількість слів) за замовчуванням підраховує рядки, слова та байти файлу. Як показано у вправі, параметр -w змушує команду підраховувати лише слова у вибраних рядках. Найпоширеніші параметри, які ви можете використовувати з цією командою: -l, що вказує команді підраховувати лише рядки, і -c, який використовується для підрахунку лише байтів. Більше варіантів і параметрів команди, а також більше інформації про wc можна знайти на man-сторінці команди.

Вправи до посібника

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

  2. Відсортуйте вміст файлу contents.txt з поточного каталогу та додайте його в кінець нового файлу з назвою contents-sorted.txt.

  3. Відобразіть останні 10 рядків файлу /etc/passwd і перенаправте їх до нового файлу в вашому каталозі користувача Documents.

  4. Підрахуйте кількість слів у файлі contents.txt і додайте результат до кінця файлу field2.txt у вашому домашньому каталозі. Вам потрібно буде використовувати як перенаправлення введення, так і виведення.

  5. Відобразіть перші 5 рядків файлу /etc/passwd і відсортуйте вихідні дані у зворотному алфавітному порядку.

  6. Використовуючи раніше створений файл contents.txt, підрахуйте кількість символів в останніх 9 рядках.

  7. Підрахуйте кількість файлів під назвою test у каталозі /usr/share та його підкаталогах. Примітка: кожен рядок, виведений командою find, представляє файл.

Дослідницькі вправи

  1. Виберіть друге поле файлу contents.txt та перенаправте стандартне виведення та виведення помилок до іншого файлу під назвою field1.txt.

  2. Використовуючи оператор перенаправлення введення та команду tr, видаліть тире (-) із файлу contents.txt.

  3. Яка найбільша перевага в тому, щоб перенаправляти до файлу тільки помилки?

  4. Замініть усі пробіли, що повторюються, одним пробілом у файлі contents.txt, дані у якому відсортовані за алфавітом.

  5. В одному командному рядку видаліть пробіли, які повторюються (як це було зроблено в попередній вправі), виберіть дев’яте поле і відсортуйте отриманий результат в зворотному алфавітному порядку і без урахування регістру. Скільки конвеєрів довелося використати?

Підсумки

У цій лабораторній роботі ви дізналися про:

  • Типи переадресації.

  • Як використовувати оператори перенаправлення.

  • Як використовувати конвеєри для фільтрації виведення команд.

Команди, які використовувалися в цьому уроці:

cut

Видаляє розділи з кожного рядка файлу.

cat

Відображає або об’єднує файли.

find

Шукає файли в ієрархії каталогів.

less

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

more

Відображає файл, сторінку за раз.

head

Відображає перші 10 рядків файлу.

tail

Відображає останні 10 рядків файлу.

sort

Сортує файли.

wc

За замовчуванням підраховує рядки, слова або байти файлу.

Відповіді до вправ посібника

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

    $ ls -l > contents.txt
  2. Відсортуйте вміст файлу contents.txt з поточного каталогу та додайте його в кінець нового файлу з назвою contents-sorted.txt.

    $ sort contents.txt >> contents-sorted.txt
  3. Відобразіть останні 10 рядків файлу /etc/passwd і перенаправте їх до нового файлу в вашому каталозі користувача Documents.

    $ tail /etc/passwd > Documents/newfile
  4. Підрахуйте кількість слів у файлі contents.txt і додайте результат до кінця файлу field2.txt у вашому домашньому каталозі. Вам потрібно буде використовувати як перенаправлення введення, так і виведення.

    $ wc < contents.txt >> field2.txt
  5. Відобразіть перші 5 рядків файлу /etc/passwd і відсортуйте вихідні дані у зворотному алфавітному порядку.

    $ head -n 5 /etc/passwd | sort -r
  6. Використовуючи раніше створений файл contents.txt, підрахуйте кількість символів в останніх 9 рядках.

    $ tail -n 9 contents.txt | wc -c
    531
  7. Підрахуйте кількість файлів під назвою test у каталозі /usr/share та його підкаталогах. Примітка: кожен рядок, виведений командою find, представляє файл.

    $ find /usr/share -name test | wc -l
    125

Відповіді до дослідницьких вправ

  1. Виберіть друге поле файлу contents.txt та перенаправте стандартне виведення та виведення помилок до іншого файлу під назвою field1.txt.

    $ cut -f 2 -d " " contents.txt &> field1.txt
  2. Використовуючи оператор перенаправлення введення та команду tr, видаліть тире (-) із файлу contents.txt.

    $ tr -d "-" < contents.txt
  3. Яка найбільша перевага в тому, щоб перенаправляти до файлу тільки помилки?

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

  4. Замініть усі пробіли, що повторюються, одним пробілом у файлі contents.txt, дані у якому відсортовані за алфавітом.

    $ sort contents.txt | tr -s " "
  5. В одному командному рядку видаліть пробіли, які повторюються (як це було зроблено в попередній вправі), виберіть дев’яте поле і відсортуйте отриманий результат в зворотному алфавітному порядку і без урахування регістру. Скільки конвеєрів довелося використати?

    $ cat contents.txt | tr -s " " | cut -f 9 -d " " | sort -fr

    У вправі використовуються 3 конвеєри, по одному для кожного фільтра.

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

Наступний Урок

3.2 Пошук та отримання даних з файлів (3.2 Урок 2)

Прочитайте наступний урок

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

LPI є некомерційною організацією.

© 2023 Linux Professional Institute (LPI) - це глобальний стандарт сертифікації та організація підтримки кар'єри для професіоналів з відкритим вихідним кодом. Маючи понад 200 000 власників сертифікатів, це перший і найбільший в світі незалежний від постачальників орган з сертифікації Linux і з відкритим вихідним кодом. LPI має сертифікованих фахівців в більш ніж 180 країнах, здає іспити на декількох мовах і має сотні партнерів по навчанню.

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

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Зв'яжіться з нами
  • Політика конфіденційності та Cookie-файлів

Помітили помилку або хочете допомогти поліпшити цю сторінку? Просимо дайте нам знати.

© 1999–2023 Linux Professional Institute Inc. Всі права захищені.