770 likes | 1.05k Views
Host 컴퓨터 개발환경 이해. Lecture #3 ( 리눅스 관하여 …). 목 차. 리눅스 부팅 과정 리눅스 소스 트리 리눅스 파일 시스템 쉘 , vi, 기본 명령어 프로그램 컴파일하기 make 와 Makefile. process 1. User Space. process 2. process 3. process n. System Call Interface. Filesystem Manager. Process Manager. Task Management Scheduler
E N D
Host 컴퓨터 개발환경 이해 Lecture #3 (리눅스 관하여…)
목 차 • 리눅스 부팅 과정 • 리눅스 소스 트리 • 리눅스 파일 시스템 • 쉘, vi, 기본 명령어 • 프로그램 컴파일하기 • make와 Makefile
process 1 User Space process 2 process 3 process n System Call Interface Filesystem Manager Process Manager Task Management Scheduler Signaling IPC Ext2fs proc xiafs nfs msdos ntfs Memory Manager Paging/Segmentation Kernel Space Buffer Cache Device Manager Network Manager character block socket Ipv6 IrDA Bluetooth Console KBD SCSI CD-ROM PCI ethernet Hardware Interface dev1 dev2 dev3 dev4 devn 리눅스 운영체제 구조 (Source : Linux Kernel Internals)
리눅스 부팅 과정 (1) 시작 * 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
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 read-only root=/dev/hda1 other=/dev/hda1 label=dos 60초 후에는 자동으로 label=linux인 리눅스 커널이미지를 실행한다. label=linux인 리눅스 커널이미지에 대한 정보 label=linux_2_4인 리눅스 커널이미 지에 대한 정보 label=dos인 커널이미지에 대한 정보 (리눅스 이외의 다른 운영체제) Bootloader: LILO (1) • bootloader: 부팅에 사용될 커널을 선택하고 실행한다. • /etc/lilo.conf
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 에 설치
ipc lib kernel mm scripts block Doc cdrom /usr/src/linux driver char arch alpha net fs net init include 802 pci i386 asm-alpha appletalk coda pnp m68k asm-arm decnet sbus ext2 mips ... ethernet scsi hpfs ppc boot sound asm-i386 ipv4 msdos sparc kernel video unix linux nfs arm lib sunrpc ... isofs net math-emu x25 ntfs scsi ... mm ... video Linux 커널 소스 트리 구조 임베디드 시스템 소프트웨어의 주 관심 영역을 노란색으로 표식
각 디렉토리 설명 (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) • 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/ • 개개의 장치를 제어하기 위한 장치 드라이버 루틴 • 디바이스 드라이버는 크게 문자/블록/네트워크 드라이버로 구분 • 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/ • TCP/IP, ARP 등 네트웍 통신 프로토콜 (네트웍 장치 드라이버는 drivers/net에 존재) • 소켓 인터페이스 • include/ • 커널 헤더 • 하드웨어 독립적인 헤더 : include/linux/ • 하드웨어 종속적인 헤더 : include/asm-***/ (예를 들어 ARM CPU 종속적인 헤더는 include/asm-arm/ 디렉토리에 존재) • modules/ • 커널 모듈 루틴 • 모듈은 insmod(modprobe), rmmod 등의 명령으로 동적 적재/제거 가능 • lib/ • 커널 라이브러리 루틴 • doc/ or Documentation/ • 커널 문서 디렉토리.
리눅스 파일 시스템 전체 구조 …. task n task 1 task 2 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 선택 • 사용자 생성시 선택 명시( /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 설정 # .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 # .bashrc # User specific aliases and functions alias ifc=‘ifconfig’ # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi export • arm-linux 관련 명령어 path 설정 (/usr/local/arm-linux/bin) • ifconfig 에 대한 alias 설정
Shell Script Programming • shell script • Shell 명령들을 포함하는 실행 가능 상태의 파일 • Shell script 예제 프로그램 • 파일 확장자 바꾸기 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
입력 모드 입력명령 명령 모드 : 실행 모드 ESC 실행완료 vi 편집기 • 실행 방법: vi 명령어 뒤에 파일 이름 • vi 실행 시 시작하는 모드는 명령 모드 • 편집기 모드 • 입력모드 혹은 편집모드 – 글자를 입력할 수 있는 모드 • 모드변환방법 - 명령모드에서 a,A,i,o,O를 입력 했을 때 • 명령모드 혹은 ESC모드 – 커서이동 및 기타 명령어처리 • 모드변환방법 - 실행모드 혹은 입력모드에서 ESC키를 눌렀을 때 • 실행모드 혹은 콜론모드 – 내용바꾸기 및 기타 • 모드변환방법 - 명령모드에서 콜론(:)을 입력했을 때
vi - 명령 모드 • 입력 모드 전환 • 커서 이동 a : 커서 위치의 다음 칸부터 입력하기(append) A : 커서가 있는 줄의 끝부터 입력하기 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/^old/new/g - 행의 첫 단어가 old 인 것을 new 로 치환 :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를 사용
파일 관련 명령어 • 파일 삭제 • rm [OPTION]... FILE... • -r 옵션의 경우 지정된 디렉토리 내에 서브디렉토리를 포함하여 모든 파일과 디렉토리를 지움 • 파일 복사 • 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 • 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)로 표현
파일 사용권한 변경 (2) • 기호모드를 사용하는 방법
파일 관련 명령어 • 파일 소유자 변경 - chown • 파일을 작성하면 리눅스 시스템은 그 사용자를 파일의 소유자로 자동으로 지정 • "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 • 압축이 완료되면 기존 파일이 없어지면서 확장자가 “.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 • RPM 이란? • RedHat Package Manager • 레드햇사에서 만들어낸 패키지 관리 툴의 의미 • www.rpm.org에서 GPL하에서 자유롭게 공개, 개발 • RPM 실행 • 설치 파일과 설치 정보를 같이 가지고 있슴 • 설치될 때 설치 정보를 시스템의 설치 데이타베이스에 갱신 • 의존성 추적으로 설치 요구조건 검증 및 제거시 사용 현황 파악 • rpmfind.net에 거의 모든 rpm 파일이 존재함 • RPM 기능 • 패키지 자동설치 및 제거 • 업그레이드 기능 • 패키지 검증 • 패키지 정보 검색
RPM 팩키지 파일명 • 팩키지 이름(Package name) • 팩키지 이름을 나타내는 것으로 우리가 보통 말하는 실행 프로그램 명 • 버전(Version) • 현재 팩키지의 버전을 나타냄. • 릴리즈(Release) • 이것은 현재 패키지가 몇 번째로 만들어 졌는가를 나타내는 것으로 보통 패치 버전을 나타냄. 숫자가 높을수록 최신 파일이고 그만큼 또 안정하다는 것을 나타내어 줌. • 사용되는 시스템의 아키텍처(Architecture)를 말함. 즉 어느 플랫폼에서 작동하는 가를 나타내어 줌. • 확장자 • RPM으로 만들어진 팩키지라는 것을 나타내어 줌.
팩키지 설치/제거/업그레이드 • RPM 팩키지를 설치할 때에는 -ivh 옵션을 같이 사용 • RPM 패키지를 설치할 경우에는 -i 옵션을 사용 • 설치시 설치하는 과정을 보고 싶다면 -i 옵션과 함께 -v 옵션을 사용 • RPM 설치 시에도 설치경과 막대그래프를 보기 위해서는 -h 옵션을 사용 • RPM 팩키지를 제가할 때에는 -e 옵션을 사용 • RPM 팩키지를 업그레이드하기 위해서는 -U옵션을 사용 • 일반적으로 -Uvh 옵션을 사용 • 맨 처음 설치 할 때도 -U 선택사항을 써서 설치할 수도 있는데 이때에는 구 버전의 팩키지가 있으면 제거한 후 설치하고, 구 버전의 패키지가 없을 때에는 일반적인 설치를 하게 됨 • 시스템에 설치된 패키지를 모두 알고 싶으면 -qa 옵션 사용 • 현재 시스템에 bootp 관련 패키지의 설치 유무를 알고 싶을 때 • 예) rpm -qa | grep bootp
팩키지 정보 검색 • 팩키지 정보 관련 옵션 • 질문 옵션인 -q와 함께 사용하여 패키지 정보 추출 가능 • 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)
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 디렉토리에 푼다. 컴파일 및 설치 소프트웨어 인스톨 • 예제: Apache 웹서버 설치 • RPM(RedHat Package Manage)를 사용하는 경우 • *.rpm 이라는 이름으로 배포된다. • 소스코드를 컴파일하여 수동으로 설치하는 경우 • 보통 *.tar.gz라는 이름으로 배포된다. #>rpm –Uvh apache_1.3.19.rpm
/ mount /dev/cdrom /mnt/cdrom mount /dev/fd0 /mnt/floppy ... src mnt home usr 장치명 마운트할 위치 cdrom floppy 파일 시스템 mount • 마운트(mount): 블록장치를 파일시스템 트리(tree)의 하부 디렉토리를 통해 접근하게 해 주는 명령 • CD-ROM과 플로피 디스크 드라이브 마운트 • 마운트 해제 : • /etc/fstab : 파일시스템 마운트 테이블 • 시스템 부팅과 함께 자동으로 마운트되어야 할 항목과 옵션 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 ...