Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

리눅스에서 파일과 디렉터리를 관리할 때는 mkdir로 디렉터리를 만들고, touch로 빈 파일을 준비하며, cp·mv로 복사하거나 옮깁니다. 삭제에는 rm과 rmdir를 사용합니다. 이 강좌에서는 홈 디렉터리 안에 별도 실습 공간을 만들고, 작업 전후의 상태를 확인하면서 이 명령들을 안전하게 연결해 봅니다.

실습 공간 준비하기

아래 실습은 Bash와 일반 사용자 계정에서 진행합니다. ~/linux-course-07-practice는 실습용으로 새로 만들 디렉터리입니다. 같은 이름의 디렉터리가 이미 있다면 기존 데이터를 건드리지 말고 다른 이름을 정하세요. 아래 mkdir 명령은 이미 존재할 때 오류를 내므로, 처음 실행할 때의 확인 장치가 됩니다.

mkdir ~/linux-course-07-practice

성공하면 보통 아무 메시지도 나오지 않습니다. ls -ld ~/linux-course-07-practice로 디렉터리가 만들어졌는지 확인하세요. 이후 명령은 첫 단계가 성공했고 해당 디렉터리가 비어 있다는 전제에서 실행합니다.

ls -ld ~/linux-course-07-practice

실습을 위한 두 하위 디렉터리를 만들고 그 안의 목록을 확인합니다.

mkdir ~/linux-course-07-practice/drafts ~/linux-course-07-practice/archive
ls ~/linux-course-07-practice

이때 목록에는 archive와 drafts가 나타납니다. 더 깊은 경로를 한꺼번에 만들려면 mkdir -p가 유용하지만, 기존 디렉터리도 허용하므로 이번 실습에서는 사용하지 않습니다.

빈 파일 만들고 확인하기

touch에 없는 파일 이름을 주면 빈 파일이 만들어집니다. 이미 있는 파일에 실행하면 새로 만드는 대신 수정 시각 등을 갱신할 수 있으므로, ‘새 파일만 만드는 명령’이라고 생각하면 안 됩니다.

touch ~/linux-course-07-practice/drafts/notes.txt
ls -l ~/linux-course-07-practice/drafts/notes.txt

방금 만든 파일이므로 ls -l에서 파일 크기는 일반적으로 0바이트로 표시됩니다. 권한과 날짜는 시스템 설정에 따라 달라집니다. touch는 파일에 내용을 쓰지 않으며, 파일 내용을 작성하려면 편집기나 다른 명령이 필요합니다.

복사와 이동의 차이 확인하기

cp는 원본을 남기고 새 사본을 만듭니다. 아래 명령은 drafts의 파일을 archive에 복사합니다. -i는 같은 이름의 대상이 이미 있을 때 덮어쓰기 전에 묻는 GNU cp 옵션입니다.

cp -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/archive/notes.txt
ls -1 ~/linux-course-07-practice/drafts
ls -1 ~/linux-course-07-practice/archive

위 두 ls -1 명령의 출력은 순서대로 다음과 같습니다. 각각 drafts와 archive에 notes.txt가 남아 있습니다. 파일 내용을 수정하면 두 파일이 자동으로 동기화되는 것은 아닙니다.

notes.txt
notes.txt

mv는 파일을 다른 위치로 옮기거나 같은 디렉터리에서 이름을 바꿉니다. 아래 명령은 원본 파일의 이름을 notes-old.txt로 바꿉니다. 보관해 둔 사본의 이름은 그대로입니다.

mv -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/drafts/notes-old.txt
ls -1 ~/linux-course-07-practice/drafts
ls -1 ~/linux-course-07-practice/archive

이번에는 첫 줄이 drafts의 notes-old.txt, 둘째 줄이 archive의 notes.txt입니다. 즉 원본의 이름만 바뀌고 사본은 유지됩니다.

notes-old.txt
notes.txt

cp나 mv의 마지막 인수가 기존 디렉터리이면 그 안에 같은 이름으로 들어가므로, 실행 전 대상이 파일인지 디렉터리인지 확인해야 합니다. -i를 사용하더라도 프롬프트를 무심코 승인하지 마세요.

