iBetter Books
수정

파일 조작 (cp, mv, rm, mkdir)

파일을 복사하고, 이동하고, 삭제하는 일은 매일 하는 작업입니다. 터미널에서 이 작업을 할 때는 마우스 클릭 대신 명령어를 사용합니다. 한 가지 중요한 점이 있습니다. 리눅스에는 휴지통이 없습니다. rm으로 지운 파일은 복구할 수 없으므로 신중하게 다뤄야 합니다.

mkdir — 디렉토리 만들기

파일을 다루기 전에 먼저 저장할 공간을 만들어봅시다.

mkdir projects
# 중첩 디렉토리를 한 번에 생성mkdir -p projects/bash/scripts

-p 옵션이 없으면 중간 경로가 없을 때 오류가 납니다. -p를 붙이면 필요한 중간 디렉토리를 자동으로 만들어줍니다. Bash 스크립트에서 디렉토리를 생성할 때는 항상 -p를 쓰는 것이 좋습니다. 이미 디렉토리가 존재해도 오류 없이 넘어가기 때문입니다.

ls -l projects/bash/
total 4
drwxr-xr-x 2 ubuntu ubuntu 4096 Apr 24 09:15 scripts

touch와 ln — 파일 생성과 링크

touch는 빈 파일을 만들거나, 기존 파일의 수정 시간을 현재 시간으로 갱신합니다.

touch projects/bash/scripts/hello.shls -l projects/bash/scripts/
total 0
-rw-r--r-- 1 ubuntu ubuntu 0 Apr 24 09:16 hello.sh

ln은 링크를 만듭니다. 링크에는 두 종류가 있습니다.

# 하드 링크: 같은 데이터를 가리키는 또 다른 이름ln hello.sh hello_hard.sh# 심볼릭 링크: 원본 파일을 가리키는 바로가기 (-s 옵션)ln -s /home/ubuntu/projects/bash/scripts/hello.sh ~/hello_link.sh
ls -l ~/hello_link.sh
lrwxrwxrwx 1 ubuntu ubuntu 44 Apr 24 09:17 /home/ubuntu/hello_link.sh -> /home/ubuntu/projects/bash/scripts/hello.sh

심볼릭 링크는 파일 목록에 l로 시작하는 권한 표시와 함께 -> 화살표로 원본 경로를 보여줍니다. 실전에서는 심볼릭 링크를 훨씬 자주 사용합니다. 설정 파일을 여러 위치에서 공유하거나, 버전 관리를 할 때 유용합니다.

cp — 파일 복사

# 파일 복사cp hello.sh hello_backup.sh# 디렉토리 통째로 복사 (-r: recursive)cp -r projects/ projects_backup/

cp의 주요 옵션입니다.

옵션 의미 설명
-r recursive 디렉토리와 하위 내용 전체 복사
-i interactive 덮어쓰기 전에 확인 질문
-p preserve 권한, 소유자, 타임스탬프 보존
-v verbose 복사 과정 출력
cp -rp /etc/nginx/ ~/nginx_backup/
# 출력 없이 복사 완료 (-v 없이)
cp -rv /etc/nginx/ ~/nginx_backup/
'/etc/nginx/' -> '/home/ubuntu/nginx_backup/'
'/etc/nginx/nginx.conf' -> '/home/ubuntu/nginx_backup/nginx.conf'
'/etc/nginx/sites-available' -> '/home/ubuntu/nginx_backup/sites-available'

mv — 파일 이동과 이름 변경

mv는 파일을 이동하거나, 이름을 바꿀 때 모두 사용합니다.

# 파일 이름 변경mv hello_backup.sh hello_v1.sh# 파일을 다른 디렉토리로 이동mv hello_v1.sh ~/projects/bash/scripts/# 여러 파일을 한 번에 이동mv *.sh ~/projects/bash/scripts/
ls ~/projects/bash/scripts/
hello.sh  hello_v1.sh

rm — 파일 삭제 (주의!)

rm은 강력하지만 위험한 명령어입니다. 삭제한 파일은 복구가 어렵습니다.

# 파일 삭제rm hello_v1.sh# 삭제 전 확인 (-i)rm -i important.sh
rm: remove regular file 'important.sh'? y
# 디렉토리 전체 삭제 (-r)rm -r projects_backup/# 강제 삭제 (확인 없이) — 스크립트에서 주로 사용rm -rf /tmp/build_temp/

-f(force) 옵션은 파일이 없어도 오류를 내지 않고 조용히 넘어갑니다. 자동화 스크립트에서 임시 폴더를 정리할 때 유용하지만, 경로 오류가 생기면 의도치 않은 파일이 삭제될 수 있습니다. rm -rf /는 시스템 전체를 삭제하는 최악의 명령어이므로 절대 실행하면 안 됩니다.

실전에서는 중요한 디렉토리를 삭제하기 전에 먼저 ls로 내용을 확인하는 습관을 들이는 것이 좋습니다.

와일드카드 — 패턴으로 여러 파일 선택

와일드카드는 여러 파일을 한 번에 선택할 때 사용하는 특수 문자입니다.

와일드카드 의미 예시
* 임의의 문자열 (없어도 됨) *.sh (모든 .sh 파일)
? 임의의 문자 딱 하나 log?.txt (log1.txt, logA.txt 등)
[abc] 괄호 안의 문자 중 하나 file[123].txt
[a-z] 범위 내 문자 중 하나 [a-z]*.sh
# .sh와 .py 파일 모두 복사cp *.{sh,py} ~/backup/# 이름이 log 뒤에 숫자 하나로 끝나는 파일 삭제rm log?.txt# 특정 패턴 파일 목록 보기ls [A-Z]*.md
README.md  CHANGELOG.md

와일드카드는 rm과 함께 쓸 때 특히 조심해야 합니다. 실행 전에 먼저 ls로 어떤 파일이 선택되는지 확인한 뒤 삭제하는 것을 권장합니다.

파일 조작 명령어에 익숙해졌다면, 이제 파일에 누가 접근할 수 있는지 결정하는 권한 시스템을 살펴봅시다.