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 저장소를 삭제하는 유일한 방법 root
은 rm -rf
.
답변2
이 -f
옵션은 읽기 전용 파일을 삭제할 때 확인 메시지를 표시하지 않습니다. 또한 제공된 파일 중 하나 이상이 존재하지 않는 경우 오류를 억제합니다.
-f
이 옵션은 삭제하려는 파일 중 일부가 읽기 전용일 수 있고 해당 파일에 대한 메시지를 표시하고 싶지 않을 때 유용합니다.
f
이 옵션은 특정 파일이 존재하고 존재 여부를 신경쓰지 않고 삭제하려는 경우에도 유용합니다. 이것은 매우 일반적으로 사용됩니다.파일 생성, 소스에서 재생성할 수 있는 파일을 삭제하는 명령을 만듭니다. 예를 들어 makefile 대상을 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
대화형 스위치를 포함하도록 명령에 별칭이 있을 때 일반적으로 with가 사용되는 것을 봅니다 . 스위치가 취소됩니다.rm
rm
-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
"예"라고 말할 필요가 없습니다.