파일과 빈 디렉터리 삭제하기

rm은 지정한 파일을 삭제합니다. 기본적으로 휴지통으로 보내지 않으므로 경로를 먼저 ls로 확인하세요. 아래 -i는 삭제 전에 확인을 요청합니다. 질문이 나오면 파일 이름을 확인하고 동의할 때만 진행하세요.

ls -l ~/linux-course-07-practice/drafts/notes-old.txt
rm -i ~/linux-course-07-practice/drafts/notes-old.txt

삭제에 동의했다면 drafts는 비어 있습니다. 빈 디렉터리만 제거하는 rmdir로 실습해 보세요.

rmdir ~/linux-course-07-practice/drafts
ls ~/linux-course-07-practice

마지막 목록에는 archive가 남습니다. archive에는 notes.txt가 있으므로 rmdir archive는 실패합니다. 실습 자료를 보존해 두었다가 필요 없을 때 정확한 경로를 확인하고 별도로 정리하세요. 초보 단계에서 rm -rf로 디렉터리 전체를 한 번에 지우는 방법은 권하지 않습니다.

작업 전에 확인할 것

  • 현재 위치: 상대 경로를 사용할 때는 pwd로 기준 디렉터리를 확인합니다.
  • 대상: ls -ld로 파일·디렉터리 자체와 이름을 확인합니다.
  • 덮어쓰기: 중요한 파일은 복사·이동 전에 백업하고, 목적지에 같은 이름이 있는지 확인합니다.
  • 삭제: rm은 기본적으로 복구 수단을 제공하지 않으므로 경로를 짧게 추측해 입력하지 않습니다.

명령별 다양한 옵션과 예외는 touch, mkdir, cp, mv, rm, rmdir 상세 글에서 확인할 수 있습니다.

공식 문서

각 명령의 정확한 동작과 옵션은 GNU Coreutils 공식 매뉴얼을 참고하세요. 설치된 구현의 옵션은 man이나 --help로 다시 확인하는 것이 좋습니다.

같은 카테고리의 다른 글
Linux / 명령어 / printenv - 환경 변수 값 출력

Linux / 명령어 / printenv - 환경 변수 값 출력

Linux printenv 명령어로 전체 또는 특정 환경 변수 값을 확인하는 방법을 설명합니다. 셸 변수와 환경 변수의 차이, 종료 상태, NUL 구분 출력과 env와의 차이를 정리합니다.

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux stat 명령어로 파일 크기, 권한, 소유자, inode와 타임스탬프를 확인하는 방법을 설명합니다. atime·mtime·ctime·Birth의 차이와 출력 형식, 파일 시스템 조회법도 정리합니다.

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux join 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux touch 명령어로 빈 파일을 만들고 접근 시각과 수정 시각을 변경하는 방법을 설명합니다. 기준 파일의 시간을 복사하는 방법과 스크립트에서 사용할 때의 주의점도 알아봅니다.

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

UID, GID, 기본·추가 그룹과 파일 소유권의 의미를 설명합니다. id, groups, getent, ls, stat으로 현재 계정과 파일의 소유 정보를 안전하게 확인합니다.

Linux / 명령어 / date - 현재 시각 표시와 출력 형식 지정

Linux / 명령어 / date - 현재 시각 표시와 출력 형식 지정

Linux date 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / info - GNU 문서 확인

Linux / 명령어 / info - GNU 문서 확인

info 명령어로 GNU 설명서를 탐색하는 방법을 설명합니다. 노드와 메뉴 이동, 본문·색인 검색, 특정 문서 위치 지정, 텍스트 출력과 문서가 없을 때의 해결 방법을 정리합니다.

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux ssh-keygen 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux whoami 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / rm - 파일과 디렉터리 삭제

Linux / 명령어 / rm - 파일과 디렉터리 삭제

Linux rm 명령어로 파일과 디렉터리를 삭제하는 방법을 설명합니다. 재귀 삭제, 대화형 확인, 루트 보호 옵션과 복구가 어려운 삭제를 안전하게 다루는 원칙을 정리합니다.