일반 사용자

일반 사용자

이것은 GNU에 관한 것입니다 rm. 정보 페이지에는 다음과 같이 나와 있습니다.

그렇지 않고 파일을 쓸 수 없으면 표준 입력이 터미널이고 -f또는 옵션이 제공되지 않거나 또는 옵션이 제공되어 사용자에게 파일을 삭제할지 묻는 메시지가 표시됩니다. 응답이 긍정적이지 않으면 파일을 건너뜁니다.--force-i--interactive=alwaysrm

  • 이것은 단지 GNU입니까?

  • 루트로 사용할 때 rm내 시스템에서는 이런 일이 발생하지 않습니다 . 이게 정상인가요? 어디에서도 문서화 된 것을 찾을 수 없습니다.

  • 이 행동의 근거는 무엇입니까? 이는 파일을 삭제하려면 파일에 대한 쓰기 권한이 필요하다고 생각하는 경향이 있는 사용자에게 혼란을 가중시킬 뿐입니다. 이것은 그들이 rm파일을 chmods한다고 생각하게 만듭니다. 하지만 rm소유자가 아닌 경우 파일을 삭제할 수 있습니다.

답변1

3가지 질문을 주셨으니 따로 답변해드리겠습니다.

첫 번째 질문:

이것은 단지 GNU입니까?

GNU인지는 잘 모르겠습니다오직. 이는 GNU Coreutils의 기능인 것으로 보이며 rm적어도 일부 다른 rm문서에서 찾을 수 있습니다. 예를 들어, 일부에 따르면opengroup.org의 오래된 문서POSIX의 경우 rm:

  1. 파일이 디렉토리 유형이 아니거나 -f 옵션이 지정되지 않았거나 파일의 권한이 쓰기를 허용하지 않고 표준 입력이 터미널이거나 -i 옵션이 지정된 경우 rm은 표준 오류에 프롬프트를 작성하고 읽습니다. 표준 입력의 한 줄. 응답이 긍정적이지 않으면 rm은 현재 파일에 대해 더 이상 작업을 수행하지 않고 나머지 파일을 계속 처리합니다.

익숙한 것 같나요? 해당 문구는 rm귀하의 질문에서 언급한 GNU 문서와 매우 유사합니다.


두 번째 질문:

rm을 루트로 사용할 때 내 시스템에서는 이런 일이 발생하지 않습니다. 이것이 정상적인 행동입니까? 어디에도 이에 대한 기록을 찾을 수 없습니다.

rm플래그 없이 루트로 실행하면 "쓰기 불가능한 파일"을 삭제하려고 할 때 메시지가 표시되지 않는다는 의미라면 그렇습니다. 이것은 GNU Coreutils 8.23 ​​​​(그리고 아마도 거의 모든 GNU Coreutils 버전)의 정상적인 동작입니다. 딱히 문서는 없는 것 같지만, 찾아보면유래rm(파일을 하나로 묶으려면 여러 파일 사이를 왔다 갔다 해야 합니다.) rm somefile터미널에서 루트로 실행하면 somefile프롬프트 없이 삭제된다는 것을 알 수 있습니다.쓰기 금지되어 있어도.


세 번째 질문:

이 행동의 근거는 무엇입니까? 이는 파일을 삭제하려면 파일에 대한 쓰기 액세스 권한이 필요하다고 생각하는 경향이 있는 사용자에게 혼란을 가중시킬 뿐입니다. 이로 인해 rm chmod가 파일을 생각하게 됩니다. 그러나 rm은 소유자가 아닌 경우 파일을 삭제할 수도 있습니다.

사용자가 자신에게 속하지 않은 쓰기 금지된 파일을 삭제할 수 있는 이유를 의미한다면 해당 동작은 rm파일 시스템 권한보다는 관련이 더 많습니다. 바라보다linuxdevcenter.com,네트워크 정보 네트워크, 그리고위키피디아, 함께 설명하면 다음과 같습니다.

일반적으로 대부분의 파일 시스템에서 파일을 삭제하려면 상위 디렉터리에 대한 쓰기 권한(및 처음에 해당 디렉터리에 들어가기 위한 실행 권한)이 필요하지만 파일 자체에 대한 권한은 필요하지 않습니다. 초보자에게는 혼란스러울 정도로 파일 자체에 대한 권한은 관련이 없습니다.그러나 GNU rm에서는 -f 옵션을 사용하지 않는 한 쓰기 금지된 파일이 삭제된다는 확인이 필요합니다.

