기타 Hacker News · 2일 전

리눅스 cp 명령어 쓸 때 -r vs -R, 도대체 뭐가 다를까?

핵심 요약
  • 리눅스와 유닉스 환경에서 폴더를 재귀 복사할 때 쓰이는 `cp -r`과 `cp -R` 옵션의 역사적 차이와 현재 상태가 정리되었습니다.
  • 현재 GNU coreutils에서는 두 옵션이 동일하지만 1992년 초기 커밋에서는 동작 플래그에 차이가 있었으며, OpenBSD 등 일부 BSD 계열에는 여전히 차이가 남아 있습니다.
  • 다른 유틸리티(chown 등)와의 일관성 및 최신 POSIX 표준(POSIX.1-2024) 권고에 따르면 대문자 `-R`을 사용하는 것이 권장됩니다.
요약 리눅스나 유닉스 환경에서 디렉터리를 통째로 복사할 때 습관적으로 소문자 `cp -r`을 입력하는 사람도 있고, 대문자로 `cp -R`을 입력하는 사람도 있습니다. 두 옵션 사이에 실제로 어떤 차이가 있는지에 대한 궁금증과 그 역사적 배경이 정리되었습니다. 현재 대부분의 리눅스 배포판이 사용하는 GNU coreutils 기준으로는 두 옵션 사이에 아무런 차이가 없습니다. 최신 매뉴얼 페이지에서도 `-R`, `-r`, `--recursive`가 모두 동일하게 디렉터리를 재귀적으로 복사하는 옵션으로 안내되고 있습니다. 하지만 과거에는 동작이 달랐습니다. 34년 전인 1992년 GNU coreutils의 첫 커밋 코드를 살펴보면, 소문자 `-r`은 재귀 복사 플래그와 함께 일반 파일 복사 플래그(`flag_copy_as_regular`)를 1로 활성화했던 반면, 대문자 `-R`은 해당 플래그를 0으로 설정해 실제 동작 방식에 차이를 두었습니다. 이후 2002년에 두 옵션의 동작이 하나로 합쳐지면서 현대 GNU 환경에서는 구분이 무의미해졌습니다. 하지만 다른 운영체제 환경에서는 여전히 차이가 존재합니다. OpenBSD 7.9의 경우 매뉴얼에 `-R`만 명시하며 소문자 `-r` 사용을 강하게 지양하도록 권고하고 있는데, 소스 코드상에서도 `Rflag`와 `rflag`가 나뉘어 있어 실제 동작에 차이가 납니다. NetBSD 11 역시 매뉴얼과 코드 모두 OpenBSD와 마찬가지로 두 옵션을 다르게 취급합니다. 전체적인 명령어 일관성 측면에서는 대문자 `-R`을 사용하는 것이 권장됩니다. 일례로 소유권을 변경하는 `chown` 명령어는 `-R`만 지원하고 소문자 `-r`은 인식하지 못합니다. 국제 표준인 POSIX(POSIX.1-2024) 역시 소문자 `-r`은 과거 BSD 계열의 관행으로 최신 표준 명세에서 제외되었으며, 하위 디렉터리를 재귀적으로 탐색하는 다른 모든 유틸리티와의 일관성을 위해 대문자 `-R`을 사용할 것을 권고하고 있습니다.
Sponsored · 광고