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