rm의 -f 옵션은 실제로 무엇을 의미합니까?

rm의 -f 옵션은 실제로 무엇을 의미합니까?

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.

답변1

이 경우 매뉴얼 페이지에 일부 세부 정보가 누락되어 있음을 발견했습니다. 이 -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 저장소를 삭제하는 유일한 방법 rootrm -rf.

답변2

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

-f이 옵션은 삭제하려는 파일 중 일부가 읽기 전용일 수 있고 해당 파일에 대한 메시지를 표시하고 싶지 않을 때 유용합니다.

f이 옵션은 특정 파일이 존재하고 존재 여부를 신경쓰지 않고 삭제하려는 경우에도 유용합니다. 이것은 매우 일반적으로 사용됩니다.파일 생성, 소스에서 재생성할 수 있는 파일을 삭제하는 명령을 만듭니다. 예를 들어 makefile 대상을 foo.o에서 다시 빌드할 수 있고 foo.c에서 bar.o다시 빌드할 수 있으며 bar.c및 에서 다시 빌드할 수 있습니다.myappfoo.obar.o

clean:
        rm -f *.o myapp

myapp존재하는 경우 제거 foo.o하고 bar.o존재하지 않는 경우 불평하지 마십시오.

-f대부분의 경우 지침에 디렉터리 트리 제거를 포함할 필요가 없습니다. 그 안에 있는 내용에 관계없이 해당 디렉터리 트리를 삭제하려는 경우 -f일부 파일이 읽기 전용인지 묻는 메시지를 표시하지 않도록 지정할 수 있기 때문에 이는 의미가 있습니다. 그러나 도망친다고 말하는 사람들은 선택 사항 이나 실제로 필요한지 여부에 rm -rf관계없이 무엇인가를 없애기 위해 비밀스러운 주문을 반복하는 경우가 많습니다 . 이러한 옵션이 필요하지 않은 경우 인수의 철자 오류로 인해 중요한 콘텐츠가 손상될 위험이 높아지므로 해당 옵션을 사용하지 않는 것이 좋습니다.-r-f

답변3

-i로 전환rm

-f대화형 스위치를 포함하도록 명령에 별칭이 있을 때 일반적으로 with가 사용되는 것을 봅니다 . 스위치가 취소됩니다.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"예"라고 말할 필요가 없습니다.

관련 정보