说明

  • 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 destinationfile to default type--context[=CTX]     like -Z, or if CTX is specified then set theSELinux 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可以在拷贝的同时设置目标文件的权限。

安装命令 - install相关推荐

  1. 安装命令:pip install xlrd ,pandas操作Excel学习笔记__7000

    pandas操作Excel学习笔记_loc和iloc_7000 pandas操作Excel学习笔记__7000 1.安装环境:pandas需要处理Excel的模块xlrd,所以需要提前安装xlrd.不 ...

  2. mysql的install命令是什么_mysql 安装命令

    mysqld install MySQL --defaults-file="D:\worksoft\mysql-5.7.17-winx64\my-default.ini" D:\w ...

  3. 笔记,提醒,pytorch安装命令(conda)

    答案很简单,对很多人来讲,应该是常识 conda install torchvision -c pytorch 之前一直比较偷懒,安装直接使用命令 conda install torchvision ...

  4. QIIME 2教程. 01简介和安装 Introduction Install(2020.11开始更新)

    写在前面 QIIME是微生物组领域最广泛使用的分析流程,10年来引用20000+次,2019年Nature杂志评为近70年来人体菌群研究的25个里程碑事件--里程碑16:生物信息学工具助力菌群测序数据 ...

  5. QIIME 2用户文档. 01简介和安装 Introduction Install(2020.2)

    写在前面 QIIME是微生物组领域最广泛使用的分析流程,10年来引用近20000次,2019年Nature杂志评为近70年来人体菌群研究的25个里程碑事件--里程碑16:生物信息学工具助力菌群测序数据 ...

  6. linux常用安装命令集锦

    本博客仅作为笔记方便自己查阅 1.安装rzsz #安装命令 $ yum install lrzsz #上传命令 $ rz #下载命令 $ sz filename 2. 切换用户 ## 切换到root用 ...

  7. Maven命令 install 和 package的区别

    Maven命令 install 和 package的区别 Maven是目前十分流行的项目构建工具以及依赖解决工具,其提供的常用指令中有两个很容易引起使用者的疑惑, 那就是 install 和 pack ...

  8. jetson 安装atp-get install qt时出现 unable to locate 或者dependencies unmet的报错

    问题 jetson nano上安装qt时,使用如下命令 sudo apt-get install qtbase5-dev 出现报错 Some packages could not be install ...

  9. linux通过光盘安装命令包,RHEL5通过光盘配置本地yum仓库及命令详解

    Yum介绍 Yum全称为 Yellow dog Updater, Modified(软件包管理器)我们开玩笑时也称"黄狗" 主要功能是更方便的添加/删除/更新RPM包,yum能检查 ...

最新文章

  1. ICRA2021|嵌入式系统的鲁棒单目视觉惯性深度补全算法
  2. APUE(第九章)进程关系
  3. Flutter开发之ListView使用第三方flutter_refresh加载更多(37)
  4. 通过python实现linux切换用户_Python实现在Linux系统下更改当前进程运行用户
  5. 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
  6. 除了PS,还有它可以轻松实现图像处理!
  7. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)
  8. (转)MyBatis框架的学习(二)——MyBatis架构与入门
  9. hnu2021小学期程序设计 电话号码
  10. mysql 查找相似数据_局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术...
  11. 我想批量删除专题内最古老的100篇文章
  12. 一、tomcat9解压后运行startup.bat闪退
  13. iOS 使用FMDB进行数据库操作
  14. Windows电脑上最好的3个txt阅读器
  15. 电脑开热点手机无法连接,无法启用 Internet 连接共享.为 LAN 连接配置的 IP 地址需要使用自动 IP 寻址.
  16. python - 1024 Spider
  17. 现在骨传导耳机什么牌子最好,最受欢迎的五款骨传导耳机推荐
  18. django_filters实现数据过滤
  19. 如何进入华为P40 debug 模式/开发者选项模式
  20. 计算机检测不到双显示器,win10装双屏检测不到另一显示器怎么解决

热门文章

  1. Fmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
  2. 美团2020,4.16笔试第三题
  3. 抖音怎么申请蓝v认证?
  4. 用计算机算出年龄教程,年龄计算器的教程
  5. Codeforces896A Nephren gives a riddle
  6. 那些感动过你我的句子
  7. 从腾讯音乐赴美上市,看中国音乐平台如何拿起接力赛的第一棒
  8. 马良建模学习笔记——楼梯制作一
  9. print('曾经有一份真挚的爱情放在我面前,那个人的名字是' + goddess),Python旅程开始的地方!
  10. 基于qt4的串口调试助手开发