基本上,在Makefile里会用到install,其他地方会用cp命令。

它们完成同样的任务——拷贝文件,它们之间的区别主要如下:

1、最重要的一点,如果目标文件存在,cp会先清空文件后往里写入新文件,而install则会先删除掉原先的文件然后写入新文件。这是因为往正在使用的文件中写入内容可能会导致一些问题,比如说写入正在执行的文件可能会失败,比如说往已经在持续写入的文件句柄中写入新文件会产生错误的文件。而使用install先删除后写入(会生成新的文件句柄)的方式去安装就能避免这些问题了;

2、install命令会恰当地处理文件权限的问题。比如说,install -c会把目标文件的权限设置为rwxr-xr-x;

3、install命令可以打印出更多更合适的debug信息,还会自动处理SElinux上下文的问题。

------------------------------------分割线------------------------------------

当时在编译LFS 6 的时候, 一直搞不懂 install 的命令 和 cp 以及和 chmod, chgrp 的区别? 

工作之后才明白一个Running 的进程不能随便进行 cp , 经常会提示  "text busy", 运维部的前辈们给的建议是采用mv 来替代 cp , 今天看起来前辈好像不知道install 这个命令啊.

现在就简单介绍一下 install 命令.

install copy 文件列表且同时能够设置文件的属性(包括 owner, group) , 通常用在 Makefiles 中 用来copy 程序到指定的目录.

常见的用法有以下3中形式: 
1:  install  -d [option]  DIRECTORY [DIRECTORY...]  支持多个. 类似 mkdir -p  支持递归. 
 例如:  install -d a/b/c e/f  结果和 mkdir -p  a/b/c  e/f 一样.  
2: install [option]  SOURCE DEST 
 复制 SOURCE  文件(测试不能是目录)  到DEST file(文件) . 
 install  a/e  c  结果类似  cp  a/e  c  # 注意c必须是文件. 
 有用选项 -D
  install -D x a/b/c    # 效果类似 mkdir -p a/b  && cp  x a/b/c  
3: install [option]  SOURCE [SOURCE...] DIRECTORY
 复制  多个SOURCE 文件到目的目录.  
 install a/*  d  其中 d 是目录.

有用选项
 -b :自动备份. 
-m : 设置安装文件的权限
-p :保留文件的timestamps. 也就是说文件的timestaamps 和 source 文件一样.  当我们想要利用安装文件的mtime来跟踪文件的build时间而不是 安装时间. 
-s : Strip the symbol tables from installed binary executables.
-S : 备份文件的后缀. 
 install  -S .bak new  old  #old 文件自动被 mv 为 old.bak. 
-v: verbose ,打印install 的文件的详细信息. 
`-c'
    Ignored; for compatibility with old Unix versions of `install'.  #用来兼容旧版的unix.

-C: (大写) 
 安装文件, 但是如果目标文件和源文件一样( 判断方法需要看看代码确认) 就跳过, 这样的好处是 能够保持一样文件的mtime.

install命令和cp命令的区别的更多相关文章

  1. 【Linux 命令】cp 命令详解

    Linux 命令之 cp 命令详解 一.cp 命令简介 cp 命令主要用于复制文件或目录.即用来将一个或多个源文件或者目录复制到指定的目的文件或目录. cp 命令可以将单个源文件复制成一个指定文件名的 ...

  2. linux里install命令和cp命令的区别

    转:http://blog.yikuyiku.com/?p=2659 基本上,在Makefile里会用到install,其他地方会用cp命令. 它们完成同样的任务——拷贝文件,它们之间的区别主要如下: ...

  3. 详解linux中install命令和cp命令的区别

    基本上,在Makefile里会用到install,其他地方会用cp命令. 它们完成同样的任务——拷贝文件,它们之间的区别主要如下: .最重要的一点,如果目标文件存在,cp会先清空文件后往里写入新文件, ...

  4. [转]dd命令、cp命令详解+dd命令、cp命令对比 ---delong

    出处:http://blog.csdn.net/sun_app/article/details/18263299 1.dd命令详解 1)中文man手册dd的解释 NAME       dd - 转换和 ...

  5. linux常用命令:cp 命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  6. Linux命令之cp命令

    cp命令:用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标 ...

  7. Linux命令学习-cp命令

    Linux中,cp命令的全称是copy,主要作用是复制文件或文件夹,类似于Windows下的复制功能. 假设当前处于wintest用户的主目录,路径为 /home/wintest ,存在文件夹test ...

  8. linux常用命令(7)cp命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  9. Linux命令:cp命令

    cp命令作用:拷贝文件和目录 一.格式 cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION].. ...

随机推荐

  1. SQLite3时间函数小结

    import sqlite3 conn = sqlite3.connect('/tmp/sqlite.db') cur = conn.cursor() 接下来干嘛呢?建一张表吧.这里需要注意的是,SQ ...

  2. Jquery 获取地址位置

    直接在浏览器地址 输入: http://pv.sohu.com/cityjson?ie=utf-8 可以查看数据格式 引入一个搜狐的js库: <script src="http://p ...

  3. java JSON 序列化类(List<Object> 转String)

    import com.alibaba.fastjson.JSONObject; import com.google.common.base.Preconditions; import com.goog ...

  4. 经典的MapReduce1解析

    MapReduce1任务图解 最顶层包含4个独立的实体客户端,提交MapReduce作业jobtracker,协调作业的运行.Jobtracker是一个Java应用程序,它的主类是JobTracker ...

  5. ViewPagerAdapter

    ) { ; } } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } ...

  6. 用js将一个数组合并到另一个数组中

    var arr1 = ["one","two","three"]; var arr2 = ["1","2&qu ...

  7. python3与anaconda2共存

    我是先下载了python3,后来因为需要2为了省事就去下载了anaconda2,但发现这里有个很严重的共存问题. 找了一下网上的各种共存问题,发现网上的基本上都是基于一个anaconda然后通过虚拟环 ...

  8. RPM和yum相关

    写在前面: 在这里可以知道rpm和yum的基本用法,找到更新本地yum源.搭建yum源的方法以及yum很琐碎的东西,包括yum源的优先级.用yum来安装或卸载CentOS图形界面包以及保存yum下载的 ...

  9. java: BufferedReader简单的菜单

    BufferedReader简单的菜单 Menu boolean flag; public Menu() { while(true) { this.show(); } } public void sh ...

  10. javascript 跨域问题解决办法总结

    跨域的意思就是不同域名之间的页面默认是无法通信的.因为浏览器默认是禁止跨域的: 图所示:chrome浏览器尝试获取mainFrame失败,提示DomException 1).假如你有个网站 a.com ...