프린터 인쇄 시스템

LPRng(Line Printer next gegeration)

  • 리눅스 초기에 많이 사용됨
  • 라인 프린터 데몬 프로토콜을 이용해서 프린터 스풀링과 네트워크 프린터 서버를 지원
  • 설정 파일: /etc/printcap

 

CUPS(Common Unix Printing System)

  • 애플이 개발한 오픈 소스 프린팅 시스템
  • HTTP 기반 IPP(Internet Printing Procotol) → 인터넷을 통해 프린터를 지원
  • 사용자 및 호스트 기반의 인증 제공
  • 데몬 이름: cupsd
  • 설정 파일 디렉터리: /etc/cups

 

 

프린터 설정

  • 로컬 접속과 네트워크 프린터 설정 2가지 방법 존재
  • 네트워크 프린터 설정 방법

 


사운드 카드 시스템

OSS(Open Sound System)

  • 리눅스 및 유닉스 계열에서 사운드를 만들고 캡쳐하는 인터페이스
  • 표준 유닉스 장치 시스템 콜(POSIX read, write, ioctl 등) 기반
  • 현재는 OSS보다 ALSA로 대체

 

ALSA(Advanced Linux Sound Architecture)

  • 사운드 장치 드라이버 제공을 위한 리눅스 커널 요소
  • 사운드 카드를 자동으로 구성하고, 다수의 장치를 관리하는 것이 목적
  • OSS를 기반으로 하여 하드웨어 기반 미디어 합성, 다중 채널 하드웨어 믹싱, 전이중 통신 등의 기능 제공
  • 환경 설정 파일: /etc/asound.state

 

SANE(Scanner Access Now Easy)

  • 스캐너, 비디오 캠 등 이미지 관련 하드웨어를 제어하는 API
  • 멀티 OS 지원
  • SCSI 스캐너: /dev/sg0, /dev/scanner
  • USB 스캐너: /dev/usb/scanner, /dev/usbscanner

 

XSANE(X based Interface for the SANE)

  • SANE 스캐너 기반의 X-윈도우 기반 스캔/이미지 수정 프로그램
  • 스캔 작업 뿐 아니라 캡쳐한 이미지 수정 작업도 가능
  • gpl 라이센스, 멀티 OS 지원

 


장치 활용 명령어

프린트 명령어

  • lpr <옵션> [파일명]: 프린터 작업 요청

  • lpq <옵션>: 프린터 큐의 작업 목록 출력

  • lprm <옵션>: 큐에 대기 중인 작업 삭제

  • lpc: 라인 프린터 컨트롤 프로그램
    • 프린터 상태 확인
    • 큐 활성화/비활성화
    • 큐의 작업 순서 변경

 

System V 계열 프린트 명령어

  • lp <옵션> [파일명]: 프린터 작업 요청

  • cancal [ReqID]: 프린터 작업 취소
    • -a: 모든 작업 취소
  • lpstat <옵션>: 프린터 큐 상태 확인옵션 기능

 

사운드 카드 명령어

  • alsactl <옵션> [명령]: ALSA 사운드 카드 제어

 

  • alsamixer: ncurses 라이브러리 기반 오디오 프로그램
  • cdparanoia <옵션>: 오디오 CD 음악 추출

 

 

스캐너 관련 명령어

  • sane-find-scanner <옵션> [장치명]: SCSI 스캐너와 USB 스캐너 관련 장치 파일을 찾음

  • scanimage <옵션>: 이미지 스캔

  • scanadf <옵션>: 자동 문서 공급 장치가 장착된 스캐너에서 여러 개의 사진을 스캔

  • xcom: GUI 기반으로 평판 스캐너나 카메라로부터 이미지를 스캔

 


X-윈도우 개요

개념

  • 리눅스 환경의 각종 애플리케이션과 유틸리티에 대해 GUI를 제공
  • 플랫폼과 독립적으로 작동하는 그래픽 시스템
  • x-윈도우는 X11, X, X 윈도우 시스템이라고도 부름
  • 오픈 데스크톱 환경: KDE, GNOME, XFCE

 

특징

  • 네트워크 기반의 그래픽 환경을 지원
  • 이기종 시스템 사이에서도 사용 가능
  • 스크롤바, 아이콘, 색상 등 그래픽 환경 자원들이 통일되어 있지 않음
  • 디스플레이 장치에 의존적이지 않으며 원하는 인터페이스 설정 가능

 

네트워크 기반 클라이언트/서버 시스템

  • 서버: 클라이언트의 디스플레이 접근 제어, 클라이언트 간 자원 공유, 메세지 전달, 클라이언트와 입출력 장치의 중계
  • 클라이언트: 어플리케이션을 이용하여 X 서버의 기능 이용

 

구성요소의 종류

- windows manager: 창 크기나 색상 조절 등 GUI 관련 처리 담당
- display server ↔ client libraries: 통신 데이터는 display server protocol로 제어
- client libraries는 다양한 toolkit을 활용해서 작업을 처리함

 

  • Xfree86
    • display 서버를 지원해주는 라이브러리/프로토콜의 일종
    • X86 계열의 X서버 프로그램. 무료
  • XF86Config
    • XFree86 설정 파일 담당
    • 폰트, 키보드, 마우스, 비디오 카드 등의 색상 정보를 설정 가능
  • Xlib
    • 저수준 클라이언트 라이브러리
    • 윈도우 생성, 이벤트 처리, 창 조회, 키보드 처리 등의 기능 제공
  • XCB: Xlib보다 향상된 쓰레드, 확장성 제공
  • X 프로토콜: Xlib, Xtoolkit 인터페이스 사용
  • Xtoolkit: 고급 레벨의 GUI 생성 가능, Widget과 Intrinsic 지원

 

