이동은 소스 파일의 소유권을 유지하며 쓰기를 허용하지 않습니다.

이동은 소스 파일의 소유권을 유지하며 쓰기를 허용하지 않습니다.

다음을 고려하십시오:

$ id # Me
uid=100(user1) gid=200(group1) groups=200(group1)

$ ls -l tnsnames.ora # So user1 has only read permission on below file.
-rw-rw-r-- 1 oracle dba 411024 Jul 28  2010 tnsnames.ora

$ cp tnsnames.ora tnsnames.ora_bak

$ cat tnsnames.ora_bak > tnsnames.ora # No write access
-bash: tnsnames.ora: Permission denied

$ cp -p tnsnames.ora tnsnames.ora_copy # Copy file and preserve mode, ownership, timestamps. Requires sudo to succeed completely.

$ ls -l tnsnames.ora_copy # Mode and timestamps preserved; ownership not preserved.
-rw-rw-r-- 1 user1 group1 411024 Jul 28  2010 tnsnames.ora_copy

$ mv tnsnames.ora tnsnames.ora_move

$ ls -l tnsnames.ora_move # Move preserves mode, ownership, timestamps.
-rw-rw-r-- 1 oracle dba 411024 Jul 28  2010 tnsnames.ora_move

$

고쳐 쓰다

$ ls -l # As pointed out by @Gilles, the source (which is also the destination here) directory has r-x mode which allows mv to work.
drwxrwxrwx  3 oracle dba  4096 Aug 11 20:38 oracle

  1. 이 명령은 어떻게 mv파일을 이동하고 스키마, 소유권, 타임스탬프를 보존합니까 cp?
  2. 또한 파일에 대한 쓰기 권한이 없으면 어떻게 가능합니까?변화사용된 파일의 위치(메타데이터) mv또는 다른 각도에서 볼 수 있습니다... mv파일이 먼저 복사된 위치와 복사된 파일에 설정된 소유자/그룹을 가져오는 방법 및 소스 파일 권한을 삭제하는 방법 , 쓰기 권한이 없습니다..

OS/Bash/유틸리티 버전 정보:

$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
...
$ uname -a
Linux server1 2.6.18-371.8.1.el5 #1 SMP Fri Mar 28 05:53:58 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cp --version
cp (GNU coreutils) 5.97
...
$ mv --version
mv (GNU coreutils) 5.97
...

답변1

mv다른 파일 시스템 간에 파일을 이동하지 않는 한 파일은 복사되지 않으며 원본 파일은 삭제됩니다. mv파일을 이동합니다.

파일을 이동하려면 이전에 있던 디렉터리에서 파일을 분리하고 파일을 배치하려는 디렉터리에 추가할 수 있는 권한이 필요합니다. 즉, 원본 디렉터리와 대상 디렉터리 모두에 대한 쓰기(및 실행) 권한이 필요합니다. 파일 자체를 수정하거나 액세스하지 않으므로 파일에 대한 특정 권한이 필요하지 않습니다. (비유: 상자를 열 수 있는 열쇠가 없어도 잠긴 상자를 이동할 수 있습니다.)

cp -p파일에 대한 권한은 보존될 수 있고 유지되지만 일반적으로 파일의 소유권은 보존될 수 없습니다. 루트로 실행하고 있지 않기 때문에 cp귀하나 귀하가 속한 그룹에 속하지 않은 파일을 생성할 수 없습니다.

관련 정보