rm에서 -f 옵션의 실제 요점은 무엇입니까?


14

에 대한 GNU coreutils 매뉴얼 페이지를 읽음으로써 rm옵션 중 하나 -f는 매뉴얼에 따라

-f, --force
          ignore nonexistent files and arguments, never prompt

이제 몇 가지 테스트를 해본 결과 실제로 같은 것을 사용하면

rm -f /nonexisting/directory/

불평하지 않습니다.

그러한 옵션에서 실제로 얻을 수있는 것은 무엇입니까?

또한 "디렉토리 삭제"를 사용하는 가장 일반적인 예 rm는 다음과 같습니다.

 rm -rf /delete/this/dir

-r옵션은 의미가 있습니다 만 -f?

답변:


9

이 경우 매뉴얼 페이지에 약간의 세부 정보가 부족하다는 것을 알았습니다. -f의 옵션 rm실제로는 꽤 많은 사용 사례가 있습니다 :

  • 오류 종료 코드를 피하려면
  • 프롬프트가 표시되지 않도록
  • 권한 검사를 무시하려면

존재하지 않는 파일을 제거하는 것은 무의미한 일이지만, 스크립트에서는 "이 파일을 원하지 않습니다. 파일을 찾은 경우 삭제하십시오. 존재하지 않습니다 ". 어떤 사람들 set -e은 스크립트에서 오류를 막기 위해 (스크립트에서 발생할 수있는 추가 손상을 피하기 위해) 스크립트를 사용하며 rm -rf /home/my/garbage보다 쉽습니다 if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.

권한 검사에 대한 참고 사항 : 파일을 삭제하려면 파일 자체가 아닌 상위 디렉토리에 대한 쓰기 권한이 필요 합니다. 어떻게 든 root홈 디렉토리에 소유 한 파일이 있고 sudo액세스 권한 이 없다고 가정 해 봅시다 -f. 옵션을 사용하여 파일을 계속 제거 할 수 있습니다 . Git을 사용하면 Git이 생성 한 객체 파일에 대한 쓰기 권한을 남기지 않음을 알 수 있습니다.

-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c

따라서 사용 rm하는 경우 Git 리포지토리를 사용하지 않고 삭제하는 유일한 방법 root은 사용하는 것 rm -rf입니다.


4
-f오류 종료 코드를 피하지 마십시오. 경우 rm시도와 기존 파일을 제거하는 데 실패, 에러 코드를 반환합니다.
Gilles 'SO- 악의를 멈춰라'

"오류 종료 코드를 피하려면"은 "파일 피연산자가 없거나 파일 피연산자가없는 경우 오류 종료 코드를 피하려면"로 작성해야하므로이 답변을 다운 보트했습니다. 이 답변이 지금 작성되었으므로 잘못되었습니다.
해롤드 피셔

6

-f옵션은 읽기 전용 파일을 삭제할 때 확인 메시지를 표시하지 않습니다. 또한 하나 이상의 제공된 파일이 존재하지 않을 때 오류를 억제합니다.

-f옵션은 삭제하는 파일 중 일부가 읽기 전용 일 수 있다는 메시지가 표시 될 때 유용합니다.

f옵션은 파일이 존재하는 경우 파일을 제거하고 파일이 존재하는지 여부를 신경 쓰지 않으려는 경우에도 유용합니다. 소스 파일에서 재생성 할 수있는 파일을 제거하는 명령을 만들기 위해 makefiles 에서 매우 일반적으로 사용됩니다 . 예를 들어, foo.o재 구축 할 수있는 foo.c, bar.o재 구축 가능 bar.c하고 myapp재 구축 가능 foo.o하고 bar.o, 그 대상을 메이크

clean:
        rm -f *.o myapp

제거합니다 myapp, foo.o그리고 bar.o그들은 존재하고 존재하지 않는 경우는 불평하지 않는 경우.

-f대부분의 경우 디렉토리 트리 제거 지시 사항을 포함 하지 않아도됩니다. 디렉토리 트리의 내용에 관계없이 해당 디렉토리 트리를 제거하려는 -f경우 일부 파일이 읽기 전용 인 경우 프롬프트가 표시되지 않도록 지정할 수 있기 때문에 정당화 할 수 있습니다 . 그러나 달리라고 말하는 사람들 rm -rf은 종종 옵션 -r-f실제로 필요한지 여부에 관계없이 무언가를 없애기 위해 신비로운 주문을 반복 합니다. 옵션이 필요하지 않으면 논쟁의 오타가 중요한 것을 파괴 할 위험이 높아지기 때문에 바람직하지 않습니다.


3

-i전환rm

나는 일반적으로 대화 형 스위치를 포함하도록 명령의 별칭이 지정 될 때 -f함께 사용되는 것을 봅니다 . 스위치를 방해한다 .rmrm-i-f-i

에 대한 rm별칭 인 문제를 시뮬레이션합니다 rm -i.

$ alias rm='rm -i'

가짜 데이터 만들기

$ touch afile

이제 별칭 버전을 사용하여 삭제하십시오. rm

$ rm afile 
rm: remove regular empty file `afile'?

이제 사용해보십시오 -f

$ rm -f afile 
$

권한

또한 디렉토리에 대한 읽기 전용 액세스 권한이 있고 해당 디렉토리에서 파일 및 / 또는 서브 디렉토리를 삭제하려고 시도 할 때 "확실합니까?"라는 유사한 프롬프트가 표시됩니다. 의 사용은 -f예라고 말할 필요가 없습니다.


별명을 사용하면 실제로 의미가 있습니다. 그리고 귀하의 답변은 openbsd 매뉴얼 페이지에서 방금 보여준 것과 일치합니다. 비록 openbsd가 GNU / Linux는 아니지만 방금 말한 내용을 설명하는 것 같습니다. 여기에 사람이 확인하고 싶은 경우 링크입니다 : [링크] openbsd.org/cgi-bin/...
saliarosaurus

bash를 사용하면 \rm앨리어싱없이 항상 실행할 수 있습니다 (\는 command빌드 된 바로 가기 임). 내가 사용 -f하거나 존재하지 않을 수있는 잠금 파일과 같은 것이 있으면 경고를 -f중지시키는 쉘 스크립팅에서 가장 잘 사용 된다는 것을 알았습니다 rm: cannot remove 'file': No such file or directory.
Drav Sloan

@DravSloan 그렇습니다. 귀하의 답변에 감사드립니다 Drav Sloan과 slm
saliarosaurus

내가 사용 rm -f에 종종 clean에서 대상 Makefile
알렉스

-i실제로 무슨 일이 아니라 -f, 그것은 더 큰 사건입니다.
Gilles 'SO- 악의를 멈춰라'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.