본문 바로가기
리눅스/기초 학습

Day 1: 셸 기본 & 파일 조작

by CBROJIN 2025. 7. 19.

1) 학습 요약표

학습내용 설명
기본 명령어 pwd, cd, ls -l, mkdir, touch, cp, mv, rm, rmdir, tree
파일 정보 확인 stat, file
사용자 정보 확인 hostname, whoami, id
파일 구조 시각화 tree
 

2) 이론 설명

pwd (Print Working Directory)

  • 기능 설명: 현재 쉘이 위치한 디렉토리 경로(절대경로)를 출력
  • 동작 원리: 현재 사용자의 작업 디렉토리를 반환. 시스템 환경변수 $PWD 값을 참조
  • 예제 명령어:
pwd
  • 설명:
    • 현재 작업 위치가 /home/user/test라면 /home/user/test 출력됨

 

cd (Change Directory)

  • 기능 설명: 디렉토리를 변경함
  • 동작 원리: 인자로 주어진 경로로 작업 디렉토리를 이동. cd ~는 홈 디렉토리로 이동
  • 예제 명령어:
cd /etc
cd ~
cd ..
cd -
  • 설명:
    • cd /etc: /etc 디렉토리로 이동
    • cd ~: 홈 디렉토리로 이동
    • cd ..: 상위 디렉토리로 이동
    • cd -: 이전 디렉토리로 이동
 

ls -l (List)

  • 기능 설명: 디렉토리/파일 목록 출력 (-l 옵션: 상세 정보 출력)
  • 동작 원리: inode 정보를 포함한 파일 권한, 소유자, 그룹, 크기, 수정 시간 출력
  • 예제 명령어:
ls -l
ls -a
ls -lh
ls -lt
  • 설명:
    • -a: 숨김 파일 포함 목록 출력
    • -lh: 사람이 읽기 쉬운 크기로 출력
    • -lt: 수정 시간 순으로 정렬
 

mkdir (Make Directory)

  • 기능 설명: 새 디렉토리를 생성함
  • 동작 원리: 경로에 지정된 디렉토리를 생성. -p 옵션 시 중간 경로까지 생성
  • 예제 명령어:
mkdir test_folder
mkdir -p a/b/c
  • 설명:
    • 현재 경로에 test_folder라는 디렉토리 생성됨
    • -p(parents) 옵션으로 중첩 디렉토리 a/b/c까지 한 번에 생성
 

touch

  • 기능 설명: 새 파일 생성 또는 기존 파일의 수정 시간 갱신
  • 동작 원리: 지정한 이름의 빈 파일을 생성하거나, 존재하면 타임스탬프 갱신
  • 예제 명령어:
touch test.txt
touch file{1..3}.txt
  • 설명:
    • test.txt라는 빈 파일 생성됨
    • 중괄호 확장을 이용해 file1.txt ~ file3.txt 생성됨
 

cp (Copy)

  • 기능 설명: 파일/디렉토리를 복사함
  • 동작 원리: 원본 파일의 내용을 복제하여 새 위치에 저장. -r로 디렉토리 복사 가능
  • 예제 명령어:
cp test.txt backup.txt
cp -r folder1 folder2
cp -u source.txt dest.txt
  • 설명:
    • 일반 파일 복사, 디렉토리 복사 (-r)
    • 변경된 파일만 복사 (-u)
 

mv (Move)

  • 기능 설명: 파일 이동 또는 이름 변경
  • 동작 원리: 파일의 inode 링크 변경으로 이동/변경을 수행
  • 예제 명령어:
mv backup.txt archive.txt
mv *.txt ~/backup/
  • 설명: 이름 변경 및 여러 파일을 특정 디렉토리로 이동 가능
 

rm (Remove)

  • 기능 설명: 파일/디렉토리를 삭제함
  • 동작 원리: 파일 시스템에서 inode 참조를 제거함. -r로 디렉토리 삭제 가능
  • 예제 명령어:
rm archive.txt
rm -r folder_name
rm -i important.txt
  • 설명:
    • -r: 디렉토리 및 내부 파일 삭제
    • -i: 삭제 전 사용자 확인 요청
 

rmdir (Remove Directory)

  • 기능 설명: 비어있는 디렉토리를 삭제함
  • 동작 원리: 하위 파일이 없는 디렉토리에 한해 삭제 수행
  • 예제 명령어:
