rm -f 이후에도 파일 삭제 방지

rm -f 이후에도 파일 삭제 방지

저는 보통 StackOverflow에 머물지만 이 주제에 대해서는 여러분이 훨씬 더 전문가라고 생각합니다.

script.sh그래서 오늘의 연습은 이상합니다. 삭제를 방지하기 위해 최선을 다해 a를 작성해야 test.txt하지만 마지막 줄이 문제입니다.가지다장차 ~ 가 되는

rm -f test.txt

저는 쉘에 대해 잘 모르기 때문에(보통 c/objective-c를 사용합니다) 책을 집어 들었지만 아직 다 읽지 않았지만 어떻게 해야 할지 전혀 모릅니다.

권한에 대해 생각해봤는데 테스트하면 스크립트에 모든 권한이 부여되므로 옵션이 아닙니다... (중요한지는 모르겠지만 스크립트는 OS X에서 실행됩니다.)

답변1

Linux에서는 불변 플래그를 사용하여 chattr파일 시스템 수준에서 읽기 전용을 달성할 수 있습니다(단, 적절한 권한이 필요함). 나는 OS X를 사용하지 않고 비슷한 것이 있는지 모르지만 다음을 test.txt사용하여 "스크립트가 실행된 후에도 여전히 존재합니다"를 달성할 수 있습니다.

#!/bin/sh
mv test.txt test.bak
trap "mv test.bak test.txt" EXIT

rm -f test.txt

이 스크립트는 스크립트가 종료되면(뒤에 ) 이름 test.txt을 로 바꾸고 다시 이름을 바꿉니다 . 이것은 실제로 읽기 전용은 아니지만 스크립트를 사용하지 않는 한 최소한 데이터는 보존해야 합니다.test.bakrm -f test.txtkill -KILL

대안 아이디어, 만약 당신이 그 라인을 포함해야 한다고 주장한다면, 더 일찍 종료하는 것은 어떨까요?

#!/bin/sh
# do your thing
exit
# my boss insisted to have the 'rm' line below.

rm -f test.txt

rm아무것도 하지 않는 함수로 바뀌는 대안 :

#!/bin/sh
# do your thing
rm() {
    # this function does absolutely nothing
    : # ... but it has to contain something
}

rm -f test.txt

위의 함수 메서드와 유사하지만 더 이상 사용되지 않는 명령을 사용하여 아무 작업도 수행하지 않는 내장 에 대한 alias별칭을 지정합니다 (그러나 실제 종료 코드 반환).rmtrue

#!/bin/sh
# do your thing
alias rm=true

rm -f test.txt

환경에서 제거하는 대안 ( 내장된 rm것이 없다고 가정 ):rm

#!/bin/sh
# do your thing
PATH= # now all programs are gone, mwuahaha

# gives error: bash: rm: No such file or directory
rm -f test.txt

$PATH스텁 프로그램을 사용하여 변경되는 또 다른 것 rm( /tmp검색 경로로 사용):

#!/bin/sh
# do your thing
>/tmp/rm # create an empty "rm" file
chmod +x /tmp/rm
PATH=/tmp

rm -f test.txt

내장 기능에 대한 자세한 내용을 보려면 help <built-in>세부정보를 실행하세요. 예를 들어:

true: true
    Return a successful result.

    Exit Status:
    Always succeeds.

다른 명령에 대해서는 man rm매뉴얼 페이지를 사용하거나 참조하십시오 man bash.

답변2

파일을 제거하려면 해당 파일이 포함된 디렉터리에 대한 쓰기 권한이 필요합니다.

$ chmod -w .
$ rm -f test.txt
rm: cannot remove `test.txt': Permission denied

이 목적을 위해 생성된 임시 디렉토리에서 이 작업을 수행해야 합니다. 예를 들어, 홈 디렉토리에 대한 쓰기 권한을 제거하고 싶지는 않지만 다음을 사용하여 복구하는 것은 쉽습니다.chmod +w .

관련 정보