Linux 파일시스템

트리구조

  • 리눅스와 같은 유닉스형 운영체제에서는 윈도우즈와 마찬가지로 계층적인 디렉토리 구조로 파일을 구성

  • 트리 형식으로 디렉토리(다른 시스템에서는 폴더라고도 부름)를 구성하고, 각 디렉토리에는 파일이나 다른 디렉토리가 포함될 수 있음

  • 루트(root) 디렉토리 : /

    • 파일시스템의 최상위 디렉토리

    • 파일들과 하위 디렉토리들을 포함하고 있음

    • 하위 디렉토리 역시 디렉토리들과 하위 파일을 가지고 있음

  • 윈도우즈와 차이점

    • 윈도우즈 : 저장장치마다 개별 파일 시스템으로 관리

    • 유닉스형 시스템 : 아무리 많은 저장장치가 설치되어 있어도 단일 파일 시스템으로 관리
      저장장치들은 시스템 유지보수를 담당하는 시스템 관리자의 재량에 따라 정확한 위치에 설치(장착/마운트)됨

  • 예제

/
├── bin -> usr/bin
├── boot
│   ├── System.map-3.10.0-1062.el7.x86_64
│   ├── config-3.10.0-1062.el7.x86_64
│   └── (기타 등등)
├── dev
│   ├── autofs
│   ├── block
│   └── (기타 등등)
├── etc
│   ├── DIR_COLORS
│   └── (기타 등등)
├── home
│   └── sun
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
│   ├── 1
│   └── (기타 등등)
├── root
├── run
│   ├── NetworkManager
│   ├── auditd.pid
│   └── (기타 등등)
├── sbin -> usr/sbin
├── srv
├── sys
│   ├── block
│   ├── bus
│   └── (기타 등등)
├── tmp
│   ├── ks-script-FKZMij
│   ├── systemd-private-e4b74a8555924c66bce1e389cf00720e-chronyd.service-2qiUEh
│   └── (기타 등등)
├── usr
│   ├── bin
│   ├── etc
│   └── (기타 등등)
└── var
    ├── adm
    ├── cache
    └── (기타 등등)


리눅스 시스템 디렉토리

  • / : 루트 디렉토리, 파일 시스템의 시작점

  • /bin : 시스템 부팅과 실행에 필요한 바이너리(프로그램)들을 포함

  • /boot : 리눅스 커널, 시작 RAM 디스크 이미지(시스템 부팅시 필요한 드라이버가 있음), 그리고 부트 로더를 포함

  • /dev : 디바이스 노드를 갖고 있는 특수한 디렉토리, 커널이 인식하고 있는 모든 디렉토리를 관리

  • /etc : 시스템 전반의 환경설정 파일, 시스템 부팅시 시스템의 각 서비스를 시작하는 쉘 스크립트 전부가 있음, 모든 파일이 텍스트 형식

  • /home : 일반적으로 각 사용자마자 /home 디렉토리를 갖게 됨, 일반 사용자는 홈 디렉토리 내에서만 파일 편집 가능

  • /lib : 주요 시스템 프로그램에서 사용하는 공유 라이브러리 파일이 저장

  • /lost+found : 포맷된 각 파티션이나 ext3처럼 리눅스 파일시스템에서 사용하는 디바이스에 있음, 파일 시스템에 문제가 생겼을 때 부분 복구를 도움, 시스템에 심각한 문제가 없다면 늘 비어있음

  • /media : (최신)USB 드라이버, CD_ROM 등과 같은 휴대용 장치가 시스템에 연결될 때 자동으로 마운트되는 마운트 포인트는 여기에 저장

  • /mnt : (구식)수동으로 휴대용 장치를 제거하기 위한 마운트 포인트를 저장

  • /opt : 추가적인 소프트웨어를 설치할 때 사용, 주로 상업용 소프트웨어를 설치

  • /proc : 특수 디렉토리, 리눅스 커널이 관리하는 가상 파일 시스템

  • /root : 루트 계정의 홈 디렉토리

  • /sbin : 시스템 바이너리 파일, 일반적으로 슈퍼유저를 위한 중요한 시스템 작업을 수행하는 프로그램들이 있음

  • /tmp : 임시 저장용 디렉토리

  • /usr : 리눅스 시스템에서 가장 큰 트리구조를 갖고 있음, 일반 사용자가 사용하는 모든 프로그램과 지원파일들이 모두 들어있음

    • /usr/bin : 사용중인 리눅스 배포판이 설치한 실행 프로그램

    • /usr/lib : /usr/bin 디렉토리에 있는 프로그램을 위한 공유 라이브러리

    • /usr/local : 시스템 전반에 걸쳐 사용되는 프로그램들이 저장되는 공간

    • /usr/local/bin : 소스코드로 컴파일된 프로그램이 주로 설치됨

  • /usr/sbin : 시스템 관리 프로그램

  • /usr/share : /usr/bin 디렉토리에 있는 프로그램이 사용하는 공유 데이터를 저장, 디폴트 설정파일 등이 있음

    • /usr/share/doc : 시스템에 설치된 대부분의 패키지에는 문서파일이 포함되어있고, 이러한 패키지 문서파일이 저장
  • /var : 상대적으로 변하기 쉬운 데이터를 모아둠, 데이터페이스, 스풀 파일, 사용자 메일 등과 같은 데이터가 저장

    • /var/log : 시스템 활동을 기록하는 로그 파일이 들어있음, 매시간마다 시스템 상황을 확인하는 매우 중요한 기록 파일


