Команда `install` – це багатофункціональний інструмент для копіювання файлів у операційних системах Linux та macOS. Він особливо корисний для досвідчених користувачів, що цінують ефективність. Прочитайте цю статтю, щоб дізнатися, як використовувати його для оптимізації своєї роботи.
Чи не призначена ця команда для інсталяції програм?
Назва команди `install` може ввести в оману. Насправді вона не встановлює програмне забезпечення. Якщо ви хочете встановити програмний пакет з командного рядка в Ubuntu або іншому дистрибутиві на базі Debian, використовуйте команду `apt-get`. В інших дистрибутивах Linux застосовуйте відповідний інструмент керування пакетами, наприклад `dnf` у Fedora або `zypper` на openSUSE.
Яке ж призначення команди `install`?
Команда `install` об’єднує функціональність команд `cp` (копіювання), `chown` (зміна власника), `chmod` (зміна прав доступу), `mkdir` (створення каталогу) та `strip` (видалення символів). Це дозволяє виконувати всі ці операції в одній команді.
Можливості команди `install`:
- Копіювання файлів, як команда `cp`.
- Визначення, чи потрібно перезаписувати існуючі файли.
- Створення цільового каталогу, якщо він відсутній, як команда `mkdir`.
- Встановлення прав доступу до файлів, як команда `chmod`.
- Встановлення власника файлів, як команда `chown`.
- Видалення зайвої інформації з виконуваних файлів, як команда `strip`.
Незважаючи на широкий спектр можливостей, команда `install` не має великої кількості опцій.
В яких випадках доцільно її використовувати?
Команда `install` не є інструментом для щоденного використання. Вона корисна в специфічних ситуаціях, зокрема під час розробки програмного забезпечення. Уявіть, що ви створюєте нову утиліту. Вам потрібно протестувати її за межами середовища розробки. Для цього потрібно скопіювати файли у тестовий каталог, створити цей каталог, якщо він ще не існує, а також встановити правильні дозволи та права власності на файли.
Оскільки розробка – це ітеративний процес, ви можете повторювати ці дії багато разів. Команда `install` автоматизує цю рутину. Коли ваша утиліта буде готова до розгортання, ви можете використати `install`, щоб скопіювати її з необхідними дозволами у кінцеве місце призначення.
Приклад використання
Припустимо, програміст розробляє нову утиліту під назвою `ana`. Вона складається з виконуваного файлу та бази даних. Після тестування її потрібно скопіювати до каталогу `/usr/local/bin`, щоб вона була доступна всім користувачам системи Linux. Замініть назви файлів та шляхи у нашому прикладі на відповідні вашій системі.
До моменту випуску програма тестуватиметься у каталозі `~/test/ana`. Члени групи `geek` повинні мати права на читання та виконання. Інші користувачі також повинні мати права на читання та виконання. Команда `install` використовує те саме числове представлення для дозволів, що і `chmod`. Програміст встановив наступні дозволи:
Власник: Читання, запис та виконання.
Група: Читання та виконання.
Інші: Лише виконання.
Як використовувати команду `install`?
Робочий каталог нашого вигаданого програміста – `~/work`. Він написав програму, скомпілював її та отримав двійковий файл `ana`. Він також створив файл бази даних `Words.db`. Обидва файли готові до тестування. Розглянемо їх:
ls -l ana Words.db
Утиліта `ana` генерує анаграми з фрази, введеної у командному рядку. Перевірка дуже проста.
Програміст запустив `ana` з фразою “бісквіт” і переконався, що вона працює коректно. Тепер він хоче скопіювати ці два файли до каталогу `~/test/ana`, щоб протестувати утиліту поза середовищем розробки. Для цього він вводить наступну команду:
install -D -v ana Words.db -t ~/test/ana
Використані параметри:
- `-D`: Створення каталогів, включаючи батьківські, якщо потрібно.
- `-v`: Детальний вивід, показує кожен створений каталог і скопійований файл.
- `-t`: Цільовий каталог.
Як бачимо, `install` спочатку створює каталог `~/test`, а потім `~/test/ana`. Файли копіюються по черзі до цільового каталогу.
Перелік файлів у `~/test/ana` підтверджує, що їх скопійовано правильно.
ls -l
Наступний крок – тестування утиліти `ana` у каталозі `~/test/ana`.
Утиліта працює, як і очікувалося. Проте дозволи встановлені неправильно. Потрібно надати членам групи `geek` дозволи на читання та виконання, а іншим користувачам – лише на виконання.
Ми можемо виправити це за допомогою наступної команди. Зверніть увагу на використання `sudo` для запуску команди з правами root, необхідними для опцій `-o`, `-g` та `-m`. Під час виконання команди буде запитано пароль.
sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
Параметри:
- `-b` (резервне копіювання) – створює резервні копії файлів перед перезаписом.
- `-S` (суфікс) – визначає суфікс для резервних копій. Якщо не вказано суфікс, використовується `~` (тильда). Ми вказали використовувати суфікс `.bak`.
- `-o` (власник) – встановлює власника файлу `dave`.
- `-g` (група) – встановлює групу власників файлів `geek`.
- `-m` (режим) – встановлює дозволи для файлів, використовуючи числовий синтаксис `chmod`.
Нам більше не потрібно використовувати параметр `-D` (створення каталогів), оскільки тестовий каталог уже існує. Ми також пропустили параметр `-v` (детальний вивід). Перелік файлів у каталозі `~/test/ana` показує нам деталі файлів:
ls -l
Це підтверджує, що всі вимоги виконано:
- Файли скопійовано до тестового каталогу.
- Дозволи налаштовано правильно.
- `dave` є власником файлів.
- Група `geek` є групою власників обох файлів.
- Створено резервні копії файлів з іменами `ana.bak` та `Words.db.bak`.
Все це було досягнуто за допомогою однієї команди.
Програміст вносить останні зміни до утиліти та перекомпілює її. Змінені файли потрібно скопіювати до каталогу `~/test/ana` з каталогу `~/work`. Це можна зробити за допомогою параметра `-C` (порівняти). Якщо вихідний та цільовий файли ідентичні, вихідний файл не копіюється.
sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
Перелік файлів у цільовому каталозі показує, що розмір файлу `ana` змінився. Він більший за `ana.bak`. Час модифікації `ana` також змінився. Це означає, що було скопійовано нову версію файлу.
ls -l
Розмір файлу та час модифікації `Words.db` не змінилися. Оскільки до файлу `Words.db` не було внесено змін, він не був скопійований. У проєктах з багатьма файлами параметр `-C` (порівняти) може заощадити багато часу та дискового простору, копіюючи лише змінені файли.
Програміст знову перевірив, чи продовжує працювати утиліта `ana`.
Настав час використати `install` для копіювання файлів до каталогу `/usr/local/bin`. Це зробить утиліту доступною всім користувачам комп’ютера. Каталог `/usr/local/bin` вже існує, тому його не потрібно створювати. Ми можемо використати модифіковану версію останньої команди.
Ми змінили цільовий каталог на `/usr/local/bin`. Ми видалили параметр `-C` (порівняти), оскільки у цільовому каталозі ще немає копій цих файлів. Також, немає потреби у резервному копіюванні, тому ми видалили параметри `-b` (резервне копіювання) та `-S` (суфікс).
sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin
Перевіримо, чи файли скопійовано до `/usr/local/bin`:
ls -l
І наостанок, перевіримо, чи можемо ми запустити нашу нову утиліту з нашого домашнього каталогу.
Зверніть увагу, що нам не потрібно було вказувати `./` перед командою `ana`, що означає, що вона виконується з `/usr/local/bin`. Місія виконана.
Раніше ми згадували, що команда `install` може видалити зайві таблиці символів та інший “багаж” з виконуваного файлу, щоб зменшити його розмір. Давайте зробимо це. Зауважте, що команда нижче не містить `Words.db`. Це тому, що `Words.db` – це файл бази даних, а не виконуваний файл. Для того, щоб скопіювати та стиснути двійковий файл `ana`, використаємо наступну команду. Ми додали параметр `-s` (згорнути) з маленькою літерою “s”. Ми знову додали параметри `-b` (резервна копія) та `-S` (суфікс) з великими літерами “S”.
sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin
Перелік файлів у `/usr/local/bin` дозволяє нам порівняти розмір файлу `ana` з його резервною версією. Файл `ana` зменшено майже до 60% від його попереднього розміру.
ls -l /usr/local/bin
Підсумок
Команда `install` має досить специфічне застосування. Багато людей не використовуватимуть її щодня, можливо, навіть щомісяця. Проте, `install` – це корисний інструмент, з яким варто ознайомитися. У тих випадках, коли вона необхідна, вона заощадить ваш час, спростить робочий процес та зменшить кількість натискань клавіш.