System/Linux

[Linux] 디렉토리 구조 & 관리 명령어 / 절대 경로 & 상대 경로

Yoonsoo Park 2024. 9. 11. 23:01

*해당 정보는 Rocky Linux 9.4를 기반으로 한 정보입니다

 

1. 디렉토리(Directiory)란?

 Linux에서 디렉토리(Directioy)란 Windows의 폴더와 유사한 개념으로 특정 목적을 가지고 시스템 파일과 사용자 데이터를 저장하는 공간이다. 디렉토리의 특징은 계층적 구조를 가진다는 것(상위와 하위 디렉토리가 존재)이다. 디렉토리의 주소는 '/home/user1'와 같이 표현하는데, 가장 왼 쪽의 슬래시는 루트 디렉토리(Root Directioy)라고 부른다(루트 모드와는 관련 없는 개념이니 혼동하지 않길 바란다).  

*Windows에서는 폴더의 주소를 '\user\user'와 같이 역슬래시를 통해 표현한다.

 

 

2. 디렉토리 관리 명령어 

1. pwd

: Print Working Directiory, 현재 작업중인 디렉토리 이름 출력(현재 저장 위치를 확인할 때 사용한다).

 

2. ls

: 디렉토리 목록 보기 

  • ls: 옵션 없이 하위 파일/디렉토리 이름만 출력 
  • ls -l: 하위 파일/디렉토리에 대한 자세한 정보 출력 (= ll)
  • ls -a: 숨김 파일까지도 출력 
  • ls -al: 숨김 파일 포함하여 자세하게 출력
  • ls -ld: 현재 디렉토리의 정보 출력

<ls -l 입력 했을 때 나오는 정보의 구성>

  • 파일의 종류 
    • - : 일반적인 파일(regular file)
    • d : Directory File 
    • l : Symbolic Link File (Windows의 바로가기와 유사하지만 더 강력함)

*심볼릭 링크와 하드 링크에 대해서는 후에 '파일 관리' 포스팅에서 더 상세히 다루겠다. 

 

* MAC time: 파일과 디렉토리에 대한 날짜/시간 정보

  • 마지막 수정 날짜/시간 = last Modified Time/Date --> 파일의 내용을 수정했을 때
  • 마지막 접근 날짜/시간 = last Accessed Time/Date --> 파일의 내용을 읽었을 때
  • Meta Data 변경 날짜/시간 = last Changed Time/Date --> 파일의 메타데이터가 변경되었을때(파일이름,소유자,권한....)

3. touch

: 새로운 파일을 만들거나, 기존 파일이 존재할 경우 MAC Time을 최신으로 갱신

  • 사용법: touch [파일명/디렉토리명]
  • 파일이 없으면 비어있는 새로운 파일(크기가 0인 파일)을 만든다.
  • 파일이 있으면 날짜만 최신으로 갱신한다(내용은 안 건드림).

4. cd

: Change Working Directory, 작업 디렉토리를 변경

 

5. mkdir

: make directiory, 디렉토리 생성 (Windows의 새 폴더와 유사)

 

6. rmdir

: remove directory, 디렉토리 삭제

(디렉토리에 등록된 파일, 디렉토리가 있으면 삭제할 수 없음) 

=> rm -r, rm -rf를 통해 삭제 가능(하지만 복구가 불가능하기 때문에 주의)

 

7. du

: disk usage, 디렉토리 사용량 표시 

  • du -sh  [디렉토리명] : 디렉토리내의 모든 파일/디렉토리의 용량합계 출력 
  • du -ah  [디렉토리명] : 디렉토리내의 모든 파일에 개별용량 출력 

 

 

3. 주요 디렉토리 소개

1. 최상위 디렉토리 (Root Directory)  ==> /

  • Linux/Unix에서는 모든 파일과 디렉토리의 경로 시작점이 루트디렉토리(Root Directory)이다.
  • Windows는 드라이브별로 루트 디렉토리가 따로 있지만 Linux는 루트 디렉토리가 하나(유일)이다.
  • Linux 표기(/): root/user/user1
  • Windows 표기(\): C:\users\user1 , D:\user\users

 

2. /bin 

: binary, 명령어 역할을 하는 실행 파일(executive file)을 모아놓은 디렉토리

  • /bin에 저장된 명령어 실행 파일들은 이진수(binary)로 인코딩되어 컴퓨터에서 바로 실행 가능하다. 
  • /bin은 /usr/bin의 심볼릭 링크 파일이다
  • /bin의 명령어들은 모든 사용자가 사용할 수 있는 명령어들이다 <=> /sbin
  • 포함된 명령어: ls, cp, mv, rm, bash, cat... 

</bin은 /usr/bin의 심볼릭 링크 파일>
</bin에 포함된 명령어(더 있다)>

 

3. /sbin

: system binary, 대부분 root mode에서 사용하는 중요한 시스템 관리 명령어 역할을 하는 실행 파일을 모아놓은 디렉토리

  • /sbin은 /usr/sbin의 심볼릭 링크 파일이다
  • 포함된 명령어
    • ifconfig: 네트워크 인터페이스 구성
    • reboot: 시스템 재부팅
    • shutdown: 시스템 종료 
    • ...

</sbin의 정보와 포함된 명령어 목록>

 

4. /dev

: Linux가 인식한 하드웨어(SSD, DVD, CD..)에 직접 접근할 수 있게 제공되는 장치 파일, Windows의 장치관리자와 유사하다. (Windows에서 장치관리자를 여는 명령어: devmgmt.msc)

 

5. /etc

: etcetera, 주로 설정에 관련된 다양한 파일이 저장되어 있는 디렉토리 

