安装命令-install

简介: 安装命令-install

@[toc]

说明

  • Linux C/C++项目构建过程,有个必要的步骤“install”,在Makefile中时常会有一个专门的recipe来做这件事。
  • 安装流程需要做以下类型事情:

    • 文件的拷贝(最基本)
    • 目录结构的创建
    • 程序的strip
    • 文件的属性,权限,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信息 
  • 创建目录结构
install [选项]... -d 目录...
  • 递归创建不存在的目录
install -d install/lib install/www
# 类似于 mkdir -p install/lib install/www
  • 创建目录结构同时拷贝文件
install -D libxxxx.so install/lib/libxxxx.so
# 类似于 mkdir -p install/lib/ && cp libxxxx.so install/lib/libxxxx.so
  • 拷贝程序的同时进行strip
install -s --strip -program=strip xxx xxx
  • 设置文件权限
install -m 0755 targets /usr/bin

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

install 的优点

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

相关文章
|
9月前
yum install、localinstall和groupinstall区别
yum install、localinstall和groupinstall区别
126 0
|
存储 Prometheus Kubernetes
install victoriametrics in k8s
install victoriametrics in k8s
install victoriametrics in k8s
|
3月前
|
缓存 Ubuntu 数据库
ubuntu无法使用apt命令时怎么安装库
无论哪种方法,一旦成功安装了所需的库文件,你应该能够在Ubuntu系统上正常使用它们。如果问题仍然存在,可能需要进一步检查系统的包管理配置和依赖关系问题。
143 0
|
3月前
|
缓存 Ubuntu 搜索推荐
Ubuntu执行apt-get install xxx报错怎么办?
如果以上步骤无法解决问题,你可以在搜索引擎或Linux社区中查找更详细的解决方案。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
37 0
|
缓存
yum install ansible无法直接安装Ansible的解决方法
准备三台机器: server.example.com node1.example.com node2.example.com 配置IP,主机名,/etc/hosts
493 0
|
3月前
Ubuntu18 Install Conda
Ubuntu18 Install Conda
38 0
|
9月前
|
Ubuntu 安全
ubuntu sudo apt-get upgrade 和 sudo apt-get dist-upgrade区别
ubuntu sudo apt-get upgrade 和 sudo apt-get dist-upgrade区别
|
存储 Linux
如何使用`yum`命令安装RPM软件包?
如何使用`yum`命令安装RPM软件包?
748 0
|
缓存 Shell Linux
yum命令
yum命令
143 0