Що таке unix-way і з чим його їдять

Що таке unix-way і з чим його їдять


Це повинен знати кожен :) Постараюся в 2-х словах на пальцях галопом по європах пояснити, чим Linux відрізняється від Windows з точки зору організації ПО. У Windows Ви напевно звикли ставити програми-монстри, які роблять відразу все. Треба записати диск - ставимо Nero, яка і пише, і музику конвертує, а останні версії ще і архівують і поділяють на кілька дисків. І таке скрізь. У підсумку маємо програми хапаються відразу за все, і в результаті не роблять толком нічого. Я, звичайно, перебільшую, але все таки. Це і є Windows-way. А ось коли нам необхідно зробити щось добре ми ставимо якусь маленьку утилітки, яка справляється зі своїм завданням ідеально. Так ось, Linux цілком і повністю складається з таких маленьких утиліт, що роблять щось одне, але роблять добре. Ще ці утиліти вміють «спілкуватися» і передавати один одному дані через стандартні потоки stdin і stdout (ну деякі ще й в stderr встигають писати :). Це і є Unix-way.

Що таке unix-way і з чим його їдять


Ось той же приклад з архівуванням на диск. У Windows: ставимо Nero або щось подібне і виконуємо всі завдання в ній. Якщо щось не влаштовує - шукайте альтернативу. У Linux ми спочатку об'єднуємо всі файли в 1 файл (програмою tar), архівуємо (використовуючи gzip, bzip2, z7 - кому що до душі), потім поділяємо архів на кілька частин (програма split), потім робимо з усього цього iso-файли ( використовуємо mkiso) і нарешті записуємо на диски за допомогою cdrecord. Страшно? Всім спочатку страшно. Тому, що здається, що робити все доведеться вручну. Але я вже говорив, що програми в Linux вміють спілкуватися між собою? Говорив. Всю цю операцію можна виконати наступним заклинанням в терміналі:
// далі 1 рядок
$ Tar -cf backup.tar to_backup / *
bzip2 -z -9 backup.tar
mkisofs -joliet-long backup.tar.bz2> backup.iso
cdrecord dev = / dev / cdrw backup.iso

Кхм. ну вобщем на перший погляд це виглядає тарабарщиною, але я зараз все поясню :)

Для початку знайте означає 'якщо те, що зліва виповнилося без помилок, то виконати те, що справа'. Тепер розглянемо кожну команду окремо:
tar -cf backup.tar to_backup / * - тут використовується програма tar. вона вміє поєднувати кілька файлів в один із збереженням шляхів та інших атрибутів. Більше вона нічого не вміє (ну це коротко. Насправді вміє до фіга). Синтаксис у неї такий
tar -cf [загальний файл] [файли]
c означає 'створення архіву', а f - 'виводити в файл, вказаний через пробіл'. У нашому випадку це backup.tar. Після цього, в поточному каталозі у нас з'являється файл backup.tar. Як бачите нічого складного, c і f - це ключі, що вказують програмі що і як робити. Після ключів можуть слідувати параметри. ось f - ключ, а backup.tar - параметр цього ключа. Ключі зазвичай починаються зі знака 'мінус'.

Файл backup.tar ми архівуємо за допомогою архіватора bzip2, який запущений з ключами -z - архівувати і -9 - на максимальному рівні стиснення. І наш backup.tar перетворюється в backup.tar.bz2
Який ми успішно записуємо в файл backup.iso за допомогою mkisofs. Це файл, який містить крім даних файлову систему iso, в якій зберігається інформація на компакт-дисках. Тут варто розглянути докладніше ось який момент. Ми виконали команду
mkisofs -joliet-long backup.tar.bz2> backup.iso. Ну з -joliet-long все повинно бути ясно - це звичайний параметр вказує mkisofs створювати файлову систему з використанням joliet розширення, що дозволяє зберігати файли з іменами довжиною до 127 символів. Але отриманий файл програма mkisofs видасть на стандартний потік виходу stdout. За замовчуванням stdout виводиться на термінал. Не дуже приємно побачити мелькання вмісту 600-мегабайтного файлу, чи не так. ) Тому ми перенаправляємо наш stdout в файл:
mkisofs -joliet-long backup.tar.bz2> backup.iso. За допомогою> весь stdout (в разі mkisofs це .iso-файл) відправився в backup.iso.

cdrecord dev = / dev / cdrw backup.iso> - записали файл на диск. Це звичайний синтаксис утиліти cdrecord.

Загалом спочатку здається що все це непотрібно, і набагато простіше легше і взагалі правильніше клацнути 30 раз мишкою, просуваючись по діалогам Nero. Але це здається тільки на перший погляд. Варто трішки ускладнити завдання, і Nero вже не впорається. Уявімо що каталог to_backup з попереднього прикладу - це щось часто оновлюється і досить важливе, тому необхідно записувати архіви на диск кожен день. Якщо використовувати Nero, то рука клацати втомиться :). А в Linux є програма cron, яка дозволяє запускати інші програми за графіком. Налаштувавши її на виконання цього заклинання кожен день, нам необхідно буде тільки раз в день діставати записану болванку, і вставляти нову. Ось вона де сила.

Ви напевно подумали, що запам'ятати всі параметри всіх команд - неможливо. Так, неможливо. Але це і не потрібно. C кожною програмою поставляється документація, з якою можна дізнатися все необхідне. Ось наприклад мені потрібно знати які ключі має команда df, що показує скільки місця залишилося на гвинті. Я введу
$ Df --help
і отримаю коротку довідку. Якщо мені цього недостатньо, я скористаюся більш докладним мануалом, який мені надасть команда man:
$ Man df
А якщо і це не врятує, полізу в інтернет і дізнаюся там. І вже в останню чергу подзвоню знайомому Linux-гуру і запитаю у нього (і його відповідь буде - 'погуглити' :)

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

Вообщето я хотів написати про деяких корисних утиліти, але щось введення виросло в цілу статтю :). Ну значить в інший раз.

Схожі статті