본문 바로가기
OS/Linux

리눅스 기초 30강 시리즈 - 22강 파일 분류

by HJ0216 2023. 2. 4.

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

22강 파일 분류

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

File Classification

-: 일반 파일

d: directory

s: socket

p: named pipe

b: block

c: character

l: symbolic link

 

[root@hj0216 ~]# file /etc
/etc: directory
[root@hj0216 ~]# file /etc/bashrc
/etc/bashrc: ASCII text
[root@hj0216 ~]# file /usr/bin/date
/usr/bin/date: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=4fca2d42de39c5f177d7a21782e344776597ba32, stripped

/usr/bin/date: ELF 64-bit LSB executable, Excutable Linking Format, 64bit 실행(.exe) 파일

 

c언어 소스코드 파일 및 컴파일 파일 확인

[root@hj0216 ~]# vi k.c

#include <stdio.h>
int main(void)
{
        puts("Linux Study \n");
        return 0;
}

[root@hj0216 ~]# gcc k.c -o k
[root@hj0216 ~]# ./k
Linux Study
[root@hj0216 ~]# file k.c
k.c: C source, ASCII text
[root@hj0216 ~]# file k
k: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=5184afee87a2c1e03c5ab28a197f71a816dd0587, not stripped

k.c: C source, C 소스코드 파일

k: ELF 64-bit LSB executable, 64-bit exe 실행 파일

 

File의 종류

[root@hj0216 ~]# ll /dev
crw-------. 1 root root     10, 235  2월  3 22:50 autofs
drwxr-xr-x. 2 root root         160  2월  3 22:50 block
lrwxrwxrwx. 1 root root           3  2월  3 22:50 cdrom -> sr0
brw-rw----. 1 root disk    253,   0  2월  3 22:50 dm-0
srw-rw-rw-. 1 root root           0  2월  3 22:50 log
...

c: character device (입출력 장치: 프린터기, 키보드 등)

[root@hj0216 ~]# file /dev/autofs
/dev/autofs: character special

d: directory

[root@hj0216 ~]# file /dev/block
/dev/block: directory

l: symbolic link

[root@hj0216 ~]# file /dev/cdrom
/dev/cdrom: symbolic link to `sr0'

b: block device (저장 장치: SDA)

[root@hj0216 ~]# file /dev/dm-0
/dev/dm-0: block special

s: socket

: socket을 활용하여 같은 도메인 내에서 연결될 수 있고 프로세스들 사이의 통신을 할 수 있음

[root@hj0216 ~]# file /dev/log
/dev/log: socket

p: named pipe

: 전혀 모르는 프로세스들 사이에서 pipe로 통신을 할 경우, pipe에 이름을 지정해야하며, 이렇게 이름이 지정된 pipe를 named pipe라고 함

[root@hj0216 ~]# find / -type p
/run/systemd/initctl/fifo
[root@hj0216 ~]# ll /run/systemd/initctl/fifo
prw-------. 1 root root 0  2월  3 22:50 /run/systemd/initctl/fifo
[root@hj0216 ~]# file /run/systemd/initctl/fifo
/run/systemd/initctl/fifo: fifo (named pipe)

find / -type p: 최상위 dir(/)에서 type이 p인 file 탐색

 

 

 

➕ IPC: Inter Process Communication, 프로세스간 통신

Process의 경우, 완전히 독립된 실행 객체로써 다른 Process의 영향을 받지 않음

그로인해 서로간 통신이 어려워 Kernel 영역에서 IPC라는 내부 프로세스 간 통신을 제공

Process는 이러한 IPC를 통해 상호 통신을 함

-> IPC의 종류: PIPE, Named PIPE, Message Queue, Shared Memory, Socket 등

1. PIPE: 부모-자식 프로세스간 통신 시 사용

2. Named PIPE: 이름을 가진 PIPE를 통해서 부모-자식 관계가 아닌 프로세스간 통신 시 사용 가능

3. Memory Queue: 컨베이너 벨트 위 물건에 라벨을 붙이면서 동시에 다양한 물건을 다룰 수 있는 것과 같이 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음

4. Shared Memory: 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당함으로써 이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있음
공유메모리는 중개자가 없이 곧바로 메모리에 접근할 수 있기 때문에 다른 모든 IPC들 중에서 가장 빠르게 작동함

5. Socket: 같은 도메인 내에서 연결될 수 있고, process들간 통신을 가능하게 하는 범용적인 IPC

 

참고 자료

📑 14) named pipe, socket

📑 [운영체제] IPC 프로세스간 통신