한 사용자의 모든 파일을 다른 사용자로 변경하려면 어떻게해야합니까?


39

주어진 사용자, 바람직하게 대상 디렉토리에있는 모든 파일의 소유권을 다른 지정된 사용자로 변경할 수있는 Linux 명령을 찾고 있습니다.

내 꿈의 명령은 다음과 같습니다.

chuser -R --olduser tom --newuser jerry

또는

chuser -R --olduser 1066 --newuser 1492

이것은 내 시나리오입니다 ... 사용자 및 그룹 정보가 보존 된 백업 파일 (.tgz)이 있습니다. Apache 및 MySQL을 실행하는 웹 서버에서 가져 왔습니다. 백업의 파일은 시스템 전체에 있으며 여러 다른 사용자와 여러 시스템 유형 계정의 파일을 포함하므로 새 서버에서 복원 할 때 설정이 손실되지 않는 것이 중요합니다. 문제는 파일을 복원하는 컴퓨터의 사용자가 백업 파일의 사용자와 일치하지 않기 때문입니다. 예를 들어 두 시스템 모두 MySQL 사용자를 가지고 있지만 서로 다른 사용자 ID를 가지고 있으며 다른 사용자에 속하는 두 시스템에 존재하는 여러 사용자 ID가 있습니다. 즉, 새 컴퓨터의 사용자를 기존 컴퓨터의 사용자와 동기화 할 수있는 방법이 없습니다.

이런 명령을 사용하여 모든 사용자 파일을 찾을 수 있습니다 ...

find /decompressed-backup-dir -uid 1050

또는

find /decompressed-backup-dir -user tom

내가 생각하는 것처럼 단일 명령으로 원하는 것을 수행 할 수있는 방법이 없다면 소유권 변경을 처리하기 위해 find 명령의 결과를 다른 명령으로 파이프하는 방법이 있습니까?

PHP 스크립트 로이 작업을 수행 할 수 있지만 백업에 4GB 및 수만 개의 파일이 있으므로 PHP 또는 Perl을 사용하고 싶지 않지만 그것을 처리 할 수있는 쉘 스크립트에 만족할 것입니다.

답변:



65

chown 명령의 --from 플래그가 가장 쉬운 방법이라고 생각합니다.

chown --from=oldguy newguy * -R

3
최고의 솔루션, 그것을 찾을 필요가 없습니다
Tobias Hagenbeek

2
최적의 솔루션
Karl Forner

1
OS X에서는 brew install coreutils및 로이 작업을 수행 할 수 있습니다 gchown.
jomo

이것이 정답입니다.
George M

최선의 답변으로 표시되어야합니다.
Soullivaneuh 2016 년

7

받는 사람 추가 SiteKickr 의해 답변 , chgrp이없는 --from인수를,하지만 당신은과 같은를 달성 할 수있는 chown사용자를 생략하여.

예:

chown -R --from=:currentgroup :newgroup /some/directory

6

find다른 사람이 게시 한 것처럼을 사용하여을 수행 할 수 있습니다 chown.

그러나 당신 tar을 위해 일을 돌볼 필요가 없을 수도 있습니다.

예를 들어, 당신은 할 tarmachine A사용자가 어디 tom이며 uid 500다음 untar의 파일 machine B사용자가 어디에 tom있다가 uid 505, tar옳은 일을하고 소유 한 파일을 uid 505.


재미있는 재주, 나는 이것을 몰랐다. 따라서 tar는 uid뿐만 아니라 uid와 관련된 이름도 저장합니다.
Nicholi

3
원래 tar 형식은 숫자 정보 만 저장했습니다. POSIX가 80 년대 후반에 도입 한 UStar 형식은 이름을 추가합니다. 요즘 당신이 만나는 거의 모든 타르가 옳은 일을합니다.
Ciclamino

1

대답은 사용자 및 그룹 모두를 설정합니다 :

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

그러나 일부 사용자에게 속한 파일 그룹 만 변경하려면 chown(아는 한) 사용할 수 없지만 대신 다음을 사용하십시오 chgrp.

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

일부 그룹에 속하는 파일 그룹 만 변경하려면 다음을 사용해야합니다. 예 :

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

지식을 추가하기 위해서입니다.


1
실제로, 당신은 그 newuser부분을 생략 할 수 있습니다 . 매뉴얼 페이지에 "콜론과 그룹이 주어졌지만 소유자가 생략 된 경우 파일 그룹 만 변경됩니다.이 경우 chown와 동일한 기능을 수행합니다 chgrp."
벤 Voigt

0

동일한 /etc/passwd사용자 에게 확인되는 이전 / 새 소유권 ID재귀 적으로 매핑 해야하는 경우 ,

(서버에 LDAP를 도입 /etc/passwd하고 각 사용자 및 그룹에 대해 중복 된 항목 이있는 경우 발생할 수 있음 ),

내가 작성한이 스크립트를 사용할 수 있습니다 : https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544

자체적으로 맵핑을 작성합니다. 불행히도 프로그램의 인터페이스는 코드에 있습니다. 어떻게 작동하는지 조사해야하는 경우 디버그 명령문을 추가하십시오. 그러나의 복제본으로 만든 매핑을 사용/etc/passwd 하여 영광을 얻은 chown입니다 . 이것이 누군가에게 유용하다면 정말 멋질 것입니다. :)


-2

당신이 사용할 수있는 chown - R /directory/file

이 명령은 디렉토리의 모든 인스턴스에 대한 권한을 변경합니다 chown - R /directory

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.