대담한 강조는 내 것입니다. 이는 Linux 및 기타 Unix 계열 운영 체제가 파일 권한에 따라 파일 삭제를 처리하는 방법입니다.

답변2

일반 사용자

파일을 직접 삭제/수정하지 못하도록 보호하고 싶을 수도 있습니다. 빠른 방법은 chmod 000 foo(또는 chmod -w foo)입니다. 그러나 만일마지못해 삭제를 선택합니다.

따라서 rm명령은 이러한 경우에 루트가 아닌 사용자에게 알리므로 확인 요청이 발생합니다.

뿌리

특히 배치/자동 프로세스에서 루트로 실행하는 경우

  1. 당신은 당신이 무엇을하고 있는지 알아야합니다.
  2. 확인이 필요한 경우 많은 쉘이 중단될 수 있습니다.

결과적으로 파일은 "즉시" 삭제됩니다.

확인하다

확인을 요청( -i)하거나 종료( -f) 할 수 있습니다.

  • -i일반 사용자의 경우 기본값입니다.
  • -f기본값은 루트입니다.

답변3

이것은 단지 GNU입니까?

습관. 이러한 rm행동은 약 40년 전으로 거슬러 올라가며 현재까지 계속되고 있습니다.표준화.

이 행동의 근거는 무엇입니까?

~에서rm 초판 매뉴얼 페이지:

파일을 삭제하려면 해당 디렉터리에 대한 쓰기 액세스 권한이 필요하지만 파일 자체에 대한 읽기 또는 쓰기 액세스 권한은 필요하지 않습니다.

BUGS
rm은 읽기 전용 파일이 실제로 삭제되기를 원하는지 물어봐야 합니다.

이는 사용자가 파일 모드를 읽기 전용으로 변경하여 파일을 실수로 쓰지 못하도록 보호하려는 경우 실수로 삭제되지 않도록 보호하는 것이 가치가 있다는 의미라고 생각합니다.

TUHS 아카이브에는 제2판 매뉴얼 페이지와 rm 소스 코드가 없지만rm 제3판 매뉴얼 페이지이 문제가 해결되었음을 나타냅니다.

삭제하도록 지정된 파일에 쓰기 권한이 없으면 rm은 파일 이름과 해당 모드를 인쇄한 다음 표준 입력에서 한 줄을 읽습니다. 줄이 "y"로 시작하면 파일이 삭제되고, 그렇지 않으면 삭제되지 않습니다. 선택적 매개변수 -f는 위의 상호작용을 방지합니다.

Unix와 그 명령의 대부분은 결국표준화, 오늘 rm이 이렇게 공연한 이유가 바로 이것입니다.

rm을 루트로 사용할 때 내 시스템에서는 이런 일이 발생하지 않습니다. 이것이 정상적인 행동입니까?

처음에는 아니었지만 이제는 정상적인 행동입니다.

내가 찾을 수 있는 가장 초기의 소스 코드는 다음과 같습니다.V5:

    if(getuid() == buf->uid)
        b = 0200; else
        b = 2;
    if((buf->mode & b) == 0)    {
        printf("%s: %o mode ", arg, buf->mode);
        i = b = getchar();
        i = b;
        while(b != '\n' && b != '\0')
            b = getchar();
        if(i != 'y')
            return;
    }

쓰기 가능성 확인 보기 표시소유자의 쓰기 액세스rm을 실행하는 사용자가 파일을 소유하고 있는지 여부를 표시합니다. 그렇지 않으면다른 사람을 위한 쓰기 권한배너.

존재하다V7, rm은 새로 추가된사용할 권리시스템 호출:

    if (access(arg, 02)<0) {
        printf("rm: %s %o mode ", arg, buf.st_mode&0777);
        if(!yes())
            return;
    }

루트는 모든 파일에 대한 쓰기 액세스 권한을 갖는 것으로 간주 되므로 access(읽기 전용 파일 시스템에 있지 않은 경우) rm일반적으로 루트로 실행할 때 확인을 요청하지 않습니다.

관련 정보