安装命令 - install

2023-11-17

说明

  • 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可以在拷贝的同时设置目标文件的权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装命令 - install 的相关文章

  • Oracle---day03

    一 视图 对一个查询结果的封装 视图里面所有的数据都是来自于它查询的那张表 视图里面不存储任何数据 视图的好处 1 能够封装复杂的查询结果 2 屏蔽表中的细节 语法 create or replace view 视图名字 as 查询语句 w
  • 【Python】斐波那契数列之兔子问题

    目录 兔子问题 1 1 问题描述 1 2 问题分析 1 3 解决实现 兔子问题 1 1 问题描述 斐波那契在计算之书中 提出了一个有趣的兔子问题 若一对成年兔子每个月恰好生下一对小兔子 一雌一雄 在年初时只有一对小兔子 在第一个月结束时 他
  • linux No module named yum错误的解决办法

    linux No module named yum错误的解决办法 肯定是yum的版本与当前python的版本不一致造成的 所以修改yum的配置 修改文件 vim usr bin yum 修改头 usr bin python gt usr b
  • STM32擦除Flash失败

    stm32 Flash擦除错误 环境 keil5 stm32f4 rtthread3 15 现象 擦除flash总是失败 经过jlink调试发现PGPERR位总是1 经过一番折腾 在st社区找到答案 链接 https community s
  • Button点击事件绑定中如何传递带参数的方法

    btn onClick AddListener delegate this OnBtnClick true 传递一个有参数的方法用于传递参数 这样点击事件就能接收参数了 using UnityEngine using UnityEngine
  • 华为OD机试真题- 计算误码率-2023年OD统一考试(B卷)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • CSS布局之使用Flex布局画骰子(3点)

    若无基础 请优先阅读学习此文档阮一峰 Flex 布局教程 语法篇 上一篇文章CSS布局之使用Flex布局画骰子 2点 这次画3个点的骰子 大家可以先看图片默写代码 然后与文中代码做校验 来验证自己是否理解了Flex布局 骰子样式 div c
  • 笔试

    给定两个字符串s1和s2 如果s1删除若干个字符后变成s2 则称s2为s1的子串 求s2在s1中的起始位置的最大值 输入描述 只有一行 s1 s2 s1和s2用空格隔开 s1和s2度不会含有空格 s1和s2的长度均大于1且小于256 输出描
  • python实战故障诊断之CWRU数据集(三):信号预白化处理-倒谱预白化(CEP pre-whitening)

    文章目录 1 概述 2 倒频谱预白化原理 2 1 倒频谱 2 2 基于倒频谱的预白化处理 3 代码实现 1 概述 在轴承故障中 故障信号通常较为微弱 很可能被设备周期性运转产生的强周期性信号所淹没 导致无法准确识别故障 这时我们需要用到信号
  • PCL .vtk文件与.pcd的相互转换

    目录 一 概述 二 VTK转PCD 三 PCD转VTK 四 实验数据 一 概述 多边形数据集vtkPolyData由顶点 多顶点 线 折线和三角形地带等单元组成 顶点 线和多边形构成了用来表达0 1和2维几何图形的基本要素的最小集合 vtk
  • KubeSphere中集成ApiSix

    KubeSphere中集成ApiSix 一 Apache APISIX 介绍 Apache APISIX 是一款开源的高性能 动态云原生网关 由深圳支流科技有限公司于 2019 年捐赠给 Apache 基金会 当前已经成为 Apache 基
  • java装饰器模式

    一 装饰器模式定义 1 动态地给一个对象添加一些额外的职责 就增加功能来说 装饰模式相比生成子类更为灵活 Component抽象构件 Component是一个接口或者是抽象类 就是定义我们最核心的对象 也就是最原始的对象 定义一个对象接口可
  • Python运行不了,无法运行Python解决办法(超全面)

    前言 Python是一门广泛使用的编程语言 但在使用过程中 我们可能会遇到无法运行Python的问题 本文将提供一个超全面的解决方案 帮助读者排除常见的Python运行问题 并提供相应的解决办法 帮助Python学习 以下所有学习资料文末免
  • tensorflow安装教程(一般使用国内的清华源进行安装)

    注 安装tensorflow numpy这些源 记得用国内的清华镜像源 国外的源由于网络延迟无法安装 1 国内安装tensorflow的命令 pip install index url https pypi douban com simpl
  • 法拉克机器人自动怎么调_发那科机器人的简单设置你知道吗

    发那科机器人使用后台逻辑时 可以在后台执行只包含对应后台逻辑指令的TP程序 程序从 初到 后被反复执行 该执行不受急停 暂停 报警的影响 设定后台逻辑的步骤非常简单 1 按下MENU键 2 选择SETUP 3 选择BG LOGIC 进入如下
  • 洛谷P5731——蛇形方阵(c++)

    题目描述 给出一个不大于 9 的正整数 n 输出 n n 的蛇形方阵 从左上角填上 1 开始 顺时针方向依次填入数字 如同样例所示 注意每个数字有都会占用 3 个字符 前面使用空格补齐 输入格式 输入一个正整数 n 含义如题所述 输出格式
  • Qt 设置窗口的背景图片

    Qt 设置窗口的背景图片 一 给Qt窗口设置背景图片 mainwindow cpp 设置背景图片 path 图片路径 void MainWindow setBackgroundImage QString path QPixmap pixma
  • 零基础学习Vue: 第38课 Vue单页面使用router-link实现页面跳转小案例:

    零基础学习Vue 第38课 Vue单页面使用router link实现页面跳转小案例 实现效果如下 以下是所有代码
  • Ubuntu操作遇到的报错解决方法汇总(持续更新)

    1 在anaconda中创建了虚拟环境并安装了pytorch 但是编译过程中仍然报没有torch的错误 CMake Error at crawler crane crane tutorials CMakeLists txt 23 find

