개발/코딩자율학습단

[코딩자율학습단 13기] 5일차, 디렉토리 및 실습

codesparkling 2025. 3. 15. 18:52

커리큘럼

p108~129

디렉토리

디렉토리는 파일 시스템을 계층화할 때 사용하는 도구이다. 여러 개념을 동등한 레벨로 둘 수도 있고, 상하위 개념으로 나누어서 파일을 관리할 수도 있도록 도와준다.

루트 디렉토리

리눅스를 포함한 유닉스 계열 OS는 모두 팡리 시스템 최상단에 루트 디렉토리 가 존재한다. 나타낼 때는 / 로 표기한다. 루트 디렉토리 아래에는 전통적으로 이름과 역할이 정해져 있는 디렉토리들이 있다.

디렉토리 용도
/bin 기본 실행 명령어가 위치한다.
/dev 디바이스 파일이 위치한다.
/etc 시스템 설정 파일이 위치한다.
/home 사용자의 홈 디렉토리가 위치한다.
/lib 시스템 라이브러리가 설치된다.
/mnt 시스템에 디스크 등을 임시로 마운트할 때 사용한다.
/proc procfs가 마운트된다.
/root root 사용자의 홈 디렉토리
/sbin 시스템 관리용 명령어가 위치한다.
/sys systs가 마운트된다.
/tmp 시스템 임시 파일이 위치한다.
/usr 시스템 소프트웨어가 설치된다.

현재 작업 디렉토리, PWD

bash는 특정 디렉토리를 기준으로 실행되며, bash가 실행 중인 디렉터리는 pwd이다. change directory(cd) 명령어를 통해서 다른 디렉토리로 이동할 수 있다.

홈 디렉토리

리눅스에 사용자를 추가하면 사용자별로 할당하는 디렉토리를 홈 디렉토리 라고 한다. 터미널을 실행하거나 SSH로 리눅스 시스템에 접속하면 로그인한 사용자의 홈 디렉토리를 현재 작업 디렉토리로 설정해서 시작한다.

bash에서는 ~ 으로 홈 디렉토리를 나타내며, cd ~을 입력하면 현재 로그인한 사용자의 홈 디렉토리로 이동한다.

경로

파일의 위치 정보를 나타내는 것을 경로라고 한다. 경로는 크게 상대 경로와 절대 경로, 2가지로 나타낼 수 있다.

상대 경로

현재 작업 디렉토리를 기준으로 경로를 나타내는 것을 상대 경로라고 한다. . 이나 .. 으로 나타낼 수 있고, . 은 현재 작업 디렉토리이며 .. 은 현재 작업 디렉토리의 부모(상위) 디렉토리를 나타낸다.

절대 경로

절대 경로는 루트 디렉토리를 기준으로 파일 경로를 나타낸다.

디렉토리 생성하기, mkdir [옵션] 디렉토리

mkdir 명령어를 활용해서 디렉토리를 생성할 수 있다.

  1. animals 디렉토리를 생성한다.

2. animals 디렉토리로 이동하고 dog, cat, cow 디렉토리를 한번에 생성한다.

3. 상위 디렉토리로 이동하고, 경로를 주어서 animals 하위에 snake 디렉토리를 생성한다.

4. -p 옵션을 확인한다. -p는 상위 디렉토리가 없을 때, 생성한 후에 하위 디렉토리를 생성한다.

5. 상위 디렉토리인 fruits가 없을 때

6 -p 옵션을 줄 때

cf) 추가적으로, -p 옵션을 주면 이미 있는 디렉토리인 경우에도 오류 메세지를 출력하지 않고 정상적으로 종료된다.명령은 정상적으로 종료되지만 아무 작업도 수행하지 않습니다. 즉, 오류가 발생하지 않고 조용히 넘어갑니다. -p 옵션이 있으면 디렉토리가 이미 존재할 때 오류를 발생시키지 않는 특성이 있습니다. 이것은 -p 옵션의 "관대한(permissive)" 특성 때문입니다.

디렉토리 삭제하기, rmdir [옵션] 디렉토리

mkdir와 비슷한 형식이며, 입력받은 디렉토리를 삭제한다. 여러 개를 입력받을 수도 있다. 다만, rmdir은 비어있는 디렉토리만 삭제할 수 있다. 삭제 대상에 일반 파일이나 다른 디렉토리가 있으면 실패한다.

rmdir도 -p옵션을 줄 수 있는데, 디렉토리의 상위 디렉토리까지 모두 삭제할 수 있다.

  1. ls 명령어로 animals와 fruits 디렉토리를 확인한다.
  2. animals 디렉토리 하위의 4개 디렉토리도 확인한다.
  3. cat 디렉토리를 삭제한다. 사진과 같이 아무것도 출력되지 않으면 정상 삭제된 것이다.

  1. 남은 3개의 디렉토리도 삭제한다.

  1. animals 디렉토리도 삭제한다.

  2. fruits 디렉토리를 확인한다.

  3. fruits를 삭제해본다. 하위에 apple이 있어서 아래와 같은 에러가 발생할 것이다.

  1. -p 옵션을 줘서 삭제해본다.

  1. fruits까지 같이 삭제된 것을 확인할 수 있다.

파일 복사하기

파일을 복사할 때는 cp 명령어를 사용한다. cp에는 두 가지 형식이 있다.

cp [옵션] <원본 파일의 경로> <복사한 파일을 저장할 경로> ,