X-윈도우의 설정과 실행

  1. 윈도우 설정
    • init 프로세스 시 /etc/inittab 파일을 읽어 리눅스 환경 환경을 초기화함
    • 파일 시스템 점검, 서비스 프로세스 관리, 가상 콘솔 관리, 런 레벨 관리
  2. 윈도우 실행(startx -- [인자값])
    • 터미널 윈도우로 로그인하고 그래픽 환경으로 전환하고자 하는 경우 실행
    • 인자값 입력 시 여러 개의 x윈도우 프로그램 구동 가능
    • startx는 x윈도우를 실행하는 스크립트로, 시스템 환경을 초기화하고 xinit을 호출함
  3. DISPLAY 환경 변수
    • X 윈도우의 display 위치 지정
    • export DISPLAY=[IP]:[DISPLAY 번호],[스크린번호]

 


X-윈도우 매니저

x 윈도우 운영 시에는 다양한 관리자 프로그램들이 필요하다. 일반적으로 윈도우 매니저, 데스크톱 매니저, 디스플레이 매니저로 구분된다. 가장 핵심은 데스크톱 매니저이며, 데스크톱 매니저를 기반으로 윈도우와 디스플레이 매니저가 활성화되어 사용된다.

 

윈도우 매니저

  • 창의 배치와 표현을 담당하는 프로그램
  • XLib와 XCB 라이브러리를 사용
  • 리눅스에서 사용 가능한 윈도우 매니저는 다양함
  • 대표적인 윈도우 매니저
    • Enlinghtment: GNOME의 기본 윈도우 매니저
    • kwm: KDE v1.x의 기본 윈도우 매니저
    • etc: fvwm, twm, mw, windowmaker, AfterStep

 

데스크톱 매니저

  • Desktop Manager 또는 Desktop Environment
  • GUI 사용자에게 제공하는 인터페이스 스타일
  • 윈도우 매니저, 파일 관리자, 도움말, 제어판 등 다양한 도구를 제공하는 패키지 형태의 프로그램
  • 드래그 앤 드롭으로 프로세스 간의 통보 기능 지원
  • 대표적인 데스크톱 환경
    • KDE(Kool Desktop Environment): QT 툴 기반(그래픽 라이브러리), FreeBSD
    • GNOME(GNU Network Object Model Environment): QTK+이용, BSD 등에 포함
    • LXDE: Raspbian, GTK2 사용, 가벼운 모델
    • XFCE: GTK+2 사용, Xfwm 윈도우 매니저, 가벼운 모델

 

디스플레이 매니저

  • X-윈도우 상에서 작동하는 프로그램
  • X서버 접속 및 사용자 로그인 시 세션을 시작하기까지의 과정을 담당
  • 대표적인 디스플레이 매니저
    • kdm: KDE의 디스플레이 매니저
    • gdm: GNOME의 디스플레이 매니저. GTK, GNU GPK
    • etc: xdm, dtlogin

 


X-윈도우 활용 명령어

xhost

  • X 서버에 접속할 수 있는 클라이언트 지정 혹은 해제
  • 서버로의 요청 허용 여부를 호스트 단위로 제어
  • xhost [+|-] [IP|도메인명]
xhost +  # 모든 클라이언트 접속 허용
xhost + [IP]  # 해당 IP로부터 접속 허용

 

xauth

  • MMC 방식의 인증을 사용하기 위한 유틸리티
  • x윈도우 실행 시 생성되는 키를 기반으로 인증을 진행함
  • 쿠키 값으로 인증을 진행하기 때문에 xhost보다 더 강화됐다고 볼 수 있음
  • .Xauthority 파일에 해당 쿠키(magic cookie) 내용을 추가, 삭제, 리스트를 출력함
  • 당연히 $HOME/.Xauthority 파일에 대한 읽기/쓰기 권한 필요
  • xauth <옵션>
    • list: 모든 쿠키값 리스트 조회

 

X-윈도우 프로그램

 

 


References

에디터 활용

개요

  • 리눅스에서 지원하는 편집기로는 vi, emacs, pico, gedit, xedit 등이 있음
  • 버퍼 기반 편집기 방식의 장단점
    • 장점: 사용자가 잘못 편집 시 해당 편집을 중지하여 원본 파일 보존 가능
    • 단점: 외부적인 원인으로 갑자기 편집기가 종료되었을 경우 수정 내용 손실

 

pico

pico <옵션> [파일명]

  • 워싱턴 대학에서 개발된 유닉스 기반의 텍스트 에디터
  • 메뉴 선택 방식의 편집기로, 원도우의 메모장과 유사
  • 자유 소프트웨어 라이센스가 아니기 때문에 소스 수정이 불가능함
  • 기능이 부족하고 업데이트가 잘 되지 않음
  • 복제 버전인 nano 편집기가 존재

 

emacs

  • 리차드 스톨만이 개발, 이후 제임스 고슬링이 LISP 언어로 기능 추가 개발
  • 매크로 기능이 존재
  • 단순 편집기를 넘어 소스 코드 작성 모드에 특화된 통합 개발 환경을 제공

 

vi

  • 리눅스 배포판과 유닉스에 기본적으로 포함되어 있음
  • mode형 편집기(명령, 입력, 편집)

 

