AnbyMata의 해킹 노트

[Linux 기초] EP.10 - 파일/디렉토리의 복사, 삭제, 이동 (cp, rm, mv) 본문

[Linux 기초]

[Linux 기초] EP.10 - 파일/디렉토리의 복사, 삭제, 이동 (cp, rm, mv)

AnbyMata 2025. 10. 9. 20:00

오늘은 어쩌면 반드시 할 줄 알아야되는 파일/디렉토리를 복사하고 삭제하며 이동시키거나 이름을 바꾸는 법을 공부하겠습니다!

 

[1]  명령어 'cp' : 파일이나 디렉토리를 복사하기

 'cp' 명령어를 사용하면 파일이나 디렉토리를 "복사"해서 지정한 위치에 동일한 내용을 가진 새 파일이나 디렉토리를 만들어 줍니다.

애초에 'cp'라는 명령어가 영단어 "copy"에서 유래했습니다. (의미를 연관 지으면 외우기 쉽습니다!)

 

'cp' 명령어의 사용법입니다!

$ cp [원본 파일] [새 파일 이름]
# [원본 파일]의 내용을 복사해 [새 파일 이름]으로 된 새 파일을 생성

$ cp [원본 파일] [복사할 경로]
# [원본 파일]의 내용을 복사해 지정한 경로에 같은 이름으로 저장

$ cp [옵션] [원본 파일] [새 파일 이름 or 경로]
# 지정한 옵션에 따라 [원본 파일]을 복사해 새 파일 또는 경로에 생성

$ cp [원본_1] [원본_2] [원본_3] ... [복사할 경로]
# 여러 파일들을 지정한 경로에 같은 이름들로 복사

크게 3가지로 나눌 수 있습니다.

 

우선, 연습을 위해 홈 디렉토리에 "sample" 이라는 파일을 만들겠습니다. (이름은 맘대로 하세요)

(vi 명령어로 만드는거 알죠?)

 

임의로 만든 "sample"의 내용입니다.

"sample"

이제 본격적으로 'cp' 명령어의 각 케이스들을 연습해봅시다!

 

 

1. cp [원본 파일] [새 파일 이름]

원본을 그대로 복사해 새 파일 이름으로 저장합니다.

 

'cp sample copy_sample' 명령어를 사용하여,

"sample"의 내용을 복사한 다음, "copy_sample"이라는 새 파일을 만들겠습니다. 

"copy_sample"이 생겼다!

처음에 ls 명령어로 확인했을 땐 없던 "copy_sample" 파일이

'cp sample copy_sample' 명령어 이후에 생긴 것을 알 수 있습니다.

 

이를 통해, 복사된 새 파일이 같은 디렉토리에 만들어짐을 알 수 있습니다.

 

vi 명령어로 "copy_sample"의 내용이 "sample"과 같은지 한 번 확인해보세요.

(아마 같을겁니다. 아니 같아야 합니다)

 

추가적으로 현재처럼 "copy_sample"이라는 파일이 존재하는 상태에서

'cp sample copy_sample' 명령어를 사용하면,

"sample"의 내용을 "copy_sample"에 그대로 덮어씁니다.

 

 

2. cp [원본 파일] [복사할 경로]

 원본을 그대로 복사해 다른 디렉토리에 저장합니다.

 

'cp sample /tmp/' 명령어를 사용하여,

"sample" 파일을 "/tmp" 디렉토리에 같은 이름으로 복사하겠습니다.

"/tmp" 디렉토리에 "sample"이 생겼다!

'cp sample /tmp/' 명령어를 통해

"/tmp" 디렉토리에 "sample" 파일이 생긴 것을 확인할 수 있습니다.

 

이를 통해, 복사된 파일이 다른 디렉토리에 원본과 같은 이름으로 만들어짐을 알 수 있습니다.

 

똑같이 vi 명령어로 "/tmp"디렉토리의 "sample"의 내용이 원본 "sample"과 같은지 확인해보세요.

(연습하는 셈 치고..)

 

마찬가지로 현재처럼 "/tmp" 디렉토리에 "sample"이라는 파일이 존재하는 상태에서

(홈 디렉토리에서) 'cp sample /tmp/' 명령어를 사용하면, 

디렉토리의 "sample"의 내용을 "/tmp" 디렉토리의 "sample"에 그대로 덮어씁니다.

 

 

3. cp [옵션] [원본 파일] [새 파일 이름 or 복사할 경로]

 옵션을 이용해서 복사를 해보겠습니다.

 

대표적인 옵션들:

1. '-r' : 디렉토리 복사하기

 - 디렉토리 안에 있는 하위 디렉토리와 파일들까지 전부 복사합니다.

2. '-i' : 덮어쓰기 전에 확인하기

 - 이미 같은 이름의 파일이 있을 경우, 덮어쓸지 여부를 물어봅니다.

