파일과 디렉토리 관리
파일과 디렉토리 관리¶
1. 파일/디렉토리 생성¶
touch - 빈 파일 생성¶
# 빈 파일 생성
touch newfile.txt
# 여러 파일 생성
touch file1.txt file2.txt file3.txt
# 파일이 존재하면 타임스탬프만 갱신
touch existing_file.txt
mkdir - 디렉토리 생성¶
# 단일 디렉토리 생성
mkdir projects
# 여러 디렉토리 생성
mkdir dir1 dir2 dir3
# 중첩 디렉토리 생성 (-p: parents)
mkdir -p projects/web/frontend/src
# 권한과 함께 생성
mkdir -m 755 public_dir
# 디렉토리 구조 한번에 생성
mkdir -p myproject/{src,tests,docs,config}
생성 결과:
myproject/
├── src/
├── tests/
├── docs/
└── config/
2. 파일/디렉토리 복사¶
cp - 복사¶
# 파일 복사
cp source.txt destination.txt
# 다른 디렉토리로 복사
cp file.txt /home/user/backup/
# 여러 파일 복사
cp file1.txt file2.txt /backup/
주요 옵션¶
| 옵션 | 설명 |
|---|---|
-r, -R |
디렉토리 재귀 복사 |
-i |
덮어쓰기 전 확인 |
-v |
진행 상황 표시 |
-p |
권한, 소유자, 타임스탬프 유지 |
-a |
아카이브 모드 (-rpP와 동일) |
-u |
더 새로운 파일만 복사 |
-n |
덮어쓰지 않음 |
# 디렉토리 복사 (재귀)
cp -r projects/ projects_backup/
# 대화형 복사 (덮어쓰기 확인)
cp -i important.txt backup/
# 진행 상황 표시
cp -v largefile.zip /backup/
# 속성 유지하며 복사
cp -p config.txt /backup/
# 아카이브 모드 (백업에 권장)
cp -a /var/www/ /backup/www/
# 새로운 파일만 복사
cp -u *.txt /backup/
3. 파일/디렉토리 이동 및 이름 변경¶
mv - 이동/이름 변경¶
# 파일 이름 변경
mv oldname.txt newname.txt
# 파일 이동
mv file.txt /home/user/documents/
# 디렉토리 이동
mv projects/ /home/user/
# 여러 파일 이동
mv file1.txt file2.txt /backup/
# 이동하면서 이름 변경
mv old_project/ /home/user/new_project/
주요 옵션¶
| 옵션 | 설명 |
|---|---|
-i |
덮어쓰기 전 확인 |
-v |
진행 상황 표시 |
-n |
덮어쓰지 않음 |
-u |
더 새로운 경우만 이동 |
# 대화형 이동
mv -i file.txt /backup/
# 진행 상황 표시
mv -v *.log /archive/
# 기존 파일 덮어쓰지 않음
mv -n newfile.txt /shared/
4. 파일/디렉토리 삭제¶
rm - 파일 삭제¶
# 파일 삭제
rm file.txt
# 여러 파일 삭제
rm file1.txt file2.txt file3.txt
# 와일드카드로 삭제
rm *.tmp
rm log_2023*
주요 옵션¶
| 옵션 | 설명 |
|---|---|
-r, -R |
디렉토리 재귀 삭제 |
-f |
강제 삭제 (확인 없음) |
-i |
삭제 전 확인 |
-v |
삭제 파일 표시 |
# 디렉토리 삭제
rm -r directory/
# 강제 삭제 (주의!)
rm -f file.txt
# 디렉토리 강제 삭제 (매우 주의!)
rm -rf old_project/
# 대화형 삭제
rm -i important_file.txt
# 삭제 과정 표시
rm -rv logs/
rmdir - 빈 디렉토리 삭제¶
# 빈 디렉토리만 삭제 가능
rmdir empty_dir/
# 상위 빈 디렉토리까지 삭제
rmdir -p a/b/c/ # c, b, a 순서로 삭제 (모두 비어있어야 함)
위험한 명령어 경고¶
# 절대 실행하지 마세요!
# rm -rf / # 시스템 전체 삭제
# rm -rf /* # 루트 아래 모든 것 삭제
# rm -rf ~/* # 홈 디렉토리 전체 삭제
# rm -rf . # 현재 디렉토리 삭제
# 안전한 습관
rm -ri directory/ # 대화형으로 확인
ls directory/ # 삭제 전 내용 확인
5. 파일 내용 확인¶
cat - 전체 내용 출력¶
# 파일 내용 출력
cat file.txt
# 여러 파일 연결 출력
cat file1.txt file2.txt
# 줄 번호 표시
cat -n file.txt
# 빈 줄 압축
cat -s file.txt
less - 페이지 단위 보기¶
큰 파일을 편하게 볼 수 있습니다.
less largefile.txt
| 키 | 동작 |
|---|---|
Space / f |
다음 페이지 |
b |
이전 페이지 |
g |
파일 처음으로 |
G |
파일 끝으로 |
/검색어 |
앞으로 검색 |
?검색어 |
뒤로 검색 |
n |
다음 검색 결과 |
N |
이전 검색 결과 |
q |
종료 |
more - 간단한 페이지 보기¶
more file.txt
head - 파일 앞부분¶
# 처음 10줄 (기본)
head file.txt
# 처음 20줄
head -n 20 file.txt
head -20 file.txt
# 처음 100바이트
head -c 100 file.txt
tail - 파일 뒷부분¶
# 마지막 10줄 (기본)
tail file.txt
# 마지막 20줄
tail -n 20 file.txt
# 실시간 모니터링 (로그 확인에 유용)
tail -f /var/log/syslog
# 여러 파일 실시간 모니터링
tail -f file1.log file2.log
6. 링크¶
하드링크 vs 심볼릭링크¶
┌──────────────────────────────────────────────────────────┐
│ 하드링크 │
│ │
│ file.txt ─────┬───▶ [inode 123] ───▶ [데이터 블록] │
│ │ │
│ hardlink.txt ─┘ │
│ │
│ • 같은 inode를 가리킴 │
│ • 원본 삭제해도 데이터 유지 │
│ • 같은 파일시스템 내에서만 가능 │
│ • 디렉토리는 불가능 │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ 심볼릭링크 (소프트링크) │
│ │
│ file.txt ─────────▶ [inode 123] ───▶ [데이터 블록] │
│ ▲ │
│ symlink.txt ──┘ (경로를 가리킴) │
│ │
│ • 파일 경로를 가리킴 │
│ • 원본 삭제 시 깨진 링크 │
│ • 다른 파일시스템 가능 │
│ • 디렉토리도 가능 │
└──────────────────────────────────────────────────────────┘
ln - 링크 생성¶
# 하드링크 생성
ln original.txt hardlink.txt
# 심볼릭링크 생성
ln -s original.txt symlink.txt
# 디렉토리 심볼릭링크
ln -s /var/log/ ~/logs
# 강제 덮어쓰기
ln -sf new_target.txt symlink.txt
링크 확인¶
# 심볼릭링크 확인 (ls -l)
ls -l symlink.txt
출력:
lrwxrwxrwx 1 user user 12 Jan 23 10:00 symlink.txt -> original.txt
# 링크 개수 확인 (ls -l 두 번째 컬럼)
ls -l hardlink.txt original.txt
출력:
-rw-r--r-- 2 user user 100 Jan 23 10:00 hardlink.txt
-rw-r--r-- 2 user user 100 Jan 23 10:00 original.txt
7. 압축과 아카이브¶
tar - 아카이브¶
tar는 여러 파일을 하나로 묶습니다.
| 옵션 | 설명 |
|---|---|
-c |
아카이브 생성 (create) |
-x |
아카이브 추출 (extract) |
-t |
내용 확인 (list) |
-v |
상세 출력 (verbose) |
-f |
파일명 지정 (file) |
-z |
gzip 압축 (.tar.gz) |
-j |
bzip2 압축 (.tar.bz2) |
-J |
xz 압축 (.tar.xz) |
-C |
추출 디렉토리 지정 |
# 아카이브 생성
tar -cvf archive.tar directory/
# gzip 압축 아카이브
tar -czvf archive.tar.gz directory/
# bzip2 압축 (더 높은 압축률)
tar -cjvf archive.tar.bz2 directory/
# xz 압축 (가장 높은 압축률)
tar -cJvf archive.tar.xz directory/
# 아카이브 내용 확인
tar -tvf archive.tar.gz
# 아카이브 추출
tar -xvf archive.tar
tar -xzvf archive.tar.gz
# 특정 디렉토리에 추출
tar -xzvf archive.tar.gz -C /tmp/
# 특정 파일만 추출
tar -xzvf archive.tar.gz file1.txt file2.txt
gzip / gunzip - 압축¶
# 압축 (원본 삭제)
gzip file.txt # → file.txt.gz
# 압축 해제
gunzip file.txt.gz # → file.txt
# 원본 유지하며 압축
gzip -k file.txt
# 압축 레벨 (1-9, 9가 최고)
gzip -9 file.txt
zip / unzip - ZIP 압축¶
# 압축
zip archive.zip file1.txt file2.txt
# 디렉토리 포함 압축
zip -r archive.zip directory/
# 압축 해제
unzip archive.zip
# 특정 디렉토리에 해제
unzip archive.zip -d /tmp/
# 내용 확인
unzip -l archive.zip
압축 형식 비교¶
| 형식 | 명령어 | 압축률 | 속도 | 호환성 |
|---|---|---|---|---|
| .gz | gzip | 중간 | 빠름 | 높음 |
| .bz2 | bzip2 | 높음 | 중간 | 높음 |
| .xz | xz | 매우 높음 | 느림 | 보통 |
| .zip | zip | 중간 | 빠름 | 최고 |
8. 파일 타입 확인¶
file 명령어¶
file document.pdf
file script.sh
file /bin/ls
file archive.tar.gz
출력:
document.pdf: PDF document, version 1.4
script.sh: Bourne-Again shell script, ASCII text executable
/bin/ls: ELF 64-bit LSB pie executable, x86-64
archive.tar.gz: gzip compressed data
9. 디스크 사용량¶
du - 디렉토리 사용량¶
# 디렉토리 크기
du -h directory/
# 요약만 출력
du -sh directory/
# 현재 디렉토리 하위 폴더별 크기
du -h --max-depth=1
# 큰 폴더 찾기
du -h --max-depth=1 | sort -hr | head -10
df - 디스크 여유 공간¶
# 파일시스템별 사용량
df -h
# 특정 경로의 파일시스템
df -h /home
10. 실습 예제¶
실습 1: 프로젝트 구조 만들기¶
# 프로젝트 디렉토리 생성
mkdir -p myapp/{src,tests,docs,config}
# 구조 확인
ls -la myapp/
# 빈 파일 생성
touch myapp/src/main.py
touch myapp/tests/test_main.py
touch myapp/config/settings.conf
touch myapp/README.md
# 결과 확인
find myapp -type f
실습 2: 파일 백업¶
# 백업 디렉토리 생성
mkdir -p backup/$(date +%Y%m%d)
# 파일 복사
cp -v important.txt backup/$(date +%Y%m%d)/
# 디렉토리 백업
cp -a myapp/ backup/$(date +%Y%m%d)/myapp_backup/
# 압축 백업
tar -czvf backup/myapp_$(date +%Y%m%d).tar.gz myapp/
실습 3: 로그 파일 관리¶
# 로그 디렉토리로 이동
cd /var/log
# 큰 로그 파일 찾기
ls -lhS *.log 2>/dev/null | head -5
# 최근 로그 확인
tail -20 syslog
# 실시간 모니터링
tail -f syslog
# (Ctrl+C로 종료)
실습 4: 임시 파일 정리¶
# /tmp 내용 확인
ls -la /tmp/
# 7일 이상 된 임시 파일 찾기
find /tmp -mtime +7 -type f 2>/dev/null
# 특정 패턴 파일 삭제 (주의)
# find /tmp -name "*.tmp" -mtime +7 -delete
실습 5: 심볼릭 링크 활용¶
# 설정 파일 링크
mkdir -p ~/dotfiles
ln -s ~/.bashrc ~/dotfiles/bashrc
ln -s ~/.vimrc ~/dotfiles/vimrc
# 링크 확인
ls -la ~/dotfiles/
# 로그 디렉토리 바로가기
ln -s /var/log ~/logs
ls ~/logs/
다음 단계¶
04_Text_Processing.md에서 grep, sed, awk를 사용한 텍스트 처리를 배워봅시다!