vim

  • vi 편집기와 호환되며 다양한 기능을 추가함
  • 디양한 색상을 사용해 가시성을 높이고, ex모드에서 히스토리 기능을 제공함
  • 확장된 정규 표현식 문법, 다중 되돌리기, 문법 검사 기능 지원

 

gedit

  • 자유 소프트웨어 편집기로, 마이크로소프트, 윈도우, 맥OS X에서 사용 가능
  • GNOME(GUI) 데스크톱 환경에서 사용 가능하며 UTF-8과 호환됨
  • 그래픽 기반이기 때문에 CLI에서 사용 불가

 

nano

  • 단축키 기반의 메뉴(편집기 하단에 표시)

 


프로그램 설치

리눅스 소프트웨어 설치

  • 설치 방법
    • 배포판에서 제공하고 있는 패키지 매니저 혹은 레퍼지토리를 활용해 설치
    • 오픈소스 코드를 직접 컴파일하여 사용
  • 패키지 관리 프로그램


패키지 매니저를 활용한 설치

rpm(Redhat Package Manager)

  • 패키지 확장명: .rpm
  • 프로그램 패키지 파일 형식: 패키지명-버전(주버전.부버전.패치번호)-릴리즈번호.페도라버전.아키텍처
    (EX: sendmail-8.12.3.-5.fc11.i586.rpm)
  • 커널 패키지 파일 형식: 패키지명-버전(주버전.부버전.패치번호)-릴리즈번호.CentOS버전.아키텍처
    (EX: kernel-3.5.0-327.el7.x76_x64.rpm)
  • 패키지 관리 명령: rpm <옵션> 패키지명

 

yum(Yellowdog Updater Mofiied)

  • 레포지토리에 접속하여 패키지 관리. 즉, 인터넷 기반으로 설치하므로 네트워크 필요
  • RPM 의존성 문제를 해결하기 위한 유틸리티
  • 페도라 22 이후 yum 문제점을 보완한 dnf로 전환되고 있음
  • 패키지 관리 명령: yum <옵션> [패키지명]

 

dpkd

  • 데비안의 low level 패키지 관리 도구
  • 패키지 설치 및 제거 시 rpm과 같은 의존성 문제 발생할 수 있음
  • deb 패키지 형식: 패키지이름_버전-릴리즈버전-리버전_아키텍처.deb
  • dpkg <옵션> [패키지명.deb]

 

apt-get(Advanced Package tool Get)

  • 데비안 계열 리눅스의 패키지 관리 도구
  • dpkg의 의존성 문제를 해결(/etc/apt/source.list 파일 참조)
    • 패키지 유형(바이너리, 소스), 저장소 주소(URL), 우분투 버전 정보, 카테고리로 구성

 

aptitude

  • 우분투의 패키지 관리 유틸리티
  • API처럼 패키지 관리를 자동화함
  • aptitude 서브명령

 


소스 파일을 이용한 설치

파일 아카이브

  • 아카이브는 다수 개의 파일이나 디렉터리를 하나의 파일로 묶는 것
  • 백업, 배포에 활용
  • 대표적인 파일 압축은 compress, gzip, bzip2, xz가 존재
  • 압축률이 가장 낮은 것은 compress, 높은 것이 xz

 

tar

  • tar <옵션> [파일명]

 

소스 코드 설치

  • 소스 코드를 압축 해제 후 컴파일 순서에 따라 프로그램을 설치함
  • “./”에서 알 수 있듯, 현재 폴더에서 실행하는 것
  • configure 결과로 makefile(컴파일 시 참고 정보)이 생성됨
  • cmake(Cross Platform Make): OS별 makefile 생성. 의존 관계 분석, 다양한 개발 환경 지원, 타임스탬프(변화 확인)

 


References

리눅스 Shell의 개요

개념

  • 명령어 해석기(commend interpreter) 역할(사용자 명령어 ↔ 커널)
  • 로그인할 때 실행되어 사용자 별로 다른 사용 환경을 설정함
  • 강력한 스크립트 언어
  • 리다이렉션, 파이프, 쉘 스크립트, 포그라운드/백그라운드 프로세스 실행

 

분류

대부분은 본쉘 계열의 기능을 포함하여 확대 발전한 형태

  • 본쉘(Bourne shell) 계열
    • ‘$’ 프롬프트
    • bash shell(리눅스 표준)
    • z shell(확장 기능 제공)
  • C쉘 계열
    • ‘%’ 프롬프트
    • 본쉘의 모든 기능과 명령어 히스토리, 별명, 작업 제어 기능을 추가로 가짐

 

로그인 쉘 확인

  • /etc/shells: 사용 가능한 쉘 목록
  • /etc/passwd의 마지막 필드: 계정마다 할당된 쉘
  • echo $SHELL: 현재 로그인한 사용자가 사용하고 있는 쉘

 


환경 변수

환경 변수와 쉘 변수

 

  • 주요 환경 변수
  • PATH(사용자가 입력한 명령어를 찾아 실행하기 위해 방문하기 위한 경로 정보), HOME, HOSTNAME, USER, PS1, SHELL, TMOUT, MAIL
  • 환경 변수 설정과 해제
    • 설정: export [변수명]=[값]
    • 해제: unset [변수명]

 

환경 설정 파일

  • 쉘 시작 시 자동으로 실행되는 고유의 파일이 있음
  • 이 파일은 사용자 운영 환경을 설정함
  • 공통 설정: /etc/profile, /etc/bashrc
  • 사용자 설정
    • ~/.bash_profile: 로그인 시 실행됨
    • .~/.bash_history: 명령어를 기록하여 재사용 가능하도록 지원
    • ~/.bashrc: alias와 자동 실행을 지정
    • ~/.bash_logout: 로그아웃 직전에 실행됨
  • /etc/profile.d: 특정 응용 프로그램 시작 시 자동 실행할 스크립트 경로 저장

 


