Поиск по сайту:

Как копировать файлы с помощью команды «install» в Linux


install – это универсальная команда для копирования файлов в Linux и macOS. Он идеально подходит для опытных пользователей, которым нужна эффективность. Прочтите эту статью, чтобы узнать, как работать умнее, а не усерднее.

Подождите — это не для установки программного обеспечения?

Команда install может иметь самое вводящее в заблуждение название среди всех команд Linux. На самом деле он не устанавливает никакого программного обеспечения. Если вы пытаетесь установить программный пакет из командной строки в Ubuntu или другом дистрибутиве на основе Debian, используйте команду apt-get. В других дистрибутивах Linux вместо этого используйте инструмент управления пакетами вашего дистрибутива Linux, например, dnf в Fedora или zypper в openSUSE.

Итак, что делает установка?

Вкратце install объединяет элементы из cp (копировать), chown (изменить владельца), chmod (изменить mode), mkdir (создать каталог) и strip (удалить символы). Это позволяет вам использовать функции из всех в одном действии.

Команда install может:

  • Скопируйте файлы с помощью команды cp.
  • Выберите, перезаписывать ли существующие файлы.
  • Создайте целевой каталог, если он не существует, например mkdir.
  • Установите флаги разрешений пользователя для файлов, как и в команде chmod.
  • Установите владельца файлов точно так же, как с помощью команды chown.
  • Удаляйте ненужный багаж из исполняемых файлов, как и команда strip.

Несмотря на всю эту функциональность, у команды install не слишком много опций, с которыми можно бороться.

Когда бы вы использовали это

Команда install, вероятно, не будет использоваться каждый день. Это полезно, но только для определенных ситуаций. Один из сценариев, в котором install вступает в свои права, — это разработка программного обеспечения. Допустим, вы программируете новую утилиту. Вам нужно будет провести тестирование вне среды разработки. Для этого вам нужно скопировать новые файлы программы в тестовый каталог. Возможно, потребуется создать тестовый каталог и установить правильные разрешения и владельца для файлов.

Поскольку разработка — это повторяющаяся деятельность, вы можете выполнять эту последовательность действий много-много раз. Команда install сделает всю тяжелую работу за вас. Наконец, когда ваша новая утилита будет готова к развертыванию, вы можете использовать install, чтобы скопировать ее с правильными разрешениями в окончательное рабочее место.

Пример

Программист работает над такой новой утилитой, которая называется ana. Он состоит из исполняемого бинарного файла и базы данных. После тестирования его необходимо скопировать в /usr/local/bin , чтобы сделать его доступным для всех пользователей системы Linux. Вам нужно будет заменить имена файлов и пути к каталогам в нашем примере на файлы и пути, которые вы используете на своем компьютере при использовании install.

Пока он не будет готов к выпуску, он будет тестироваться в каталоге с именем ~/test/ana. Члены группы geek будут иметь права на чтение и выполнение. Другие пользователи также будут иметь права на чтение и выполнение. Команда install использует то же числовое представление для разрешений, что и chmod. Наш программист решил, что разрешения должны быть установлены на:

  • Владелец: чтение, запись и выполнение.
  • Группа: чтение и выполнение.
  • Другие: только выполнение.

Как использовать команду установки

Рабочий каталог нашего вымышленного программиста — ~/work. Он написал программу, скомпилировал ее и создал двоичный файл с именем ana. Он уже создал файл базы данных, с которым работает ana – Words.db. Итак, оба файла готовы к тестированию. Давайте посмотрим на них:

ls -l ana Words.db

Утилита ana, которую он только что написал, создает анаграммы из фразы, указанной в командной строке. Проверочное тестирование довольно простое.

Наш программист вызвал ana с фразой «biscuit», и все выглядит хорошо. Теперь он хочет скопировать эти два файла в каталог ~/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 для запуска команды с правами суперпользователя. Этого требуют параметры -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 (владелец).
  • Для параметра -g (группа) требуется имя группы. Это становится группой владельцев файлов. Группа, которую мы собираемся использовать, называется geek.
  • Опция -m (режим) устанавливает файловые режимы для файлов с использованием стандартного числового синтаксиса chmod.

Нам больше не нужно использовать параметр -D (создать каталоги), потому что мы знаем, что тестовый каталог уже существует. Мы также опустили параметр -v (подробный). Список файлов в нашем каталоге ~/test/ana показывает нам детали файла:

ls -l

Это подтверждает, что все наши требования были выполнены.

  • Файлы были скопированы в каталог тестирования.
  • Разрешения установлены правильно.
  • дэйв является владельцем файлов.
  • Группа 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 ana Words.db -t /usr/local/bin

Мы можем перечислить, что файлы прибыли в /usr/local/bin:

ls -l

И в качестве последнего теста давайте изменим каталог на наш домашний каталог и посмотрим, сможем ли мы оттуда вызвать нашу новую утилиту.

Обратите внимание, что нам не нужно предварять команду ana ./  , что означает, что она выполняется из /usr/local/bin. Миссия выполнена.

Мы упоминали, что install может удалить лишние таблицы символов и другой багаж из бинарного файла, чтобы уменьшить его размер. Давайте сделаем это сейчас. Обратите внимание, что приведенная ниже команда не включает Word.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 — это хороший инструмент, с которым нужно ознакомиться и иметь в своем арсенале трюков. В тех случаях, когда вам это нужно, он вознаграждает вашу кривую обучения повышением эффективности, простотой и просто меньшим количеством нажатий клавиш.

RELATED: Best Linux Laptops for Developers and Enthusiasts