3. '-v' : 복사 과정 표시하기

 - 복사할 때, 진행 로그를 출력합니다.

 

예시들:

$ cp -r mydir mydir_copy
# "mydir" 디렉토리를 복사해서 "mydir_copy"라는 새 디렉토리를 만듭니다.
# (mydir은 직접 만들고 해보세요)

$ cp -i sample copy_sample
# 이미 "copy_sample"이 있을 때, 덮어쓸지 물어봅니다.
# overwire 'copy_sample?' 질문에 'y'입력 시 덮어쓰고, 'n'입력 시 덮어쓰지 않음

$ cp -v sample copy_sample
# 복사 시 진행 로그가 출력됩니다.

한 번 해보시면 좋습니다!

 

 

4. cp [원본_1] [원본_2] ... [복사할 경로]

 여러 개의 파일들을 복사해 다른 디렉토리에 저장합니다.

 

'cp sample_1 sample_2 sample_3 /tmp/' 라는 명령어의 경우,

3개의 파일들을 "/tmp" 디렉토리에 같은 이름으로 저장하게 됩니다.

 

참고로 마지막에는 무조건 [복사할 경로]가 들어가야 합니다.

여러 파일을 한 번에 복사할 때는 경로(디렉토리)로만 복사할 수 있습니다.

 

 

 

[2]  명령어 'rm' : 파일이나 디렉토리를 삭제하기

'rm' 명령어는 파일이나 디렉토리를 삭제할 때 사용합니다.

'rm' 명령어는 제거한다는 뜻의 영단어 "remove"에서 유래했습니다.

 

기본적으로 rm 명령어는 굉장히 신중하게 사용해야 합니다.

리눅스에서는 삭제 후에는 복구가 어렵기 때문에 신중해야 합니다. (윈도우처럼 휴지통에서 복구하기 이런거 없습니다..)

 

'rm' 명령어 사용법입니다!

$ rm [파일_이름 or 경로]
# 파일이나 디렉토리를 삭제합니다

$ rm [옵션] [파일_이름 or 경로]
# 옵션에 맞추어 삭제합니다.

애초에 삭제라서 크게 말할게 없네요..

 

이제 파일을 삭제해봅시다.

'rm copy_sample' 명령어를 사용하여,

아까 연습하면서 만들었던 "copy_sample" 파일을 삭제하겠습니다.

"copy_sample"이 사라졌다!

'rm copy_sample' 명령어를 통해

디렉토리에서 "copy_sample" 파일이 삭제되었습니다.

 

'ls -l copy_sample' 명령어를 통해 "copy_sample"이 사라졌음을 확인할 수 있습니다.

 

 

이번에는 "/tmp" 디렉토리에 있는 "sample" 파일을 삭제해보겠습니다.

'rm /tmp/sample' 명령어를 사용하면 됩니다.

"sample"이 사라졌다!

ls 명령어를 통해 "sample" 파일이 사라졌음을 확인할 수 있습니다.

이렇듯 다른 디렉토리에 있더라고 경로를 입력하면 rm 명령어로 삭제할 수 있습니다.

 

 

이번에는 rm 명령어의 옵션들을 알아보겠습니다.

 

대표적인 옵션들:

1. '-i' : 삭제 전에 확인하기

 - 삭제 전에 확인 메시지를 표시합니다.

2. '-r' : 디렉토리 삭제하기

 - cp 명령어의 '-r' 옵션과 동일하게 디렉토리 안에 있는 모든 것까지 삭제합니다.

3. '-f' : 강제 삭제

 - 확인 없이 강제로 삭제합니다.

4. '-rf' : 디렉토리 강제 삭제

 - 경고 없이 디렉토리 전체를 강제로 삭제합니다 (매우 주의!!!!!!!!)

 

예시들:

#현재 없는 파일들일테니 만든 다음에 연습해보세요

$ rm -i sample
# 삭제 전에 확인 메시지가 나옵니다.
# 'y' 입력 시 삭제 진행 / 'n' 입력 시 취소

$ rm -r mydir
# "mydir" 디렉토리와 그 안의 모든 것들을 삭제합니다
# '-r'이 없으면 디렉토리는 삭제할 수 없습니다.

$ rm -f sample_not
# 파일이 없더라고 그냥 강제로 삭제합니다.
# (있든 없든 무시하고 삭제)

$ rm -rf important_mydir
# 디렉토리를 경고 없이 강제로 삭제해버립니다.
# 매우 위험해 주의가 필요합니다!!!!

 

'rm -rf [디렉토리 이름]' 은 굉장히 위험합니다!!!!!!!!

만약에 중요한 디렉토리나 안에 중요 파일이 없는지, 내가 이걸 삭제해도 되는지 여러번 고민하고 실행합시다!!!!!

