Alguns meses atrás eu fiz um teste do comportamento de cp
quando o arquivo de destino já existia :
$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete vagrant 39 Dec 16 20:35 file2
913965 -rwxrw---- 2 pete vagrant 39 Dec 16 20:35 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the original contents of file2
$ cp file1 file2
$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete vagrant 30 Dec 16 20:37 file2
913965 -rwxrw---- 2 pete vagrant 30 Dec 16 20:37 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the contents of file1
$
Como você pode ver, o arquivo de destino é sobrescrito e todas suas permissões, propriedade, atributos, etc. são preservados - até mesmo hard links. O arquivo de origem não afeta isso de nenhuma maneira.
Não faria sentido que mtime
fosse preservado por padrão, e não é. Mas você notará que a nova mtime
de file2
não é tirada de file1
- foi tirada da hora atual do sistema.
Você poderia fazer um teste semelhante sem ter o arquivo de destino já existente, mas esse teste realmente ilustra o ponto mais claramente: Somente o conteúdo real do arquivo é copiado quando nenhuma opção são especificadas. Propriedade de arquivo, permissões, ACLs, mtime, et. al. não são definidos de acordo com o arquivo de origem, mas são configurados da mesma forma que seriam para um arquivo recém-criado. (Assim, permissões de acordo com umask
, mtime
de acordo com a hora atual, propriedade de acordo com o EUID do processo cp
, etc.)
Existe uma exceção específica, mas comum :
In the absence of [the --preserve=] option, the permissions of existing destination files are unchanged. Each new file is created with the mode of the corresponding source file minus the set-user-ID, set-group-ID, and sticky bits as the create mode. (The operating system then applies either the umask or a default ACL, possibly resulting in a more restrictive file mode).
De acordo com info coreutils 'cp invocation'
:
'xattr' Preserve extended attributes if 'cp' is built with xattr support, and xattrs are supported and enabled on your file system. If SELinux context and/or ACLs are implemented using xattrs, they are preserved by this option as well.
Isso não especifica que os atributos estendidos sejam preservados de outra maneira que com esse sinalizador.