cp 权限的实验测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@luffy luffy2]# cp --help
用法:cp [选项]... [-T] 源文件 目标文件
 或:cp [选项]... 源文件... 目录
 或:cp [选项]... -t 目录 源文件...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
-a, --archive 等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据 --backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f, --force if an existing destination file cannot be
opened, remove it and try again (this option
is ignored when the -n option is also used)
-i, --interactive prompt before overwrite (overrides a previous -n
option)
-H follow command-line symbolic links in SOURCE
-l, --link hard link files instead of copying
-L, --dereference always follow symbolic links in SOURCE
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:环境、链接、xattr 等
-c deprecated, same as --preserve=context
--sno-preserve=属性列表 不保留指定的文件属性
--parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如。
--remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式
--strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有参数指定的源文件/目录
复制至目标目录
-T, --no-target-directory 将目标目录视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件
不存在时才进行复制
-v, --verbose 显示详细的进行步骤
-x, --one-file-system 不跨越文件系统进行操作
-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 显示版本信息并退出

日常会用的的特别重要的有,-a -d -f -i -l -p -r -s -u

1
2
3
4
5
6
7
8
9
10
11
12
13
 cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

-a 相当于 “-d、-p、-r” ,在进行相关应用的数据迁移时,就必须把权限带上,因为很多应用在启动的时候为了安全并不是以root的账号去运行,比如postgres,这时要是以root的身份去cp,不带任何参数,权限就变成只有root和root所在组的用户可以运行了,别的用户是不能运行的!真实踩坑!

记录下实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
[root@luffy ~]# cd /home/luffy2/
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
[root@luffy luffy2]# cp xxx ./xxx_root
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
[root@luffy luffy2]# cp -a xxx ./xxx_root_a
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
[root@luffy luffy2]# su - luffy2
上一次登录:二 8月 8 17:03:52 CST 2023pts/1 上
[luffy2@luffy ~]$ ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
[luffy2@luffy ~]$ chmod 754 xxx
[luffy2@luffy ~]$ ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rwxr-xr-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
[luffy2@luffy ~]$ su - root
密码:
上一次登录:二 8月 8 17:08:40 CST 2023pts/1 上
[root@luffy ~]# cd /home/luffy2/
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rwxr-xr-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
[root@luffy luffy2]# cp xxx xxx_root_x
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rwxr-xr-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
-rwxr-xr-- 1 root root 0 8月 8 17:11 xxx_root_x # 原本luffy2 无执行权限了!!
[root@luffy luffy2]# cp -a xxx xxx_root_x_a
[root@luffy luffy2]# ll
总用量 0
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:04 luffy2
drwxrwxr-x 2 luffy2 luffy2 17 8月 8 17:06 luffy22
-rwxr-xr-- 1 luffy2 luffy2 0 8月 8 17:07 xxx
-rw-r--r-- 1 root root 0 8月 8 17:08 xxx_root
-rw-rw-r-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_a
-rwxr-xr-- 1 root root 0 8月 8 17:11 xxx_root_x
-rwxr-xr-- 1 luffy2 luffy2 0 8月 8 17:07 xxx_root_x_a # 这样才是ok的!!!

cp 权限的实验测试
https://luffy997.github.io/2023/08/08/cp-权限的实验测试/
作者
Luffy997
发布于
2023年8月8日
许可协议