bash shell의 주요 기능

history 기능

  • 일정 개수(기본 천개) 이상 사용했던 명령어를 저장했다가 다시 불러 사용
  • .bash_history에 저장된 명령어를 재사용
  • 해당 파일은 개별 사용자들의 홈 디렉터리에 위치

 

alias 기능

  • 자주 사용하는 명령어를 별칭으로 지정하여 간편하게 사용

 


프로세스

개념

  • 프로세스: CPU와 메모리를 할당받아 프로그램이 실행된 상태. 즉, CPU/메모리 등 자원을 할당받아 실행된 상태
  • 프로세스마다 고유의 PID를 가짐
  • 최초 실행 프로세스는 원래 init으로, PID 1을 가짐. 단 CentOS 7부터는 systemd가 최초 실행되면서 1이 됨

 

프로세스 관련 용어

데몬의 종류
1. Stand Alone(ex: httpd)
  - 독립적으로 운영되는 데몬
  - 사용자 요청 시 즉시 응답 가능
2. inetd 데몬(ex: telnet, FTP)
  - 슈퍼 데몬이라고도 부름
  - 하위에 종속된 모든 데몬이 함께 실행됨
  - 사용자 요청 시 해당되는 서비스를 구동하여 응답하여 속도는 느리나 메모리 효율성
  • fork: 기본 프로세스를 복제하여 실행 → 부모/자식 관계
  • exec: 새로운 프로세스로 변경되어 실행 → 하나의 프로세스만 남게 됨
  • 데몬: 부팅 시 자동으로 실행되는 백그라운드 프로세스
    • 메모리에 상주하며 사용자의 특정 요청을 즉시 처리하는 대기 서버 프로세스
    • CentOS7부터는 systemd에 의해 관리되며 일부 바뀐 부분 존재
  • 시그널: 프로세스에게 전달할 수 있는 이벤트(신호)
    • kill -l로 가능한 시그널 목록 확인

 


프로세스 관련 명령어

ps(process status)

좀비 프로세스
좀비 프로세스는 KILL 시그널을 받아도 종료되지 않음. 이 프로세스는 이미 현재 프로세스에 대한 모든 정보가 메모리에서 사라졌지만 부모 프로세스가 정상적인 종료 처리를 하지 못해 발생함

 

  • 실행 중인 프로세스의 목록/상태 정보를 표시
  • CPU 사용도가 낮은 순으로 출력됨
  • 옵션 없이 요청할 경우 현재 터미널에서 실행되고 있는 프로세스 관련 정보만 표시
  • ps <옵션>

 

pstree

  • 실행 중인 프로세스의 목록을 트리 형식으로 표시
  • pstree <옵션>

 

jobs

  • 작업 프로세스의 동작 상태 표시(중지, 진행 중, 변경되었지만 보고되지 않음)
  • jobs <옵션> [작업번호]

 

bg/fg

  • 백그라운드 ↔ 포그라운드로 작업 전환
  • bg <작업번호> | fg <작업번호>
# ping 8.8.8.8 > NULL &
- '>' NULL을 통해 화면에 출력하지 않도록 함
- '&'를 통해 리눅스 명령어를 백그라운드 실행

 

kill

  • 프로세스 종료
  • kill <옵션> [시그널 번호 | PID | %작업번호]

 

killall

  • 동일한 데몬의 여러 프로세스를 한번에 종료
  • 프로세스명으로 연관된 모든 프로세스를 종료함
  • killall <옵션> [프로세스명]

 

nice

프로세스 우선 순위
프로세스의 우선 순위가 높다는 것은 다른 프로세스보다 시스템 자원이 더 많이 할당되는 것을 의미함. 즉 실행 속도가 빨라지게 됨
  • 프로세스의 우선 순위를 확인하고 변경
  • NI값을 조정(-20 ~19 범위)
  • 값이 작을수록 우선 순위가 높음
  • 일반 사용자는 NI값 증가만 가능
  • nice <옵션> [프로세스명]

 

renice

NICE vs RENICE
-  nice: 우선순위를 변경하며 프로그램을 재시작(옵션값의 숫자를 더함)
- renice: 현재 실행 중인 프로그램의 우선순위를 변경(설정한 값 자체로 변경됨)
  • 실행 중인 프로세스의 우선순위 변경
  • renice <옵션> <NI값> [PID]

 

top

  • 시스템 운영 상태 혹은 프로세스 상태 확인
  • top <옵션> [PID]
  • -d: 실시간 화면 출력 시간 지정(기본 5초)
    -p: PID 지정

 

nohup

  • 프로세스 중단 없이 백그라운드로 작업 실행
  • 로그아웃 되어도 계속 실행됨
  • 백그라운드로 실행될 수 있도록 명령어 뒤에 ‘&’를 명시
  • 표준 출력 내용을 nohup.out에 기록

 

cron

  • 주기적으로 반복되는 일을 자동으로 실행할 수 있도록 설정
  • crond: 스케쥴링 데몬
  • /etc/crontab: 설정 파일
  • crontab <옵션> [파일명]

 

 


References

리눅스의 파일 권한

일반 파일 권한

  • 모든 파일과 디렉터리는 접근 권한과 소유권이 부여됨
  • 사용자별 권한은 기호 모드(symbloic)와 8진수 숫자 모드(numeric)로 표시
  • ls -al 결과 표시 내용: 파일 유형 + 접근 권한, 물리적 파일 연결개수(하드링크), 소유자, 소유 그룹, 크기, 마지막 변경 날짜+시간, 파일명
  • 디렉토리의 x 권한: 해당 디렉터리 안에서 작업이 가능하다는 의미

 

