rm(유닉스)

rm (Unix)
rm
Rm --help Command - Unix.png
rm명령어
원저작자 톰슨, 데니스 리치
(AT&T연구소)
개발자다양한 오픈 소스 및 상용 개발자
초기 릴리즈1971년 11월 3일, 50년 전(1971-11-03)
기입처C
운영 체제Unix, Unix like, V, Plan 9, Inferno, KolibriOS, IBM i
플랫폼크로스 플랫폼
유형명령어
면허증.코어 유틸리티: GPLv3+
계획 9: MIT 라이선스

rm (remove의 줄임말)은 Unix 및 Unix와 유사한 운영체제에서 기본 명령어로 파일시스템디바이스 노드, 파이프, 소켓 특수 파일로부터 컴퓨터 파일, 디렉토리, 심볼릭 링크 의 객체를 삭제하는 데 사용됩니다.delMS-DOS, OS/2Microsoft Windows에서 명령어를 실행합니다.이 명령어는 EFI [1]쉘에서도 사용할 수 있습니다.

개요

rm명령어는 unlink 시스템콜을 사용하여 파일시스템에서 객체에 대한 참조를 삭제합니다.이 경우 이들 객체에 여러 개의 참조가 있을 수 있습니다(2개의 다른 이름을 가진 파일 등).또, 모든 참조가 삭제되어 아직 오브젝트에 대한 열려 있는 프로그램이 없는 경우에만 오브젝트 자체가 폐기됩니다.

이를 통해 프로그램이 파일을 열고 즉시 파일 시스템에서 파일을 제거한 다음 임시 공간에 사용할 수 있습니다. 프로그램이 종료된 후 파일 공간이 크래시되어도 회수됩니다.

이 명령어는 실제로는 참조를 링크 해제하는 데 그치고 파일시스템 공간에는 삭제된 파일의 남은 데이터가 포함되어 있을 수 있기 때문에 일반적으로 파일데이터는 파기되지 않습니다.이는 보안상의 문제가 될 수 있습니다.강화 버전에서는 마지막 링크가 절단될 때 데이터를 삭제할 수 있습니다.또한 데이터 삭제 기능을 제공하는 완전 삭제 SRM 등의 프로그램을 사용할 수 있습니다.

rm는 일반적으로 UNIX에서 파생된 운영체제에서만 볼 수 있습니다.이 운영체제에서는 일반적으로 휴지통 [2]등의 메커니즘을 통해 삭제된 파일을 복구할 수 없기 때문에 사용자가 에워싸는 경향이 있습니다.rm실수로 파일을 삭제하지 않도록 하기 위해 일종의 랩퍼로 만듭니다.

인덱스의 재구성을 시도하고 부품을 재사용하지 않은 경우 파일을 다시 가져올 수 있는 삭제 취소 유틸리티가 있습니다.

역사

Unix의 일부 이전 버전에서는rm디렉토리가 [3]비어 있는 경우 해당 디렉토리가 삭제됩니다.이 동작은 일부 버전에서는 아직 사용할 수 있습니다.rm와 함께-d 예를 들어 4.4에서 파생된 BSD(FreeBSD,[4][5] NetBSD, OpenBSD[6], macOS 등)의 플래그를 지정합니다.BSD-Lite 2

의 버전rm GNUcoreutils 번들은 Paul Rubin, David MacKenzie, Richard Stallman 및 Jim Meyering에 [7]의해 작성되었습니다.이 버전에서는-d옵션을 선택하여 호환성을 [8]높입니다.동일한 기능이 표준에서 제공됩니다.rmdir명령어를 입력합니다.

-i버전 7의 옵션이 대체되었습니다.dsw또는 버전 1에서 첫선을 보인 "delete from switchs"입니다.더그 매킬로이는 이렇게 썼다.dsw"가변할 수 없는 이름의 파일을 정리하기 위해 설계된 절박한 도구였습니다."[9]

이 명령어는 일반적인 GNU Unix 유사 [10]유틸리티의 nativeWin32ports UnxUtils 컬렉션의 일부로 Microsoft Windows용 별도의 패키지로 사용할 수 있습니다.KolibriOS에는 다음 명령어의 구현이 포함되어 있습니다.rm명령어를 [11]입력합니다.rm 명령어는 IBM i 운영 [12]체제에도 이식되었습니다.

구문

rm옵션을 추가한 후 지정된 파일을 삭제합니다.사용자는 전체 경로 또는 상대 파일 경로를 사용하여 삭제할 파일을 지정할 수 있습니다. rm디폴트로는 디렉토리는 삭제되지 않습니다.[13]rm foo는, 유저가 현재 있는 디렉토리의 「foo」파일을 삭제합니다.

