MMeshOps
바이브코딩을 위한 Git과 리눅스 기초
2예상 8입문

파일과 폴더 마음대로 다루기

리눅스 터미널에서 폴더를 만들고 파일을 복사, 이동, 삭제하는 mkdir, cp, mv, rm 명령어의 실전 사용법을 알아봅니다.

지난 시간에는 터미널 환경에서 내 위치를 확인하고 이리저리 이동하는 내비게이션 방법을 배웠습니다. 눈으로 확인하고 돌아다니는 것만으로는 부족하겠죠? 이번 시간에는 실제로 서버에 새로운 방(폴더)을 만들고, 파일을 복사하거나 이름을 바꾸며, 필요 없는 자료를 삭제하는 등 본격적인 파일 관리 명령어들을 학습합니다. 특히, 마우스 클릭 실수를 되돌리기 힘든 터미널 환경의 특성을 이해하고 안전하게 작업하는 방법을 함께 알아보겠습니다.

새로운 방 만들기: `mkdir`

웹 서버를 구축할 때는 프로젝트마다 별도의 폴더(디렉터리)를 만들어 코드를 깔끔하게 정리해야 합니다. 윈도우에서 바탕화면에 마우스 우클릭을 하고 '새 폴더'를 만드는 것과 같은 작업을 터미널에서는 `mkdir` 명령어로 수행합니다.

`mkdir`은 Make Directory의 약자입니다. 명령어 뒤에 스페이스바를 한 칸 띄우고 생성하고 싶은 폴더의 이름을 적어주기만 하면 됩니다. 만약 `my-new-project`라는 이름의 폴더를 만들고 싶다면 `mkdir my-new-project`라고 입력하고 엔터를 칩니다. 오류 메시지가 나오지 않는다면 정상적으로 생성된 것이며, `ls` 명령어를 쳐서 방금 만든 폴더가 목록에 있는지 눈으로 확인할 수 있습니다.

mkdir의 유용한 옵션 활용

bash
```bash
$ mkdir -p src/components/button
$ ls src/components
button
```
  1. 1단일 폴더 생성: mkdir assets (현재 위치에 assets 폴더를 만듭니다.)
  2. 2다중 폴더 생성: mkdir css js images (스페이스바로 구분하여 한 번에 3개의 폴더를 생성합니다.)
  3. 3하위 폴더까지 한 번에 생성: mkdir -p src/components/button (src 폴더 안에 components, 그 안에 button 폴더를 한 번에 연쇄적으로 만듭니다.)

특히 `-p`(parents) 옵션은 실무에서 매우 자주 쓰입니다. 상위 폴더가 없더라도 에러를 내지 않고 필요한 부모 폴더들까지 한꺼번에 만들어주기 때문에, 복잡한 폴더 구조를 짤 때 타이핑 횟수를 획기적으로 줄여줍니다.

똑같은 파일 하나 더 만들기: `cp`

기존에 잘 작동하던 설정 파일을 수정해야 할 때, 곧바로 수정하기보다는 백업본을 하나 만들어두는 것이 바이브코딩의 훌륭한 안전 수칙입니다. 이때 파일을 복사하는 `cp` 명령어를 사용합니다.

`cp`는 Copy의 약자입니다. 사용법은 `cp [원본 파일] [복사될 새 파일 이름]`의 구조를 가집니다. 예를 들어, `config.json` 파일을 복사해서 `config_backup.json`을 만들고 싶다면 `cp config.json config_backup.json`이라고 입력합니다.

cp 명령어 실행 예시

$ cp index.html index_old.html
$ ls
index.html  index_old.html

위 명령을 실행하면 현재 폴더 안에 원본과 똑같은 내용을 가진 `index_old.html` 파일이 새로 생겨납니다.

주의할 점은, 폴더(디렉터리)를 통째로 복사할 때는 단순히 `cp`만 쓰면 안 된다는 것입니다. 폴더 안에는 여러 파일과 또 다른 하위 폴더들이 나무뿌리처럼 얽혀있기 때문입니다. 폴더를 그 내용물까지 모두 포함해 복사하려면 `-r`(recursive, 재귀적) 옵션을 반드시 붙여야 합니다. `cp -r old-project new-project`라고 입력해야 폴더 전체가 통째로 복사됩니다.

파일의 이사와 이름표 바꾸기: `mv`

파일을 다른 폴더로 옮기고 싶거나, 파일의 이름을 수정하고 싶을 때는 `mv` 명령어를 사용합니다. 리눅스에서는 이동과 이름 변경을 모두 이 하나의 명령어로 처리합니다.