리눅스 파일의 특수 권한

  • 프로세스가 실행되는 동안 해당 프로세스의 root 권한을 임시로 가져오는 기능
  • 프로세스가 사용자보다 높은 수준의 접근을 요구할 때 접근 제한 때문에 원활한 기능을 제공할 수 없기 때문에 이를 해결하기 위함
  • SetUID: 사용자가 소유할 때만 소유자 권한으로 파일을 실행 시킴
  • SetGID: 소유자 그룹 권한으로 실행
  • s(실행파일), S(일반 파일)
  • 예시: 일반 계정의 비밀번호를 변경할 경우, root 권한으로 /etc/passwd 파일 접근

 

Sticky Bit

  • 주로 공용 디렉터리를 사용할 때 사용
  • 폴더에 대하여 소유자 혹은 root만 파일을 수정하거나 삭제 가능
chmod +t tmp
ls -al
> drwxrwxr-t root root 4096 tmp

 

디스크 쿼터(Disk Quota)

  • 파일 시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것
  • 주로 block 단위의 용량 제한과 inode의 개수를 제한함
  • 쿼터는 사용자별, 파일 시스템별로 동작함
  • 디스크 쿼터 설정 파일 및 관련 명령어
    • quotaoff: 쿼터 서비스 비활성화
    • qoutaon: 활성화
    • quotacheck: 파일시스템의 디스크 사용 상태 점검
    • edquota: 편집기를 이용한 사용자/그룹 쿼터 설정
    • setquota: 명령어를 이용한 사용자/그룹 쿼터 설정

 


권한 및 그룹 설정 명령어

chown

  • 사용자(그룹) 소유권 변경
  • -R 옵션: 하위 디렉터리도 동일하게 변경(소유권의 상속)
chown root:root test.txt
chown root  test.txt  # 소유자
chown :root test.txt  # 소유 그룹

 

chgrp

  • 소유 그룹 변경
  • chgrp <옵션> [그룹명] [파일명]
  • -R: 하위 디렉터리 포함

 

chmod

  • 접근 권한 변경
  • chmod <옵션> [권한] [파일명]
  • -R: 하위 디렉터리 포함
chmod +x file  # 모든 유저에게 실행 권한 추가
chmod -x file
chmod u+x file  # 소유자에게 실행 권한 추가
chmod g=rx file  # 그룹에 read, write권한 추가
chmod o-x file  # 기타 다른 사람들은 실행할 수 없도록 설정
chmod a+r file
chmod 766 file  # rwx를 이진수로 계산한 것

 

unmask

  • 파일/디렉터리 생성 시 기본으로 적용할 접근 권한을 지정
  • 파일은 (666 - umask값), 디렉터리는 (777 - umask) 값으로 설정됨
  • umask <옵션>[설정값]
  • -S: 문자로 표시
umask  # 기존값 조회
umask 002  # umask값 설정

 


파일 시스템의 관리

파일 시스템의 개요

  • 파일 시스템이란? 스토리지 장치(디스크) 상에 파일을 관리할 수 있도록 만들어 놓은 구조 혹은 관리 방식
  • 최근에는 서버 파일과 가상 파일까지 접근할 수 있도록 개념이 확대됨

  • 슈퍼 블록: 파일 시스템 관련 정보(블록 크기 및 개수, inode 개수)
  • Group Descriptor: 각 블록 그룹을 관리하는 정보를 저장
  • Block Bitmap: 블록의 사용 상태를 나타냄
  • inode: 파일 이름을 제외한 정보(고유 번호, 파일 형태, 크기, 위치, 소유자 등)
    • inode bitmap: inode의 상태 정보
    • inode table: 각 inode에 대한 정보를 나타내는 descriptor로 구성

 

파일 시스템의 종류

저널링이란?
- 로그와 유사한 개념
- 특정 정보 관리를 통해 파일 시스템에 문제가 생길 경우 복구 진행

1. 저널링 파일 시스템

2. 네트워크 파일 시스템

 

3. 지원 가능한 기타 파일 시스템

 


파일 시스템 관련 명령어

/etc/fstab 파일
- 파일 시스템 정보 저장 및 관리하는 설정 파일
- 부팅 시 마운트 정보 포함

mount

  • 스토리지 장치를 연결하여 디렉토리처럼 사용
  • 설정 파일: /etc/fstab(부팅 시 참조하여 마운트), /etc/mtab(마운트된 블록 시스템 정보)
  • mount <옵션> [장치명] [디렉터리명]

 

unmount

  • 마운트 해제
  • unmount <옵션> [장치명] [디렉터리명]

 

eject

  • 미디어 장치를 해제하고 장치를 제거
  • eject <옵션> [디바이스명]

 

fdisk

  • 새로운 파티션의 생성, 기존 파티션의 삭제, 파티션의 타입 결정
  • 한 번에 한 디스크에 대해서만 작업을 수행
  • fdisk <옵션> [디바이스명]
  • fdisk를 실행하기 위해서는 어떤 디스크의 파티션을 나눌 것인지 지정 필요

 

mkfs

  • 파일 시스템 생성
  • 파티션 생성 뒤 원하는 파일 시스템 구축 필요
  • mkfs <옵션> [디바이스명]

 

mkfs2

  • ext2, 3, 4 리눅스 파일 시스템 생성
  • mkfs2 <옵션> [디바이스명]

 

 

