user1:user1
Unix에는 두 명의 사용자와 그룹 이 있습니다 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
글쎄요, 오류가 많이 보입니다.
- 당신은 글을 쓸 수 없습니다
myDirectory
. 그곳에서는 글쓰기 만user2
허용됩니다. - 절대 경로와 상대 경로를 혼동하고 있습니다.
/myDirectory
다른 디렉토리입니다myDirectory
. 스크립트가 파일 시스템 루트 폴더에 복사하려고 하기 때문에 권한 거부 오류가 발생할 수도 있습니다myDirectory
.myDirectory
경로가 현재 명령줄 경로(스크립트가 호출된 컨텍스트)에 상대적인 경우 이는./myDirectory
올바른 것입니다 . 그렇지 않은 경우 실제 위치에 대한 자세한 정보를 제공해 주시기 바랍니다myDirectory
. 상대 경로의 범위는myDirectory
여러 가지 방법으로 달라질 수 있으므로 이는 중요합니다. 귀하의 구체적인 상황을 알지 못한 채 이와 관련된 답변은 일반적인 것일 뿐 귀하의 특정 상황에는 적용되지 않을 수 있습니다. [
조건식]
은 에만 적용되고 에는 적용Bash
되지 않습니다Shell
. 의 정의는Shell
현재 작업 중인 UNIX 시스템에 따라 달라집니다. 일반적으로 Linux에서는Bash
Linux가 직접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 등과 같은 다른 스크립팅 언어에도 좋은 접근 방식입니다.