Автор Гілка: Школа виживання  (Прочитано 2613 раз)

Відсутній Yaroslav Fedevych

  • Літератор
  • ******
  • дописів: 1069
  • Карма: +0/-0
  • Людина — ніщо, справа — все
Школа виживання
« : 2004-03-17 21:09:53 »
"Навіщо, скажіть мені, я повинен звантажувати меґабайти програм з Інтернету, коли один рядок стандартних команд зробить для мене те саме?" -- підслухано в чаті

В цій темі я хотів би поділитись певними рецептами в стилі "чистої Unix": як виконувати складні задачі за допомогою набору простих і неначе обмежених команд, котрий можна знайти практично в кожній дистрибуції Linux. Ці програми навіть містяться навіть у колекції UnxUtils для Windows -- це означає, що рецепти придатні для застосування практично всюди.

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

Повинен сказати, що використання стандартних інструментів і фантазії дає можливість заощаджувати. Що саме? Подумайте самі: при використанні однієї популярної ОС, або ОС із подібною ідеологією, ви на початку отримуєте обмежений набір програм. Так, усе блищить і сяє, проте коли необхідно серйозно працювати з текстами, коли необхідні складніші маніпуляції з файловою системою, замість комбінувати стандартні засоби, чомусь необхідно викачувати величенькі програми для цієї мети, котрі вимагають і додаткової оплати (а ви ж-бо платите за програми, якими користуєтесь, хіба ні? ;) ).

В той час як користувачі популярної ОС вважають це явище нормальним, у мене нав'язливо крутиться одне запитання: ну невже так складно було закласти в Explorer чи навіть cmd функцію, котра б дозволила мені за одним разом знайти в усьому дереві каталогів файли, котрі б відповідали певному критерієві, і одразу, тим самим махом, зробити з ними те, що я хочу? А хотіти можна по-різному. Наприклад, можна витерти старі файли. А можна взяти текстові файли-таблиці, знайти там за шаблончиком певні рядки, переформатувати їх і вивести в ще один файл, котрий відіслати електронною поштою, попередньо стиснувши...

У вас голова обертом не пішла? Сподіваюсь, ні. Розумієте, Linux таке дозволяє при мінімумі засобів. Та й зусиль, чесно, теж мінімумі. Тут потрібне одне: ота сіра речовина, котра наповнює наші черепні коробки. І якщо в дитинстві вам подобалось творити різні речі з "Лєґо" чи ще радянського "Конструктора", то вам сподобається й запропонований тут спосіб вирішення задач.

Це лише передмова. Конкретні розділи йдуть як окремі дописи.

Нам потрібні, отже, наступні програми, а вони є невід'ємною частиною будь-якого *ніксу. Це: awk, grep, sed, sort, ls, cat, cp, mv, rm. Будуть і інші; проте хочу запевнити, що вам не доведеться йти за ними далеко в Інтернет.

І ще одне: ці дописи не замінять вам довідки. Навпаки, вони заохочують вас нею скористатись, щоб пожиток був якнайповніший. А команда man -- ваш друг...

Відсутній Yaroslav Fedevych

  • Літератор
  • ******
  • дописів: 1069
  • Карма: +0/-0
  • Людина — ніщо, справа — все
Якщо у вас було трохи часу побавитись із командним рядком, або ж ви читали десь щось на цю тему, то, можливо, зауважили таку команду, як ls: її задача -- видрук переліку файлів і каталогів, котрі містяться там, де ви їй скажете. Наприклад, ls $HOME видрукує перелік файлів, наявних у вашому особистому каталозі. Якщо не задавати конкретного каталога, видрукується вміст поточного каталога.

Один з найбільш відомих ключів, котрі приймає ця команда -- це ключ -l. Він змушує вивести повну (більш-менш) інформацію про файли, таку як розмір, дату й час створення, власника та дозволи.

У більшості випадків на цьому вивчення команди й припиняється. Однак ті, хто це робить -- чинить недалекоглядно. Бо ця команда вміє ще деякі речі.

Іноді мені хочеться вивести не лише те, що є в цьому каталозі, а й на нижчих рівнях. Для цього я застосовую ключ -R (сподіваюсь, ви пам'ятаєте, що великі й малі літери -- це не одне й те саме?). Наприклад, ls -lR / видасть перелік усіх файлів системи, до яких я маю хоча б якийсь доступ.

Команда ls не видає файлів, назви котрих котрих починаються з крапки. Якщо це не те, чого ви хотіли б досягнути, вкажіть ключ -a (GNU дає ще довгу команду --all, котра пояснює, гадаю, що й до чого). З цим ключем будуть видрукувані назви всіх файлів.

Проте це може давати на виведення два псевдофайли . і .. -- що теж може бути небажаним (перший вказує на цей каталог, другий -- на попередній). Тоді замість -a дайте ключ -A (від almost all -- майже всі). Це змусить ls вивести все, крім оцих двох файлів.

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

Можна по-різному сортувати перелік. Типовим є зростальний порядок, проте ключем -r його можна змінити на протилежний.

Корисним є сортування за розміром. Вказати цей вид сортування можна ключем -S.

А якщо я хочу дізнатись, до яких файлів я звертався востаннє, мені допоможе ключ -u.  Він упорядковує файли за часом останнього доступу до них.

В сучасних дистрибутивах Linux ls дає красивий кольоровий перелік. Проте іноді кольори можуть бути недоступними (коли видрук проходить через фільтри), і на допомогу приходить ключ -F. Він змушує ls виводити одразу після назви файлу символ-класифікатор, наприклад, / для каталогів, * для викональних файлів чи @ для символьних посилань.



Наразі -- досить про команду ls. В одній з наступних тем обговорюватиметься команда awk, котра дозволяє трохи більше: виконувати довільні дії з тим, що ми виводимо. Проте перед тим ми поговоримо про деякі інші команди.