rmdir test_folder
  • 설명: test_folder가 비어 있으면 삭제됨
 

stat

  • 기능 설명: 파일의 상세 상태 정보 출력 (타임스탬프 포함)
  • 동작 원리: inode, size, block, 생성/수정/접근 시간 등을 출력
  • 예제 명령어:
stat test.txt
  • 설명: test.txt의 inode 정보, 접근/수정/변경 시간 출력
 

file

  • 기능 설명: 파일의 타입을 판별함
  • 동작 원리: 마법 숫자(magic number)와 헤더 정보를 기반으로 분석
  • 예제 명령어:
file test.txt
  • 설명: 일반 텍스트 파일인지, 바이너리인지 출력됨
 

hostname

  • 기능 설명: 현재 시스템의 호스트명 출력
  • 동작 원리: /etc/hostname 파일을 참조하여 시스템 이름 출력
  • 예제 명령어:
hostname
  • 설명: 시스템 식별자 이름이 출력됨
 

whoami

  • 기능 설명: 현재 로그인한 사용자 계정명 출력
  • 동작 원리: 현재 쉘의 사용자 정보를 /etc/passwd에서 확인하여 출력
  • 예제 명령어:
whoami
  • 설명: 예: student 계정으로 로그인 시 student 출력
 

id

  • 기능 설명: UID, GID, 그룹 정보를 포함한 사용자 정보 출력
  • 동작 원리: 현재 사용자의 UID, 기본 그룹 및 추가 그룹 정보 출력
  • 예제 명령어:
id
  • 설명: uid=1000(student) gid=1000(student) groups=1000(student)
 

tree

  • 기능 설명: 디렉토리/파일 구조를 트리 형태로 출력
  • 동작 원리: 현재 경로의 하위 구조를 계층적으로 탐색해 출력
  • 예제 명령어:
tree
tree -L 2
tree -a
  • 설명:
    • -L n: n 레벨까지 출력
    • -a: 숨김 파일 포함 출력

 

3) 기본 실습 과제

문제 1. 작업 환경 만들기와 이동

  1. 현재 디렉토리 경로를 확인하라.
  2. /tmp/linux_practice라는 디렉토리를 생성하라. (부모 경로가 없을 수도 있음)
  3. 해당 디렉토리로 이동하고, 현재 위치를 확인하라.
  4. projects와 notes라는 하위 디렉토리를 각각 만들고, tree 명령으로 구조를 출력하라.

 

문제 2. 파일 생성과 속성 확인

  1. projects 디렉토리 안에 task1.txt, task2.txt, task3.txt 빈 파일을 한 번에 생성하라.
  2. 각 파일의 상세 정보(stat)를 확인하고, 수정 시간(mtime)을 비교하라.
  3. file 명령으로 각 파일이 어떤 타입으로 인식되는지 확인하라.
  4. 현재 로그인한 사용자 계정과 UID, GID 정보를 출력하라.

 

문제 3. 파일 복사와 백업

  1. task1.txt를 notes 디렉토리로 복사하라.
  2. notes/task1.txt 파일의 내용을 임의로 편집(예: echo로 내용 추가)하여 수정 시간을 최신으로 만든다.
  3. cp -u projects/task1.txt notes/task1.txt 명령을 실행했을 때 파일이 복사되는지 확인하라.
  4. 복사 결과를 stat로 확인하고, 왜 덮어썼는지(혹은 덮어쓰지 않았는지) 이유를 설명하라.

projects/task1.txt 파일은 변경된게 없어 notes/task1.txt 파일에 덮어 쓰기가 안됨.

 

문제 4. 파일 이동과 삭제

  1. projects/task3.txt를 notes 디렉토리로 이동하라.
  2. notes/task3.txt의 이름을 archive.txt로 변경하라.
  3. archive.txt를 삭제하되, 삭제 전 사용자에게 확인을 받도록 하라.
  4. projects 디렉토리가 비어 있으면 rmdir로 삭제하고, 비어 있지 않으면 이유를 확인하라.

 

문제 5. 트리 출력과 정리

  1. /tmp/linux_practice 경로의 전체 구조를 트리 형태로 출력하라. (숨김 파일 포함)
  2. 레벨 2까지만 출력하여 projects, notes 구조만 확인하라.
  3. 남아 있는 파일과 디렉토리를 모두 삭제한 후, tree로 최종 확인하라.