Как копировать файлы с помощью команды «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
— это хороший инструмент, с которым нужно ознакомиться и иметь в своем арсенале трюков. В тех случаях, когда вам это нужно, он вознаграждает вашу кривую обучения повышением эффективности, простотой и просто меньшим количеством нажатий клавиш.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts