rm -rf -no-preserve-root가 필요한 시나리오가 있습니까?


27

사람들이 실수로 rm -rf --no-preserve-root또는을 수행 rm -rf *하여 반응하기 전에 대부분 또는 모든 파일 시스템을 지우는 곳에서 몇 가지 질문을 보았습니다 .

--no-preserve-root정상적인 사용 여부와 상관없이 개발자 또는 관리자 로 사용할 이유가 있습니까?


4
나는 유용한 사례를 상상할 수 없다… 나는이 옵션이 유닉스 원칙의 직교성을 얻기 위해 존재한다고 생각한다 (예외없이 똑같은 것들을 유지한다는 관점에서). 의 경우 예외를 원할 수도 /있지만»general case«는 여전히 표시됩니다. 다시 말해 :»내가해야 할 일을 말해주는 것은 내 컴퓨터의 일이 아닙니다.«그렇게해서는 안됩니다.
Andreas Wiese

SkyNet이 인수 할 때 사용할 수있는 무기가 있습니다.
미치 다트

답변:


26

중요 : 최신 UEFI 시스템은 /sys디렉토리에 펌웨어를 마운트 하고 OS에서 사용할 수 있도록합니다. 최신 시스템에서는 이 명령실행하지 마십시오. 이 펌웨어는 제거되어 본질적으로 시스템을 손상시킵니다.


내가 생각할 수있는 가장 간단한 시나리오는 드라이브에서 모든 데이터를 삭제하려는 사람입니다. 이 작업을 수행해야하는 합법적 인 이유와 내가 생각할 수있는 가장 간단한 방법은 다음과 같습니다.

rm -rf --no-preserve-root /

이 것은 실제로 다음과 같은 예제로 제공됩니다 info rm.

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

또 다른 완벽한 이유는 마운트 된 파일 시스템을 삭제하려고하기 때문입니다 chroot. 이 경우 환경 rm -rf --no-preserve-root /에서 시스템을 삭제 chroot하지만 시스템은 그대로 유지됩니다.

더 많은 이유가있을 것이라고 확신하지만 일반적으로 시스템에서 내가 원하는대로 할 수있는 매우 합리적인 접근 방식 인 것 같습니다. 조심해야 할 것은 제 일입니다. 시스템은 내가 원하는 일만 할 수 있도록해야합니다. 내가 원하는 것이 어리 석다면 그것은 OS의 문제가 아니라 내 문제입니다.

어쨌든 이것은 비교적 새로운 제한 사항이며 POSIX 사양 의 7 번째 버전 ( 이전 버전 은 여기 있음) rm -rf /에 추가되어 완벽하게 유효한 명령이었습니다. 역사적으로, ...디렉토리는 디렉토리를 삭제하는 기능을 처음 획득 한 rm1979 년 이후로 항상 보호되었습니다 rm. 그것에 대한 자세한 내용은 여기참조하십시오 .


21
시스템이 UEFI (새 컴퓨터) 인 경우이 방법으로 모든 데이터를 삭제하지 마십시오. 이렇게하면 모든 펌웨어 변수가 삭제되고 마더 보드가 브릭만큼 쓸모 없게됩니다
Suici Doga

5
@SuiciDoga : 출처 또는 추가 설명? 마더 보드 펌웨어는 HDD에 저장하지 않아야합니다. 그렇지 않으면 드라이브를 잡아 당기면 손실됩니다.
Tarka

15
@Tarka : / sys / firmware / efi / efivars /가 마운트 될 수 있으며 재귀 적으로 삭제하면 해당 변수가 제거 될 수 있습니다. 실제로 시스템을 브릭해서는 안되지만 어쩌면 좋을 것입니다. thenextweb.com/insider/2016/02/01/…
cyanic

4
@Tarka는 HDD에 저장되지 않으며 드라이브를 잡아 당겨도 영향을 미치지 않습니다. 그러나 아직 이해하지 못하는 이유로 인해 마운트되어 실제로 아래에서 액세스 할 수 있습니다 /.
terdon

20
드라이브를 비우는 올바른 방법은 파티션을 다시 포맷하거나 완전히 다시 파티션하는 것입니다. 모든 파일 시스템이 하드 디스크 인 것은 아니므 rm -rf /로 예를 들어 누군가의 NFS / CIFS / SSHFS 마운트를 통해 원격 시스템을 비울 수 있습니다.
Score_Under

12

--no-preserve-root스위치 의 존재는 추가 기능 을 추가하는 것이 아니라 기능을 크게 감소시키는 것 보다 우선 합니다. 이 스위치는 컴퓨터가 지시 한대로 작동해야하며 원하는 작업을 표현하기 위해 명령을 사용할 수 있어야한다는 철학에 기반한 것 같습니다. 이 스위치는 UEFI보다 이전 버전이며 내 경험에 따르면 이제는 더 이상 사용되지 않습니다.

현대의 경우이 스위치가 없으면 rm명령은 초기화되지 않은 변수 또는 스트레이 공간을 사용할 때 실수로 루트 디렉토리가 삭제되는 것을 방지합니다.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

재미있는 각주 : 보호는 의도 된 것이 아닙니다. Sun Microsystems 블로그에 따르면 /디렉토리를 제거하면 현재 작업중인 디렉토리가 내재적으로 제거되어 이미 ...디렉토리에 대해 특별히 고려한 사항을 위반합니다 . 이것이 표준위원회가 사고를 예방하기위한 것이 아니라이 특별한 예외를 허용 한 이유입니다. 이 변경은 Solaris 10 빌드 36에서 처음 도입되었습니다.

http://archive.is/5lmc9


링크 주셔서 감사합니다! 내가 변화의 이유가 무엇인지 궁금해하면서 역사적인 tid bit가 인용되기를 바랐습니다.
Cameron Gagnon

흥미로운 추가 정보-감사
Mark

1

아마도 이것은 원래 asker가 원하는 대답이 아니지만 루트 디렉토리에서 모든 파일을 재귀 적으로 삭제 해야하는 유스 케이스가 있습니다. rm명령 을 사용하지는 않지만 내장되지 않은 Linux 시스템을 부팅하는 동안 switch_root (8) 프로세스 의 일부입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.