Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313495
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-29 13:56
文章分类
文章存档

2018年(2)

2017年(6)

2016年(34)

2015年(24)

我的朋友

分类: 嵌入式

2015-09-17 13:44:46

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

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

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

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

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


install 
1.作用 
install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。 
2.格式 
(1)install [选项]... 来源 目的地 
(2)install [选项]... 来源... 目录 
(3)install -d [选项]... 目录... 
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。 
在1,2 这两张安装方式,需要注意 如果[目的地]不存在,install就会认为是文件拷贝, 比如
install:
    install httpd ../bin
如果上一级目录没有bin目录,当我们执行make install时候,install 会把httpd拷贝到上一级目录文件bin,所以还需要install -d ../bin,
先创建文件。


3.主要参数 
--backup[=CONTROL]:为每个已存在的目的地文件进行备份。 
-b:类似 --backup,但不接受任何参数。 
-c:(此选项不作处理)。 
-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。 
-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。 
-g,--group=组:自行设定所属组,而不是进程目前的所属组。 
-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。 
-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。 
-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。 
-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。 
-S,--suffix=后缀:自行指定备份文件的<后缀>。 
-v,--verbose:处理每个文件/目录时印出名称。 
--help:显示此帮助信息并离开。 
--version:显示版本信息并离开。
install  - copy files and set attributes
install 在做拷贝的同时,设置attributes.
因此Makefile 中尽量使用install 命令。
例如
@install -d /usr/bin
@install -p -D -m 0755 targets /usr/bin
相当于
@mkdir -p /usr/bin
@cp targets /usr/bin
@chmod 755 /usr/bin/targets
@touch /usr/bin/tagets       <---- 更新文件时间戳

阅读(6156) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~