安装命令-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可以在拷贝的同时设置目标文件的权限。

相关文章
|
算法 定位技术
八叉树建立地图并实现路径规划导航(下)
八叉树建立地图并实现路径规划导航(下)
2842 0
八叉树建立地图并实现路径规划导航(下)
|
移动开发 C语言
C语言:&&和&、||和|有什么区别
在C语言中,&&和||是逻辑运算符,分别表示逻辑与(AND)和逻辑或(OR),它们用于连接两个布尔表达式,只有当两边都为真时&&返回真,||在至少一边为真时返回真;&和|是位运算符,对应地进行位级的与、或操作,它们对操作数的二进制位进行逐位处理。&&和||具有短路特性,而&和|没有。
13771 1
|
8月前
|
安全 大数据 虚拟化
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显。作为Windows Server的核心组件,Hyper-V具备卓越的技术性能,支持高可用性、动态迁移等功能,确保虚拟机稳定高效运行。它与Windows深度集成,管理便捷,支持远程管理和自动化部署,降低管理成本。内置防火墙、RBAC等安全功能,提供全方位安全保障。作为内置组件,Hyper-V无需额外购买软件,降低成本。其广泛的生态系统支持和持续增长的市场需求,使其成为企业虚拟化解决方案的首选。
|
10月前
|
人工智能 算法 机器人
对话汶生|或许你还没听过具身智能实训,但是已经有人这样做了
在汶生看来,具身智能真正的价值,在于基于现有成熟技术的可靠商业化,在于服务于成熟的市场。汽车产业、手机产业的发展路径已经验证,最终行业的领导者,不是技术领域的创新者,而是产品和商业化领域的创新者。
|
存储 人工智能 自然语言处理
AI经营|多Agent择优生成商品标题
商品标题中关键词的好坏是商品能否被主搜检索到的关键因素,使用大模型自动优化标题成为【AI经营】中的核心能力之一,本文讲述大模型如何帮助商家优化商品素材,提升商品竞争力。
1303 62
AI经营|多Agent择优生成商品标题
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
|
机器学习/深度学习 人工智能 算法
深度学习和强化学习有什么区别呢
【10月更文挑战第23天】深度学习和强化学习有什么区别呢
|
Java Linux 测试技术
Maven命令大全:从安装到部署,一篇文章带你玩转Maven
本文由木头左介绍Maven,一个用于Java项目管理的工具,涉及Maven的安装配置(Windows和Linux)及核心命令,包括install、package、compile、clean、deploy、test、verify和site。通过这些命令,可以实现构建、打包、编译、测试、部署和生成项目站点等操作。
|
Rust 编译器 开发者
Rust中的进阶宏:派生宏与属性宏
本文将深入探讨Rust编程语言中的派生宏(Derive Macros)和属性宏(Attribute Macros)这两种进阶宏的用法。派生宏用于自动生成实现特定trait的代码,而属性宏则允许我们为模块、函数、结构体等添加自定义属性。我们将通过实例展示如何在Rust项目中使用这些高级宏来增强代码的可读性和可维护性。
|
域名解析 Ubuntu 安全
如何在 Ubuntu 20.04 上安装 Visual Studio Code
Visual Studio Code 是一个由微软开发的强大的开源代码编辑器。它包含内建的调试支持,嵌入的 Git 版本控制,语法高亮,代码自动完成,集成终端,代码重构以及代码片段功能。本文主要为大家讲解两种在 Ubuntu 20.04 上安装 Visual Studio Code 的方式。
61460 1
如何在 Ubuntu 20.04 上安装 Visual Studio Code