cp [옵션] <원본 파일의 경로 1> <원본 파일의 경로 2> ... <복사본을 저장할 디렉토리>

첫 번째는 하나를 복사하는 것이고 두 번째는 여러 파일을 한 디렉토리로 복사할 때 사용한다. cp 명령어의 주요 옵션에는 -f와 -r이 있다.

옵션 설명
-f (--force) 복사본 파일이 이미 존재하는 경우 무시하고 강제로 덮어씌운다.
-r (--recursive) 지정한 디렉토리 하위의 파일을 모두 복사한다.

1. 실습용으로 testdir 디렉토리를 생성한다.

2. echo 명령어로 greetings 파일을 새성한다. echo 명령어와 출력할 텍스트를 입력하고 그 뒤에 기호 > 와 파일 이름을 작성하면 파일을 생성하고 출력할 내용을 파일에 작성한다. 이것을 redirection이라고 한다.

3. `cp [옵션] <원본 파일의 경로> <복사한 파일을 저장할 경로>` 방식으로 greetings를 say-hi라는 이름으로 복사한다.

4. `cp [옵션] <원본 파일의 경로 1> <원본 파일의 경로 2> ... <복사본을 저장할 디렉토리>` 방식을 사용해서 여러 파일을 다른 디렉토리로 복사해본다.

파일 이동하기, mv [옵션] <원본> <대상>

이동에는 두 가지 의미가 있다. 하나는 파일의 위치를 변경하는 것, 다른 하나는 파일 이름을 변경하는 것이다. 리눅스에서는 파일 이름 변경할 때 위치 변경 명령어와 같은 것을 사용한다.

원본 부분은 원본 파일을 지정한다.

대상 부분은 파일을 이동해 저장할 경로를 지정한다. 디렉토리를 지정하면 그 디렉토리로 이동하고, 이름까지 지정해주면 이름이 변경된다.

mv \[옵션\] <원본1> <원본2> ... <디렉토리> 와 같은 형식으로 여러 파일을 한꺼번에 옮길 수도 있다.

주로 사용하는 옵션은 2가지가 있다.

옵션 설명
-f 파일을 덮어쓸 때 묻지 않고 실행한다.
-i 파일을 덮어쓸 때 사용자에게 실행 여부를 물어본다.

일반 파일 이동

  1. mv 명령어로 ‘say-hi’ 파일의 이름을 hello로 변경한다.

  1. greetings의 이름을 welcome으로 변경하고 testdir로 hello와 welcome을 옮겨본다.

디렉토리 이동

  1. haha라는 디렉토리를 생성한다.

  2. haha를 hoho로 변경해본다.

  3. hoho를 temporary 아래로 옮겨본다. 이 때, 이름을 다시 haha로 수정함과 동시에 이동한다.

파일 삭제하기, rm [옵션] 파일

파일 부분에 파일 이름을 명시하면 해당 파일을 삭제할 수 있다. 기본적으로 일반 파일만 삭제할 수 있으며 디렉토리를 삭제하기 위해서는 옵션을 추가해야 한다.

옵션 설명
-d 디렉토리를 삭제한다. 디렉토리가 비어있을 경우에만 사용할 수 있다.
-f 파일이 존재하지 않아도 실패로 처리하지 않고 사용자에게 실행 여부를 묻지 않는다.
-i 파일을 삭제하기 전에 사용자에게 실행 여부를 묻는다.
-r 디렉토리와 디렉토리에 포함된 모든 파일을 삭제한다.

일반 파일 삭제

  1. say-hi 파일을 삭제해본다.

  1. -i 옵션을 줘서 hello 파일을 삭제해본다.

  1. 여러 개의 파일을 삭제해본다.

디렉토리 삭제

  1. 상위 디렉토리를 삭제해서 하위의 디렉토리와 파일들을 모두 삭제해본다.

단어 정리

  • 디바이스 파일
  • 유닉스 계열 운영체제의 /dev 디렉토리에 있는 디바이스 파일은 하드웨어 장치나 시스템 자원에 대한 인터페이스를 제공하는 특수 파일입니다. 이것들은 "모든 것이 파일"이라는 유닉스 철학의 핵심적인 구현입니다.
  • 디바이스 파일의 주요 유형은 다음과 같습니다:
  1. 문자 디바이스 파일(Character Device Files): 데이터를 문자 단위로 순차적으로 처리하는 장치를 나타냅니다. 예를 들어:
    • /dev/tty - 터미널 장치
    • /dev/console - 시스템 콘솔
    • /dev/null - 데이터를 버리는 "블랙홀" 장치
  2. 블록 디바이스 파일(Block Device Files): 데이터를 블록 단위로 임의 접근하는 장치를 나타냅니다. 예를 들어:
    • /dev/sda, /dev/sdb - 하드 드라이브
    • /dev/sr0 - CD/DVD 드라이브
  3. 가상 장치 파일: 실제 하드웨어에 대응되지 않는 가상 장치를 나타냅니다. 예를 들어:
    • /dev/random, /dev/urandom - 난수 생성기
    • /dev/zero - 0으로 채워진 무한한 데이터 스트림을 제공
    • 이러한 디바이스 파일을 통해 프로그램은 일반 파일을 다루는 것과 동일한 방식으로 하드웨어와 상호작용할 수 있어, 프로그래밍 인터페이스가 단순화됩니다.