쉘에서 그룹 변경

쉘에서 그룹 변경

충분히 간단합니다. 사용자 foo가 있습니다. foo는 foo(main), audio, A, B 및 그룹에 속합니다.흔한.

일반적으로 파일은 foo.foo 소유권으로 생성됩니다.

한동안 나는 그룹과 함께 foo 파일을 만들고 싶었습니다.흔한. 기본적으로 이것이 내가 보는 방법입니다.

Cache present group
Change group to *common*
Touch alpha
Touch beta 
...
Change group back.

알파 베타(및 그 이후의 모든 것)는 소유자 foo가 생성해야 합니다.흔한. 어떻게 해야 하나요?

추신: 이런. bash와 zsh에서 이 작업을 수행하고 싶다는 것을 언급하는 것을 잊었습니다.

답변1

Bash나 zsh에는 이 기능이 없습니다.

전화해도됩니다newgrp. 이는 새 프로세스를 시작하는 외부 명령입니다. SHELL인수 없이 환경 변수가 지정한 프로그램을 실행합니다 .

newgrp common <<EOS
touch alpha beta
EOS
touch belongs_to_original_group

새 셸이 시작 되면 newgrp원래 셸의 셸 변수에서 상속되지 않고 환경(내보낸) 변수에서만 상속됩니다. 그곳에서 수행된 모든 할당은 그곳에서만 적용됩니다.

답변2

이렇게 하려면 다음을 사용하세요.newgrp주문하다:

newgrp common
touch whatever
newgrp foo

귀하는 두 그룹의 구성원이므로(그리고 그룹 비밀번호를 사용하지 않을 수도 있음) 쉽게 전환할 수 있습니다. 실제로 모든 호출은 newgrp서브쉘을 생성합니다. 누구를 이용하고 있는지 확인할 수 있습니다.id. 쉘을 종료하고 이전 그룹을 복원할지 아니면 새 하위 쉘을 생성할지 여부는 수행하려는 작업에 따라 다릅니다.

일부 관련 명령과 달리 이 명령은 다음 위치에 있습니다.POSIX:

newgrp 유틸리티는 새로운 실제적이고 효과적인 그룹 ID를 사용하여 새로운 쉘 실행 환경을 생성해야 합니다.

답변3

문제의 파일이 너무 많은 디렉터리에 분산되어 있지 않은 경우 디렉터리의 SGID 비트인 Unix 권한의 미묘한 기능을 사용하여 프로세스를 자동화할 수도 있습니다.

디렉토리에 2775의 권한이 있고 rwxrwsr-x디렉토리의 소유자가 이라고 가정합니다 xyz.common. 그룹의 구성원인 사용자가 common이 디렉토리에 파일이나 하위 디렉토리를 생성하면 해당 그룹 소유권은 자동으로 로 설정됩니다 common.

관련 정보