Фатмавати Ахмад Заенури/Shutterstock.com
install
– это универсальная команда копирования файлов в Linux и macOS. Это идеально подходит для опытных пользователей, которые ищут эффективность. Прочтите эту статью, чтобы узнать, как работать умнее, а не усерднее.
Подождите – это не для установки программного обеспечения?
Команда install
может иметь наиболее вводящее в заблуждение название любой из команд Linux. Это фактически не устанавливает никакого программного обеспечения. Если вы пытаетесь установить программный пакет из командной строки в Ubuntu или другом дистрибутиве на основе Debian, используйте команду apt-get
. В других дистрибутивах Linux используйте вместо этого инструмент управления пакетами вашего дистрибутива Linux, например dnf
в Fedora или zypper
в openSUSE.
Итак, что делает установка?
В двух словах install
объединяет элементы из cp
(копия), chown
(смена владельца), chmod
(изменение команды mode), mkdir
(make directory) и strip
(символы полосы). Это позволяет вам использовать функции из всех в одном действии.
Команда install
может:
-
Скопируйте файлы, например, команду
cp
. - Выберите, следует ли перезаписать существующие файлы.
-
Создайте целевой каталог, если он не существует, например,
mkdir
. -
Установите пользовательские флаги прав доступа к файлам, аналогично команде
chmod
. -
Установите владельца файлов, как команда
chown
. -
Удалите ненужный багаж из исполняемых файлов, как команда
strip
.
Несмотря на все эти функции, команда install
не имеет слишком много опций, с которыми приходится бороться.
Когда бы вы использовали это
Команда install
, вероятно, не будет использоваться каждый день. Это полезно, но только для определенных ситуаций. Один из сценариев, когда install
вступает в свои права, – это разработка программного обеспечения. Допустим, вы программируете новую утилиту. Вам нужно будет проводить тестирование вне среды разработки. Для этого вам необходимо скопировать новые программные файлы в тестовый каталог. Возможно, потребуется создать тестовый каталог, и вам необходимо установить правильные разрешения и владельца для файлов.
Поскольку разработка – это итеративная деятельность, вы можете выполнять эту последовательность действий много, много раз. Команда install
сделает всю тяжелую работу за вас. Наконец, когда ваша новая утилита готова к развертыванию, вы можете использовать install
, чтобы скопировать ее с правильными разрешениями в ее окончательное рабочее местоположение.
Пример
Программист работает над такой новой утилитой, которая называется ana
. Он состоит из исполняемого двоичного файла и базы данных. После тестирования его нужно скопировать в /usr/local/bin
, чтобы сделать его доступным для всех пользователей системы Linux. Вам потребуется заменить имена файлов и пути к каталогам в нашем примере на файлы и пути, которые вы используете на своем компьютере, когда вы используете install
.
Пока он не готов к выпуску, он будет тестироваться в каталоге с именем ~/test/ana
. Члены группы geek
будут иметь права на чтение и выполнение. Другие пользователи также будут иметь права на чтение и выполнение. Команда install
использует для разрешений то же числовое представление, что и chmod
. Наш программист решил, что права доступа должны быть установлены на:
- Владелец: Читать, писать и выполнять.
- Группа: Читать и выполнять.
- Другие: Выполнить только.
Как использовать команду install
Рабочий каталог нашего вымышленного программиста – ~/work
. Он написал программу, скомпилировал ее и создал двоичный файл с именем ana
. Он уже создал файл базы данных, с которым работает ana
, Words.db
. Итак, оба файла готовы к тестированию. Давайте посмотрим на них:
ls -l ana Words.db
Утилита ana
, которую он только что написал, создает анаграммы из фразы, представленной в командной строке. Проверочное тестирование довольно простое.
Наш программист вызвал ana
фразой «biscuit», и все выглядит хорошо. Теперь он хочет скопировать эти два файла в каталог ~/test/ana
, чтобы проверить, правильно ли работает новая утилита вдали от среды разработки. Он выдает следующую команду:
установить -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
. -
Мы устанавливаем владельцем файла
dave
, используя опцию-o
(owner). -
Параметр
-g
(group) требует имя группы. Это становится владельцем группы файлов. Группа, которую мы собираемся использовать, называетсяgeek
. -
Опция
-m
(mode) устанавливает режимы файлов для файлов, используя стандартный числовой синтаксис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
. Это сделает новую утилиту доступной для всех пользователей этого компьютера с Linux. Мы знаем, что /usr/local/bin
существует, поэтому нам не нужно создавать этот каталог. Мы можем использовать модифицированную версию нашей последней команды.
Мы изменили целевой каталог на /usr/local/bin
. Мы удалили параметр -C
(сравнить), поскольку в целевом каталоге еще нет копий этих файлов, поэтому сравнивать не с чем. Аналогично, резервировать нечего, поэтому мы можем удалить параметр -b
(резервная копия) и параметр -S
(суффикс).
sudo install -o dave -g geek -m 751 и 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
является хорошим инструментом для ознакомления и использования в вашем арсенале хитростей. В тех случаях, когда вам это нужно, он вознаграждает вашу кривую обучения повышением эффективности, простоты и просто меньшим количеством нажатий клавиш.