rm는 다른 명령어와 마찬가지로 옵션을 사용하여 동작 방법을 지정합니다.

  • 디렉토리 삭제-r, 재귀적으로 내용을 삭제합니다(파일을 보존할 디렉토리가 없는 상태로 두지 않기 위해서).
  • 모든 삭제를 확인하도록 요구하는 -i"discriptive
  • 존재하지 않는 파일을 무시하고 확인 프롬프트를 덮어씁니다-f(실제로 취소).-i단, 디렉토리가 쓰기 금지되어 있는 경우 디렉토리에서 파일을 삭제하지 않습니다.
  • , "verbose", 무엇을 인쇄합니까-v?rm터미널에서 하고 있습니다.
  • -d, 「디렉토리」: 빈 디렉토리를 삭제하고, 지정한 디렉토리가 비어 있는 경우에만 기능합니다.
  • 는 인수와 같은 파일시스템상의 파일만 삭제하고 마운트된 파일시스템은 무시합니다--one-file-system.

rm "의 셸 에일리어스(C shellalias, Bourne shell 또는 Bash) 함수에 의해 오버레이될 수 있습니다.rm -i" 파일을 실수로 삭제하지 않도록 합니다.사용자가 확인 없이 여전히 많은 파일을 삭제하려는 경우, 사용자는 수동으로 파일을 삭제할 수 있습니다.-i의 추가에 의한 인수-foption (확장된 명령줄에서 나중에 지정되는 옵션)rm -i -f" 가 우선됩니다.안타깝게도 이 접근법은 와일드카드 사용에 대한 위험한 습관을 유발하여 자체 버전의 우발적 제거로 이어집니다.