Linux 파일명

  • .로 시작하는 파일명을 가진 파일들은 보이지 않음(숨김파일)

    • ls로는 확인할 수 없고, ls -a로 확인 가능
  • 파일명과 명령어는 대소문자를 구별

    • file != FILE
  • 리눅스는 파일 확장자 개념이 없기 때문에 원하는 대로 파일명을 만들 수 있음

    • 파일의 내용과 파일 종류는 다른 방법으로 결정됨

    • 다른 운영체제(윈도우즈 등)와 편한 호환을 위해서, 또는 사용자가 알아보기 쉽기 위하여 확장자를 붙여주면 좋음

  • 파일명에 ` (띄어쓰기), ., -, _`(구두점기호) 사용 가능

    • 띄어쓰기와 마침표는 권장하지 않음


심볼릭 링크

  • 파일을 가리키는 링크

  • 종류 : 하드링크 / 소프트링크

  • 하드링크

    • 링크를 생성하는 기존 유닉스 방식

    • 기본적으로 하나의 파일에는 하나의 하드 링크가 있는데, 그것이 바로 파일에 이름을 만들어주는 것

    • 하드 링크가 만들어질 때 그 파일에 대한 디렉토리가 곧바로 생성됨

    • 약점 1. 파일 시스템 외부에 있는 파일을 참조할 수 없음
      같은 디스크 파티션에 있는 파일만 참조 가능

    • 약점 2. 디렉토리를 참조할 수 없음

    • 파일 그 자체만으로 구분이 어려움
      하드 링크를 포함한 디렉토리 목록은 해당 링크가 가리키고 있는 것이 무엇인지 보여주지 않음

    • 하드 링크가 삭제될 때, 링크도 함께 사라지지만 파일 내용은 그 파일의 모든 링크가 삭제될 때까지 (0개가 될 때까지) 계속 남아있음

  • 소프트링크(심볼릭링크)

    • 하드 링크의 한계를 극복하기 위하여 탄생

    • 참조될 파일이나 디렉토리를 가리키는 텍스트 포인터가 포함된 특수한 파일을 생성

    • 윈도우즈의 바로가기와 매우 흡사함(물론 윈도우즈보다 수년이나 앞서긴 함)

    • 심볼릭 링크에 편집을 하게 되면 심볼릭 링크가 참조하고 있는 파일도 똑같은 변경이 이루어짐

    • 심볼릭 링크 삭제시 링크만 삭제됨

    • 링크가 깨지는 것 : 심볼링 링크는 남아있고 파일만 삭제하여 아무것도 가리키지 않게 되는 것



pwd - 현재 작업 디렉토리 확인

  • Print Working Directory

  • 현재 작업 디렉토리 : 지금 위치해있는 지점

  • 시스템에 로그인시 홈 디렉토리(~)가 현재 작업 디렉토리가 됨

  • 홈 디렉토리(~) : 사용자 계정마다 갖는 고유의 공간, 일반 사용자로 시스템 사용시 파일 쓰기 권한이 부여된 유일한 공간

[sun@localhost ~]$ pwd
/home/sun

[sun@localhost home]$ pwd
/home



ls

현재 디렉토리 조회하기

  • ls : 현재 작업 디렉토리에 있는 파일과 하위 디렉토리들이 모두 표시
[sun@localhost /]$ ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var


