生活如此艰难 發表於 2024-1-26 00:00:00

linux中install命令和cp命令的使用与区别

<p>
        <strong>前言</strong></p>
<p>
        install和cp类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile(在RPM的spec里面也经常用到),使用它来将程序拷贝到目标(安装)目录。</p>
<p>
        <strong>install主要用法如下:</strong></p>
<p>
        <code>install … SOURCE… DIRECTORY</code></p>
<p>
        此时,DIRECTORY必须存在,否则被当成新的文件</p>
<p>
        <code>install … -t DIRECTORY SOURCE…</code></p>
<p>
        <code>install … -d DIRECTORY…</code></p>
<p>
        <strong>如果目录不存在则创建</strong></p>
<p>
             -b:为每个已存在的目的地文件进行备份;</p>
<p>
             -D:创建目的地前的所有目录,然后将来源复制到目的地</p>
<p>
             -g:自行设置所属的组;</p>
<p>
             -m:自行设置权限,而不是默认的rwxr-xr-x</p>
<p>
             -o:自行设置所有者</p>
<p>
             -p:以来源文件的修改时间作为相应的目的地的文件属性</p>
<p>
        <strong>例如:</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_176115">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">@</code><code class="bash functions">install</code> <code class="bash plain">-d </code><code class="bash plain">/usr/bin</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">@</code><code class="bash functions">install</code> <code class="bash plain">-p -D -m 0755 targets </code><code class="bash plain">/usr/bin</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">相当于</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">@</code><code class="bash functions">mkdir</code> <code class="bash plain">-p </code><code class="bash plain">/usr/bin</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">@</code><code class="bash functions">cp</code> <code class="bash plain">targets </code><code class="bash plain">/usr/bin</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">@</code><code class="bash functions">chmod</code> <code class="bash plain">755 </code><code class="bash plain">/usr/bin/targets</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">@</code><code class="bash functions">touch</code> <code class="bash plain">/usr/bin/tagets</code> <code class="bash plain">&lt;---- 更新文件时间戳</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">&lt;----@前缀的意思是不在控制台输出结果。</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>install和cp完成同样的任务–拷贝文件,它们之间的区别主要如下:</strong></p>
<p>
              1、最重要的一点,如果目标文件存在,cp会先清空文件后往里写入新文件,而install则会先删除掉原先的文件然后写入新文件。这是因为往正在使用的文件中写入内容可能会导致一些问题,比如说写入正在执行的文件可能会失败,再比如说往已经在持续写入的文件句柄中写入新文件会产生错误的文件。而使用install先删除后写入(会生成新的文件句柄)的方式去安装就能避免这些问题了;</p>
<p>
              2、install命令会恰当地处理文件权限的问题。比如说,install -c会把目标文件的权限设置为rwxr-xr-x;</p>
<p>
              3、install命令可以打印出更多更合适的debug信息,还会自动处理SElinux上下文的问题。</p>
<p>
        <strong>总结</strong></p>
<p>
        以上就是这篇文章的全部呢日哦功能了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。</p>
<p>
        原文链接:http://lingxiankong.github.io/blog/2014/01/06/linux-install/</p>
頁: [1]
查看完整版本: linux中install命令和cp命令的使用与区别