한 사용자가 다른 사용자가 소유한 디렉토리에 파일을 복사하는 쉘 스크립트

한 사용자가 다른 사용자가 소유한 디렉토리에 파일을 복사하는 쉘 스크립트

user1:user1Unix에는 두 명의 사용자와 그룹 이 있습니다 user2:user2.

myDirectory다음 세부정보가 포함된 디렉터리가 있습니다( ls -ltr).

drwxr-xr-x.  4 user2 user2   35 Apr 27 10:16 myDirectory

지금은 myScript.sh다음과 같은 스크립트를 실행하고 있습니다 user1.

#!/bin/sh

whoami

if [ -f /myDirectory/*.tar.gz ]
then
    rm -f /myDirectory/*.tar.gz
fi

cp -f someDirectory/*.tar.gz /myDirectory/

그러나 다음과 같은 오류가 발생합니다.

cp: cannot create regular file ‘/myDirectory/myTar.tar.gz’: Permission denied

내가 뭘 잘못했나요? 이 문제를 어떻게 해결할 수 있나요?

답변1

이를 수행하려면 그룹 권한을 사용할 수 있습니다. 사용자 그룹을 생성하고, 두 명의 사용자를 추가하고, 대상 디렉터리의 그룹 소유권을 변경해야 합니다. 먼저 그룹을 만듭니다.

groupadd newusergroup

그런 다음 사용자를 추가합니다.

usermod -G newusergroup user1
usermod -G newusergroup user2

그런 다음 대상 디렉터리의 권한을 변경합니다.

chgrp newusergroup /myDirectory

이는 모두 두 사용자 모두 디렉터리에 액세스할 수 있기를 원한다고 가정합니다. user1에게만 액세스 권한을 부여하려면 다음과 같이 권한을 변경하면 됩니다.

chown user1.user1 /myDirectory

답변2

권한은 해당 디렉터리에서 파일을 삭제하거나 생성하는 방법에 group영향을 미칩니다 .mydirectory

먼저 user1다음 명령을 실행하십시오.

chmod g+w mydirectory

답변3

작성해야 하는 사용자, 즉 복사하려는 사용자라면 더욱 좋습니다.도착하다, 스크립트를 실행합니다. 이렇게 하면 대상 디렉터리에 특별한 쓰기 권한을 부여할 필요가 없습니다.

또한, 테스트

if [ -f /myDirectory/*.tar.gz ]

실패. 테스트 -f에서는 하나의 매개변수를 사용하지만 패턴이 여러 파일과 일치하는 경우 여러 매개변수를 전달해야 합니다. myDirectory압축된 아카이브의 디렉토리를 비우고 싶으면 tar충분합니다.

rm -f /myDirectory/*.tar.gz

삭제할 파일이 없는 경우 를 표시하면 오류가 발생하지 않습니다 -f.rm

답변4

글쎄요, 오류가 많이 보입니다.

  1. 당신은 글을 쓸 수 없습니다 myDirectory. 그곳에서는 글쓰기 만 user2허용됩니다.
  2. 절대 경로와 상대 경로를 혼동하고 있습니다. /myDirectory다른 디렉토리입니다 myDirectory. 스크립트가 파일 시스템 루트 폴더에 복사하려고 하기 때문에 권한 거부 오류가 발생할 수도 있습니다 myDirectory. myDirectory경로가 현재 명령줄 경로(스크립트가 호출된 컨텍스트)에 상대적인 경우 이는 ./myDirectory올바른 것입니다 . 그렇지 않은 경우 실제 위치에 대한 자세한 정보를 제공해 주시기 바랍니다 myDirectory. 상대 경로의 범위는 myDirectory여러 가지 방법으로 달라질 수 있으므로 이는 중요합니다. 귀하의 구체적인 상황을 알지 못한 채 이와 관련된 답변은 일반적인 것일 뿐 귀하의 특정 상황에는 적용되지 않을 수 있습니다.
  3. [조건식 ]은 에만 적용되고 에는 적용 Bash되지 않습니다 Shell. 의 정의는 Shell현재 작업 중인 UNIX 시스템에 따라 달라집니다. 일반적으로 Linux에서는 BashLinux가 직접 Shell구현되지 않고 BSD도 없기 때문에 를 가리킵니다 . Mac에서만 자체적으로 직접 Shell구현이 가능합니다. 따라서 Shell이것은 단지 이론적인 UNIX 표준일 뿐이며 오늘날 이 이론적인 문서에는 실제로 현재 실행 중인 UNIX 시스템에 따라 달라지는 다양한 방언과 해석이 있습니다. 따라서 직접 사용하는 것이 좋습니다 Bash. 이는 대부분의 UNIX 플랫폼에서 100% 작동합니다. Bash를 사용할 수 없는 UNIX 시스템은 없습니다.

고려해야 할 몇 가지 다른 흥미로운 점: 여러 그룹을 추가할 수 있습니다. 그룹은 user1및 입니다 user2. 그런 다음 홈 폴더 그룹을 myDirectory해당 그룹으로 변경할 수 있습니다. 내가 아는 한 이것은 일반적인 접근 방식입니다.

Shebang 명령을 통해 Bash를 사용할 수도 있으며 /usr/bin/env, 이를 통해 실제로 Bash에 들어갈 수 있습니다.

#!/usr/bin/env bash

이는 Perl, PHP 등과 같은 다른 스크립팅 언어에도 좋은 접근 방식입니다.

관련 정보