특히, 'rm -rf /' 같은 명령어는 시스템 전체를 삭제해버릴 수 있습니다!

 

다 까먹어도 되지만 'rm -rf [..]' 만큼은 반드시 기억합시다! 시스템 날려버릴 수도 있습니다!

 

'rm -rf [..]' 매우 주의 요함!!!!!!!

 

 

 

[3]  명령어 'mv' : 파일이나 디렉토리를 이동하거나 이름 바꾸기

 'mv' 명령어는 파일이나 디렉토리를 이동하거나 이름을 바꿀 때 사용합니다.

'mv' 명령어는 "move(이동) + remame(이름 바꾸기)" 으로 생각할 수 있습니다.

 

'mv' 명령어 사용법입니다!

$ mv [파일_이름] [변경할 새 이름]
# 파일의 이름을 [변경할 새 이름]으로 바꿉니다

$ mv [파일_이름] [이동할 경로]
# 파일을 [이동할 경로]로 이동시킵니다

$ mv [옵션] [파일_이름] [새 이름 or 경로]
# mv 명령어에도 옵션들이 있습니다

$ mv [파일_1] [파일_2] ... [이동할 경로]
# 여러 파일들을 지정한 경로로 이동시킵니다.

정리하자면, 마지막에 파일명이 오면 이름 변경(rename), 경로가 오면 이동(move)의 역할을 합니다.

 

솔직히 말해서 'cp' 명령어랑 굉장히 유사합니다. (원본이 삭제되는 cp 느낌? = 거의 cp + rm)

그래서 여러분이 "sample" 파일을 홈 디렉토리에 만드신 다음,

"/tmp" 디렉토리에 이동시키거나 "sample"의 파일 이름을 바꾸시는 등 직접 연습해보시면 좋을 것 같습니다!

 

그렇기에 옵션들만 잠깐 살펴보고 넘어가겠습니다.

 

대표적인 옵션들:

1. '-i' : 덮어쓰기 전에 확인하기

 - 이름을 변경할 때 또는 다른 디렉토리로 이동할 때, 대상(같은 이름의 파일)이 이미 있으면 덮어쓰기를 하는데,

 - 덮어쓰기를 하기 전에 사용자에게 확인합니다.

2. '-n' : 덮어쓰기를 금지

 - 기본적으로 mv는 대상이 있으면 덮어쓰지만, -n을 사용하면 이미 파일이 존재할 경우 덮어쓰지 않고 건너뜁니다.

3. '-v' :  이동 과정 표시하기

 - 이름 변경 또는 이동할 때, 진행 로그를 출력합니다.

4. '-t [이동할 경로]' : 좀더 보기 쉬운 방식

 - 여러 파일을 한 번에 이동할 때 대상 디렉토리를 먼저 쓰고 뒤에 원본 파일들을 나열하는 가독성이 좋은 방식입니다.

5. '--backup[=CONTROL]' : 이동하기 전에 백업

 - 덮어쓰기 발생 시 기존 파일을 자동으로 백업하도록 합니다. CONTROL에는 보통 numbered(버전별 백업) 등의 값을 씁니다. (ex. --backup=numbered)

 

예시들:

$ mv -i sample copy_sample
# "copy_sample"이 이미 있으면 덮어쓰기 전에 확인을 요청합니다
# 'y' 입력 시 덮어쓰고, 'n' 입력 시 취소합니다

$ mv -n sample /tmp/
# "/tmp" 디렉토리에 "sample"이 이미 있으면 덮어쓰기 않고 이동을 건너뜁니다

$ mv -v sample /tmp/
# "sample"이 "/tmp" 디렉토리로 이동하는 과정을 로그로 출력합니다

$ mv -t /tmp/ sample_1 sample_2 sample_3
# 가장 뒤에 있을 경로를 앞으로 가져옴으로써 가독성을 높입니다

$ mv --backup=numbered new_sample /tmp/
# "/tmp" 디렉토리에 "new_sample"이 존재하면 기존 파일을 번호가 붙은 백업본으로 보관하고 새 파일을 이동합니다

 

 

 

이제 여러분은 파일을 만들고 수정할 수도 있으며, 파일이나 디렉토리를 복사하거나 삭제, 이동, 이름 변경까지 나름대로 기본적인 활동을 다 할 수 있게 되었습니다!

 

오늘 배운 것중 가장 중요한 것은

"rm -rf" 매우 위험!!!! 매우 주의!!!! 반드시 여러번 생각하고 사용할 것!!!!!!!!!

"rm -rf" 만은 반드시 까먹지 마세요..

(그리고 mv 명령어 실습은 cp 명령어 실습한거로 충분히 응용해서 할 수 있으니 꼭 해보세요!!)

 

 

 

EP.10 - 파일/디렉토리의 복사, 삭제, 이동 (cp, rm, mv). END.