본문 바로가기

Tools and Utilities/Linux & Windows

[Linux 실습] Ch3. 완전 기본적인 명령어들(Very basic commands)

오픈 소스 비영리 기관 '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 같은 것은 "장치 파일"이고, 실제 장치를 제어하는 "장치 드라이버 파일"은 따로 존재합니다. 🚀