随机推荐

  • Form表单提交数据的几种方式

    1 submit提交 在form标签中添加Action 提交的地址 和method post 且有一个submit按钮
  • conda安装OpenCV

    安装参考 错误方法conda install channel https conda anaconda org menpo opencv3 C Users 15761 gt conda install channel https conda
  • Cplex求解QCP非线性规划

    import ilog concert import ilog cplex public class QCPex1 public static void main String args try IloCplex cplex new Ilo
  • Environment variable CLASSPATH not set!

    hdfs 问题 Environment variable CLASSPATH not set getJNIEnv getGlobalJNIEnv failed WARNING Logging before InitGoogleLogging
  • is not eligible for getting processed by all BeanPostProcessors

    BeanPostProcessor是控制Bean初始化开始和初始化结束的接口 换句话说实现BeanPostProcessor的bean会在其他bean初始化之前完成 BeanPostProcessor会通过接口方法检查其他类型的Bean并做
  • Visio 2013绘制时序图

    为什么要绘制时序图 我们编码的时候 知道有的用例的业务逻辑按照比较确定的时间先后顺序进行展开 这时候 我们就需要知道我们设计的系统中的不同类之间传递消息 可以认为是不同对象函数间的调用 要按照怎么样的顺序 传递什么消息 返回什么消息 这时候
  • Altium designer 原理图转换为pcb时出现的 unknown pin 和 failed to add class member

    网上有很多方法 大部分都是让直接新建一个pcb文件 这显然太不现实了 上述错误可以看出 unknown pin 的错误是在add pin to net的时候发生的 failed to add class member 的错误实在add to
  • 开源库TinyXML2简介及使用

    TinyXML2是一个开源 简单 小巧 高效的C XML解析器 它只有一个 h文件和一个 cpp文件组成 可以轻松集成到其它程序中 它解析XML文档并从中构建可以读取 修改和保存的文档对象模型 Document Object Model D
  • matplotlib绘制折线图

    matplotlib绘制折线图 这阳春三月的邵大白在家过的什么日子 幽栖地僻经过少 花径不曾缘客扫 开个逗b号纪念下这段闭关的时光 万一他以后就变成一个数据分析的大v号了来 好了邵大白课堂开课了 折线图绘制 咱先画个图 载慢悠的加东西 导包
  • Java基础(十三):枚举、注解

    文章目录 一 设置 author标签 二 枚举 enum 一 枚举的两种实现方式 二 enum常用方法 三 注解 一 设置 author标签 设置 author等标签 以后每次创建一个类 自动带着作者信息 二 枚举 enum 枚举表示一组常
  • git提交规范

    1 新功能用add 2 改bug用fix 3 如果使用禅道或者jira 在add或fix后面加上 编号如 add 3563 gt 1 指标名称修改
  • Android Studio解决gradle时下载资源过慢问题

    替换镜像下载方式 打开Android Studio项目中的build gradle文件 找到以下位置 修改jcenter地址为 https maven aliyun com repository jcenter 示例 buildscript
  • 前端实战:小实例5——锚点导航

    前言 锚点定位用于网站某一模块的定位 让用户能够通过锚点直接跳到相应模块 从而实现页面内跳转 常在网页内容较长时使用 多个锚点显示可用一个无序列表显示 利用 ul 和 li 标签 在 li 标签中使用 a 标签实现锚点 对应标签用法可查看
  • Spring Boot + Elasticsearch实现大批量数据集下中文的精确匹配-案例剖析

    缘由 数据存储在MYSQ库中 数据基本维持不变 但数据量又较大 几千万 放在MYSQL中查询效率上较慢 寻求一种简单有效的方式提高查询效率 MYSQL并不擅长大规模数据量下的数据查询 技术方案 考虑后期同样会使用到es 此次直接结合spri
  • Python-修改excel的某一列

    import xlrd 导入模块 from xlutils copy import copy 导入copy模块 rb xlrd open workbook 111 xls formatting info True 打开weng xls文件
  • matlab 点云随机采样到固定点数

    目录 一 采样滤波 1 算法概述 二 代码示例 三 结果展示 一 采样滤波 1 算法概述 给定固定采样点的个数 将点云下采样至给定的点数 二 代码示例 clc clear
  • ElasticSearch6.x 之字段类型

    本文转载至 https blog csdn net chengyuqiang article details 79048800 字段类型概述 字符串类型 1 string string类型在ElasticSearch 旧版本中使用较多 从E
  • 大数据跟区块链之间相互促进关系体现在哪?

    大数据 人工智能和区块链这几个词都是当下非常流行的科技名词 他们不仅拥有各自的特点 还能互相利用跟相互促进 大数据跟人工智能的结合会有什么样的好处 大数据和区块链的结合又能带来什么 今天本文就来跟大家聊聊大数据跟区块链这方面的知识 以供大家
  • HTTP服务器

    HTTP服务器 一 HTTP服务器概述 1 HTTP服务器分类 1 1 JBOSS服务器 1 2 Glassfish服务器 1 3 Weblogic服务器 1 4 Websphere服务器 1 5 Tomcat服务器 1 5 1 Tomca
  • 安装命令 - install

    说明 Linux C C 项目构建过程 有个必要的步骤 install 在Makefile中时常会有一个专门的recipe来做这件事 安装流程需要做以下类型事情 文件的拷贝 最基本 目录结构的创建 程序的strip 文件的属性 权限 owe