安装命令 - install

说明

  • Linux C/C++项目构建过程,有个必要的步骤“install”,在Makefile中时常会有一个专门的recipe来做这件事。
  • 安装流程需要做以下类型事情:
  1. 文件的拷贝(最基本)
  2. 目录结构的创建
  3. 程序的strip
  4. 文件的属性,权限,ower等设置

实现

  • 对于初学者可以会采用cp、mkdir、strip、chmod等基础命令组合来完成项目的安装工作,但是在稍大项目中,你会发现使用cp等基础命令会需要写很多相似甚至重复的代码以及完成一项工作需要使用多个基础命令,这时可以采用一些更高级的命令,例如:install。

install

  • install是专门的安装命令, 常见用法如下:
用法:install [选项]... [-T] 源文件 目标文件
 或:install [选项]... 源文件... 目录
 或:install [选项]... -t 目录 源文件...
 或:install [选项]... -d 目录...
     --backup[=CONTROL]	为每个已存在的文件创建备份
  -b			类似--backup 但不接受参数
  -c			(忽略)
  -C, --compare		比较每组源文件和目标文件,在一些情况下不修改目标文件
  -d, --directory	将所有参数视为目录名称;为指定的目录创建所有组件
  -D                  create all leading components of DEST except the last,
                        or all components of --target-directory,
                        then copy SOURCE to DEST
  -g, --group=GROUP   set group ownership, instead of process' current group
  -m, --mode=MODE     set permission mode (as in chmod), instead of rwxr-xr-x
  -o, --owner=OWNER   set ownership (super-user only)
  -p, --preserve-timestamps	修改源文件的访问/修改时间以与目标文件保持一致
  -s, --strip			拆解符号表
      --strip-program=程序	指定拆解二进制文件的程序
  -S, --suffix=后缀		覆盖常用备份文件后缀
  -t, --target-directory=目录	将源文件所有参数复制到指定目录
  -T, --no-target-directory	将目标文件视为普通文件
  -v, --verbose			创建目录时显示其名称
      --preserve-context  preserve SELinux security context
  -Z                      set SELinux security context of destination
                            file to default type
      --context[=CTX]     like -Z, or if CTX is specified then set the
                            SELinux or SMACK security context to CTX
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

* 详细请看help信息 
  1. 创建目录结构
install [选项]... -d 目录...
* 递归创建不存在的目录
install -d install/lib install/www
# 类似于 mkdir -p install/lib install/www
  1. 创建目录结构同时拷贝文件
install -D libxxxx.so install/lib/libxxxx.so
# 类似于 mkdir -p install/lib/ && cp libxxxx.so install/lib/libxxxx.so
  1. 拷贝程序的同时进行strip
install -s --strip-program=strip xxx xxx
  1. 设置文件权限
install -m 0755 targets /usr/bin

遇到问题

  1. 暂时未找到方法处理动态库的软链接文件,拷贝后变成了实体文件。

install 的优点

  1. 如果目标文件已存在,cp会先清空文件后往里写入新文件,而install则会先删除掉原先的文件然后写入新文件,如果往正在 使用的文件中写入内容,cp可能会导致一些问题,例如:写入正在执行的文件可能会失败,往已经在持续写入的文件句柄中写入新文件会产生错误的文件。而使用 install先删除后写入(会生成新的文件句柄,新老文件句柄不同,相当于操作的不同文件)的方式去安装就能避免这些问题了,例如:使用cp覆盖一个正在运行的程序文件,经常会提示 "text busy"。
  2. install在拷贝的同时可以设置目标文件的权限,不像使用cp方式拷贝文件仅仅拷贝文件,容易出现目标文件权限问题,例如:原始文件没有执行权限,cp后也没有执行权限,而install -m可以在拷贝的同时设置目标文件的权限。
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值