Host 컴퓨터 개발환경 이해 Lecture #3 (리눅스 관하여…)
목 차 리눅스 부팅 과정 리눅스 파일 시스템 쉘, vi, 기본 명령어 프로그램 컴파일하기 make와 Makefile 리눅스 커널 소스 트리
리눅스 운영체제 구조 User Space System Call Interface Kernel Space Buffer Cache Memory Manager Process Manager Filesystem Manager Device Manager Network Manager Ext2fs proc xiafs nfs msdos ntfs Console KBD SCSI CD-ROM PCI ethernet socket Ipv6 IrDA Bluetooth Paging/Segmentation Task Management Scheduler Signaling IPC Hardware Interface process 3 dev1 dev2 dev3 dev4 devn block character User Space Kernel Space process n process 2 process 1 (Source : Linux Kernel Internals)
리눅스 부팅 과정 (1) 시작 System Bios Boot manager Linux kernel Initd klogd * ROM에 위치해 있음 * 메모리 체크 및 하드웨어 초기화 * Boot Manager 실행 System Bios * 부팅매체의 0번 섹터(MBR)에 위치, * 운영체제 선택 * Linux kernel 압축을 풀고 메모리에 로딩 * 커널 실행(Boot Loader) Boot manager * vmlinuz라는 파일 이름을 가지고 있음 * pid 0인 swapper가 시스템 체크 및 초기화 (dmesg 명령 또는 /var/log/dmesg 파일) * pid 1인 init를 실행 시킴 Linux kernel Initd * 파일시스템 구조 검사 * 파일시스템 마운트 * 서버데몬 실행 * 사용자 로그인 및 쉘 실행 klogd xinetd xfs (pstree 명령어)
리눅스 부팅 과정 (2) 1) BIOS가 시스템 이상 여부 태스트 -> 부트로더에서 수행 2) 부팅할 드라이브 선택 -> 커널의 플래쉬 위치 선택 3) 선택된 드라이브의 MBR읽어 드림 ->수행 불필요 4) MBR의 파티션 테이블을 읽어 부팅할 파티션을 선택 -> 수행 불필요 5) 커널 로드 -> 커널을 램상으로 복사 6) 커널 압축 해제/ 재배치 7) 장착된 하드웨어 검사, 장치 드라이버 설정 8) 파일 시스템 검사 -> 램디스크, jffs이미지에 포함 9) 파일 시스템 마운트 10) /etc/inittab에서 init실행을 위한 설정 내용 확인 11) /sbin/init 실행(PID가 1이됨) 12) /etc/rc.d/rc.sysinit실행(hostname,시스템 점검, 모듈 로딩) 13) /etc/rc.d/rc실행 (runlevel에 따른 스크립트 실행) 14) /etc/rc.d/rc.local(매번 실행할 내용 입력) 15) /etc/rc.d/rc.serial (시리얼 포트 초기화) 16) login
Bootloader: LILO (1) bootloader: 부팅에 사용될 커널을 선택하고 실행한다. /etc/lilo.conf timeout=60 default=linux image=/boot/vmlinuz-2.4.18-50 label=linux read-only root=/dev/hda1 image=/boot/vmlinuz-2.4.19 label=linux_2_4 other=/dev/hda1 label=dos 60초 후에는 자동으로 label=linux인 리눅스 커널이미지를 실행한다. label=linux인 리눅스 커널이미지에 대한 정보 label=linux_2_4인 리눅스 커널이미 지에 대한 정보 label=dos인 커널이미지에 대한 정보 (리눅스 이외의 다른 운영체제)
Bootloader: LILO (2) 부팅시 다음과 같은 메세지가 나타난다. (label=linux인 커널을 선택하여 실행하는 예) LILO: [TAB] linux linux_2_4 dos LILO: linux [Enter] Booting Linux......
새로운 리눅스 커널 추가하기 기존의 커널소스를 바꾸거나 새로운 커널소스를 설치한 다음 컴파일하여 새로운 리눅스 커널이미지를 생성한다. (새로운 커널이미지가 /boot/vmlinuz-2.4.19에 있다고 가정한다.) /etc/lilo.conf에 다음을 추가한다. shell에서 lilo라는 명령을 입력하여 하드디스크의 부팅과 관련된 MBR(Master Boor Record)를 갱신한다. 재부팅하고 LILO: 프롬프트가 나오면 linux_2_4_19를 선택한다. image=/boot/vmlinuz-2.4.19 label=linux_2_4_19 read-only root=/dev/hda1
리눅스 전체 디렉토리 구조 /etc - 시스템 설정 파일 디렉토리 (ex: /etc/lilo.conf, /etc/fstab ..) /bin - 시스템의 기초 명령 (ex: gzip, su, tar, rpm, vi, mount..) /dev - 장치파일 (ex: /dev/hda, /dev/cdrom..) /lib - 시스템 공유 라이브러리 디렉토리 /home - 사용자 홈 디렉토리 (ex: /home/ssyoo, /home/pirami..) /root - 루트사용자의 홈 디렉토리 /proc - 시스템 정보 디렉토리 (ex: /proc/cpuinfo, proc/meminfo..) /sbin - 시스템 관리 명령 디렉토리 /tmp - 임시파일 생성 디렉토리 /var - 시스템 가동 중 가변 자료 저장 디렉토리 /usr - 애플리케이션이 설치되는 디렉토리, 커널소스는 보통 /usr/src 에 설치
…. …. 리눅스 파일 시스템 전체 구조 task 1 task 2 task n System call interface User mode System mode System call interface Virtual File System …. ext2 nfs coda dosfs ntfs procfs buffer cache File System device driver
리눅스 파일 시스템 정의 종류 파티션 안에 정보를 저장하고 관리하는 실질적 방법을 제공 즉, 파일을 저장하는 방식을 지칭 파티션 안에 정보를 저장하고 관리하는 실질적 방법을 제공 즉, 파일을 저장하는 방식을 지칭 종류 ext 시스템 : Extended File System 초기 minix의 제한을 극복하고자 개발 255자의 파일 이름과 2GB의 파티션 지원 ext2 : Second Extended File System 최대 64GB의 파티션 허용 FAT (File Allocation Table) : 클러스터 크기 고정 도스에서 사용, 2GB의 파티션 및 8자의 파일 이름 지원 FAT32 윈도우에서 사용 최대 2TB의 파티션을 지원
리눅스 파일 시스템 현재 리눅스에서 지원되는 파일 포맷 : 10여 종 임베디드 시스템을 위한 파일 시스템 EXT2 : 리눅스 전용, 임베디드 시스템에서도 일반적으로 지원 cramfs(Compressed ROM File System) 롬 기반의 임베디드 시스템에 사용되는 읽기 전용의 압축 파일 시스템 내용 변경이 불가능 XIP(Execute-in-Place) 롬이나 플래쉬롬에 있는 프로그램을 램에 적재하지 않고 그곳에서 바로 실행 램에 대한 메모리 요구량을 줄여 줌 많은 응용프로그램을 동시에 실행 가능 실행 파일 포맷 : ELF(Executable and Linking Format) 하나만을 지원하는 것이 일반적임 ELF : USL에서 개발한 바이너리 형식
리눅스 사용을 위한 준비 SHELL 이해 리눅스 명령어 이해 시스템 관리 명령어 네트웍 관리 명령어 파일 관리를 포함한 다양한 리눅스 명령어 에디터, 컴파일러 이해
Shell (1) Shell Command interpreter로서 user와 kernel을 연결 사용자가 명령어를 입력하면 shell은 특정한 작업을 수행하기 위하여 요구된 기계어의 집합(System Call)으로 명령어를 변환하여 실행 bourne shell(sh), C shell(csh), Bash, Ksh 등 리눅스의 기본 shell : Bash(Bourne Again Shell) 셸은 인식할 수 있는 "스크립트(Script)" 파일을 만들어서 리눅스의 일반적인 명령어뿐만 아니라 shell script 언어도 포함시킬 수 있음 Shell 스크립트는 "ed", "vi" 편집기를 사용하여 작성 가능
Shell (2) Shell 선택 Shell 호출 $ echo $SHELL 사용자 생성시 선택 명시( /etc/passwd 파일 안에 shell 정보) 환경 변수를 이용해서 자신의 login shell을 확인 $ echo $SHELL Shell 호출 자동 호출 login시에 /etc/passwd 파일의 정보 읽어서 지정된 shell을 시작 수동 호출 특정 shell로 변경하기 위해서는 단지 해당 shell 프로그램을 실행시키면 되고, 종료 시에 “exit"명령 입력 Bourne Again shell – bash C shell - csh
Shell (3) Bash 설정 방법 Bash와 관련된 파일들 - .bashrc, .bash_logout, .bash_profile .bashrc 자주 사용하는 명령어의 alias 설정 .bash_profile program이나 library에 대한 path 설정 # .bashrc # User specific aliases and functions alias ifc=‘ifconfig’ # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi export # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/local/arm-linux/bin: BASH_ENV=$HOME/.bashrc USERNAME="" export USERNAME BASH_ENV PATH ifconfig 에 대한 alias 설정 arm-linux 관련 명령어 path 설정 (/usr/local/arm-linux/bin)
Shell Script Programming 파일 확장자 바꾸기 shell script의 첫 줄에 사용 shell 명시 #!/bin/bash # rfe old_extension new_extension # 예제: # 현재 디렉토리의 모든 *.gif 파일을 *.jpg로 바꾸기 # rfe gif jpg if [ $# -ne 2 ] then echo "사용법: `basename $0` old_file_suffix new_file_suffix" exit 1 fi for filename in *.$1 # 첫 번째 인자로 끝나는 파일들을 찾아서 do mv $filename ${filename%$1}$2 # 파일 이름에서 첫 번째 인자 부분을 떼어내고 두 번째 인자를 붙인다. done
vi 편집기 ESC : 입력명령 실행완료 실행 모드 명령 입력 실행 방법: vi 명령어 뒤에 파일 이름 편집기 모드 입력모드 혹은 편집모드 – 글자를 입력할 수 있는 모드 모드변환방법 - 명령모드에서 a,A,i,o,O를 입력 했을 때 명령모드 혹은 ESC모드 – 커서이동 및 기타 명령어처리 모드변환방법 - 실행모드 혹은 입력모드에서 ESC키를 눌렀을 때 실행모드 혹은 콜론모드 – 내용바꾸기 및 기타 모드변환방법 - 명령모드에서 콜론(:)을 입력했을 때 ESC : 입력명령 실행완료 실행 모드 명령 입력
vi - 명령 모드 입력 모드 전환 커서 이동 a : 커서 위치의 다음 칸부터 입력하기(append) i : 커서 위치부터 입력하기 (키보드의 Insert도 같은 기능을 합니다.) I : 커서가 있는 줄의 맨 앞에서부터 입력하기 o : 커서 바로 아래에 줄을 만들고 입력하기(open line) O : 커서 바로 위에 줄을 만들고 입력하기 s : 커서가 있는 단어를 지우고 입력하기 S : 커서가 있는 행을 지우고 입력하기 h : 왼쪽, j : 위로, k : 아래로, l : 오른쪽 (방향키 사용 가능) - 글자단위 w : 다음단어로, b : 이전단어로 - word 단위 ^ : 맨 왼쪽의 첫 글자, $ : 마지막글자의 끝 - 행 단위 ^F: 한화면 아래로, ^B:한 화면 위로, ^D: 반 화면 아래로, ^U: 반화면 위로
vi - 명령 모드 삭제 기능 복사 및 붙여넣기 x : 커서 위치의 글자 삭제 X : 커서 바로 앞의 글자 삭제 dw : 한 단어를 삭제 D : d$ 커서 위치부터 줄의 끝까지 삭제 dd : 커서가 있는 줄을 삭제 yw : 커서 위치부터 단어의 끝까지 복사하기 y0 : 커서 위치부터 줄의 처음까지 복사하기 y$ : 커서 위치부터 줄의 끝까지 복사하기 yy : 커서가 있는 줄을 복사하기 yj : 커서가 있는 줄과 그 다음 줄을 복사하기 yk : 커서가 있는 줄과 그 앞줄을 복사하기 p : 커서의 다음 위치에 붙여 넣기 P : 커서가 있는 위치에 붙여 넣기
vi - 명령 모드 기타 u : 작업 취소하기 (undo) U : 그 줄에 행해진 작업 모두 취소하기 . : 조금 전에 했던 명령을 반복하기 ~ : 대소문자 전환 /검색어 : 아래 방향으로 찾기 (검색) ?검색어 : 위쪽 방향으로 찾기 n : 다음 찾기
vi - 실행 모드 치환관련 실행 파일 관련 실행 :s/old/new/g - old를 new 로 치환 :s/aaa//g - aaa를 삭제 :w 파일명 “파일명”으로 저장 :q 저장하지 않고 종료 :q! 변경 사항을 버리고 종료 :e 파일명 “파일명”의 파일을 불러들여 편집 :r 파일명 “파일명”의 파일을 읽어서 삽입 :!명령어 외부명령어 실행
리눅스 기본 명령어 간단한 리눅스 명령어들 네트웍 관리 명령어들 ls, more, cat, grep, who, pwd ps(process status), su(super user), chown(change ownership), chmod(change mode) useradd, userdel, passwd 시스템 관리 명령어들 mount - 디바이스 파일 시스템을 리눅스 메인 파일 시스템에 설치 unmount - 디바이스 파일 시스템 해제 e2fsck - 시스템 파일 검사 mke2fs - 새로운 시스템 파일 만들기 mknod - FIFO 파이프나 캐릭터나 블록 모드 디바이스 파일 생성 네트웍 관리 명령어들 ping - 도착지로 요청을 보내고 회신을 받는 일(네트웍 연결 상태 확인) ifconfig - 네트웍 인터페이스 구성정보 netstat - 모든 내트워크 연결상태에 대한 요약정보
홈(Home) 디렉토리 시스템 관리자가 사용자를 등록할 때 기본적인 전용 공간을 주는데 이를 홈(Home) 디렉토리 라고 함 기본적으로 “home/ID", "/usr/ID" 형식으로 생성 사용자는 자기의 전용공간에서 새로운 파일을 생성하고, 지우고, 디렉토리를 만들고 데이터를 저장할 수 있음 사용자가 로그인 할 때마다 리눅스 시스템은 사용자의 홈 디렉토리 식별하는 $HOME이라는 변수를 지정 현재 자신의 홈 디렉토리를 확인하기 위해서는 환경변수 "$HOME"을 참고 사용자의 작업환경을 결정하는 특별한 파일들은 사용자의 홈 디렉토리에 위치 ( ".bash_profile" , ".bash_logout", ".bashrc" )
절대경로와 상대경로 경로이름 절대 경로 상대경로 출발 디렉토리에서 목적지 파일이나 디렉토리까지 계층구조 상에 나타나는 디렉토리 이름의 순서 절대 경로 루트(root) 디렉토리인 "/"로 시작하여 해당 파일이나 디렉토리까지의 모든 경로를 표시하는 방법 상대경로 현재 디레토리를 기준으로 상대적인 경로이름을 이용하여 파일이나 디렉토리를 표시하는 방법 # vi /user/ssyoo/test.c # vi ./ssyoo/test.c
디렉토리 관련 명령어 디렉토리 만들기 디렉토리 제거 현재 디렉토리 위치 변경 디렉토리/파일 이름 변경과 옮기기 mkdir [OPTION] DIRECTORY... 이름은 대문자와 소문자, 숫자, 그리고 쉘에서 사용되는 특별문자를 제외한 모든 문자를 사용하여 작성 디렉토리 제거 rmdir [OPTION]... DIRECTORY... 현재 디렉토리 위치 변경 cd [ directory ] cd .. (한 단계 앞 디렉토리로 이동) 디렉토리/파일 이름 변경과 옮기기 mv [OPTION]... SOURCE DEST
파일 관리 형태 파일 시스템의 기본적인 기능은 디스크나 테이프의 저장 공간을 파일과 디렉토리 개념으로 구성하여 관리 보통 장기간 저장을 위해서 파일을 사용하고 단기간 저장이나 빠른 결과를 얻기 위해서는 RAM를 사용 종 류 의 미 정규파일 (Regular file) 일반적으로 텍스트 파일이나 이진파일을 나타냄 디렉토리 파일 (Directory file) 특별한 형식으로 디스크에 저장되며 디렉토리 명시적 시스템 호출을 통해서만 참조 특수파일 (Special file) 프린터, CD-ROM, 디스크와 같은 주변장치, 프로세스간 상호통신
파일 관련 명령어 파일 삭제 파일 복사 파일 내용 보기 rm [OPTION]... FILE... cp [OPTION]... SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY -r 옵션의 경우 해당 디렉토리의 서브 파일까지 복사 파일 내용 보기 cat [OPTION] [FILE]... more [OPTION] [FILE]... head [OPTION]... [FILE]... tail [OPTION]... [FILE]...
파일 비교 diff : 파일간의 모든 차이점과 비슷한 점을 보여줌 diff [ -i -Dflag ] fileName1 fileName2 -i ; 대소문자의 구분을 무시한다(ignore) -Dflag ; C preprocessor를 위한 출력을 생성
파일 탐색 find pathList expression 파일 탐색 find pathList expression pathList 파일을 탐색할 경로의 리스트 (recursive search) expression find . -name "*.txt" -print -name pattern 파일 이름이 pattern과 일치하면 참(*, [, ], ? 포함 가능) -perm oct permission의 8진수 표현이 oct와 일치하면 참 -type ch 파일의 유형이 ch이면 참 (ch: b=block, c=char) -user userId 파일의 소유자가 userId이면 참 -group groupId 파일의 그룹이 groupId이면 참 -atime count 접근(access)한 날 수가 count 이내이면 참 -mtime count 수정(modify)한 날 수가 count 이내이면 참 -ctime count 수정되고 화일의 속성이 바뀐 날수가 count이내이면 참 -exec command 수행 중인 command의 종료값이 0이면 참. \;로 끝남 command의 argument가 {}이면, 현재 화일의 이름으로 치환 -print 현재 파일명을 프린트하고 참 값을 반환 -ls 현재 파일의 속성을 보여주고 참 값을 반환 -cpio device 현재의 파일을 cpio 형식(5120 byte records)으로 device에 쓰고 참 값 반환 !expression expression의 논리 부정 \( expr1 [-a] expr2 \) 두 expression의 and \( expr1 [-o] expr2 \) 두 expression의 or
파일 내용 탐색 파일 내용(문자열) 탐색 - grep 지정된 문자열이 발견되면 해당라인을 출력 “grep”옵션 정규식 사용하기 “^”, “$”, “.”와 같은 메타 문자 사용 파이프라인 이용 "-v"(invert)는 지정한 문자열과 일치하는 라인을 제외한 모든 라인을 출력 "-n"(number)는 문자열이나 패턴과 일치하는 라인들의 번호를 표시 "-c"(count) 옵션은 검색 문자열과 일치하는 라인을 화면에 표시되지 못하게 함 "-l"(listfile) 옵션은 특정한 패턴을 찾기 위해 여러 개의 파일을 검색할 때
파일 사용권한 변경 (1) 사용 권한 변경 - chmod 파일이나 디렉토리의 사용권한을 변경 chmod [OPTION]... MODE[,MODE]... FILE... 8진수를 사용하여 절대값을 주는 절대모드(Absolute mode)방법과 이미 가지고 있는 허용상태를 제거하거나 추가하는 방법으로 사용권한을 지정하는 기호모드 방법 Chmod 777 test.c Chmod +a test.c 사용권한을 표시하는 또 다른 방법으로 숫자 사용 가능 숫자는 3자리로 구성되며 각 자리는 소유자, 그룹, 다른 사람들을 뜻함 읽기 및 쓰기, 실행 권한 모두가 부여된 경우 7(4+2+1)로 표현 숫자값 권한 4 읽기 권한 (100) 2 쓰기 권한 (010) 1 실행 권한 (001) 0 사용권한이 부여되지 않음 (000)
파일 사용권한 변경 (2) 기호모드를 사용하는 방법 기호 의미 u(user) 소유자 g(group) 파일이 속한 그룹 기호 의미 u(user) 소유자 g(group) 파일이 속한 그룹 o(other) 파일의 소유자가 아닌 모든 사용자와 그룹 a(all) 모든 사용자 즉 소유자, 그룹,그리고 다른 사용자 + 권한추가 - 권한제거 = 명시된 특정한 권한만을 할당하고 나머지는 제거 r 읽기 권한 w 쓰기 권한 x 실행권한
파일 관련 명령어 파일 소유자 변경 - chown 파일 그룹명 변경 - chgrp 파일을 작성하면 리눅스 시스템은 그 사용자를 파일의 소유자로 자동으로 지정 "chown" 명령어를 사용하면 이 소유자를 변경할 수 있음 chown [OPTION]... OWNER[:[GROUP]] FILE... 파일 그룹명 변경 - chgrp 어떤 특정한 파일을 자신이 속하고 있는 그룹보다는, 다른 그룹에 해당하는 사용자가 파일을 읽고 쓰고 기록할 수 있도록 할 때 사용 chgrp [OPTION]... GROUP FILE...
파일 압축과 복원 gzip - 대표적인 압축 프로그램 (복원은 gunzip) gzip (option) (file or directory) bzip2 - “bzcat” 명령어로 현재 압축된 파일 내용을 봄 옵션: -d 압축을 푼다 -l 현재 압축된 파일의 내용을 보여준다 -r 현재 디렉토리부터 하위 디렉토리까지 전부를 압축한다. -t 압축 파일의 완전성을 검사한다. -v 압축 진행 상황을 보여준다. -9 최대한 압축한다. 옵션 -d 압축을 해제한다. -z 파일을 압축한다. -t 압축 파일의 완전성을 검사한다. -v 압축 진행 상황을 보여준다
파일 압축과 복원 compress 복원을 위해서는uncompress를 사용 압축이 완료되면 기존 파일이 없어지면서 확장자가 “.Z"으로 생성된다. 압축된 파일의 내용을 보기 위해서는 zcat 명령어를 사용 복원을 위해서는uncompress를 사용 단독으로는 별로 쓰이지 않고 tar 명령어와 함께 주로 사용
파일 묶기 (tar) (1) 여러 개의 파일에 대하여 허가권이나 소유권을 유지하면서 하나의 파일로 묶는 아카이브(archive) 유틸리티 여러 개의 파일을 묶은 다음 압축하는 것이 일반적인 백업 및 프로그램 배포 형태임 명령의 형식 : tar options archive-file target-files 옵션 및 의미 -c 새로운 아카이브 파일을 작성한다. -t 묶음파일의 내용을 보여준다. -x 묶음 파일을 해제한다. -r 묶음 파일에 새로운 파일을 추가한다. --delete 묶음 파일에서 특정 파일을 삭제한다. -u 묶음 파일보다 새로운 파일이면 update 한다. -v 묶음과정을 보여준다. -f 묵음 파일명을 지정한다. -z 묶음실행과 동시에 gzip으로 동시에 압축한다.
파일 묶기 (tar) (2) source 디렉토리 전체를 묶기 : tar cvf source.tar source 묶은 파일을 압축하기 : gzip source.tar 압축을 해제하기 : gunzip source.tar.gz 묶은 파일에 담긴 파일 이름 보기 : tar tvf source.tar 묶은 파일에서 내용 풀기 : tar xvf source.tar gzip과 함께 사용하기 tar cvf – files | gzip –9 > tarfile.tar.gz 묶을 결과를 표준 입출력을 사용하여 곧바로 압축할 수 있음 시간을 절약과 함께 중간 결과를 저장하기 위한 공간 불필요 gunzip –9c tarfile.tar.gz | tar xvf – 물론 압축을 해제한 후 곧바로 풀기 실행 tar(gtar) cvzf tarfile.tar.gz files…
소프트웨어 패키지(배포판) 바이너리 패키지 소스 패키지 일반적으로 공유 라이브러리 사용 보안에 문제가 생길 수 있음 패키지 시스템 활용하여 설치 쉬움: RPM 등 소스 패키지 개선을 위한 개발에 이용가능 자신의 환경에 적합한 컴파일 가능 (컴파일러, OS…) 컴파일 환경을 설정해야 하는 등 설치 어려움
RPM GPL : GNU General Public License RPM 이란? RPM 실행 RPM 기능 RedHat Package Manager 레드햇사에서 만들어낸 패키지 관리 툴의 의미 www.rpm.org에서 GPL하에서 자유롭게 공개, 개발 RPM 실행 설치 파일과 설치 정보를 같이 가지고 있슴 설치될 때 설치 정보를 시스템의 설치 데이타베이스에 갱신 의존성 추적으로 설치 요구조건 검증 및 제거시 사용 현황 파악 rpmfind.net에 거의 모든 rpm 파일이 존재함 RPM 기능 패키지 자동설치 및 제거 업그레이드 기능 패키지 검증 패키지 정보 검색 GPL : GNU General Public License
팩키지 이름 - 버전 - 릴리즈 - 아키텍처.rpm 팩키지 이름(Package name) 팩키지 이름을 나타내는 것으로 우리가 보통 말하는 실행 프로그램 명 버전(Version) 현재 팩키지의 버전을 나타냄. 릴리즈(Release) 이것은 현재 패키지가 몇 번째로 만들어 졌는가를 나타내는 것으로 보통 패치 버전을 나타냄. 숫자가 높을수록 최신 파일이고 그만큼 또 안정하다는 것을 나타내어 줌. 사용되는 시스템의 아키텍처(Architecture)를 말함. 즉 어느 플랫폼에서 작동하는 가를 나타내어 줌. 확장자 RPM으로 만들어진 팩키지라는 것을 나타내어 줌.
팩키지 설치/제거/업그레이드 RPM 팩키지를 설치할 때에는 -ivh 옵션을 같이 사용 RPM 설치 시에도 설치경과 막대그래프를 보기 위해서는 -h 옵션을 사용 RPM 팩키지를 제가할 때에는 -e 옵션을 사용 RPM 팩키지를 업그레이드하기 위해서는 -U옵션을 사용 일반적으로 -Uvh 옵션을 사용 맨 처음 설치 할 때도 -U 선택사항을 써서 설치할 수도 있는데 이때에는 구 버전의 팩키지가 있으면 제거한 후 설치하고, 구 버전의 패키지가 없을 때에는 일반적인 설치를 하게 됨 시스템에 설치된 패키지를 모두 알고 싶으면 -qa 옵션 사용 현재 시스템에 bootp 관련 패키지의 설치 유무를 알고 싶을 때 예) rpm -qa | grep bootp
팩키지 정보 검색 팩키지 정보 관련 옵션 rpm -qi gcc-2.95-4.3wow -a 현재 설치된 모든 팩키지를 보여준다. -f <파일> <파일>을 포함한 팩키지가 무엇인지 알아낸다. -F -f와 같지만 파일이름이 표준 입력으로 들어온다는 것만 다르다. -p <팩키지파일> 지정한 팩키지 파일에 대한 정보를 파악한다. -P -p와 같지만 입력만 표준 입력으로부터 받는다 -I 팩키지 이름, 팩키지에 대한 짤막한 설명, 패키징 버전, 크기, 패키징 날짜, 설치된 날짜, 패키징한 업체 등의 정보 -l 팩키지가 가지고 있는 파일의 목록 -s 설치된 팩키지에 있는 모든 파일의 상태 -d 팩키지에서 문서(man page, readme 등)로 된 파일의 목록 -c 설정 파일로 표시된 파일의 목록(sendmail.cf, passwd, inittab)
소프트웨어 인스톨 예제: Apache 웹서버 설치 RPM(RedHat Package Manage)를 사용하는 경우 소스코드를 컴파일하여 수동으로 설치하는 경우 보통 *.tar.gz라는 이름으로 배포된다. #>rpm –Uvh apache_1.3.19.rpm gzip xvf apache-1.3.19.tar.gz tar xvf apache-1.3.19.tar cd apache-1.3.19 make; make install gzip압축을 푼다. tar압축을 /apache-1.3.19 디렉토리에 푼다. 컴파일 및 설치
파일 시스템 mount 마운트(mount): 블록장치를 파일시스템 트리(tree)의 하부 디렉토리를 통해 접근하게 해 주는 명령 CD-ROM과 플로피 디스크 드라이브 마운트 마운트 해제 : /etc/fstab : 파일시스템 마운트 테이블 시스템 부팅과 함께 자동으로 마운트되어야 할 항목과 옵션 mount /dev/cdrom /mnt/cdrom mount /dev/fd0 /mnt/floppy 장치명 마운트할 위치 / mnt src home usr ... cdrom floppy umount /mnt/cdrom /dev/hda1 / ext2 defaults 1 1 /dev/hdb1 /b ext2 defaults 1 1 /dev/fd0 /mnt/floppy auto noauto,owner 0 0 ...
파일 시스템 관리 새로운 하드디스크 추가 새로운 파일시스템 만들기 파일시스템 수리 IDE 디스크의 경우/dev/hda ~ /dev/hdd 중의 하나의 장치명에 할당됨 (IDE 포트와 master/slave 설정에 따라서) 파티션을 나누는 명령 : 새로운 파일시스템 만들기 파일시스템 수리 proc 파일시스템: 시스템 정보를 제공. /proc을 통해 접근 가능 fdisk /dev/hdb mkfs –t ext2 /dev/hdb 파일시스템 type 파티션 fsck –t ext2 /dev/hdb
파일 시스템 복구와 검사 (fsck) 리눅스 파일 시스템은 매우 복잡함 파일 시스템은 데이터 블록, 사용하거나 사용하고 있지 않은 블록의 리스트, 디렉토리와 그 디렉토리 구조에 함께 붙어있는 inode 내의 모든 정보를 포함하고 있음 파일 시스템이 정상적인 종료나 특별한 경우에 손상을 입을 경우 위의 구성 요소들이 일치하지 않을 경우가 있음 fsck(for file system consistency check) 명령은 파일 시스템을 조사하여 손상된 파일을 출력해 주며 사용자에게 그것을 복구할 것인지를 질의 fsck 수행은 시스템마다 약간의 차이가 있지만 대부분 다음과 같은 5개 항목에 대하여 검사 Blocks and sizes, Pathname, Connectivity, Reference count, Free List
파일 링크 만들기(ln) (1) 매우 긴 파일이름이 있고, 사용자는 이 파일을 자주 참고하거나, 그 파일을 다른 디렉토리에 연결하여 그 디렉토리에서도 그 파일의 경로 이름을 모두 입력하지 않고 파일 이름만을 입력하여 파일을 사용할 필요가 있을 때 사용 최초에는 링크수가 1개이지만 , 연결관계를 생성하고 나면 같은 크기의 파일이 새로 생성되어 링크수가 증가 ln 일반형식 ln [OPTION]... TARGET [LINK_NAME] ln [OPTION]... TARGET... DIRECTORY ln [OPTION]... --target-directory=DIRECTORY TARGET... 주요옵션 -f : 자신이 액세스 할 수 없는 사용권한을 가졌을 때도 링크가 가능하게 함 -s: 하드 링크 대신에 심볼릭 링크 생성
파일 링크 만들기(ln) (2) 하드 링크 : 소프트 링크(심볼릭 링크) 동일한 파일 시스템 내에서의 링크 여러 개의 레이블 생성이 가능하나, 물리적 파일은 동일함 하드 링크가 추가될 때마다 링크 계수 항목이 증가 소프트 링크(심볼릭 링크) 다른 파일 시스템들 간의 링크 링크 계수 항목이 증가하는 대신에 permission에 l--- 식으로 기록됨 ls -F 로 참조할 때 파일 이름 뒤에 @가 표시됨 $ ln -f -s original newLink -f 슈퍼유저가 디렉토리에 하드 링크를 생성할 수 있게 함 -s 소프트 링크로서 파일 시스템을 확장 가능 $ ln -f -s { original }+ driectory 명시된 파일(original)들에 대한 링크를 directory에 생성 (예) $ ln hold.3 hold $ ln hold.* tmpdir $ ln -s /usr/include/stdio.h stdio.h $ ls -l stdio.h lrwxrwxrwx 1 mjkim 20 Jan 12 17:58 stdio.h -> /usr/include/stdio.h
디스크 사용관리(df, du) 리눅스에서는 사용 가능한 디스크 공간을 검사해 주는 유틸리티인 "df"을 제공 사용자들은 수시로 이 유틸리티를 실행시켜 디스크 용량을 확인해야 함 보통은 "cron"이라는 셸 스크립트를 실행시키는 것도 하나의 방법이 될 수 있음 용량이 "95%"가 넘어가면 해당 파일시스템을 검사해야 한다. 왜냐하면 메일이라든가, 임시파일 등이 계속 생기므로 어느 정도 여유공간이 항상 있어야 함 이외에도 "du" 명령어가 있는데 이는 현재의 디렉토리와 디렉토리 안의 파일들이 얼마나 많은 용량을 차지하고 있는지를 킬로바이트(Kbyte) 또는 512 byte 단위로 보여줌
시스템 로그 관리 시스템 디버깅 또는 시스템의 사용을 추적하는데 유용 시스템 로그는 콘솔(console) 화면 또는 /var/log/message를 통해 모니터 가능 xterm화면에서 tail –f /var/log/message 를 실행하면 시스템 로그를 모니터할 수 있다. 시스템 로그를 볼 수 없는 경우 syslogd 프로그램이 실행 안된 경우. /etc/rc.d/init.d/syslog start 명령을 통해 syslogd 프로그램을 실행시킨다.
관리자로 로그인하기 실습에서 다루는 대부분의 명령은 관리자(super user; root) 권한을 필요로 한다. 관리자에서 로그아웃하기 # su Password: [root 패스워드] 디렉토리를 변경하지 않는다. USER, PATH등 주요변수를 변경하지 않는다. # su - Password: [root 패스워드] 디렉토리를 root의 홈디렉토리 (/root)로 변경하고 USER, PATH 등 주요변수도 변경한다. # exit
사용자 관리 사용자 추가 사용자 패스워드 지정(변경) 사용자 제거 useradd –d /home/ssyoo –s /bin/bash –c “SCM-EM helper.” ssyoo 홈 디렉토리 쉘의 종류 사용자명 사용자 ID passwd ssyoo userdel ssyoo
컴파일 하기
컴파일 과정 전처리(preprocessing) 컴파일(compile) 어셈블(assemble) 링크(linking) #define, #include, #if와 같은 전처리 지시자 해석 전처리 작업을 위한 cpp 프로그램을 호출 컴파일(compile) 고급 언어 소스 프로그램을 입력 받아서 어셈블리 파일을 만듬(.s) 일반적으로 어셈블리 파일은 저장하지 않고 바로 어셈블러를 호출함 여기서 컴파일은 좁은 의미의 컴파일이며 넓은 의미의 컴파일은 모든 과정을 포함함 어셈블(assemble) 어셈블리 파일을 입력 받아서 오브젝트 파일을 만듬(.o) 어셈블을 위한 gas 프로그램을 호출함 어셈블러는 플랫폼(CPU+OS)마다 다르며 해당 전용 어셈블러 호출 가능 링크(linking) 오브젝트 파일을 엮어서 실행 파일을 만듬(.o) 라이브러리 함수도 이 단계에서 사용함 링크를 위한 ld 프로그램을 호출
gcc 사용법 GNU C Compiler , GNU Compiler Collection 의미 FSF (Free Software Foundation)의 C, C++ 컴파일러 컴파일러, 어셈블러, 로더 역할을 함 한 개의 파일(hello.c) 를 컴파일 하기 $gcc –o hello hello.c -o 옵션 : 실행파일명을 지정하는 옵션 -S 옵션 : c언어 컴파일 과정 까지만 처리 -> 어셈블리 코드 출력 모든 컴파일 과정을 한번에 처리하기 $ gcc –o hello hello.c hello_world.c -o 옵션이 없으면 a.out이 실행 파일임 컴파일러 매크로 컴파일러가 파일을 제어할 때 사용하는 정보 -D 옵션을 사용한 매크로 정의 $ gcc –c –DEM_FILE=“embedded” helloworld.c -DEM_FILE은 소스에서 #define EM_FILE embedded와 동일한 결과 -U 옵션은 매크로 정의를 해제함 - #undef와 동일한 효과임
gcc 컴파일러 컴파일러 옵션 -I (아이)옵션은 헤더 파일 위치 지정 -l (엘)옵션은 라이브러리 지정 $ gcc –I../include hello_world.c 비표준 라이브러리를 위한 헤더 파일의 디렉토리를 지정 -l (엘)옵션은 라이브러리 지정 $ gcc –o hello hello.o hello_test.o –lm -lm은 수학 라이브러리를 포함한다는 의미 표준 라이브러리를 담고 있는 디렉토리에서 libm.a을 찾음 -L 옵션은 비표준 라이브러리 지정 $ gcc –o hello –L/usr/local/mylib hello.o hello_test.o –lx 표준 라이브러리가 아니 비 표준 라이브러리 사용 표준 라이브러리가 이곳에 있으면 우선적으로 사용
gcc 컴파일러 옵션 v (verbose) 컴파일러의 버전과 각 단계에서 실행하는 자세한 사항을 출력 Wall - 모호한 코딩에 대하여 자세한 경고 메시지 W - 합법적이지만 다소 모호한 코딩에 대하여 부가적인 경고 메시지 출력 traditional : 전통적인 C 언어 지원 ansi : ANSI C 표준 지원 C : 전처리기에서 주석을 지우지 않음(디버깅 시 필요) nostartfiles : 링크할 때 표준 시스템 구동 파일을 사용 안함 크로스 컴파일 시, 임베디드 프로세서에 사용됨 nostdlib : 링크할 때 표준 라이브러리와 구동 파일을 사용 안함 위와 마찬가지의 경우 타겟 시스템 라이브러리 제공 static : 정적(static) 라이브러리와 링크 shared : 가능한 한 공유 라이브러리와 링크하고 공유 라이브러리가 없는 경우에만 정적 라이브러리와 링크(기본값)
컴파일러 옵션 컴파일러 옵션: 디버깅과 프로파일링 컴파일할 때 디버깅을 위한 코드와 심볼 테이블을 삽입 컴파일러 옵션 : 최적화 프로그램의 수행속도를 컴파일러가 최적화함 gcc는 최적화와 디버깅 옵션을 동시 사용하도록 허용 최적화 옵션 g - 디버거 gdb에서 쓸 수 있는 확장된 심볼 테이블 생성 p - prof에서 프로파일링 할 수 있는 프로그램 생성 pg - gprof에서 프로파일링 할 수 있는 프로그램 생성 O - 옵션 01 과 동일 O0 - 최적화 안함(기본값): 정확한 동작/ 컴파일 시간 적음 O1 - 코드 크기와 실행 시간을 줄여 줌 O2 - 더 많은 최적화를 수행함
컴파일러 최적화 옵션 컴파일러 옵션: 옵션 넘겨 주기 어셈블러에게 옵션 넘겨주기 링커에 옵션 넘겨주기 -Wa,option-list Option-list에는 여러 개의 옵션이 콤마(,)로 분리되어 들어감 링커에 옵션 넘겨주기 -Wl,option-list ffast-math : 부동 소수점 연산에 대하여 최적화를 수행함 finline-functions : 단순한 함수의 경우 inline 함수로 변경하여 사용함 fno-inline : 모든 inline을 금지함 funroll-loops : 고정된 반복 횟수의 반복문을 모두 전개함
어셈블러(Assembler) 어셈블리 프로그램에서 오브젝트 모듈 생성 각 플랫폼마다 별도의 GNU 어셈블러 존재 어셈블러 실행 $ as list-of-options list-of-source-files assemble 옵션 -ah : C 프로그램의 리스트를 생성함 -al: : 어셈블리 언어 코드의 리스트를 생성함 -as : 심볼 테이블에 대한 리스트를 생성함
링커(linker) ld 링커 ld 실행 오브젝트 모듈과 라이브러리들을 결합하여 실행 파일 생성 외부 변수, 외부 함수, 라이브러리에 대한 참조 위치를 찾아내어 완전한 실행 프로그램 생성 일반적으로 ld를 직접 수행하지 않고 gcc로 수행함 모든 라이브러리의 위치를 일일이 적어 줄 필요 없음 기본 라이브러리를 포함 시켜 줌 ld 실행 $ ld list-of-options list-of-files-and-libraries 라이브러리는 –llib-name 형태로 사용, 파일과 라이브러리 순서 중요 라이브러리의 경우 외부 참조에 의하여 필요한 함수만 추출함 $ ld prog1.o –lm prog2.o ==> prog2는 math 함수를 사용하지 않음 순서와 관계없이 라이브러리에서 모듈을 찾기 위하여 색인을 생성함 $ ld prog1.o –lat –lfo ==> fo 라이브러리에서 at 함수 사용 시 에러 ranlib를 사용하여 색인을 만들어 주면 에러 발생 안함
링커(linker) ld 실행 파일 만들기 실행 파일 생성시 시작 위치는 첫째 파일의 시작 부분임 gcc와 ld OS에서 프로그램 시작 전에 표준 런 타임 초기화 루틴을 실행 플랫폼마다 제공되며, 보통 유닉스 계열에서는 /lib/crt0.o gcc와 ld 다음의 두 표현은 동일 $ gcc test.o $ ld –dc –dp –e start –X –o a.out /usr/lib/crt0.o test.o -lc
링커(linker) ld 옵션들 -o name : 실행 파일 이름 지정 -lname : 표준 라이브러리 링크 (/lib /usr/lib) -Ldir : 표준 라이브러리 디렉토리 추가 -s : 실행 파일에 심볼 테이블 제거 (ref. strip 명령) -x : 출력 파일에 로컬 심볼 제거 -n : 텍스트 영역을 읽기 전용으로 만듦 -r : 추후에도 링크 할 수 있도록 오브젝트 파일 만듦 -e name: 실행 파일의 시작위치를 name 심볼로 사용 -M : 전역 심볼의 값이 어느 함수에 위치하는지 보여주는 로드맵 작성 -b format : 오브젝트 파일을 주어진 형식으로 읽어 들임 -oformat format: 주어진 형식의 오브젝트 파일을 생성
라이브러리 만들기 ar 명령으로 오브젝트 모듈의 라이브러리 만듦 하나의 프로젝트를 이루는 여러 목적 모듈들을 만들고 이들을 그룹화시키기 위해 사용 새로운 라이브러리 생성 $ ar rs libname list-of-files r 옵션: 파일을 추가하고 없으면 새로운 라이브러리 생성 s 옵션: 정적 라이브러리 색인 생성(ranlib 불필요) 라이브러리 갱신 $ ar rus libname list-of-files 라이브러리의 모듈과 파일의 날짜를 비교하여 갱신 라이브러리에서 파일 지우기 $ ar ds libname list-of-files 라이브러리에서 파일 추출 $ ar x libname list-of-files
공유 라이브러리 업그레이드 공유 라이브러리와 정적인 라이브러리 분리 정적인 라이브러리는 복사로 완료 정적 라이브러리 일반적으로 /usr/lib에 있으며 libXXX.a 로 존재 컴파일 시에 사용됨 동적 라이브러리 /lib에 있으며 libXXX.so.version으로 되어 있음 Version은 major.minor로 구성되어 있음 Ld.so는 version에서 major 번호만 참조함 정적인 라이브러리는 복사로 완료 동적인 라이브러리는 소프트링크로 연결
Make(1) Make 기능 및 목적 Make 사용 컴파일을 자동화 하는 프로그램 실행 파일을 만드는 과정(빌드)을 정의하면 필요한 작업만을 수행하여 실행 파일 생성 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필요한 명령어를 이용해서 그들을 재 컴파일. 다중 모듈 프로그램의 재사용을 유지하고, 프로그램 수정에 대한 재번역을 최소화 gmake gnumake는 make 보다 발전된 것임 Make 사용 입력 파일이 변경되면 자동적으로 결과 파일이 변경되기를 원할 때나 명령어 방식으로 처리되는 모든 곳에 유용하게 사용 가능. 파일의 상호 의존 관계를 나타내는 목록 파일(makefile)이 필요 GNUmakefile, Makefile, makefile 중 하나의 파일이 필요. makefile을 참조하여 파일을 최신버전으로 개정
Make(2) Make 사용법 makefiles make [ -f makefile_name ] 복수개의 파일과 목적 파일 컴파일 makefiles 이름에 제한이 없으나 파일 이름 뒤에 .make 표기 권장
Make(3) makefiles 작성 및 규칙 (예) targetList : dependencyList [TAB] commandList targetList : 목적 파일 목록 dependencyList : 의존 파일 목록 commandList : 명령어 목록 (예) master : master.o pirami.o gcc master.o pirami.o -o master master.o : master.c pirami.h gcc -c main.c pirami.o : pirami.c pirami.h gcc -c pirami.c
Make(4) master master.o pirami.o master.c pirami.h pirami.c make 규칙 순서 (예) 규칙을 순서대로 조사하면서 상호 의존 트리를 작성 make는 leaf 노드에서 root 노드까지 진행하면서 부모 노드의 마지막 수정시간이 자식 노드의 수정시간보다 이전이거나 없으면 명령어 목록대로 수행 master master.o pirami.o master.c pirami.h pirami.c
Make(5) make 실행 매크로(Macros) $ make -f main1.make make에서 지원하는 기능 일련의 반복되는 특정 코드를 간단하게 표현. 사용법 이름= 내용들… $(이름) , ${이름} , 대문자로 작성. (예)token = replacementText make 파일 내에 모든 $(token)는 replacementText로 대치 정해진 Macro ASFLAGS, CFLAGS, CPPFLAGS …
Makefile 작성 예 OBJECTS = main.o helloworld.o helloworld: $(OBJECTS) [TAB]gcc –o helloworld ($OBJECTS) main.o: main.c [TAB]gcc –c main.c helloworld.o: helloworld.h helloworld.c [TAB]gcc –c helloworld.c clean: [TAB]rm $(OBJECTS) helloworld .SUFFIXES: .c.o OBJECTS = main.o helloworld.o CC = gcc CFLAGS = -g -c TARGET = helloworld $(TARGET): $(OBJECTS) $(CC) -o $(TARGET) $(OBJECTS) clean: rm $(TARGET) $(OBJECTS) core main.o: main.c helloworld.o: helloworld.h helloworld.c
리눅스 커널 소스 트리 구조 ... 임베디드 시스템 소프트웨어의 주 관심 영역을 노란색으로 표식 /usr/src/linux Doc arch include init fs kernel ipc lib mm net scripts driver alpha arm m68k mips ppc sparc i386 boot math-emu asm-alpha asm-arm asm-i386 ... linux scsi video 802 appletalk decnet ethernet ipv4 unix sunrpc x25 block cdrom char pci pnp sbus sound coda ext2 hpfs msdos nfs isofs ntfs 임베디드 시스템 소프트웨어의 주 관심 영역을 노란색으로 표식
각 디렉토리 설명 (1) arch/ CPU 종속적인 부분, 각 처리기 마다 하위 디렉토리로 구성됨 (arch/arm, arch/i386, arch/alpha … ) arch/arm/boot/ 부트스트랩핑 코드 arch/arm/kernel/ 하드웨어 종속적인(hardware dependent) 커널 관리 루틴 트랩, 인터럽트 처리 루틴 문맥 교환 루틴 장치 구성, 초기화 루틴 arch/arm/mm/ 하드웨어 종속적인 메모리 관리 루틴 init/ 하드웨어 독립적인 커널 초기화 루틴 (start_kernel) 태스크 0 (init_task or task[0]) 생성 태스크 1, 2, 3 등 데몬 프로세스 생성
각 디렉토리 설명 (2) mm/ fs/ kernel/ 리눅스 커널의 가장 중심적인 디렉토리 (central section of the kernel) 하드웨어 독립적인 커널 관리 루틴 (하드웨어 종속적인 커널 관리 루틴은 arch/arm/kernel 디렉토리에 존재) fork, exit 등 태스크 관련 시스템 호출 처리 루틴 스케줄러 (scheduler) 루틴 시그널 처리 (signal handling)/시간 관리 (time management) 루틴 mm/ 하드웨어 독립적인 메모리 관리 루틴 (하드웨어 종속적인 메모리 관리 루틴은 arch/arm/mm 디렉토리에 존재) 가상 메모리 관리, 페이징 (paging), 스와핑(swapping) fs/ 가상 파일 시스템 (virtual file system ) 관리 루틴 open, read 등 태스크 관련 시스템 호출 처리 루틴 특정 파일 시스템 관리 루틴은 하위 디렉토리에 존재 (ext2, ext3, ramfs, minix, jffs2, proc, nfs, msdos, coda, .. )
각 디렉토리 설명 (3) drivers/ ipc/ 개개의 장치를 제어하기 위한 장치 드라이버 루틴 디바이스 드라이버는 크게 문자/블록/네트워크 드라이버로 구분 drivers/block/ : 블록 장치 드라이버. 예를 들어 IDE 디스크 (hd) drivers/char/ : 문자 장치 드라이버. serial ports, tty, modem, ..) drivers/net : 네트웍 장치 드라이버. 예를 들어 3C509, ... drivers/pci/ : PCI bus 제어 drivers/sound/ : sound card 드라이버 drivers/cdrom/ : CD-ROM 드라이버 drivers/scsi/ : SCSI 인터페이스 관리 ipc/ 프로세스간 통신을 지원하기 위한 루틴 세마포어(semaphores), 공유 메모리(shared memory), 메시지 큐(message queues)
각 디렉토리 설명 (4) net/ include/ modules/ lib/ doc/ or Documentation/ TCP/IP, ARP 등 네트웍 통신 프로토콜 (네트웍 장치 드라이버는 drivers/net에 존재) 소켓 인터페이스 include/ 커널 헤더 하드웨어 독립적인 헤더 : include/linux/ 하드웨어 종속적인 헤더 : include/asm-***/ (예를 들어 ARM CPU 종속적인 헤더는 include/asm-arm/ 디렉토리에 존재) modules/ 커널 모듈 루틴 모듈은 insmod(modprobe), rmmod 등의 명령으로 동적 적재/제거 가능 lib/ 커널 라이브러리 루틴 doc/ or Documentation/ 커널 문서 디렉토리.