install 是什么
install 是部署场景下比 cp 更合适的复制命令:它在一次调用里完成复制、设定权限、指定属主属组,还能顺手创建父目录链。写部署脚本时,把「复制二进制到 /usr/local/bin 并设为 0755」「把配置放到 /etc 并设为 0644、属主 root」「创建数据目录并给应用用户 0750」这些动作各压成一行,既短又不留隐患。
基本信息
| 用途 | 复制文件或创建目录,同时设定权限与属主 |
|---|---|
| 语法 | install [选项] 源文件... 目标;install -d 目录... 用于建目录 |
| 常用选项 | -m 权限、-o 属主、-g 属组、-d 视为目录、-D 自动创建父目录、-t 指定目标目录 |
| 所属 | GNU coreutils(copy 家族,与 cp 同源) |
典型使用场景
- 部署二进制:复制到 /usr/local/bin 并一次设成 0755,省掉后续 chmod
- 安装配置文件:放到 /etc 下并设成 0644、属主 root,避免权限过宽
- 创建数据目录:用 -d 建目录并直接带权限与属主,替代 mkdir 加 chmod 加 chown 三步
- 目录链补齐:目标路径层级很深时用 -D 自动创建,脚本更短
- 批量铺配置:用 -t 指定目标目录,一次安装多个文件
常用示例
常用示例
install -m 0755 app /usr/local/bin/app # 部署可执行文件
install -m 0644 app.conf /etc/app/app.conf # 配置文件设为只读可复制
install -d -m 0755 -o www -g www /var/www/uploads # 建目录并设权限与属主
install -D -m 0644 conf/app.conf /etc/app/conf.d/app.conf # 父目录不存在时自动创建
install -m 0644 -t /etc/app/conf.d/ a.conf b.conf # 多个文件装到同一目录
install -b -m 0644 next.conf /etc/app/app.conf # GNU 版本可留备份常用选项对照
| 选项 | 作用 | 注意 |
|---|---|---|
| -m 权限 | 设置目标文件或目录的权限 | 八进制写法,如 0755、0644 |
| -o / -g | 设置属主与属组 | 需要足够权限,通常以 root 执行 |
| -d | 把参数当目录处理 | 一次可建多个目录,替代 mkdir 加改权限 |
| -D | 自动创建目标路径的父目录 | 部署脚本里很常用 |
| -t 目录 | 指定目标目录,源码可多个 | 多个文件同目录时比逐个写更省事 |
| -b | 覆盖前留备份 | GNU coreutils 支持,移植时需确认 |
install 覆盖目标文件时不询问,这也是它在脚本里受欢迎的原因。但用于配置文件时最好先做差异对比或启用备份,避免把本地调整无声地覆盖掉。
替换正在运行的二进制时,进程仍持有旧文件(旧的 inode),要重启服务才会加载新版本。这一点与 cp 覆盖的行为一致,部署后记得配套重启。