fsck

  • 파일 시스템 점검 및 복구
  • /lost+found 디렉터리에 손상된 파일 관리 → 정상 복구된 후 삭제됨
  • fsck <옵션> [디바이스명]

 

 

e2fsck

  • ext2, 3, 4 리눅스 파일 시스템 점검 및 복구
  • e2fsck <옵션> [디바이스명]

 

du(disk use)

  • 디렉터리 별 디스크 사용량 확인
  • du <옵션> [디바이스명]

 

df

  • 시스템에 마운트된 하드 디스크의 남은 용량을 확인
  • 파티션 단위로 사용량 확인
  • 기본 1024bte 블록 단위로 출력
  • df <옵션> [디바이스명]

 


References

네트워크 관련 명령어

ping

  • 외부 호스트와 IP 통신이 가능한지 확인
  • ping <옵션> [P 주소/도메인명]

 

traceroute

  • 목적지 호스트까지의 경로 표시
  • 목적지까지의 패킷 전송 지역을 측정하거나 경로 상에 어떤 장애가 있는 경우 위치를 파악
  • traceroute [IP주소/도메인명]

 

nslookup

  • 도메인명으로 IP주소를 조회하거나 IP 주소로 도메인명을 조회
  • nslookup <옵션> [도메인명]
  • 옵션: -type=레코드 타입

 

dig(domain information groper)

  • 호스트명에 대한 IP 주소 정보 또는 IP 주소에 대한 호스트명을 조회
  • 서버명은 확인하고자 할 네임 서버를 지정하는 것
  • 지정하지 않을 경우 /etc/resolv에 등록된 네임서버를 이용하여 루트 서버를 조회함
  • dig [서버명] [도메인명] [타입]

 

host

  • 호스트명과 IP 주소 중 하나를 모를 때 사용
  • 호스트명을 이용하면 IP주소 뿐 아니라 하위 호스트명도 조회 가능
  • 호스트는 시스템에 등록된 DNS 서버를 이용하여 검색함. 별도 DNS 서버 지정도 가능
  • host <옵션> [도메인명/IP주소] <DNS서버>

 

hostname

  • 시스템(호스트) 이름 확인 및 변경
  • 해당 명령어로 설정한 경우에는 리부트 시 사라짐
  • 영구적으로 유지하기 위해서는 /etc/sysconfig/network에 HOSTNAME 설정
  • hostname <옵션> [파일명]

 


시스템 종료 명령어

shutdown

  • 시스템을 종료 혹은 재부팅
  • sync를 수행하여 저장되지 않은 데이터를 디스크에 저장하고 모든 파일 시스템을 mount한 후 종료
  • root 계정만이 사용 가능
  • shutdown <옵션> [시간] <메세지>

shutdown -h now  # 즉시 종료
shutdown -r 10:00  # 10시에 재부팅

 

init

  • shutdown과 동일한 기능
  • 런레벨을 이용한 shutdown 수행(런레벨: 0~6)
  • init [런레벨]

 

reboot

  • 시스템 재부팅
  • reboot <옵션>
  • -f: 강제 재부팅

 

halt

  • 시스템 종료
  • half <옵션>
  • -f: 강제 종료

 


기타 유틸리티 명령어

cal(calender)

  • 시스템에 설정된 달력을 출력
  • 옵션 없이 실행하면 현재 날짜로 기록된 달을 출력
  • cal <옵션> [날짜]
  • -i: 1월 1일 이후 날짜 수
    -y: 올해 달력 표시

 

date

  • 시스템 날짜 표시 혹은 변경
  • date <옵션> [날짜]

 

clear

  • 터미널의 내용을 지움

 

tty

  • 현재 사용하고 있는 단말기 장치의 경로명과 파일명을 표시
  • 보통 텔넷 등에서 동일한 계정으로 여러 개 로그인한 경우 확인 시 유용함
$ tty
> /dev/pts/0

 

time

  • 특정 프로그램 수행에 소요된 시간을 측정하여 출력
  • 쉘 스크립트 간단 성능 체크에 유용함

 

wall

  • 로그인한 모든 사용자에게 메세지 전송
  • wall [메세지]

 

write

  • 특정 사용자에게 메세지 전송
  • write [계정명] <터미널 이름> ⇒ 메세지 입력 후 Ctrl+D

 

mesg

  • write로 들어오는 메세지 수신 여부 확인 및 제어
  • mesg [y|n]

 


References

디렉터리 관련 명령어

pwd

  • 현재 작업 디렉터리명 표시

cd(change directory)

  • 디렉토리를 이동할 때 사용

mkdir(make directory)

  • 새로운 디렉터리를 생성
  • mkdir <-옵션> [디렉터리명]

rmdir(remove directory)

  • 디렉터리 삭제
  • 내부에 파일이 존재하는 경우 삭제 불가능
  • rmdir [디렉터리명]

 


파일 관리 관련 명령어

ls

  • 특정 디렉터리의 파일 목록 조회
  • ls <-옵션> [경로명]

 

cp

  • 파일 또는 디렉터리 복사
  • cp <-옵션> [원본파일/디렉터리] [대상파일/디렉터리]

 

rm

  • 파일 또는 디렉터리 삭제
  • rm <-옵션> [파일/디렉터리명]

 

mv

  • 파일 또는 디렉터리 이동하거나 파일명을 변경
  • mv <-옵션> [원본파일/디렉터리] [대상파일/디렉터리]

 