다른 디렉토리 조회하기

  • ls $다른디렉토리 : 다른 디렉토리에 있는 파일과 하위 디렉토리들이 모두 표시
[sun@localhost /]$ ls usr
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
  • ls $다른디렉토리1 $다른디렉토리2 : 한 번에 여러 디렉토리 목록 확인
$ ls usr var
usr:
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

var:
adm  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp


ls 많이 사용되는 옵션

  • -a --all : 모든 파일 보기, .으로 시작하는 숨김 파일도 표시됨

  • -d --directory : 디렉토리를 명시하더라도 세부 내용이 아닌 해당 디렉토리만 조회할 수 있도록, 보통 -l과 같이 쓰임

  • -F --classify : 지시 문자를 추가 표시, 예) 디렉토리명이면 끝에 /를 덧붙여 표시

  • -l : 자세한 정보 출력 (long 포맷으로 출력 결과 확인)

  • -h --human-readable : -l 옵션과 함께 사용하면 파일 크기를 사람이 인식하기 쉬운 형태로 표시

  • -r -reverse : 출력 결과를 역순(내림차순)으로 표시, 일반적으론 오름차순

  • -s : 파일 크기순으로 정렬

  • -t : 파일 수정 시간 순으로 정렬

$ ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
$ ls -a
.  ..  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

$ ls var
adm  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp
$ ls -d var
var
$ ls -ld var
drwxr-xr-x. 19 root root 267 10월 15 10:03 var

$ ls -F
bin@  boot/  dev/  etc/  home/  lib@  lib64@  media/  mnt/  opt/  proc/  root/  run/  sbin@  srv/  sys/  tmp/  usr/  var/

$ ls -l
합계 20
lrwxrwxrwx.   1 root root    7 10월 15 09:57 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 10월 15 10:04 boot
drwxr-xr-x.  20 root root 3080 10월 15 10:03 dev
drwxr-xr-x.  78 root root 8192 10월 16 18:42 etc
drwxr-xr-x.   3 root root   17 10월 15 10:00 home
lrwxrwxrwx.   1 root root    7 10월 15 09:57 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 10월 15 09:57 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6  4월 11  2018 media
drwxr-xr-x.   2 root root    6  4월 11  2018 mnt
drwxr-xr-x.   2 root root    6  4월 11  2018 opt
dr-xr-xr-x. 111 root root    0 10월 15 10:03 proc
dr-xr-x---.   2 root root  135 10월 15 10:44 root
drwxr-xr-x.  28 root root  860 10월 16 18:43 run
lrwxrwxrwx.   1 root root    8 10월 15 09:57 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6  4월 11  2018 srv
dr-xr-xr-x.  13 root root    0 10월 15 10:03 sys
drwxrwxrwt.   9 root root 4096 10월 16 18:42 tmp
drwxr-xr-x.  13 root root  155 10월 15 09:57 usr
drwxr-xr-x.  19 root root  267 10월 15 10:03 var

$ ls -lh
합계 20K
lrwxrwxrwx.   1 root root    7 10월 15 09:57 bin -> usr/bin
dr-xr-xr-x.   5 root root 4.0K 10월 15 10:04 boot
drwxr-xr-x.  20 root root 3.1K 10월 15 10:03 dev
drwxr-xr-x.  78 root root 8.0K 10월 16 18:42 etc
drwxr-xr-x.   3 root root   17 10월 15 10:00 home
lrwxrwxrwx.   1 root root    7 10월 15 09:57 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 10월 15 09:57 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6  4월 11  2018 media
drwxr-xr-x.   2 root root    6  4월 11  2018 mnt
drwxr-xr-x.   2 root root    6  4월 11  2018 opt
dr-xr-xr-x. 111 root root    0 10월 15 10:03 proc
dr-xr-x---.   2 root root  135 10월 15 10:44 root
drwxr-xr-x.  28 root root  860 10월 16 18:43 run
lrwxrwxrwx.   1 root root    8 10월 15 09:57 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6  4월 11  2018 srv
dr-xr-xr-x.  13 root root    0 10월 15 10:03 sys
drwxrwxrwt.   9 root root 4.0K 10월 16 18:42 tmp
drwxr-xr-x.  13 root root  155 10월 15 09:57 usr
drwxr-xr-x.  19 root root  267 10월 15 10:03 var

$ ls -r
var  usr  tmp  sys  srv  sbin  run  root  proc  opt  mnt  media  lib64  lib  home  etc  dev  boot  bin

