| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 블루팀
- IR
- 워게임
- 리눅스 기초
- 해킹 스터디
- 해커
- SoC
- 정보보안
- http
- Bandit
- THM
- Cyber Security
- Cross-Site Scripting
- Web
- OverTheWire
- linux
- write-up
- 해킹
- 사이버 보안
- 보안 관제
- 정보보호
- 보안 스터디
- XSS
- 모의해킹
- CTF
- 리눅스
- cert
- TryHackMe
- web hacking
- Blue Team
- Today
- Total
AnbyMata의 해킹 노트
[Linux 기초] EP.10 - 파일/디렉토리의 복사, 삭제, 이동 (cp, rm, mv) 본문
오늘은 어쩌면 반드시 할 줄 알아야되는 파일/디렉토리를 복사하고 삭제하며 이동시키거나 이름을 바꾸는 법을 공부하겠습니다!
[1] 명령어 'cp' : 파일이나 디렉토리를 복사하기
'cp' 명령어를 사용하면 파일이나 디렉토리를 "복사"해서 지정한 위치에 동일한 내용을 가진 새 파일이나 디렉토리를 만들어 줍니다.
애초에 'cp'라는 명령어가 영단어 "copy"에서 유래했습니다. (의미를 연관 지으면 외우기 쉽습니다!)
'cp' 명령어의 사용법입니다!
$ cp [원본 파일] [새 파일 이름]
# [원본 파일]의 내용을 복사해 [새 파일 이름]으로 된 새 파일을 생성
$ cp [원본 파일] [복사할 경로]
# [원본 파일]의 내용을 복사해 지정한 경로에 같은 이름으로 저장
$ cp [옵션] [원본 파일] [새 파일 이름 or 경로]
# 지정한 옵션에 따라 [원본 파일]을 복사해 새 파일 또는 경로에 생성
$ cp [원본_1] [원본_2] [원본_3] ... [복사할 경로]
# 여러 파일들을 지정한 경로에 같은 이름들로 복사
크게 3가지로 나눌 수 있습니다.
우선, 연습을 위해 홈 디렉토리에 "sample" 이라는 파일을 만들겠습니다. (이름은 맘대로 하세요)
(vi 명령어로 만드는거 알죠?)
임의로 만든 "sample"의 내용입니다.

이제 본격적으로 'cp' 명령어의 각 케이스들을 연습해봅시다!
1. cp [원본 파일] [새 파일 이름]
원본을 그대로 복사해 새 파일 이름으로 저장합니다.
'cp sample copy_sample' 명령어를 사용하여,
"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" 디렉토리에 같은 이름으로 복사하겠습니다.

'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" 파일을 삭제하겠습니다.

'rm copy_sample' 명령어를 통해
홈 디렉토리에서 "copy_sample" 파일이 삭제되었습니다.
'ls -l copy_sample' 명령어를 통해 "copy_sample"이 사라졌음을 확인할 수 있습니다.
이번에는 "/tmp" 디렉토리에 있는 "sample" 파일을 삭제해보겠습니다.
'rm /tmp/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.
'[Linux 기초]' 카테고리의 다른 글
| [Linux 기초] EP.11 - UID, GID (useradd, id, su, exit) (1) | 2026.01.05 |
|---|---|
| [Linux 기초] EP.9 - 파일 내용 확인하기 (cat, file, more) (1) | 2025.10.06 |
| [Linux 기초] EP.8 - vi 편집기로 파일 생성, 입력, 저장하기 (vi) (2) | 2025.10.04 |
| [Linux 기초] EP.7 - 리눅스 편리하게 사용하기 - man과 자동완성 (0) | 2025.09.23 |
| [Linux 기초] EP.6 - 절대 경로? 상대 경로? (1) | 2025.09.22 |