touch

  • 크기가 0바이트인 빈 파일을 생성 혹은 파일의 시간(time stamp) 변경
  • touch <-옵션> [파일명]

 

file

  • 파일의 종류 및 파일의 속성값을 표시

file <-옵션> [파일명]
$ file hi.txt
> hi.txt: ASCII text
$ file -i hi.txt
> hi.txt:text/plain;charset=us-ascii
$ file -b hi.txt
ASCII text

 

find

  • 지정된 조건에 따라 파일을 검색(지정한 경로 및 하위 경로를 대상으로 검색)
  • find [경로] <-옵션> <정규표현식> [파일명]

 

locate

  • 파일의 위치 검색
  • locate [파일명]

파일 출력 관련 명령어

cat

  • 파일의 내용을 출력
  • cat <-옵션> [파일명]

 

head

  • 파일의 앞 부분만 출력
  • head <-옵션> [파일명]
  • -c: 지정 숫자의 바이트만큼 출력
    -n: 지정 줄 수만큼 출력(기본 10줄)

 

tail

  • 파일의 마지막 부분만 출력
  • tail <-옵션> [파일명]

 

more

  • 화면 단위로 파일의 내용을 출력
  • 위에서 아래 방향으로만 출력되기 때문에 지나간 내용을 다시 볼 수는 없음
  • more <-옵션> [파일명]
  • 옵션: -숫자 (페이지 당 표시할 줄 수)

 

less

  • 텍스트 파일을 한 화면씩 표시
  • more와 다르게 커서를 이동할 수 있음

 

wc

  • 파일의 라인 수, 단어 수, 알파벳 수 표시
  • wc <-옵션> [파일명]

 

grep

  • 특정 문자열 패턴, 정규식을 이용하여 단어를 검색
  • grep <-옵션> [문자열] [파일명]

grep '"[AB]' sample.txt  # A 혹은 B로 시작하는 모든 라인
grep 'fine$' sample.txt  # fine으로 끝나는 모든 라인

 

 

sort

  • 명령어 결과나 문서 내용을 정렬
  • sort <-옵션> [파일명]

 

cut

  • 파일에서 구분자를 이용하여 특정 필드를 추출

cut <-옵션> [파일명]
$ cut -c 1-5 /etc/httpd/conf/httpd.conf | grep '^[a-z|A-Z]'  # 1~5 범위만 출력
> Serve
> Liste
> Inclu
> User
> Group

 

split

  • 하나의 파일을 여러 개의 파일로 분리하여 저장
  • split <-옵션> [파일명]
  • -b: 바이트 단위로 분할
    -l: 라인 단위로 분할

파일 비교 명령어

diff

  • 두 개의 파일을 행 단위로 비교하여 다른 부분을 출력
  • diff <-옵션> [파일/디렉터리명1] [파일/디렉터리명2]

 

cmp

  • 두 개의 파일을 바이트(문자) 단위로 비교하여 출력
  • cmp <-옵션> [파일명1] [파일명2]

 

comm

  • 두 개의 파일을 라인 단위로 비교하여 출력
  • comm <-옵션> [파일명1] [파일명2]


리다이렉션과 정규 표현식

리다이렉션(redirection)

  • 표준 입력 장치(키보드), 표준 출력 장치(모니터), 표준 에러 장치(모니터)
  • 이러한 표준 입력과 표준 출력의 방향을 재지정하는 것
  • ls -al > out.txt

 

파이프(pipe)

  • 둘 이상의 명령을 함께 묶어 현재 명령의 표준 출력을 다음 명령의 표준 입력으로 사용하는 것
  • 명령어와 명령어의 연결은 ‘|’ 기호를 사용
  • 더 이상 처리할 명령어가 없으면 결과를 화면으로 출력

 

정규 표현식

  • 특정한 규칙을 갖는 문자열의 집합을 표현

 


References

사용자 관련 정리

사용자 설정 관련 환경 구성 파일

  • /etc/default/useradd
    • 사용자 추가 시 기본 설정 정보로 활용
    • vi 편집기나 -D 옵션으로 변경 가능
    $ cat /etc/default/useradd
    > GROUP=100
    > HOME=/home
    INACTIVE=-1
    SHELL=/bin/bash
    SKEL=/etc/skel  # 사용자 홈 디렉터리로 복사될 초기 환경 설정 파일이 저장된 디렉터리
    
  • /etc/passwd
    • 사용자 계정 정보를 담고 있으며 리눅스 로그인 시 사용됨
    • 비밀번호 뿐 아니라 여러 필드가 콜론(:)으로 구분됨
    • username:password:uid:gid:comment:home-directory:shell
    • 패스워드 필드는 “x”로 표시되며 pwconv ↔pwunconv로 설정 가능
  • /etc/shadow
    • 패스워드 정보가 암호화되어 저장
    • username:password:lastchange:mindays:maxdays:warndays:inactive:expire:flag
    • mindays: 비밀번호 변경 후 재설정 가능한 최소 기간
    • inactive: 비밀번호 만료 후 계정 사용 불가능까지 유예 기간
  • etc/login.defs
    • 사용자 계정 설정 시 기본값
    • 새로운 계정을 생성할 때 반드시 참조하는 파일임

 

useradd, adduser

  • 사용자 계정과 관련 정보를 생성
  • 기본 홈 디렉터리: /home/계정명
  • 계정 정보 파일: /etc/passwd, /etc/shadow, /etc/group
  • useradd <-옵션> [계정명]

 

passwd

  • 계정의 패스워드 입력 및 변경
  • /etc/shadow 파일에 패스워드 변경 및 저장
  • passwd <-옵션> [계정명]

 

