cp 命令的高级替代品 install
Alex 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
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
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
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 安全属性