오픈 소스 비영리 기관 'Open Source Initiative'의 로고. https://opensource.org/
본 글은 학교 '오픈소스 소프트웨어 입문' 과목을 수강하며 실습(또는 공부)한 내용을 정리한 글입니다.
개인 기록 용도로 작성한 글이라, 직접 이 글을 보고 실습을 따라하기엔 어려움이 많을 것으로 예상됩니다.
혹시 본 글을 보며 Linux를 공부하실 목적이라면, 일단 키워드 위주로 AI에게 물어봐가면서, 본인의 Linux 터미널에서 직접 타이핑해가며 공부하시기를 추천드립니다.
질문이나 의견이 있다면 자유롭게 댓글 달아주세요!
help (bash) - Display information about builtin commands
man (1) - manual of commands (if installed)
info (1) - read info document (if installed)
login (1) - begin session on the system
logout (bash) - exit login shell
exit (bash) - exit the shell
whoami (1) - print effective userid
date (1) - print or set the system date and time
echo (1) - display a line of text
ls (1) - list directory contents
help : 설명서 보는 것
man : manual 보는 것
info : 뭔가 상세한 정보를 보는 것
help touch 하면 안나오고 man touch해야 나옴.
-> help는 쉘 내장 명령어들에 대해서만 도움말을 제공함.
쉘 내장 명령어: cd, pwd 등. 강노에 (bash) 붙어 있는 것들.
touch 명령어는 쉘 내장 명령어가 아니라, 외부 실행 파일 \
(프로그램)로 존재하기 때문에 help로는 도움말을 볼 수 없음.
일반적으로 /usr/bin/touch같은 경로에 존재.
시스템마다 command가 다르게 쓰일 수 있어서,
info는 예를 들어 info ls 하면 이 시스템의 정확한 ls를 알려줌.
man보다 더 심층적이고 상호작용적인 문서 제공
ls의 Exit status를 쓰는 건 기말고사에 나온다. 나중에 다룸.
login - 우린 ssh로 원격으로 접속해 로그인함.
logout - 로그아웃
exit - 약간 다르지만 logout과 거의 비슷하게 작동.
whoami - userid 출력.
who - 서버에 로그인해 있는 모든 user 정보(userid 포함) 출력
date - 현제 시스템 설정 시간 출력
echo - argument를 stdout로 print해줌.
man touch하면 touch [OPTION]... FILE...가 나옴
-> FILE 이름 인자로 안 넘겨주면 에러 발생.
A FILE argument that does not exist is created
empty, unless -c or -h is supplied.
-> -c(--no-create) option이나 -h option이 없으면
없는 파일명은 빈 파일로 생성함.
touch 뫄뫄뫄 해주면 이제 뫄뫄뫄의 타임스탬프가 바뀜.
man ls를 한 결과.
The file type is one of the following characters:
‘-’
regular file
**‘b’
block special file
‘c’
character special file**
‘C’
high performance (“contiguous data”) file
‘d’
directory
‘D’
door (Solaris 2.5 and up)
**‘l’
symbolic link**
‘M’
off-line (“migrated”) file (Cray DMF)
‘n’
network special file (HP-UX)
‘p’
FIFO (named pipe)
‘P’
port (Solaris 10 and up)
‘s’
socket
‘?’
some other file type
이거 'l' 시험 낸다!!
ls -l했을 때 맨 앞부분이 l이면,
symbolic link임. 그냥 link가 아님.
softlink라고도 부름.
hard link는 그냥 일반적인 파일로 보임.
복습 GPT 답변
파일 타입 b, c, d 설명 - b랑 c는 장치 파일에 붙음.
리눅스 파일 타입 중에 b, c, l 설명
ChatGPT의 말:
리눅스에서 파일 타입을 나타내는 문자 중에서 b, c, **l**의 의미는 다음과 같습니다.
1. b (블록 디바이스 파일, Block Device)
- 블록 단위로 데이터를 읽고 쓰는 장치를 나타냅니다.
- 주로 하드디스크, USB 드라이브, SSD, CD-ROM 같은 저장 장치가 이에 해당합니다.
- 데이터를 일정한 크기(블록)로 읽고 쓰는 방식이며, 랜덤 액세스(Random Access)가 가능합니다.
- 예시: /dev/sda, /dev/sdb, /dev/loop0
- 확인 방법:
출력 예시:
여기서 첫 번째 문자 b는 블록 디바이스 파일을 의미합니다.
```bash
bash
복사편집
ls -l /dev/sda
```
```
bash
복사편집
brw-rw---- 1 root disk 8, 0 Mar 12 10:00 /dev/sda
```
2. c (문자 디바이스 파일, Character Device)
- 바이트 단위로 데이터를 읽고 쓰는 장치를 나타냅니다.
- 주로 키보드, 마우스, 시리얼 포트, 터미널, 랜카드, 사운드카드 같은 장치가 이에 해당합니다.
- 블록 디바이스와 다르게, 연속된 데이터 스트림을 처리하며 랜덤 액세스가 불가능합니다.
- 예시: /dev/tty, /dev/null, /dev/random, /dev/input/mouse0
- 확인 방법:
출력 예시:
여기서 첫 번째 문자 c는 문자 디바이스 파일을 의미합니다.
```bash
bash
복사편집
ls -l /dev/null
```
```
bash
복사편집
crw-rw-rw- 1 root root 1, 3 Mar 12 10:00 /dev/null
```
3. l (심볼릭 링크, Symbolic Link)
- 다른 파일이나 디렉터리를 가리키는 링크 파일을 의미합니다.
- 윈도우의 "바로가기" 개념과 비슷하며, 원본 파일이 삭제되면 심볼릭 링크는 깨집니다.
- 예시: /bin/sh -> bash, /usr/lib/libxyz.so -> libxyz.so.1.2.3
- 확인 방법:
출력 예시:
여기서 첫 번째 문자 l은 심볼릭 링크를 의미합니다.
```bash
bash
복사편집
ls -l /bin/sh
```
```
bash
복사편집
lrwxrwxrwx 1 root root 4 Mar 12 10:00 /bin/sh -> bash
```
요약
문자 파일 타입 설명 예시b | 블록 디바이스 파일 | 블록 단위로 데이터 읽기/쓰기 (하드디스크, SSD 등) | /dev/sda, /dev/sdb |
c | 문자 디바이스 파일 | 바이트 단위로 데이터 읽기/쓰기 (키보드, 마우스 등) | /dev/tty, /dev/null |
l | 심볼릭 링크 | 다른 파일이나 디렉터리를 가리키는 링크 | /bin/sh -> bash |
이제 ls -l 명령어로 파일 타입을 볼 때, b, c, l이 나오면 해당 파일의 유형을 이해할 수 있습니다. 😊
리눅스는 모든 장치를 파일처럼 다루는 방식을 사용함.
b랑 c는 '장치'에 붙는 거야?
ChatGPT의 말:
네, **b(블록 디바이스)와 c(문자 디바이스)**는 **리눅스에서 사용하는 장치 파일(device file)**에 붙는 것입니다.
리눅스에서는 모든 장치를 파일처럼 다루는 방식을 사용합니다.
그래서 키보드, 하드디스크, 터미널, 랜카드 같은 하드웨어 장치도 /dev/ 디렉터리 아래 **"장치 파일"**로 존재합니다.
이 장치 파일이 **블록 디바이스(b) 또는 문자 디바이스(c)**로 구분됩니다.
🔹 b(블록 디바이스, Block Device)
✅ "블록 단위"로 데이터를 주고받는 장치
✅ 대량의 데이터를 저장하는 장치
- 하드디스크(HDD, SSD), USB, CD-ROM, SD 카드 같은 저장 장치가 해당됩니다.
- 데이터가 일정한 크기의 블록(block) 단위로 처리됩니다.
- 랜덤 액세스(임의 접근) 가능 → 파일을 바로 찾을 수 있음
- 버퍼링(buffering)과 캐싱(caching)이 지원됨.
📌 예시
bash
복사편집
ls -l /dev/sd*
출력 예시:
bash
복사편집
brw-rw---- 1 root disk 8, 0 Mar 12 10:00 /dev/sda
brw-rw---- 1 root disk 8, 1 Mar 12 10:00 /dev/sda1
👉 b는 블록 디바이스를 나타냅니다.
👉 /dev/sda는 첫 번째 하드디스크를 의미합니다.
🔹 c(문자 디바이스, Character Device)
✅ "바이트 단위"로 데이터를 주고받는 장치
✅ 연속된 데이터 스트림을 처리하는 장치
- 키보드, 마우스, 터미널, 시리얼 포트, 랜카드, 사운드 카드 같은 입출력 장치가 해당됩니다.
- 데이터를 하나씩(바이트 단위) 처리 → 스트리밍 방식
- 랜덤 액세스 불가능 → 순차적으로만 읽고 써야 함
- 키 입력, 터미널 출력 같은 실시간 데이터 처리에 사용됨.
📌 예시
bash
복사편집
ls -l /dev/tty /dev/null
출력 예시:
bash
복사편집
crw-rw-rw- 1 root root 5, 0 Mar 12 10:00 /dev/tty
crw-rw-rw- 1 root root 1, 3 Mar 12 10:00 /dev/null
👉 c는 문자 디바이스를 나타냅니다.
👉 /dev/tty는 **터미널(콘솔)**을 의미합니다.
👉 /dev/null은 아무 데이터도 출력하지 않는 가상의 장치입니다.
🔹 정리 (차이점 요약)
파일 타입 의미 데이터 처리 방식 예시b (블록 디바이스) | 저장 장치 (HDD, SSD, USB) | 블록 단위, 랜덤 액세스 가능 | /dev/sda, /dev/mmcblk0 |
c (문자 디바이스) | 입력/출력 장치 (키보드, 터미널, 마우스) | 바이트 단위, 순차적 처리 | /dev/tty, /dev/null, /dev/random |
💡 결론
b와 c는 특정한 "장치 파일"에 붙는 표시이며, 블록 디바이스와 문자 디바이스를 구분하는 용도입니다.
리눅스에서 /dev/ 아래에 있는 다양한 장치 파일을 보면 b 또는 c가 붙어 있는 것을 확인할 수 있습니다. 🚀
장치 파일과 장치 드라이버 파일의 차이.
예시: /dev/sda, /dev/sdb, /dev/loop0 이런 건 '장치 파일'이야 아님 '장치 드라이버 파일'이야?
ChatGPT의 말:
- */dev/sda, /dev/sdb, /dev/loop0 같은 것은 "장치 파일(device file)"**입니다.
이는 "장치 드라이버 파일(device driver file)"이 아닙니다.
🔹 장치 파일(Device File)
- 리눅스에서는 모든 하드웨어 장치를 파일처럼 다룸.
- /dev/ 디렉터리에 있는 장치 파일을 통해 운영체제가 장치와 통신할 수 있음.
- 장치 파일은 실제로 장치를 저장하는 게 아니라, 장치와 연결된 인터페이스 역할을 함.
- b(블록 디바이스) 또는 c(문자 디바이스)로 구분됨.
📌 예시
bash
복사편집
ls -l /dev/sda
출력 예시:
bash
복사편집
brw-rw---- 1 root disk 8, 0 Mar 12 10:00 /dev/sda
👉 b → 블록 디바이스 파일
👉 /dev/sda는 첫 번째 하드디스크를 나타냄.
🔹 장치 드라이버(Device Driver) 파일
- *커널 모듈(kernel module)**로서, 특정 하드웨어를 운영체제가 제어할 수 있도록 하는 프로그램.
- 보통 /lib/modules/ 아래에 저장되며, 확장자가 .ko(kernel object)인 파일.
- 장치 드라이버가 있어야 /dev/sda 같은 장치 파일이 제대로 작동함.
📌 예시
bash
복사편집
lsmod # 로드된 커널 모듈(장치 드라이버) 확인
출력 예시:
vbnet
복사편집
Module Size Used by
nvme 45056 4
sd_mod 61440 6
usbcore 290816 6 xhci_hcd,usbhid,usb_storage
👉 sd_mod → SATA/SSD 하드디스크를 제어하는 드라이버
👉 usbcore → USB 장치를 제어하는 드라이버
✅ 결론
파일명 설명 위치/dev/sda | 장치 파일 (하드디스크 인터페이스) | /dev/ (유저 접근 가능) |
sd_mod.ko | 장치 드라이버 파일 (하드디스크 드라이버) | /lib/modules/ (커널 모듈) |
💡 즉, /dev/sda 같은 것은 "장치 파일"이고, 실제 장치를 제어하는 "장치 드라이버 파일"은 따로 존재합니다. 🚀
'Tools and Utilities > Linux & Windows' 카테고리의 다른 글
[Linux 실습] Ch5. 파일 관리와 파일 명령어들(File management and General File commands) (0) | 2025.03.27 |
---|---|
[Linux 실습] Ch4. Linux의 디렉토리(Linux Directory) (0) | 2025.03.27 |
[Linux 실습] Ch2. 터미널과 명령어 설계(Terminal and Command Design) (0) | 2025.03.27 |
[Linux 실습] Ch1. Linux 시스템 기본 개념 (0) | 2025.03.27 |
[Windows] CLI, cmd.exe, Windows Powershell 등 완벽 개념정리!! (0) | 2025.03.05 |