su(switch user)

  • 로그아웃 없이 다른 사용자의 계정으로 로그인하여 해당 사용자의 권한을 획득
  • su <옵션> [계정명] <쉘변수>

 

usermod

  • 사용자 홈 디렉터리, 그룹, 유효 기간, 쉘 정보를 변경
  • usermod <-옵션> [계정명]

 

userdel

  • 사용자 계정 정보 삭제
  • /etc/passwd, shadow, group에서 사용자 정보 삭제
  • usermod <-옵션> [계정명]
  • -r: 사용자의 메일 파일과 홈 디렉터리 모두 삭제

 

chage

  • 패스워드 만료 정보를 변경
  • change <-옵션> [명령어]

 


그룹 관련 정리

그룹 설정 관련 환경 구성 파일

  • /etc/group
    • 사용자 그룹에 대해 정의
    • 모든 계정은 한 개 이상의 그룹에 포함되어 있음
    • 해당 파일을 이용하여 계정자의 그룹 정보를 직접 변경 가능
    • groupname:password:gid:users
    • users: 콤마(,)로 구분된 사용자 계정 나열
  • /etc/gshadow
    • 그룹의 패스워드를 MD5로 암호화하여 저장
    • 그룹의 소유주, 구성원 설정 가능
    • groupname:password:owner:users
    • password: !이면 암호가 없는 상태
    • users: 콤마(,)로 구분된 사용자 계정 나열

 

groupadd

  • 새로운 그룹 생성
  • group add <-옵션> [그룹명]
  • -g: GID 지정
    -r: 시스템 그룹 시 500번 이하의 값 중 가장 높은 범위를 할당

 

groupdel

  • 기존 그룹 삭제
  • 소속된 유저가 있을 경우 삭제 불가능
  • groupdel [그룹명]

 

groupmod

  • 그룹 설정 변경
  • groupmod <-옵션> [그룹명]
  • -g: GID 변경
    -n: 새로운 그룹명 설정

 


접속 정보 조회 정리

users

  • 시스템에 로그인한 사용자 정보를 출력
  • users <-옵션>

 

who

  • 현재 시스템에 접속해 있는 사용자들을 조회
  • 사용자 계정명, 터미널 정보, 접속 시간 등 확인 가능
  • 관리자 root와 일반 사용자 모두 사용 가능
  • who am i 혹은 whoami로 자신의 정보 조회 가능
  • who <-옵션>

 

w

  • 현재 접속 중인 사용자들의 정보를 나타냄
  • 현재 서버 시간, 부팅 후 작동 시간, 접속자 수, 접속자별 평균 부하율, 접속자별 계정명, TTY 이름, 로그인 시간 등
  • JDPU: TTY 장치명에서 사용되는 모든 프로세스의 CPU 사용 시간
  • PCPU: 해당 프로세스 결과값에서 WHAT 필드에 표시된 프로세스에서 사용하는 CPU 총 시간

 

id

  • uid, gid, group 정보 표시

id <-옵션> [계정명]
$ uid=0(root) gid=0(rooT) groups=0(root)

 

groups

  • 계정이 속한 그룹 목록을 확인
  • groups [계정명]

 


References

환경변수 PATH 개념

  • 명령어(프로그램)이 위치한 경로를 찾는 순서 지정
  • 해당 환경 변수에 지정된 디렉터리를 순서대로 탐색하여 명령어를 찾고 실행함
  • 각 경로는 콜론(:)으로 구분
echo $PATH
export PATH = [설정값:설정값:...]
$ export PATH = $PATH:/var/myfile

 

기본 명령어

which

  • PATH 환경변수의 경로에 따라 사용자가 실행할 명령어의 위치 혹은 alias를 표시
  • PATH에 검색 대상 명령어가 설정되어 있지 않은 경우 찾을 수 없음
which [명령어]
$ which bash
> /usr/bin/bash

 

alias/unalias

  • alias: 지주 사용하는 명령어를 특정 문자로 입력해두고 대신 사용
  • unalias: alias 기능을 해제함
alias [별명='명령어']
$ alias showa='ls -al'

unalis [옵션] [단축명령어]
$ unalias showall
$ unalias -a  # 모든 별칭 삭제

 

whereis

  • 대상 명령어의 절대 경로, 소스 파일, 설정 파일, 매뉴얼 등 정보를 찾아 출력

where is <-옵션> [명령어]
$ whereis find
> find: /usr/bin/find /usr/share/man/man1/find.gz

 

man

  • 리눅스에서 사용하는 명령어들의 메뉴얼을 제공

man [섹션] <-옵션> [명령어]
$ man find

 

info

  • 리눅스 명령어의 사용 방법, 옵션 등을 나타냄
  • man에 비해 제공되는 명령어가 한정적임
  • info [명령어]

 

whatis

  • 명령어의 기능을 간략하게 표시
  • whatis 데이터베이스에서 키워드가 완전히 일치하면 해당 명령어의 기능을 표시
  • whatis [명령어]

 

manpath

  • man 명령이 참조하는 메뉴얼의 경로 표시
  • manpath [명령어]

 

apropos

  • 명령어 메뉴얼에서 지정한 키워드를 포함된 것을 검색
  • whatis DB를 참조하여 해당 문자열을 포함한 것을 검색하여 표시
  • whatis DB가 만들어져 있어야 사용 가능한 명령어임
apropos [문자열]
$ apropos find
> ffs(3)   - find first bit set in a word
> ffsl(3)  - find ...
> tfind(3) - manage a binary tree

 


References

+ Recent posts