에 대한 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
?
답변
이 경우 매뉴얼 페이지에 약간의 세부 정보가 부족하다는 것을 알았습니다. -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
입니다.
답변
이 -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
실제로 필요한지 여부에 관계없이 무언가를 없애기 위해 신비로운 주문을 반복 합니다. 옵션이 필요하지 않으면 논쟁의 오타가 중요한 것을 파괴 할 위험이 높아지기 때문에 바람직하지 않습니다.
답변
로 -i
전환rm
나는 일반적으로 대화 형 스위치를 포함하도록 명령의 별칭이 지정 될 때 -f
함께 사용되는 것을 봅니다 . 스위치를 방해한다 .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
예라고 말할 필요가 없습니다.