리눅스에서 파일 시스템이란 '컴퓨터에서 파일이나 자료를 쉽게 탐색, 관리, 보관할 수 있게 도와주는 프로그램'이라고 생각하면 쉽다.
cat /proc/filesystems
명령으로 파일 시스템 종류를 확인할 수 있다.리눅스 파일 속성
ls -l 명령으로 보는 파일의 속성
표기 | 설명 |
---|---|
d, -, l | 파일의 종류 |
rw-r--r-- 등 | 파일을 읽고 쓰고 실행할 수 있는 접근 권한 표시 |
51, 7, 56 등 | 하드 링크의 개수 |
dev | 파일 소유자의 로그인 ID |
devs | 파일 소유자의 그룹 이름 |
1632B 등 | 파일의 크기(바이트) |
22 Sep 16:11 | 파일이 마지막으로 수정된 날짜 |
Desktop | 파일명 |
ls -l
명령에서 출력되는 그룹명은 파일이 속한 그룹의 이름/etc/group
: 그룹이 정의된 파일로, 시스템 관리자만 수정이 가능하다.groups
: 사용자가 속한 그룹을 알려주는 명령어로, 인자를 지정하지 않으면, 현재 로그인한 사용자의 그룹을 표시하고, 인자로 다른 사용자명을 지정하면 지정한 사용자가 속한 그룹을 표시한다.file
명령어로 파일의 종류를 알 수 있다.
종류 | 설명 |
---|---|
- | 일반(정규) 파일 |
d | 디렉터리 |
l | 심벌릭 링크 파일 |
b | 블록 단위로 읽고 쓰는 블록 장치 파일 |
c | 섹터 단위로 읽고 쓰는 문자 장치 파일 |
p | 파이프 파일(프로세스 간 통신에 사용되는 특수 파일) |
s | 소켓(네트워크 통신에 사용되는 특수 파일) |
원본 파일을 대신 사용하기 위해 다른 파일명으로 링크된 파일이며, 프로그래밍에서 포인터의 개념을 생각하면 이해에 도움이 될 수 있다. 링크 파일 생성 시 하드 링크 또는 심볼릭 링크(소프트 링크) 형식으로 만들 수 있다.
ln 파일명 hardlink
: 해당 파일에 대한 하드링크를 생성하드 링크
특정 파일 또는 디렉터리에 접근을 쉽게 할 수 있도록 하는 방법으로, 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것이다.
![]()
원본 파일의 포인터 역할(원본 파일의 크기와 무관)
원본 파일 삭제 시 링크 파일이 깜빡거리며 원본 파일이 없음을 알린다.
ln -s 파일명 softlink
: 해당 파일에 대한 소프트 링크를 생성
심볼릭 링크
윈도우의 바로가기 개념과 비슷하며, 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템 상의 특정 파일을 가리키는 것
하드 vs 심볼릭 vs (단순)복사
원본 내용 수정 시, 하드 링크와 심볼릭 링크 파일 내부 내용은 수정되지만, 복사한 파일의 내부 내용은 수정되지 않는다. 또한, 원본 파일 삭제 시, 하드링크와 복사 파일은 그대로 존재하지만, 심볼릭 링크 파일은 접근할 수 없다.
리눅스에서는 파일을 효율적으로 관리하기 위해 계층적인 구조로 구성한다.
디렉터리 | 기능 | 예시 |
---|---|---|
bin (binaries) | 기본적인 실행 가능한 명령 파일들을 포함 | cat , mkdir 등 |
sbin (system binaries) | 시스템 관리 명령어 저장 | systemctl , reboot 등 |
etc (et cetera) | 시스템 전역 설정 파일들을 포함 | |
usr | 공유 가능한 파일들을 포함 | |
tmp (temporary) | 시스템 사용중 발생하는 임시데이터(파일)를 저장하며, 재부팅시 삭제 | |
dev (device) | 장치 파일들이 있는 디렉터리 (시스템의 모든 입출력 파일을 가지고 있음) | |
lib (libraries) | 시스템 라이브러리(기본적인 프로그램 모듈)들을 포함 | |
boot | 운영체제 부팅에 필요한 파일들을 포함 | |
dev (devices) | 장치 파일들을 포함 | |
home | 사용자별 개인 파일과 설정과 관련한 파일들을 포함, 사용자 추가시 사용자의 id와 동일한 디렉토리가 home 하위에 자동으로 생성 | |
opt (optional) | 추가로 설치한 소프트웨어 패키지들을 포함 | |
mnt (mount) | 임시 파일 시스템의 마운트 지점으로, 관리자가 임시로(직접) 파일 시스템을 마운트할 때 사용하는 디렉토리 | |
proc (processes) | 프로세스 및 시스템 정보를 포함하는 가상 파일 시스템으로, 현재 실행 중인 프로세스와 커널 정보에 대한 가상 파일들을 포함하며 메모리에 존재 | cpuinfo(CPU 정보), meminfo(메모리정보) |
run | 런타임(애플리케이션 실행 중)에 필요한 일시적인 파일들을 포함 | PID 파일, 소켓 파일 |
srv (service) | 서버에서 제공하는 서비스 관련 데이터 저장 | 웹 서버 데이터 |
usr (user) | 사용자 명령어, 라이브러리, 매뉴얼 등 저장 | bin(사용자 명령어), lib(사용자 라이브러리) |
var (variable) | 시스템 운영중 발생하는 데이터, 로그 등의 가변 데이터 파일들을 포함 | 로그 파일, 캐시 파일 |
media | CD, USB 같은 외부 장치를 연결하는 곳 | |
sys | 리눅스 커널 관련 정보와 관련된 파일들을 포함 | |
root | 관리자계정 root 사용자의 홈 디렉토리 |
파일 시스템에서 디렉터리 계층 구조에 있는 특정 파일의 위치
경로 작성 특수 문자
특수 문자 | 정의 |
---|---|
/ | 루트와 경로를 구분하는 구분자 |
~ | 홈 디렉터리 |
. | 현재 디렉터리 |
.. | 상위 디렉터리 |
- | 이전 디렉터리 |
절대 경로: 항상 /(루트) 디렉터리부터 시작하는 경로로, 특정 파일에 대한 절대 경로는 / 디렉터리부터 시작해서 특정 파일까지 이동하면서 거치게 되는 중간 디렉터리 이름을 표시한다.
ex) /usr/bin
상대 경로: 현재 디렉터리를 기준으로 시작하는 경로로, 특정 파일에 대한 상대 경로는 현재 디렉터리부터 시작하여 특정 파일까지 이동하면서 거치게 되는 중간 디렉터리의 이름을 표시한다.
ex) ../../usr/bin
파일의 소유자, 그룹, 기타 사용자들의 파일에 대한 접근 권한을 표시할 수 있으며, 파일의 소유자가 chmod
명령을 사용하여 변경 가능하다.
chmod
: 파일 또는 디렉터리의 접근 권한을 변경하는 명령어구분 | 문자/기호 | 의미 |
---|---|---|
사용자 카테고리 문자 | u | 파일 소유자 |
g | 소유자가 속한 그룹 | |
o | 소유자와 그룹 이외 기타사용자 | |
a | 전체 사용자 | |
연산자 기호 | + | 권한 부여 |
- | 권한 회수 | |
= | 접근 권한 설정 | |
접근 권한 문자 | r | 읽기 권한 |
w | 쓰기 권한 | |
x | 실행 권한 |
접근권한 | 2진수 | 8진수 | 의미 |
---|---|---|---|
rwx | 111 | 7 | 읽기, 쓰기, 실행 |
rw- | 110 | 6 | 읽기, 쓰기 |
r-x | 101 | 5 | 읽기, 실행 |
r-- | 100 | 4 | 읽기 |
-wx | 011 | 3 | 쓰기, 실행 |
-w- | 010 | 2 | 쓰기 |
--x | 001 | 1 | 실행 |
--- | 000 | 0 | 권한 없음 |
권한 | 파일 | 디렉터리 |
---|---|---|
읽기 | 파일 읽기, 복사에 대한 권한 ex) more , cat , head , tail 등 | ls (ls 명령의 옵션은 실행 권한 필요) |
쓰기 | 파일 수정, 이동, 삭제에 대한 권한. 해당 디렉터리에 쓰기 권한 필요 ex) vi 편집기로 내용 수정 후 저장 | 파일의 생성 또는 삭제 가능 ex) touch , mkdir , mv , cp , rm |
실행 | 파일 실행 권한. 쉘 스크립트나 실행파일 등 | cd , 파일을 디렉터리로 이동/복사 가능 |
umask
: 기본 접근 권한을 출력하거나 변경하는 명령어-rw -r- -r- - 1 root root 218 Sep 9 10:41 /etc/hosts
읽기 권한, 쓰기 권한, 실행 권한을 각각 r
, w
, x
로 나타내며, 각각의 권한에서 권한이 없는 경우 -
로 표기한다. 그리고 사용자, 그룹, 기타 사용자별로 세가지 권한을 rwx 세문자를 묶어서 표기한다.리눅스에서는 일반 접근 권한 외에 특별한 접근 권한을 제공한다. umask 명령어 입력 시 4자리의 숫자가 출력되는데, 맨 앞자리가 특수 접근 권한을 나타낸다. (0이면 일반 접근 권한)
[출처: 유튜브 따라學IT 리눅스 기초(개정판)]
chmod 4xxx 또는 chmod u+s [파일명]
SetUID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안 만큼은 파일을 실행한 사용자의 권한이 아닌 파일의 소유자의 권한이 적용된다. 즉, 나머지 사용자가 파일 실행 시 소유자의 권한으로 접근할 수 있게 한다. 또한 SetUID를 설정하면 소유자의 실행 권한에 ‘x’ 대신 ‘s’ 로 표시된다.
ex) passwd(/usr/bin/passwd) 명령(비밀번호 변경)의 경우, SetUID가 설정되어 일반 사용자가 root 권한으로 실행을 하여 암호 변경을 할 수 있다.
/etc/shadow vs /etc/passwd
/etc/shadow 파일은 시스템에 등록된 모든 계정의 비밀번호가 암호화된 형태로 저장 및 관리되는 파일로, 해당 파일에서는 root 계정으로만 수정이 가능하므로 본인의 권한으로 암호 변경 시도 시 암호 변경이 불가능하다. /etc/passwd 파일은 시스템의 모든 사용자 계정에 대한 정보를 포함하는 일반 텍스트 기반 데이터베이스로, root 계정 또는 sudo 권한이 있는 사용자만 수정할 수 있으며 모든 시스템 사용자가 읽을 수 있다.
[출처: 유튜브 따라學IT 리눅스 기초(개정판)]
chmod 2xxx 또는 chmod g+s [파일명]
SetGID가 설정된 파일을 실행 시, 일시적으로 소유 그룹의 권한을 얻어 실행할 수 있다. 즉, 나머지 사용자가 파일 실행 시 관리 그룹의 권한으로 접근할 수 있게 해주는 권한이다. SetGID를 설정하면 그룹의 실행 권한에 ‘x’ 대신 ‘s’ 로 표시된다.
chmod 1xxx 또는 chmod o+t [파일명]
Sticky Bit가 설정된 디렉터리에는 누구나 파일 생성이 가능하다. 기타 사용자의 실행 권한에 ‘x’ 대신 ‘t’로 표시된다. 생성한 파일은 파일을 생성한 계정으로 소유자가 설정되고, 다른 사용자가 생성한 파일은 삭제 불가능하다. 따라서 디렉터리를 마치 자유 게시판처럼 사용할 수 있게 된다.
ex) /tmp 디렉터리
특수 접근 권한 오류
특수 권한을 설정하는 파일이나 디렉터리는 모두 실행 권한이 있어야 한다. 따라서 실행 권한이 없는 파일에 SetUID, SetGID를 설정하면 ‘s’가 아닌 ‘S’로 표시된다. 마찬가지로 실행 권한이 없는 디렉터리에 Sticky Bit를 설정하면 ‘T’로 표시된다.