(Linux, Unix는 설정 사항들을 파일에 저장한다)

 

6. /home 

: 일반 사용자(root 제외, Normal User)의 홈 디렉토리 

  • 사용자의 계정 별로 동일한 이름의 디렉토리가 생성되고, 해당 디렉토리는 사용자의 전용 공간으로 사용
  • 해당 사용자의 개인 파일, 개인 설정 등을 저장 

</home>

 

7. /root

: root 관리자 계정의 홈 디렉토리

</root>

*cd ~: 해당 계정의 홈 디렉토리로 이동

 

8. /lib

: library, 시스템의 기본적인 동작을 지원하는 라이브러리(공유 라이브러리) 파일이 포함하는 디렉토리

</lib>

 

9. /media

: CD/DVD,USB 등을 연결할 때 사용하는 디렉토리

  • Windows와 다르게 자동으로 mount되지 않고, 수동으로 mount해야 한다
  • /dev/sr0: CD/DVD의 장치 파일( Windows에서는 CD/DVD,USB를 연결하면 드라이브 문자가 할당되어 바로 사용할 수 있게 되어 있다).

10. /mnt

: mount, 공유 디렉토리를 연결(mount)할 때 사용하는 디렉토리 (Windows의 공유 폴더와 유사)

 

11. /opt 

: Optional, Add-On 프로그램이 설치되는 디렉토리 

  • Add-On: 추가로 설치되는 디렉토리 
  • Add-On 프로그램이 무조건 여기 설치되는 것은 아니고, 설치되도록 권장한다

12. /proc

: Process, 프로세스에 관련된 정보가 저장되는 디렉토리 

  • 프로세스(Process): 응용 프로그램의 작동 단위, 하나의 응용 프로그램은 하나 또는 그 이상의 프로세스가 작동하여 일을 한다
  • 프로세스는 PID(Process ID)를 부여받는다
  • 프로세스마다 PID로 디렉토리를 만들고, 그 안에 프로세스 관련 정보를 보관한다
  • 프로세스 목록 보기: ps -ef(Windows의 작업 관리자와 유사)

<ps -ef: 현재 실행중인 프로세스>

  • 주요 인덱스 
    • UID (User ID): 프로세스를 실행하는 사용자의 ID
    • PID (Process ID): 각 프로세스에 고유하게 부여된 식별 번호
    • PPID (Parent Process ID): 현재 프로세스를 생성한 부모 프로세스의 ID
    • C (CPU Usage): 프로세스가 사용하는 CPU 시간의 비율
    • STIME (Start Time): 프로세스가 시작된 시간
    • TTY (Terminal Type): 프로세스가 연결된 터미널의 이름
    • TIME (Cumulative CPU Time): 프로세스가 실행되는 동안 사용한 총 CPU 시간
    • CMD (Command): 프로세스가 실행된 명령어 또는 실행 파일의 경로

 

13. /usr

: User System Resource, 주로 사용자들이 자주 사용하는 프로그램과 관련된 파일들이 포함된 디렉토리 

  • /usr/local: 소스에서 직접 설치된 프로그램이나 소프트웨어 패키지들이 저장되는 디렉토리
  • /usr/share: 공유 데이터 파일들이 저장되는 디렉토리
  • /usr/include: C/C++와 같은 프로그래밍 언어의 헤더 파일들이 저장되는 디렉토리

</usr>

 

14. /var

: Variable, 자주 내용이 변경되는 파일들을 모아 놓은 디렉토리

</var>

*로그 파일(log file): 시스템, 애플리케이션, 서버 등의 동작과 이벤트를 기록하는 파일로, 문제 해결, 시스템 모니터링, 보안 감사 및 성능 분석에 중요한 역할을 한다

 

15. /tmp 

: Temporary Directory, 임시 디렉토리 

  • 잠시 사용하고 버릴 임시 파일들이 들어있음
  • 아무나 접근, 읽고 쓰기 가능

 

 

4. 절대 경로상대 경로

절대 경로: 루트 디렉토리(/)부터 시작하여 파일이나 디렉토리의 전체 경로를 지정/명시하는 것 

  • 현재 작업 디렉토리와 관계없이 항상 같은 위치를 참조한다
  • ex) /home/user/documents/file.txt

상대 경로: 현재 작업 중인 디렉토리를 기준으로 파일, 디렉토리의 위치를 지정하는 것

  • 현재 어떤 디렉토리에서 작업 중이든 상관없이 고유한 절대 경로와 다르게 현재 작업 디렉토리에 따라 경로가 달라질 수 있음 
  • 절대 경로에 비해 상대적으로 편리하지만, 현재 디렉토리를 알아야 참조가 가능하다(pwd 사용)
  • 특수 디렉토리 참조가 가능하다
    • . --> 현재 디렉토리를 의미
    • .. --> 상위 디렉토리를 의미
    • - --> 이전 디렉토리를 의미 (전에 있던 디렉토리로 돌아가기)
    • ~ --> 현재계정의 홈디렉토리를 의미
  • 예시
    • documents/file.txt  (현재 디렉토리의 documents 디렉토리 안의 file.txt 파일)
    • ../logs/error.log (상위 디렉토리의 logs 디렉토리 안의 error.log 파일)
    • ./scripts/run.sh (현재 디렉토리의 scripts 디렉토리 안의 run.sh 파일)

*Linux는 대소문자를 엄격하게 구분한다

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디, 

"All our dreams can come true, if we have the courage to pursue them", Walt Disney

 

나의 꿈이 반드시 이뤄질 것이라는 것에 확신을 갖고 나아가자.