1 / 77

Host 컴퓨터 개발환경 이해

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

hye
Download Presentation

Host 컴퓨터 개발환경 이해

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Host 컴퓨터 개발환경 이해 Lecture #3 (리눅스 관하여…)

  2. 목 차 • 리눅스 부팅 과정 • 리눅스 소스 트리 • 리눅스 파일 시스템 • 쉘, vi, 기본 명령어 • 프로그램 컴파일하기 • make와 Makefile

  3. 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)

  4. 리눅스 부팅 과정 (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 명령어)

  5. 리눅스 부팅 과정 (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

  6. 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

  7. Bootloader: LILO (2) • 부팅시 다음과 같은 메세지가 나타난다. (label=linux인 커널을 선택하여 실행하는 예) LILO: [TAB] linux linux_2_4 dos LILO: linux [Enter] Booting Linux......

  8. 새로운 리눅스 커널 추가하기 • 기존의 커널소스를 바꾸거나 새로운 커널소스를 설치한 다음 컴파일하여 새로운 리눅스 커널이미지를 생성한다. (새로운 커널이미지가 /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

  9. 리눅스 전체 디렉토리 구조 • /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 에 설치

  10. 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 커널 소스 트리 구조 임베디드 시스템 소프트웨어의 주 관심 영역을 노란색으로 표식

  11. 각 디렉토리 설명 (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 등 데몬 프로세스 생성

  12. 각 디렉토리 설명 (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, .. )

  13. 각 디렉토리 설명 (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)

  14. 각 디렉토리 설명 (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/ • 커널 문서 디렉토리.

  15. 리눅스 파일 시스템 전체 구조 …. 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

  16. 리눅스 파일 시스템 • 정의 • 파티션 안에 정보를 저장하고 관리하는 실질적 방법을 제공 즉, 파일을 저장하는 방식을 지칭 • 종류 • ext 시스템 : Extended File System • 초기 minix의 제한을 극복하고자 개발 • 255자의 파일 이름과 2GB의 파티션 지원 • ext2 : Second Extended File System • 최대 64GB의 파티션 허용 • FAT (File Allocation Table) : 클러스터 크기 고정 • 도스에서 사용, 2GB의 파티션 및 8자의 파일 이름 지원 • FAT32 • 윈도우에서 사용 • 최대 2TB의 파티션을 지원

  17. 리눅스 파일 시스템 • 현재 리눅스에서 지원되는 파일 포맷 : 10여 종 • 임베디드 시스템을 위한 파일 시스템 • EXT2 : 리눅스 전용, 임베디드 시스템에서도 일반적으로 지원 • cramfs(Compressed ROM File System) • 롬 기반의 임베디드 시스템에 사용되는 읽기 전용의 압축 파일 시스템 • 내용 변경이 불가능 • XIP(Execute-in-Place) • 롬이나 플래쉬롬에 있는 프로그램을 램에 적재하지 않고 그곳에서 바로 실행 • 램에 대한 메모리 요구량을 줄여 줌 • 많은 응용프로그램을 동시에 실행 가능 • 실행 파일 포맷 : ELF(Executable and Linking Format) 하나만을 지원하는 것이 일반적임 • ELF : USL에서 개발한 바이너리 형식

  18. 리눅스 사용을 위한 준비 • SHELL 이해 • 리눅스 명령어 이해 • 시스템 관리 명령어 • 네트웍 관리 명령어 • 파일 관리를 포함한 다양한 리눅스 명령어 • 에디터, 컴파일러 이해

  19. 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" 편집기를 사용하여 작성 가능

  20. 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

  21. 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 설정

  22. 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

  23. 입력 모드 입력명령 명령 모드 : 실행 모드 ESC 실행완료 vi 편집기 • 실행 방법: vi 명령어 뒤에 파일 이름 • vi 실행 시 시작하는 모드는 명령 모드 • 편집기 모드 • 입력모드 혹은 편집모드 – 글자를 입력할 수 있는 모드 • 모드변환방법 - 명령모드에서 a,A,i,o,O를 입력 했을 때 • 명령모드 혹은 ESC모드 – 커서이동 및 기타 명령어처리 • 모드변환방법 - 실행모드 혹은 입력모드에서 ESC키를 눌렀을 때 • 실행모드 혹은 콜론모드 – 내용바꾸기 및 기타 • 모드변환방법 - 명령모드에서 콜론(:)을 입력했을 때

  24. vi - 명령 모드 • 입력 모드 전환 • 커서 이동 a : 커서 위치의 다음 칸부터 입력하기(append) A : 커서가 있는 줄의 끝부터 입력하기 i : 커서 위치부터 입력하기 (키보드의 Insert도 같은 기능을 합니다.) I : 커서가 있는 줄의 맨 앞에서부터 입력하기 o : 커서 바로 아래에 줄을 만들고 입력하기(open line) O : 커서 바로 위에 줄을 만들고 입력하기 s : 커서가 있는 단어를 지우고 입력하기 S : 커서가 있는 행을 지우고 입력하기 h : 왼쪽, j : 위로, k : 아래로, l : 오른쪽 (방향키 사용 가능) - 글자단위 w : 다음단어로, b : 이전단어로 - word 단위 ^ : 맨 왼쪽의 첫 글자, $ : 마지막글자의 끝 - 행 단위 ^F: 한화면 아래로, ^B:한 화면 위로, ^D: 반 화면 아래로, ^U: 반화면 위로

  25. vi - 명령 모드 • 삭제 기능 • 복사 및 붙여넣기 x : 커서 위치의 글자 삭제 X : 커서 바로 앞의 글자 삭제 dw : 한 단어를 삭제 D : d$ 커서 위치부터 줄의 끝까지 삭제 dd : 커서가 있는 줄을 삭제 yw : 커서 위치부터 단어의 끝까지 복사하기 y0 : 커서 위치부터 줄의 처음까지 복사하기 y$ : 커서 위치부터 줄의 끝까지 복사하기 yy : 커서가 있는 줄을 복사하기 yj : 커서가 있는 줄과 그 다음 줄을 복사하기 yk : 커서가 있는 줄과 그 앞줄을 복사하기 p : 커서의 다음 위치에 붙여 넣기 P : 커서가 있는 위치에 붙여 넣기

  26. vi - 명령 모드 • 기타 u : 작업 취소하기 (undo) U : 그 줄에 행해진 작업 모두 취소하기 . : 조금 전에 했던 명령을 반복하기 ~ : 대소문자 전환 /검색어 : 아래 방향으로 찾기 (검색) ?검색어 : 위쪽 방향으로 찾기 n : 다음 찾기

  27. 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 파일명 “파일명”의 파일을 읽어서 삽입 :!명령어 외부명령어 실행

  28. 리눅스 기본 명령어 • 간단한 리눅스 명령어들 • 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 - 모든 내트워크 연결상태에 대한 요약정보

  29. 홈(Home) 디렉토리 • 시스템 관리자가 사용자를 등록할 때 기본적인 전용 공간을 주는데 이를 홈(Home) 디렉토리 라고 함 • 기본적으로 “home/ID", "/usr/ID" 형식으로 생성 • 사용자는 자기의 전용공간에서 새로운 파일을 생성하고, 지우고, 디렉토리를 만들고 데이터를 저장할 수 있음 • 사용자가 로그인 할 때마다 리눅스 시스템은 사용자의 홈 디렉토리 식별하는 $HOME이라는 변수를 지정 • 현재 자신의 홈 디렉토리를 확인하기 위해서는 환경변수 "$HOME"을 참고 • 사용자의 작업환경을 결정하는 특별한 파일들은 사용자의 홈 디렉토리에 위치 • ( ".bash_profile" , ".bash_logout", ".bashrc" )

  30. 절대경로와 상대경로 • 경로이름 • 출발 디렉토리에서 목적지 파일이나 디렉토리까지 계층구조 상에 나타나는 디렉토리 이름의 순서 • 절대 경로 • 루트(root) 디렉토리인 "/"로 시작하여 해당 파일이나 디렉토리까지의 모든 경로를 표시하는 방법 • 상대경로 • 현재 디레토리를 기준으로 상대적인 경로이름을 이용하여 파일이나 디렉토리를 표시하는 방법 # vi /user/ssyoo/test.c # vi ./ssyoo/test.c

  31. 디렉토리 관련 명령어 • 디렉토리 만들기 • mkdir [OPTION] DIRECTORY... • 이름은 대문자와 소문자, 숫자, 그리고 쉘에서 사용되는 특별문자를 제외한 모든 문자를 사용하여 작성 • 디렉토리 제거 • rmdir [OPTION]... DIRECTORY... • 현재 디렉토리 위치 변경 • cd [ directory ] • cd .. (한 단계 앞 디렉토리로 이동) • 디렉토리/파일 이름 변경과 옮기기 • mv [OPTION]... SOURCE DEST

  32. 파일 관리 형태 • 파일 시스템의 기본적인 기능은 디스크나 테이프의 저장 공간을 파일과 디렉토리 개념으로 구성하여 관리 • 보통 장기간 저장을 위해서 파일을 사용하고 단기간 저장이나 빠른 결과를 얻기 위해서는 RAM를 사용

  33. 파일 관련 명령어 • 파일 삭제 • 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]...

  34. 파일 비교 • diff : 파일간의 모든 차이점과 비슷한 점을 보여줌 • diff [ -i -Dflag ] fileName1 fileName2 -i ; 대소문자의 구분을 무시한다(ignore) -Dflag ; C preprocessor를 위한 출력을 생성

  35. 파일 탐색 • 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

  36. 파일 내용 탐색 • 파일 내용(문자열) 탐색 - grep • 지정된 문자열이 발견되면 해당라인을 출력 • “grep”옵션 • 정규식 사용하기 • “^”, “$”, “.”와 같은 메타 문자 사용 • 파이프라인 이용 "-v"(invert)는 지정한 문자열과 일치하는 라인을 제외한 모든 라인을 출력 "-n"(number)는 문자열이나 패턴과 일치하는 라인들의 번호를 표시 "-c"(count) 옵션은 검색 문자열과 일치하는 라인을 화면에 표시되지 못하게 함 "-l"(listfile) 옵션은 특정한 패턴을 찾기 위해 여러 개의 파일을 검색할 때

  37. 파일 사용권한 변경 (1) • 사용 권한 변경 - chmod • 파일이나 디렉토리의 사용권한을 변경 • chmod [OPTION]... MODE[,MODE]... FILE... • 8진수를 사용하여 절대값을 주는 절대모드(Absolute mode)방법과 이미 가지고 있는 허용상태를 제거하거나 추가하는 방법으로 사용권한을 지정하는 기호모드 방법 • Chmod 777 test.c • Chmod +a test.c • 사용권한을 표시하는 또 다른 방법으로 숫자 사용 가능 • 숫자는 3자리로 구성되며 각 자리는 소유자, 그룹, 다른 사람들을 뜻함 • 읽기 및 쓰기, 실행 권한 모두가 부여된 경우 7(4+2+1)로 표현

  38. 파일 사용권한 변경 (2) • 기호모드를 사용하는 방법

  39. 파일 관련 명령어 • 파일 소유자 변경 - chown • 파일을 작성하면 리눅스 시스템은 그 사용자를 파일의 소유자로 자동으로 지정 • "chown" 명령어를 사용하면 이 소유자를 변경할 수 있음 • chown [OPTION]... OWNER[:[GROUP]] FILE... • 파일 그룹명변경 - chgrp • 어떤 특정한 파일을 자신이 속하고 있는 그룹보다는, 다른 그룹에 해당하는 사용자가 파일을 읽고 쓰고 기록할 수 있도록 할 때 사용 • chgrp [OPTION]... GROUP FILE...

  40. 파일 압축과 복원 • gzip - 대표적인 압축 프로그램 (복원은 gunzip) • gzip (option) (file or directory) • bzip2 - “bzcat”명령어로 현재 압축된 파일 내용을 봄 옵션: -d 압축을 푼다 -l 현재 압축된 파일의 내용을 보여준다 -r 현재 디렉토리부터 하위 디렉토리까지 전부를 압축한다. -t 압축 파일의 완전성을 검사한다. -v 압축 진행 상황을 보여준다. -9 최대한 압축한다. 옵션 -d 압축을 해제한다. -z 파일을 압축한다. -t 압축 파일의 완전성을 검사한다. -v 압축 진행 상황을 보여준다

  41. 파일 압축과 복원 • compress • 압축이 완료되면 기존 파일이 없어지면서 확장자가 “.Z"으로 생성된다. • 압축된 파일의 내용을 보기 위해서는 zcat 명령어를 사용 • 복원을 위해서는uncompress를 사용 • 단독으로는 별로 쓰이지 않고 tar 명령어와 함께 주로 사용

  42. 파일 묶기 (tar) (1) • 여러 개의 파일에 대하여 허가권이나 소유권을 유지하면서 하나의 파일로 묶는 아카이브(archive) 유틸리티 • 여러 개의 파일을 묶은 다음 압축하는 것이 일반적인 백업 및 프로그램 배포 형태임 • 명령의 형식 : • tar options archive-file target-files 옵션 및 의미 -c 새로운 아카이브 파일을 작성한다. -t 묶음파일의 내용을 보여준다. -x 묶음 파일을 해제한다. -r 묶음 파일에 새로운 파일을 추가한다. --delete 묶음 파일에서 특정 파일을 삭제한다. -u 묶음 파일보다 새로운 파일이면 update 한다. -v 묶음과정을 보여준다. -f 묵음 파일명을 지정한다. -z 묶음실행과 동시에 gzip으로 동시에 압축한다.

  43. 파일 묶기 (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…

  44. 소프트웨어 패키지(배포판) • 바이너리 패키지 • 일반적으로 공유 라이브러리 사용 • 보안에 문제가 생길 수 있음 • 패키지 시스템 활용하여 설치 쉬움: RPM 등 • 소스 패키지 • 개선을 위한 개발에 이용가능 • 자신의 환경에 적합한 컴파일 가능 (컴파일러, OS…) • 컴파일 환경을 설정해야 하는 등 설치 어려움

  45. RPM • RPM 이란? • RedHat Package Manager • 레드햇사에서 만들어낸 패키지 관리 툴의 의미 • www.rpm.org에서 GPL하에서 자유롭게 공개, 개발 • RPM 실행 • 설치 파일과 설치 정보를 같이 가지고 있슴 • 설치될 때 설치 정보를 시스템의 설치 데이타베이스에 갱신 • 의존성 추적으로 설치 요구조건 검증 및 제거시 사용 현황 파악 • rpmfind.net에 거의 모든 rpm 파일이 존재함 • RPM 기능 • 패키지 자동설치 및 제거 • 업그레이드 기능 • 패키지 검증 • 패키지 정보 검색

  46. RPM 팩키지 파일명 • 팩키지 이름(Package name) • 팩키지 이름을 나타내는 것으로 우리가 보통 말하는 실행 프로그램 명 • 버전(Version) • 현재 팩키지의 버전을 나타냄. • 릴리즈(Release) • 이것은 현재 패키지가 몇 번째로 만들어 졌는가를 나타내는 것으로 보통 패치 버전을 나타냄. 숫자가 높을수록 최신 파일이고 그만큼 또 안정하다는 것을 나타내어 줌. • 사용되는 시스템의 아키텍처(Architecture)를 말함. 즉 어느 플랫폼에서 작동하는 가를 나타내어 줌. • 확장자 • RPM으로 만들어진 팩키지라는 것을 나타내어 줌.

  47. 팩키지 설치/제거/업그레이드 • RPM 팩키지를 설치할 때에는 -ivh 옵션을 같이 사용 • RPM 패키지를 설치할 경우에는 -i 옵션을 사용 • 설치시 설치하는 과정을 보고 싶다면 -i 옵션과 함께 -v 옵션을 사용 • RPM 설치 시에도 설치경과 막대그래프를 보기 위해서는 -h 옵션을 사용 • RPM 팩키지를 제가할 때에는 -e 옵션을 사용 • RPM 팩키지를 업그레이드하기 위해서는 -U옵션을 사용 • 일반적으로 -Uvh 옵션을 사용 • 맨 처음 설치 할 때도 -U 선택사항을 써서 설치할 수도 있는데 이때에는 구 버전의 팩키지가 있으면 제거한 후 설치하고, 구 버전의 패키지가 없을 때에는 일반적인 설치를 하게 됨 • 시스템에 설치된 패키지를 모두 알고 싶으면 -qa 옵션 사용 • 현재 시스템에 bootp 관련 패키지의 설치 유무를 알고 싶을 때 • 예) rpm -qa | grep bootp

  48. 팩키지 정보 검색 • 팩키지 정보 관련 옵션 • 질문 옵션인 -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)

  49. 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

  50. / 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 ...

More Related