rm -rf(표준,rm -rf /,rm -rf *(및 기타)는 Unix [14]재해에 관한 농담이나 일화에 자주 사용됩니다.rm -rf /슈퍼 유저에 의해서 실행되고 있는 경우는, 현재의 파일 시스템에서 액세스 가능한 모든 파일이 머신으로부터 삭제됩니다.

rm는 자주 xargs와 조합하여 삭제할 파일 목록을 제공하기 위해 사용됩니다.

 xargs rm <파일 리스트

또는 현재 디렉토리 아래의 모든 디렉토리에서 모든 PNG 이미지를 삭제하려면 다음 절차를 따릅니다.

 . -name '.png' -exec rm {} + 를 찾습니다.

권한

일반적으로 대부분의 파일시스템에서 파일을 삭제하려면 부모 디렉토리에 대한 쓰기 권한(및 처음에 디렉토리를 입력하기 위해 실행 권한)이 필요합니다.(초보자라면 헷갈리겠지만 파일 자체에 대한 권한은 중요하지 않습니다.단, GNU는rm는 -f 옵션을 사용하지 않는 한 쓰기 금지 파일을 삭제할지 여부를 확인하는 메시지를 표시합니다.[15]

디렉토리를 삭제하려면(와 함께)rm -r모든 내용을 재귀적으로 삭제해야 합니다.따라서 해당 디렉터리에 대한 읽기, 쓰기 및 실행 권한(빈 디렉토리가 아닌 경우)과 비어 있지 않은 모든 하위 디렉터리(있는 경우)가 재귀적으로 있어야 합니다.디렉토리의 내용을 삭제하려면 , 읽기 권한이 필요합니다.이로 인해 빈 디렉토리가 아닌 디렉토리는 쓰기 권한이 없기 때문에 삭제할 수 없는 이상한 상황이 발생할 수 있습니다.단, 같은 디렉토리가 비어 있으면 [16]삭제할 수 있습니다.

파일이 스틱비트가 설정된 디렉토리에 있는 경우 파일을 삭제하려면 해당 파일이 파일의 소유자가 되어야 합니다.

파일 시스템 루트 보호

Sun Microsystems는 "을 발표했습니다.rm -rf /"2005년에 처음 출시된 Solaris 10에서의 보호.명령어를 실행하면 /를 제거할 [17]수 없다는 메시지가 나타납니다.얼마 지나지 않아 FreeB에도 같은 기능이 도입되었습니다.SD 버전rm 유틸리티입니다.[18]GNU rm실행을 거부하다rm -rf /만약--preserve-root옵션은 [19]2006년에 GNU Core Utilities 버전 6.4가 출시된 이후 기본입니다.새로운 시스템에서는 옵션이 없어도 이 페일 세이프는 항상 활성화됩니다.명령을 실행하려면 옵션을 추가하여 페일 세이프를 우회해야 합니다.--no-preserve-root슈퍼 유저라고 해도 상관없습니다.

사용자 보호

시스템 관리자, 설계자, 심지어 사용자도 다음과 같은 방법으로 에일리어스 또는 함수를 작성함으로써 실수로 파일을 삭제하지 않도록 방어하려고 합니다.

별칭 rm="rm -i" rm() {/bin/rm -i "$@" ; }

그 결과,rm[Y] 키 또는 [N] 키를 눌러 삭제 여부를 파일 단위로 확인하도록 사용자에게 요청합니다.불행히도, 이것은 사용자가 자신의 컴퓨터에 건네주는 와일드카드에 대해 무관심하도록 훈련시키는 경향이 있습니다.rm명령어뿐만 아니라 번갈아 두드리려는 경향을 장려합니다.yreturn key to permit([citation needed]확인을 위한 되돌림 키)를 삭제하여 보관해야 할 파일이1개 지나면 삭제됩니다.유저는, 「」에까지 이르는 경우도 있습니다.yes rm files[citation needed]파일에 대해 "y"가 자동으로 삽입됩니다.

사용자가 한 번만 확인하고 적절한 와일드카드를 사용하도록 권장하며 목록을 쉽게 확인할 수 있도록 하는 타협은 다음과 같은 방법으로 달성할 수 있습니다.

[ - n " $ PS1 ] ;rm() { ls - FCSD "$@" 에코 'remove[ny]? ' tr - d ' \ 012 , [ _ $ REPLY " = " _ y ] 경우 판독하고 / bin / rm - rm " $@ "그렇지 않으면 ' (fi ) fi } fi 를 에코합니다.

이 기능을 셸 스크립트로 만들지 마십시오.시스템보다 먼저 발견될 위험이 있습니다.rm또한 배치 작업을 중단할 수 있는 비연속 셸에서도 허용되지 않습니다.에 정의를 포함하다if [ -n "$PS1" ] ; then .... ; ficonstructure는 후자에 대한 보호.

"safe-rm"[20] 또는 "trash"[21]와 같은 중요한 파일이 잘못 삭제되는 것을 방지하는 서드파티가 있습니다.

최대 명령줄 인수 제한

여러 Linux 디스트리뷰션에서 사용되는 GNU 코어 유틸리티 구현은 커널 2.6.23 2007년[22][23] 10월 9일에 공개된 커널 컴파일 시 변수에서 정의되기 전에 명령줄 인수를 위해 커널 내에서 할당된 페이지 바이트 수로 제한됩니다.MAX_ARG_PAGESinclude/linux/binfmts.h그러나 새 커널에서는 최대 인수 길이가 최대 스택 제한의 25%(ulimit -s)로 제한됩니다.오류:/bin/rm: Argument list too long.명령줄 인수 제한을 초과하면[24] 프롬프트가 표시됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "EFI Shells and Scripting". Intel. Retrieved 2013-09-25.
  2. ^ "Unix - Frequently Asked Questions (3/7) [Frequent posting]Section - How do I "undelete" a file?". www.faqs.org.
  3. ^ "rm page from Section 1 of the unix 8th manual". man.cat-v.org.
  4. ^ "RM(1)", FreeBSD-5.4-RELEASE, retrieved February 5, 2015
  5. ^ "RM(1)", NetBSD-2.0, retrieved February 5, 2015
  6. ^ "RM(1)", OpenBSD-3.6, retrieved February 5, 2015
  7. ^ "rm(1): remove files/directories - Linux man page". linux.die.net.
  8. ^ Krzysztof Goj (January 22, 2012). "rm: new option --dir (-d) to remove empty directories". coreutils.git.
  9. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  10. ^ "Native Win32 ports of some GNU utilities". unxutils.sourceforge.net.
  11. ^ "Shell - KolibriOS wiki". wiki.kolibrios.org.
  12. ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.
  13. ^ "rm(1) - Linux manual page". man7.org.
  14. ^ Gite, Vivek. "Linux/UNIX: Delete a file". Nixcraft. Retrieved 24 November 2011.
  15. ^ "Linux rm command help and examples". ComputerHope. 24 January 2018. Archived from the original on April 16, 2016. Retrieved 24 January 2019.{{cite news}}: CS1 유지보수: 부적합한 URL(링크)
  16. ^ McElhearn, Kirk (2 January 2014). "Master the command line: Deleting files and folders". Macworld. Retrieved 24 January 2019.
  17. ^ "Meddling in the Affairs of Wizards". Archived from the original on 2016-11-03.
  18. ^ "The previous commit added code to rm(1) to warn about and remove any · freebsd/freebsd@d6b7bd9". GitHub.
  19. ^ "rm invocation (GNU Coreutils)". www.gnu.org.
  20. ^ "Safe-rm in Launchpad". Launchpad.
  21. ^ "andreafrancia/trash-cli". September 12, 2020 – via GitHub.
  22. ^ "Linux_2_6_23 - Linux Kernel Newbies". kernelnewbies.org.
  23. ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org.
  24. ^ ""Argument list too long": Beyond Arguments and Limitations Linux Journal". www.linuxjournal.com.

추가 정보

외부 링크