如何在 Linux 上使用“安装”命令复制文件
已发表: 2022-01-29 install
是 Linux 和 macOS 中的多功能文件复制命令。 它非常适合寻求效率的高级用户。 阅读这篇文章,了解如何更聪明地工作——而不是更努力地工作。
等等——不是为了安装软件?
install
命令的名称可能是所有 Linux 命令中最容易引起误解的名称。 它实际上并没有安装任何软件。 如果您尝试从 Ubuntu 或其他基于 Debian 的发行版中的命令行安装软件包,请使用apt-get
命令。 在其他 Linux 发行版上,请改用 Linux 发行版的包管理工具,例如 Fedora 上的dnf
或 openSUSE 上的zypper
。
那么安装做什么?
简而言之, install
结合了cp
(复制)、 chown
(更改所有者)、 chmod
(更改模式)、 mkdir
(生成目录)和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
,一切看起来都很好。 他现在想将这两个文件复制到~/test/ana
目录,以查看新实用程序在远离开发环境的情况下是否正常运行。 他发出以下命令:
install -D -v ana Words.db -t ~/test/ana
命令行上使用的选项是:
- D :如果需要,创建目录,包括父目录。
- v :详细,列出创建时的每个目录以及执行时的每个文件副本。
- t :目标目录。
我们可以看到install
创建了~/test
目录,然后创建了~/test/ana
目录。 这些文件在被复制到目标目录时被一一列出。
列出~/test/ana
中的文件确认它们已被正确复制。
ls -l
下一步是通过在~/test/ana
目录中调用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
(所有者)选项将文件的所有者设置为dave
。 -
-g
(组)选项需要组名。 这将成为文件的所有者组。 我们将使用的组称为geek
。 -
-m
(模式)选项使用标准chmod
数字语法设置文件的文件模式。
我们不再需要使用-D
(创建目录)选项,因为我们知道测试目录已经存在。 我们还省略了-v
(详细)选项。 列出~/test/ana
目录中的文件向我们展示了文件详细信息:
ls -l
这证实我们的所有要求都已得到满足。
- 这些文件已被复制到测试目录。
- 权限设置正确。
-
dave
是文件的所有者。 -
geek
组是这两个文件的所有者组。 - 已为每个文件(称为 ana.bak 和 Words.db.bak)制作了备份副本。
所有这一切都是通过使用一个命令来实现的。 整洁的。
我们的程序员对实用程序进行了一些最终更改并重新编译。 已更改的文件需要从~/work
目录复制到~/test/ana
目录。 我们可以通过使用-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 可以从二进制文件中去除多余的符号表和其他包袱,以减小它的大小。 现在让我们这样做。 请注意,下面的命令不包括 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
命令是一个很好的工具,可以让您熟悉并在您的技巧库中使用。 对于您需要它的那些场合,它会通过提高效率、简单性和更少的击键来奖励您的学习曲线。
Linux 命令 | ||
文件 | 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 ·查看·字符串·类型·重命名· zip ·解压缩· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice ·进度· strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