$ ls -s
합계 20
 0 bin   4 boot   0 dev  12 etc   0 home   0 lib   0 lib64   0 media   0 mnt   0 opt   0 proc   0 root   0 run   0 sbin   0 srv   0 sys   4 tmp   0 usr   0 var

$ ls -t
run  tmp  etc  root  boot  proc  dev  var  sys  home  usr  lib  lib64  sbin  bin  media  mnt  opt  srv

$ ls -lt
합계 20
drwxr-xr-x.  28 root root  860 10월 16 18:43 run
drwxrwxrwt.   9 root root 4096 10월 16 18:42 tmp
drwxr-xr-x.  78 root root 8192 10월 16 18:42 etc
dr-xr-x---.   2 root root  135 10월 15 10:44 root
dr-xr-xr-x.   5 root root 4096 10월 15 10:04 boot
dr-xr-xr-x. 111 root root    0 10월 15 10:03 proc
drwxr-xr-x.  20 root root 3080 10월 15 10:03 dev
drwxr-xr-x.  19 root root  267 10월 15 10:03 var
dr-xr-xr-x.  13 root root    0 10월 15 10:03 sys
drwxr-xr-x.   3 root root   17 10월 15 10:00 home
drwxr-xr-x.  13 root root  155 10월 15 09:57 usr
lrwxrwxrwx.   1 root root    7 10월 15 09:57 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 10월 15 09:57 lib64 -> usr/lib64
lrwxrwxrwx.   1 root root    8 10월 15 09:57 sbin -> usr/sbin
lrwxrwxrwx.   1 root root    7 10월 15 09:57 bin -> usr/bin
drwxr-xr-x.   2 root root    6  4월 11  2018 media
drwxr-xr-x.   2 root root    6  4월 11  2018 mnt
drwxr-xr-x.   2 root root    6  4월 11  2018 opt
drwxr-xr-x.   2 root root    6  4월 11  2018 srv


ls -l long 포맷으로 봤을 때의 정보

  • ex) drwxr-xr-x. 28 root root 860 10월 16 18:43 run

  • 첫 번째. drwxr-xr-x. : 형식 & 접근 권한 정보

    • 1번째 문자 : 형식
      - 일반파일, d 디렉토리, l 심볼릭링크

    • 2~4번째 문자 : 소유자의 접근 권한 정보
      r read, w write, x execute

    • 5~7번째 문자 : 소유 그룹의 접근 권한 정보

    • 8~10번째 문자 : 그 외 사용자의 접근 권한 정보

  • 두 번째. 28 : 하드 링크의 수

  • 세 번째. root : 소유자의 사용자명

  • 네 번째. root : 소유한 그룹명

  • 다섯 번째. 860 : 크기(byte)

  • 여섯 번째. 10월 16 18:43 : 수정 일자

  • 일곱 번째. run : 파일 or 디렉터리 or 심볼릭링크 명



cd : 현재 작업 디렉토리 변경

  • cd $이동할디렉토리경로명

  • 유용한 단축 표현

    • cd : 작업 디렉토리를 홈 디렉토리로 변경

    • cd - : 작업 디렉토리를 이전 디렉토리로 변경

    • cd ~username : username의 홈 디렉토리로 작업 디렉토리를 변경

  • 예제

$ pwd
/
$ cd etc
$ pwd
/etc

$ cd .
$ pwd
/etc

$ cd ..
$ pwd
/

$ cd # sun 계정
$ pwd
/home/sun

$ cd -
/

$ cd ~sun
$ pwd
/home/sun


디렉토리경로

  • 절대 경로와 상대 경로가 있음


절대 경로

  • /루트(최상위) 디렉토리에서부터 원하는 디렉토리 또는 파일까지의 경로에 대하여 각 디렉토리 위치들을 명시한 것

  • 예) /usr/bin - 루트 디렉토리 아래의 usr 디렉토리 아래의 bin 디렉토리


상대 경로

  • 현재 작업 디렉토리에서부터 원하는 디렉토리 또는 파일까지의 경로에 대하여 각 디렉토리 위치들을 명시한 것

  • 상대 경로명을 표시하려면 파일시스템 트리상의 상대적인 위치를 대신 표현해주는 특수 기호를 사용해야함

    • . : 현재 작업 디렉토리
      거의 모든 경우에 ./ 기호를 생략할 수 있음
      예) ./bin = bin

    • .. : 작업 디렉토리의 상위 디렉토리