`mv`는 Move의 약자입니다. 기본 구조는 `cp`와 동일하게 `mv [원본 파일] [목적지]`입니다. 만약 `logo.png` 파일을 아까 만든 `images` 폴더 안으로 집어넣고 싶다면 `mv logo.png images/`라고 입력합니다.

그렇다면 이름표는 어떻게 바꿀까요? 파일을 이동시킬 때 목적지 위치에 새로운 이름을 적어주면 됩니다. 같은 폴더 내에서 목적지 이름만 다르게 적으면, 위치는 그대로 둔 채 이름만 변경하는 결과가 됩니다.

mv 명령어를 활용한 이동과 이름 변경

명령어수행 결과비고
mv main.css css/main.css 파일을 css/ 폴더 안으로 이동시킵니다.단순 이동
mv old_name.txt new_name.txt현재 위치에서 파일의 이름을 new_name.txt로 변경합니다.이름 변경
mv index.html backup/index_old.htmlindex.html 파일을 backup/ 폴더로 옮기면서 동시에 이름을 index_old.html로 바꿉니다.이동 + 이름 변경

가장 위험하고 강력한 지우개: `rm`

필요 없는 파일이나 잘못 만든 폴더를 삭제할 때는 `rm` 명령어를 사용합니다. 윈도우의 '휴지통' 개념이 터미널에는 기본적으로 존재하지 않기 때문에, `rm` 명령어로 지운 파일은 영구히 복구할 수 없습니다. 따라서 사용에 각별한 주의가 필요합니다.

`rm`은 Remove의 약자입니다. 삭제할 파일의 이름을 뒤에 붙여 `rm temp.txt`와 같이 사용합니다. 복사 명령어(`cp`)와 마찬가지로, 일반적인 `rm` 명령어는 파일만 지울 수 있으며 폴더를 지우려고 하면 에러를 냅니다. 내용물이 들어있는 폴더를 통째로 지우려면 하위 내용을 모두 지우라는 `-r` 옵션을 함께 사용해야 합니다.

rm 명령어 사용 시 자주 하는 치명적 실수

오해 또는 실수

rm -rf / 와 같이 최상위 경로 삭제 시도

바로잡기

서버의 운영체제 자체를 날려버리는 자폭 명령입니다. 절대 입력하지 마세요.

오해 또는 실수

폴더 이름에 띄어쓰기를 잘못하여 엉뚱한 파일 삭제

바로잡기

rm -r my folder 라고 입력하면 'my' 폴더와 'folder' 폴더 두 개를 지우려고 시도합니다. 공백은 항상 주의해야 합니다.

오해 또는 실수

경로 확인 없이 습관적인 삭제

바로잡기

삭제 전 반드시 pwd로 위치를 확인하고, ls로 지울 파일을 눈으로 확인한 뒤 실행하는 습관을 들여야 합니다.

실무에서 가장 많이, 그리고 조심해서 써야 하는 명령어는 `rm -rf [폴더명]`입니다. `-r`(재귀적 삭제)과 `-f`(force, 강제 삭제)가 결합된 이 옵션은, 폴더 안의 모든 것을 사용자에게 묻지 않고 가차 없이 지워버립니다. 특히 바이브코딩으로 인해 임시 파일이 많이 생겼을 때 폴더를 통째로 날리고 다시 시작할 때 자주 쓰지만, 경로를 한 글자라도 잘못 입력하면 프로젝트 전체가 날아갈 수 있으니 엔터를 치기 전 항상 경로를 세 번 확인하십시오.

개념 퀴즈

퀴즈 답을 맞춰야 학습 완료가 됩니다.

내용물이 여러 개 들어있는 'old-website'라는 이름의 폴더를, 에러 없이 하위 파일까지 통째로 복사하여 'backup-website'를 만들려고 합니다. 올바른 명령어는 무엇인가요?

3줄 요약

  1. 1mkdir 명령어를 사용해 새로운 디렉터리(폴더)를 만들 수 있으며, -p 옵션으로 복잡한 하위 폴더까지 한 번에 생성합니다.
  2. 2파일을 복사할 때는 cp, 이동하거나 이름을 바꿀 때는 mv를 사용하며, 디렉터리를 복사할 때는 cp -r을 써야 합니다.
  3. 3rm 명령어는 파일을 영구적으로 삭제하므로 복구가 불가능하며, 폴더를 통째로 지우는 rm -rf 명령어는 매우 신중하게 경로를 확인한 후 사용해야 합니다.