Que metadados de um arquivo o cp preserva por padrão?

2

Por padrão, que metadados do arquivo cp preserva e quais metadados do arquivo não? Por exemplo, se eu estiver correto, o mtime será alterado, a lista de acesso será preservada e eu gostaria de saber sobre os outros metadados (por exemplo, os outros timestamps, ...).

Estou pesquisando o manual de coreutils, mas não consigo encontrar a resposta.

    
por Tim 11.04.2016 / 20:03

1 resposta

2

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.

    
por 11.04.2016 / 20:51

Tags