cp 命令的高级替代品 install

7/6/2022 Linux

install 命令是 coreutils 中的一个命令,它可以在完成cp命令功能的同时进行文件属性设置等工作

# 典型应用

  • 自动创建不存在的目录
  • 将文件 app.ini 复制为 /etc/apt/sources.list.d/app.list
  • 设置目标文件权限为 755
  • 原文件在覆盖前将被备份为 /etc/apt/sources.list.d/app.list~
install -b -D -m 755 app.list /etc/apt/sources.list.d/app.list
1

使用 cp 命令实现

mkdir -p /etc/apt/sources.list.d
cp /etc/apt/sources.list.d/app.list /etc/apt/sources.list.d/app.list~
cp app.list /etc/apt/sources.list.d/app.list
chmod 755 /etc/apt/sources.list.d/app.list
1
2
3
4

# 常见参数

# --backup

复制文件时进行备份

none, off 不进行任何备份

install --backup=off app.ini /etc/app/app.ini
1

numbered, t 备份文件进行数字编号,本例将生成app.ini.~1~备份文件,数字部分将随着执行次数自增

install --backup=numbered app.ini /etc/app/app.ini
1

simple, never 始终进行简单备份,将生成app.ini~备份文件,多次执行会覆盖此备份文件

install --backup=simple app.ini /etc/app/app.ini
1

existing, nil 如果存在数字备份文件则递增,否则按照简单模式处理(与-b参数一致)

install --backup=nil app.ini /etc/app/app.ini
1

# -b

与 --backup 功能相同,但不接受参数,效果等同 --backup=simple

install -b app.ini /etc/app/app.ini
1

# -C, --compare

比较源文件和目标文件的文件属性,某些情况下不进行复制,例如当目标和源文件完全一致

install -C app.ini /etc/app/app.ini
1

# -d, --directory

将所有参数视为目录,即最终将会得到名为 app.ini 的目录而非 ini 文件

install -d app.ini /etc/app/app.ini
1

# -D

自动创建除目标文件以外的文件(目录),此例中将会自动创建尚不存在的 /etc/app/test 目录

install -D app.ini /etc/app/test/app.ini
1

# -g, --group,-o, --owner

设置文件的所有组与所有者

install -g alex -o alex app.ini /etc/app/test/app.ini
1
> ll /etc/app/test/app.ini
0 -rwxr-xr-x 1 alex alex 0 Aug  4 16:11 /etc/app/test/app.ini
1
2

# -m, --mode

为目标文件设置权限,参数与 chmod 相同

install -m 755 app.ini /etc/app/app.ini
1

# -p, --preserve-timestamps

复制文件时,连文件时间戳一起复制

> ll app.ini
0 -rw-r--r-- 1 root root 0 Aug  4 16:00 app.ini
> install -p app.ini /etc/app/app.ini
> ll /etc/app/app.ini
0 -rwxr-xr-x 1 root root 0 Aug  4 16:00 /etc/app/app.ini
1
2
3
4
5

# -S, --suffix

覆盖默认备份文件的后缀,本例备份文件将被命名为 app.ini.bak

install -S '.bak' -b app.ini /etc/app/app.ini
1

# -v, --verbose

打印被操作的文件详情

# --preserve-context

保留文件的 SELinux 安全属性

Last Updated: 2/11/2023, 2:30:05 AM