如何在Linux上使用“Install”命令复制文件

Install是Linux和MacOS中的多功能文件复制命令。它是追求效率的超级用户的完美选择。阅读这篇文章,了解如何更聪明地工作,而不是更努力地工作。

等等,这不是用来安装软件的吗?

Install命令的名称可能是所有Linux命令中最具误导性的。它实际上并没有安装任何软件。如果您试图在Ubuntu或其他基于Debian的发行版中从命令行安装软件包,请使用apt-get命令。在其他Linux发行版上,请改用Linux发行版的包管理工具-例如,Fedora上的DNF或openSUSE上的zypper。

那么安装有什么作用呢?

简而言之,install结合了cp(复制)、chown(更改所有者)、chmod(更改模式)、mkdir(创建目录)和strie(条带符号)命令中的元素。它允许您在单个操作中使用所有这些函数。

安装命令可以:

复制文件,如cp命令。 选择是否覆盖现有文件。 如果目标目录不存在,则创建该目录,如mkdir。 设置文件的用户权限标志,就像chmod命令一样。 设置文件的所有者,就像chown命令一样。 从可执行文件中移除不必要的包袱,就像拆卸命令一样。

尽管有这些功能,Install命令并没有太多的选项需要处理。

您什么时候用呢?

安装命令可能不会每天都使用。它是有用的,但仅在某些情况下有用。安装发挥作用的一个场景是软件开发。假设您正在编写一个新的实用程序。您需要在开发环境之外进行测试。为此,您需要将新程序文件复制到测试目录。可能需要创建测试目录,并且您需要为文件设置正确的权限和所有权。

因为开发是一个迭代活动,所以您最终可能会多次执行这一系列操作。Install命令为您完成所有繁重的任务。最后,当您的新实用程序准备好部署时,您可以使用Install将其以正确的权限复制到其最终工作位置。

一个例子

一位程序员正在开发一种名为ana的新实用程序。它由一个可执行的二进制文件和一个数据库组成。测试后,必须将其复制到/usr/local/bin目录,才能供Linux系统的所有用户使用。当您使用Install时,您需要用我们示例中的文件名和目录路径替换您的计算机上使用的文件和路径。

在准备发布之前,它将在名为~/test/ana的目录中进行测试。极客组的成员将拥有读取和执行权限。其他用户也将拥有读取和执行权限。install命令使用与chmod相同的数字表示权限。我们的程序员决定必须将权限设置为:

所有者:读、写和执行。 分组:读取和执行。 其他:仅限执行。

如何使用安装命令

我们虚构的工作程序员的工作目录是~/work。他编写了程序,进行了编译,并生成了一个名为InAna的二进制文件。他已经创建了Ana使用的数据库文件Words.db。因此,这两个文件都已准备好进行测试。让我们来看看它们:

ls -l ana Words.db

他刚刚编写的ANA实用程序根据命令行上提供的短语创建字谜。验证测试相当简单。

我们的程序员用短语“饼干”调用了Ana,看起来一切正常。他现在希望将这两个文件复制到~/test/ana目录中,以查看新实用程序在离开开发环境后是否正常工作。他发出以下命令:

install -D -v ana Words.db -t ~/test/ana

命令行上使用的选项包括:

d:如果需要,创建目录,包括父目录。 v:Verbose,在创建目录时列出每个目录,并在执行时列出每个文件副本。 t:目标目录。

我们可以看到,Install创建了~/test目录,然后创建了~/test/ana目录。将文件复制到目标目录时,会逐个列出这些文件。

在~/test/ana中列出文件确认它们已被正确复制。

ls -l

下一步是通过调用~/test/ana目录中的ana实用程序来测试它。

该实用程序按预期运行,这是很棒的。但是,权限不正确。要求是将geek组的成员设置为具有读取和执行权限,而将其他用户设置为仅具有执行权限。

我们可以通过以下命令非常简单地解决这两个问题。注意,使用sudo命令以root权限运行命令。-o和c-g命令和选项需要这样做。当我们发出命令时,系统会要求我们输入密码。

sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana

b(备份)选项在覆盖文件之前创建文件的备份。 -S(后缀)选项定义备份文件的后缀。如果不提供后缀,则使用~(波浪号)。我们要求安装使用后缀.bak。 我们使用-o(所有者)选项将文件的所有者设置为Dave。 -g(组)选项需要组名。这将成为文件的所有者组。我们要用的这个群叫做“极客”。 m(Mode)选项使用标准的chmod数字语法设置文件的文件模式。

我们不再需要使用-D(创建目录)选项,因为我们知道测试目录已经存在。我们还省略了-v(详细)选项。列出~/test/ana目录中的文件将显示文件详细信息:

ls -l

这证实了我们的所有要求都得到了满足。

文件已复制到测试目录。 已正确设置权限。 戴夫是这些文件的所有者。 极客组是这两个文件的所有者组。 每个名为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文件的文件大小已更改。它比Tana.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运行的。任务完成。

我们提到,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命令是一个很好的工具,可以让您熟悉并掌握各种技巧。对于那些您需要它的场合,它会在效率、简单性和更少的击键次数方面奖励您的学习曲线。

相关文章