500 likes | 795 Views
[ 2014-1] 운영체제 – Linux 실습 LAB#9 : 소프트웨어 관리하기 . 참고교재 : 페도라리눅스 시스템 & 네트워크 ( 한빛 ). 목차. 00. 개요 01. RPM 패키지 설치 02. yum 을 이용한 패키지 설치 03. 파일 아카이브와 압축 04. 소프트웨어 컴파일. RPM 의 장점과 단점을 설명할 수 있다 . rpm 명령으로 패키지를 설치하고 업그레이드할 수 있다 . rpm 명령으로 패키지를 검색하고 상세 정보를 확인할 수 있다 .
E N D
[2014-1] 운영체제 – Linux 실습LAB#9 : 소프트웨어 관리하기 참고교재 : 페도라리눅스 시스템&네트워크(한빛)
목차 00. 개요 01. RPM 패키지 설치 02. yum을 이용한 패키지 설치 03. 파일 아카이브와 압축 04. 소프트웨어 컴파일
RPM의 장점과 단점을 설명할 수 있다. rpm 명령으로 패키지를 설치하고 업그레이드할 수 있다. rpm 명령으로 패키지를 검색하고 상세 정보를 확인할 수 있다. yum 명령으로 설치한 패키지와 설치 가능한 패키지, 업데이트할 수 있는 패키지의 목록을 확인할 수 있다. yum 명령으로 패키지를 설치하고 업데이트하고 삭제할 수 있다. tar 명령으로 아카이브를 생성하고, 내용을 확인하고 풀 수 있다. 파일을 압축하고 압축을 풀 수 있다. gcc로 C 파일을 컴파일할 수 있다. makefile을 작성하여 make 명령으로 실행 파일을 만들 수 있다.
00 개요 [그림 9-1] 9장의 내용 구성
01 RPM 패키지 설치 • 리눅스에서 주로 사용하는 패키지 • RPM(RedhatPackage Manager): 레드햇에서 만든 패키지 관리도구 • .deb: 데비안, 우분투 계열에서 사용하는 패키지 • RPM의 특징 • 바이너리 파일로 구성되어 있어 컴파일이 필요 없다. • 패키지의 파일들이 관련 디렉터리로 바로 설치된다. • 한 번에 설치된 패키지의 파일을 일괄적으로 삭제할 수 있다. • 기존에 설치된 패키지를 삭제하지 않고 바로 업그레이드할 수 있다. • 패키지의 설치 상태를 검증할 수 있다. • 패키지에 대한 정보를 제공한다. • 단점: 패키지 의존성에 따라 관련 패키지가 먼저 설치되어 있지 않으면 설치할 수 없다. • RPM 패키지의 이름 구성 • 패키지 이름 : 첫 번째 항목에는 패키지의 이름 • 패키지 버전 : 두 번째 항목은 패키지의 버전 • 패키지 릴리즈: 릴리즈는 해당 버전에서 몇 번째 만들어진 것인지를 나타냄. ‘1.fc19’에서 1은 첫 번째 만들어진 패키지임을, fc19는 페도라19용으로 만들어진 것임을 의미 • 아키텍처 : 사용하는 시스템 아키텍처로 x86은 인텔 x86 CPU를, 64는 64비트 운영체제임을 의미 • 확장자: RPM 패키지의 확장자는.rpm을 사용하여 다른 패키지와 구분
01 RPM 패키지 설치 • rpm 명령 • 현재 사용 중인 rpm의 버전 확인 [root@localhost ~]# rpm --version RPM 버전 - 4.11.1 [root@localhost ~]#
01 RPM 패키지 설치 • RPM 패키지 설치하기 • CD/DVD 장치 연결하기 • 페도라iso파일 마운트 • Player→RemovableDevices→CD/DVD→Settings • ISO image file이 선택되어 있어야 함 [그림 9-3] CD/DVD장치확인
01 RPM 패키지 설치 • CD/DVD 장치 연결하기 • CD/DVD 마운트 • 패키지 위치 찾기: Packages 디렉터리 아래에 패키지 이름의 첫 글자별로 모아서 디렉터리로 구분 • x 디렉터리에서 xterm패키지를 찾아보자. [root@localhost ~]# mount -r -t iso9660 /dev/cdrom /mnt/cdrom [root@localhost ~]# cd /mnt/cdrom [root@localhostcdrom]# ls EFI LiveOS Packages TRANS.TBL images isolinuxrepodata [root@localhostcdrom]# [root@localhost cdrom]# cd Packages [root@localhost Packages]# ls TRANS.TBL b d f h j l n p r t v x z a c e g i k m o q s u w y [root@localhost Packages]# [root@localhost Packages]# cd x [root@localhost x]# ls xterm* xterm-293-1.fc19.x86_64.rpm [root@localhost x]#
01 RPM 패키지 설치 • 패키지 설치와 의존성: ivh옵션 • xterm패키지를 설치하려면 libXaw.so.7이 필요하다는 것: libXaw부터 설치해야함 • 다시 xterm설치 [root@localhost x]# rpm -ivh xterm-293-1.fc19.x86_64.rpm 오류: Failed dependencies: libXaw.so.7()(64bit) is needed by xterm-293-1.fc19.x86_64 [root@localhost x]# [root@localhost x]# cd .. [root@localhost Packages]# cd l [root@localhost l]# lslibXaw* libXaw-1.0.11-5.fc19.x86_64.rpm libXaw-devel-1.0.11-5.fc19.x86_64.rpm [root@localhost l]# rpm -ivh libXaw-1.0.11-5.fc19.x86_64.rpm 준비 중... ################################# [100%] Updating / installing... 1:libXaw-1.0.11-5.fc19 ################################# [100%] [root@localhost l]# [root@localhost l]# cd ../x [root@localhost x]# rpm -ivh xterm-293-1.fc19.x86_64.rpm 준비 중... ################################# [100%] Updating / installing... 1:xterm-293-1.fc19 ################################# [100%] [root@localhost x]#
01 RPM 패키지 설치 • xterm설치 확인 및 실행 • xterm명령 확인 • xterm실행: X 윈도 환경에서 터미널을 에뮬레이션해주는 프로그램 [root@localhost x]# whereisxterm xterm: /bin/xterm /usr/bin/xterm /usr/share/man/man1/xterm.1.gz [root@localhost x]# [그림 9-4] xterm동작 화면
01 RPM 패키지 설치 • 패키지 강제 설치하기 • 이미 설치된 패키지를 다시 설치할 경우 • 강제로 패키지를 설치할 때는 --replacepkgs옵션을 사용 [root@localhost x]# rpm -ivh xterm-293-1.fc19.x86_64.rpm 준비 중... ################################# [100%] xterm-293-1.fc19.x86_64 패키지는 이미 설치되어 있습니다 [root@localhost x]# [root@localhost x]# rpm -ivh --replacepkgs xterm-293-1.fc19.x86_64.rpm 준비 중... ################################# [100%] Updating / installing... 1:xterm-293-1.fc19 ################################# [100%] [root@localhost x]#
01 RPM 패키지 설치 • RPM 패키지 업그레이드하여 설치하기: -Uvh • -U 옵션으로 패키지를 설치할 때 기존에 설치되어 있던 패키지는 업그레이드하여 설치하고 새로운 패키지는 그대로 설치 -> 따라서 -i옵션보다는 -U 옵션을 더 많이 사용 [root@localhost x]# cd ../l [root@localhost l]# rpm -Uvh lynx-2.8.8-0.1.dev15.fc19.x86_64.rpm 준비 중... ################################# [100%] Updating / installing... 1:lynx-2.8.8-0.1.dev15.fc19 ################################# [100%] [root@localhost l]#
01 RPM 패키지 설치 • 패키지 정보 검색하기: -q • 전체 패키지 목록 출력하기 : -qa [root@localhost l]# rpm -qa kexec-tools-2.0.4-10.fc19.x86_64 libnice-0.1.3-2.fc19.x86_64 pam-1.1.6-12.fc19.x86_64 mtdev-1.1.3-3.fc19.x86_64 gnome-user-docs-3.8.2-1.fc19.noarch (생략)
01 RPM 패키지 설치 • 특정 패키지 설치 여부 확인하기 : -qa | grep • 특정 파일을 포함한 패키지 확인하기 : -qf • 왜 오류 발생? -> -f 옵션으로 파일을 지정할 때는 절대 경로 사용 [root@localhost l]# rpm -qa | grep bash bash-completion-2.1-2.fc19.noarch bash-4.2.45-1.fc19.x86_64 [root@localhost l]# [root@localhost l]# rpm -qfls 오류:/mnt/cdrom/Packages/l/ls파일: 그런 파일이나 디렉터리가 없습니다’ [root@localhost l]# [root@localhost l]# rpm -qf /usr/bin/ls coreutils-8.21-11.fc19.x86_64 [root@localhost l]#
01 RPM 패키지 설치 • 패키지 상세 정보 확인하기 : -qi • 패키지 이름 구성에서 첫 번째 항목에 해당하는 부분을 지정 [root@localhost l]# rpm -qi bash Name : bash Version : 4.2.45 Release : 1.fc19 Architecture : x86_64 Install Date : Group : System Environment/Shells Size : 3648696 License : GPLv3+ Signature : RSA/SHA256, 2013년 03월 14일 (목) 오후 02시 36분 55초, Key ID 07477e65fb4b18e6 Source RPM : bash-4.2.45-1.fc19.src.rpm Build Date : Build Host : buildvm-19.phx2.fedoraproject.org Relocations : (not relocatable) Packager : Fedora Project Vendor : Fedora Project URL : http://www.gnu.org/software/bash Summary : The GNU Bourne Again shell Description : The GNU Bourne Again shell (Bash) is a shell or command language interpreter that is compatible with the Bourne shell (sh). Bash incorporates useful features from the Korn shell (ksh) and the C shell (csh). Most sh scripts can be run by bash without modification. [root@localhost l]#
01 RPM 패키지 설치 • 패키지 상세 정보 확인하기 : –qif • -f 옵션을 사용할 경우, 해당 파일이 속한 패키지의 상세 정보가 출력 [root@localhost l]# rpm -qif /usr/bin/ls Name : coreutils Version : 8.21 Release : 11.fc19 Architecture : x86_64 Install Date : Group : System Environment/Base Size : 14559867 License : GPLv3+ Signature : RSA/SHA256, 2013년 05월 09일 (목) 오전 12시 56분 21초, Key ID 07477e65fb4b18e6 Source RPM : coreutils-8.21-11.fc19.src.rpm (생략)
01 RPM 패키지 설치 • 패키지 상세 정보 확인하기 : -qip • -p 옵션을 사용할 때는 해당 패키지가 위치한 디렉터리를 지정: 패키지 이름만 지정할 경우 오류 발생 • -p 옵션을 사용할 때는 다음과 같이 패키지 파일이 위치한 디렉터리로 이동하거나 경로를 지정 [root@localhost l]# rpm -qip bash 오류: bash(을)를 여는데 실패함: 그런 파일이나 디렉터리가 없습니다 [root@localhost l]# [root@localhost l]# cd ../c [root@localhost c]# rpm -qip coreutils-8.21-11.fc19.x86_64.rpm Name : coreutils Version : 8.21 Release : 11.fc19 Architecture : x86_64 Install Date : (not installed) Group : System Environment/Base Size : 14559867 License : GPLv3+ (생략)
01 RPM 패키지 설치 • 패키지가 설치한 파일 목록 확인하기 : -ql • 패키지의 의존성 확인하기 : -qR [root@localhost c]# rpm -ql bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc /usr/bin/alias /usr/bin/bash /usr/bin/bashbug (생략) [root@localhost c]# rpm -qR xterm /bin/sh /bin/sh /bin/sh /bin/sh libICE.so.6()(64bit) libX11.so.6()(64bit) libXaw.so.7()(64bit) libXft.so.2()(64bit) libXmu.so.6()(64bit) libXpm.so.4()(64bit) (생략)
01 RPM 패키지 설치 • 패키지 삭제하기 • 앞에서 설치한 xterm패키지를 삭제 [root@localhost c]# rpm -e xterm [root@localhost c]# rpm -qa | grep xterm [root@localhost c]#
02 yum을 이용한 패키지 설치 • yum이란? • ‘Yellowdog Updater Modified’의 약자 • Yellowdog이라는 리눅스배포판에서제작했던 패키지 관리 도구(yup)와 비슷하다는 데서 이름이 유래 • yum은 rpm 기반의 패키지 관리 도구 • yum의 특징 • 패키지를 분석하여 패키지의 의존성을 해결하고 원격 자동 업데이트와 설치를 할 수 있다. • 설치 가능한 패키지에 대한 정보가 담긴 저장소(repository)를 가지고 있다. • 저장소의 정보에 의거하여 패키지를 관리한다. • yum의 기본 형식
02 yum을 이용한 패키지 설치 • 패키지 목록 확인하기 • yum list 명령의 출력 형식 패키지명.아키텍쳐 버전-릴리즈 저장소 또는 @설치한 저장소 [root@localhost ~]# yum list | more Loaded plugins: langpacks, refresh-packagekit Installed Packages GConf2.x86_64 3.2.6-6.fc19 @anaconda LibRaw.x86_64 0.14.8-3.fc19.20120830git98d925 @updates ModemManager.x86_64 0.6.2.0-1.fc19 @anaconda NetworkManager.x86_64 1:0.9.8.2-9.git20130709.fc19 @updates NetworkManager-glib.x86_64 1:0.9.8.2-9.git20130709.fc19 @updates NetworkManager-l2tp.x86_64 0.9.8-4.fc19 @updates NetworkManager-openconnect.x86_64 0.9.7.0-2.git20120918.fc19 @anaconda NetworkManager-openvpn.x86_64 1:0.9.8.2-3.fc19 @updates (생략)
02 yum을 이용한 패키지 설치 • yum list 명령에서 사용할 수 있는 옵션
02 yum을 이용한 패키지 설치 • yum list available: 설치 가능한 패키지의 목록 검색 • yum list updates: 업데이트가 가능한 패키지의 목록 • yum list installed : 현재 시스템에 설치되어 있는 패키지 목록을 출력 [root@localhost ~]# yum list available | more Loaded plugins: langpacks, refresh-packagekit Available Packages 0ad.x86_64 0.0.14-1.fc19 updates 0ad-data.noarch 0.0.14-1.fc19 updates 0xFFFF.x86_64 0.3.9-9.fc19 fedora 2ping.noarch 2.0-1.fc19 updates 389-admin.i686 1.1.35-1.fc19 updates 389-admin.x86_64 1.1.35-1.fc19 updates 389-admin-console.noarch 1.1.8-5.fc19 fedora 389-admin-console-doc.noarch 1.1.8-5.fc19 fedora (생략) [root@localhost ~]# yum list updates Loaded plugins: langpacks, refresh-packagekit Updated Packages yum-langpacks.noarch 0.4.1-3.fc19 updates [root@localhost ~]#
02 yum을 이용한 패키지 설치 • yum check-update: 업데이트 가능한 패키지 목록 확인하기 [root@localhost ~]# yum check-update Loaded plugins: langpacks, refresh-packagekit yum-langpacks.noarch 0.4.1-3.fc19 updates [root@localhost ~]#
02 yum을 이용한 패키지 설치 • 패키지 설치하기: yum install 패키지명 • 먼저 의존성이 있는 패키지의 존재 여부를 확인 • 함께 설치해야 할 패키지 목록 출력 • 내려받을파일의 크기와 실제로 설치되었을 때 필요한 디스크 용량 • 설치를 진행할 것인지 확인 • 예: autotrace패키지 설치 -> 의존성 확인 및 함께 설치할 패키지 목록 출력 [root@localhost ~]# yum install autotrace Loaded plugins: langpacks, refresh-packagekit Resolving Dependencies --> Running transaction check ---> Package autotrace.x86_64 0:0.31.1-36.fc19 will be installed (생략) Dependencies Resolved =================================================================================== Package Arch Version Repository Size =================================================================================== Installing: autotrace x86_64 0.31.1-36.fc19 updates 130 k Installing for dependencies: ImageMagick x86_64 6.7.8.9-5.fc19 fedora 2.1 M OpenEXR-libs x86_64 1.7.1-5.fc19 fedora 214 k ilmbase x86_64 1.0.3-5.fc19 fedor 99 k libwmf-lite x86_64 0.2.8.4-36.fc19 fedora 65 k
02 yum을 이용한 패키지 설치 • 패키지 설치하기 • 예: autotrace패키지 설치 -> 용량 확인 및 설치 여부 문의 • 설치: y로 응답한 경우 Transaction Summary =================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 2.6 M Installed size: 9.4 M Is this ok [y/d/N]: Downloading packages: (1/5): ImageMagick-6.7.8.9-5.fc19.x86_64.rpm | 2.1 MB 00:01 (2/5): OpenEXR-libs-1.7.1-5.fc19.x86_64.rpm | 214 kB 00:00 (3/5): ilmbase-1.0.3-5.fc19.x86_64.rpm | 99 kB 00:00 (생략) Installed: autotrace.x86_64 0:0.31.1-36.fc19 Dependency Installed: ImageMagick.x86_64 0:6.7.8.9-5.fc19 OpenEXR-libs.x86_64 0:1.7.1-5.fc19 ilmbase.x86_64 0:1.0.3-5.fc19 libwmf-lite.x86_64 0:0.2.8.4-36.fc19 Complete! [root@localhost ~]#
02 yum을 이용한 패키지 설치 • 패키지 업데이트하기: yum update 패키지명 • y로 응답하면 업데이트 진행 • [root@localhost ~]# yum update yum-langpacks • Loaded plugins: langpacks, refresh-packagekit • Resolving Dependencies • --> Running transaction check • ---> Package yum-langpacks.noarch 0:0.4.1-2.fc19 will be updated • ---> Package yum-langpacks.noarch 0:0.4.1-3.fc19 will be an update • Finished Dependency Resolution • Dependencies Resolved • =================================================================================== • Package Arch Version Repository Size • =================================================================================== • Updating: • yum-langpacksnoarch 0.4.1-3.fc19 updates 27 k • Transaction Summary • =================================================================================== • Upgrade 1 Package • Total download size: 27 k • Is this ok [y/d/N]:
02 yum을 이용한 패키지 설치 • 패키지 정보 검색하기: yum info 패키지명 • 패키지 이름, 패키지 아키텍처, 버전, 릴리즈, 패키지 파일 크기, 저장소, 요약 정보, URL, 라이선스, 설명 출력 [root@localhost ~]# yum info autotrace Loaded plugins: langpacks, refresh-packagekit Installed Packages Name : autotrace Arch : x86_64 Version : 0.31.1 Release : 36.fc19 Size : 339 k Repo : installed From repo : updates Summary : Utility for converting bitmaps to vector graphics URL : http://autotrace.sourceforge.net/ License : GPLv2+ and LGPLv2+ Description : AutoTrace is a program for converting bitmaps to vector graphics. (생략) Available Packages Name : autotrace Arch : i686 Version : 0.31.1 Release : 36.fc19 (생략) [root@localhost ~]#
02 yum을 이용한 패키지 설치 • 패키지 삭제하기: yum remove 패키지명 • 패키지를 삭제할 때도 의존성을 확인한 후, 패키지 삭제를 진행할 것인지를 물어봄 [root@localhost ~]# yum remove autotrace Loaded plugins: langpacks, refresh-packagekit Resolving Dependencies --> Running transaction check ---> Package autotrace.x86_64 0:0.31.1-36.fc19 will be erased --> Finished Dependency Resolution Dependencies Resolved =================================================================================== Package Arch Version Repository Size =================================================================================== Removing: autotrace x86_64 0.31.1-36.fc19 @updates 339 k Transaction Summary =================================================================================== Remove 1 Package Installed size: 339 k Is this ok [y/N]:
03 파일 아카이브와 압축 • 파일 아카이브 • 파일을 묶어서 하나로 만든 것 • tar(tape archive) 명령은 원래 여러 파일이나 디렉터리를 묶어서 마그네틱테이프와 같은 이동식 저장 장치에 보관하기 위해 사용하는 명령 • 현재는 다른 시스템과 파일을 주고받거나, 백업을 하기 위해 여러 파일이나 디렉터리를 하나의 아카이브 파일로 생성하거나, 기존 아카이브에서 파일을 추출하기 위해 사용
03 파일 아카이브와 압축 • 아카이브 생성하기 : cvf • tar 명령으로 파일을 묶어서 아카이브 파일을 만들어도 원본 파일은 그대로 있음 [user1@localhost linux_ex]$ tar cvf ch2.tar ch2 ch2/ ch2/data1.sl ch2/data1.ln ch2/data ch2/temp/ ch2/temp/data1.cp ch2/temp/services ch2/temp/hosts ch2/temp/text1 ch2/test ch2/one/ ch2/one/tmp/ ch2/one/tmp/test/ [user1@localhost linux_ex]$ ls ch2/ ch2.tar ch3/ ch4/ ch5/ ch6/ [user1@localhost linux_ex]$
03 파일 아카이브와 압축 • 아카이브 내용 확인하기 : tvf [user1@localhost linux_ex]$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2013-03-20 12:55 ch2/ lrwxrwxrwx user1/user1 0 2013-03-19 03:52 ch2/data1.sl -> data1 -rw-r--r-- user1/user1 158 2013-03-18 20:38 ch2/data1.ln -rw-r--r-- user1/user1 659878 2013-03-19 05:45 ch2/data drwxrwxr-x user1/user1 0 2013-03-19 08:17 ch2/temp/ -rw-r--r-- user1/user1 158 2013-03-19 05:09 ch2/temp/data1.cp -rw-r--r-- user1/user1 659878 2013-03-18 18:56 ch2/temp/services -rw-r--r-- user1/user1 158 2013-03-18 18:56 ch2/temp/hosts -rw-r--r-- user1/user1 158 2013-03-18 18:45 ch2/temp/text1 -rw-rw-r-- user1/user1 0 2013-01-01 12:00 ch2/test drwxrwxr-x user1/user1 0 2013-03-18 11:04 ch2/one/ drwxrwxr-x user1/user1 0 2013-03-19 08:12 ch2/one/tmp/ drwxrwxr-x user1/user1 0 2013-03-18 11:04 ch2/one/tmp/test/ [user1@localhost linux_ex]$
03 파일 아카이브와 압축 • 아카이브 풀기 : xvf [user1@localhost linux_ex]$ mkdir ch9 [user1@localhost linux_ex]$ mv ch2.tar ch9 [user1@localhost linux_ex]$ cd ch9 [user1@localhost ch9]$ tar xvf ch2.tar ch2/ ch2/data1.sl ch2/data1.ln (생략) [user1@localhost ch9]$ ls ch2/ ch2.tar [user1@localhost ch9]$
03 파일 아카이브와 압축 • 아카이브 업데이트하기 : uvf • u 기능은 지정한 파일이 아카이브에 없는 파일이거나, 아카이브에있는 파일이지만 수정된 파일일 경우 아카이브의 마지막에 추가 -> ch2/data 파일의 수정시간을 touch 명령으로 수정후아카이브 업데이트 [user1@localhost ch9]$ tar uvf ch2.tar data [user1@localhost ch9]$ touch ch2/data [user1@localhost ch9]$ tar uvf ch2.tar ch2/data ch2/data [user1@localhost ch9]$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2013-03-20 12:55 ch2/ lrwxrwxrwx user1/user1 0 2013-03-19 03:52 ch2/data1.sl -> data1 -rw-r--r-- user1/user1 158 2013-03-18 20:38 ch2/data1.ln -rw-r--r-- user1/user1 659878 2013-03-19 05:45 ch2/data drwxrwxr-x user1/user1 0 2013-03-19 08:17 ch2/temp/ -rw-r--r-- user1/user1 158 2013-03-19 05:09 ch2/temp/data1.cp -rw-r--r-- user1/user1 659878 2013-03-18 18:56 ch2/temp/services -rw-r--r-- user1/user1 158 2013-03-18 18:56 ch2/temp/hosts -rw-r--r-- user1/user1 158 2013-03-18 18:45 ch2/temp/text1 -rw-rw-r-- user1/user1 0 2013-01-01 12:00 ch2/test drwxrwxr-x user1/user1 0 2013-03-18 11:04 ch2/one/ drwxrwxr-x user1/user1 0 2013-03-19 08:12 ch2/one/tmp/ drwxrwxr-x user1/user1 0 2013-03-18 11:04 ch2/one/tmp/test/ -rw-r--r-- user1/user1 659878 2013-06-10 11:29 ch2/data [user1@localhost ch9]$
03 파일 아카이브와 압축 • 파일 압축과 아카이브 • 아카이브를 생성하면서 동시에 압축 수행 • 예: gzip으로 압축 [user1@localhost ch9]$ cp /etc/hosts . [user1@localhost ch9]$ tar rvf ch2.tar hosts hosts [user1@localhost ch9]$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2013-03-20 12:55 ch2/ lrwxrwxrwx user1/user1 0 2013-03-19 03:52 ch2/data1.sl -> data1 (생략) -rw-r--r-- user1/user1 659878 2013-06-10 11:29 ch2/data -rw-r--r-- user1/user1 158 2013-06-10 11:35 hosts [user1@localhost ch9]$
03 파일 아카이브와 압축 • 파일 압축과 아카이브 • 아카이브를 생성하면서 동시에 압축 실행 • 예: 아키이브 생성과 동시에 gzip으로 압축 실행: gzip로 압축할 경우 z 옵션을 사용 • 예: bzip2로 압축 실행: bzip2로 압축할 경우 j 옵션을 사용 [user1@localhost ch9]$ tar cvzf ch2.tar.gz ch2 ch2/ ch2/data1.sl ch2/data1.ln (생략) [user1@localhost ch9]$ [user1@localhost ch9]$ tar cvjf ch2.tar.bz2 ch2 ch2/ ch2/data1.sl ch2/data1.ln (생략) [user1@localhost ch9]$
03 파일 아카이브와 압축 • 파일 압축과 아카이브 • tar 파일로 생성한 것과 압축한 결과의 파일 크기를 비교 • 압축한 아카이브 파일의 내용은 tvf로 확인이 가능하며 xvf로 추출 가능 [user1@localhost ch9]$ ls -l 합계 2396 drwxrwxr-x. 4 user1 user1 4096 3월 20 12:55 ch2/ -rw-rw-r--. 1 user1 user1 1996800 6월 10 11:35 ch2.tar -rw-rw-r--. 1 user1 user1 173846 6월 10 12:57 ch2.tar.bz2 -rw-rw-r--. 1 user1 user1 266708 6월 10 12:57 ch2.tar.gz -rw-r--r--. 1 user1 user1 158 6월 10 11:35 hosts [user1@localhost ch9]$ [user1@localhost ch9]$ tar tvf ch2.tar.gz drwxrwxr-x user1/user1 0 2013-03-20 12:55 ch2/ lrwxrwxrwx user1/user1 0 2013-03-19 03:52 ch2/data1.sl -> data1 -rw-r--r-- user1/user1 158 2013-03-18 20:38 ch2/data1.ln -rw-r--r-- user1/user1 659878 2013-06-10 11:29 ch2/data (생략)
03 파일 아카이브와 압축 • 파일 압축하기: gzip/gunzip- .gz파일 [user1@localhost ch9]$ rm ch2.tar.gz rm: remove 일반 파일 'ch2.tar.gz'? y [user1@localhost ch9]$ gzip ch2.tar [user1@localhost ch9]$ ls ch2/ ch2.tar.bz2 ch2.tar.gz hosts [user1@localhost ch9]$ [user1@localhost ch9]$ gzip -l ch2.tar.gz compressed uncompressed ratio uncompressed_name 399788 1996800 80.0% ch2.tar [user1@localhost ch9]$
03 파일 아카이브와 압축 • 압축 파일의 내용 보기 : zcat [user1@localhost ch9]$ zcat ch2.tar.gz | more ch2/ 0000000 t4.localdomain4 ::1 localhostlocalhost.localdomain localhost6 localhost6.localdomain6 # $Id: services,v 1.53 2011/06/13 15:00:06 ovasikExp $ # # Network services, Internet style # IANA services version: last updated 2011-06-10 (생략)
03 파일 아카이브와 압축 • 압축 풀기 : gunzip [user1@localhost ch9]$ gunzip ch2.tar.gz [user1@localhost ch9]$ ls ch2/ ch2.tar ch2.tar.bz2 hosts [user1@localhost ch9]$
03 파일 아카이브와 압축 • bzip2/bunzip2 : .bz2 파일 [user1@localhost ch9]$ rm ch2.tar.bz2 rm: remove 일반 파일 'ch2.tar.bz2'? y [user1@localhost ch9]$ bzip2 ch2.tar [user1@localhost ch9]$ ls ch2/ ch2.tar.bz2 hosts [user1@localhost ch9]$
03 파일 아카이브와 압축 • 압축 파일의 내용 보기 : bzcat • 압축 풀기 : bunzip2 [user1@localhost ch9]$ bunzip2 ch2.tar.bz2 [user1@localhost ch9]$ ls ch2/ ch2.tar hosts [user1@localhost ch9]$
04 소프트웨어 컴파일 • 컴파일러 설치하기 • C 언어로 작성한 프로그램을 컴파일하기 위해서는 C 컴파일러가 필요 • 리눅스에서 사용하는 C 컴파일러는 GNU C 컴파일러로 패키지 이름이 gcc • gcc설치 여부 확인 -> 설치되어 있지 않음 • gcc설치 [user1@localhost ~]$ rpm -qa | grep gcc libgcc-4.8.1-1.fc19.x86_64 [user1@localhost ~]$ [root@localhost ~]# yum install gcc Loaded plugins: langpacks, refresh-packagekit Resolving Dependencies --> Running transaction check ---> Package gcc.x86_64 0:4.8.1-1.fc19 will be installed --> Processing Dependency: cpp = 4.8.1-1.fc19 for package: gcc-4.8.1-1.fc19.x86_64 --> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.1-1.fc19.x86_64 (생략) Installed: gcc.x86_64 0:4.8.1-1.fc19 Dependency Installed: cpp.x86_64 0:4.8.1-1.fc19 glibc-devel.x86_64 0:2.17-18.fc19 glibc-headers.x86_64 0:2.17-18.fc19 kernel-headers.x86_64 0:3.11.2-201.fc19 libmpc.x86_64 0:1.0.1-1.fc19 Complete! [root@localhost ~]#
04 소프트웨어 컴파일 • 간단한 C 프로그램 작성하기 • C 프로그램 컴파일하기: 실행파일명은 a.out • C 프로그램 실행하기: 경로지정 확인 [user1@localhost ch9]$ vi hello.c #include <stdio.h> main() { printf("Hello, World.\n"); } :wq [user1@localhost ch9]$ gcc hello.c [user1@localhost ch9]$ ls a.out* ch2/ ch2.tar hello.c hosts [user1@localhost ch9]$ [user1@localhost ch9]$ ./a.out Hello, World. [user1@localhost ch9]$
04 소프트웨어 컴파일 • 실행 파일명 변경하기 • gcc로 생성한 기본 실행 파일은 a.out • 사용자가 원하는 이름으로 지정하려면 –o 옵션 사용 [user1@localhost ch9]$ gcc -o hello hello.c [user1@localhost ch9]$ ./hello Hello, World. [user1@localhost ch9]$
04 소프트웨어 컴파일 • make 명령 사용하기 • make 명령은 makefile(또는 Makefile)에 설정된 정보를 읽어서 여러 소스 파일을 컴파일하고 링크하여 최종 실행 파일을 생성 • 소스파일 준비 • 컴파일 하면 오류 발생: two()가 무엇인지 모르겠다는 메시지 [user1@localhost ch9]$ vi one.c #include <stdio.h> extern int two(); main() { printf("Go to Module Two--\n"); two(); printf("End of Module One.\n"); } :wq [user1@localhost ch9]$ gccone.c /tmp/ccBLblUS.o: In function 'main': one.c:(.text+0x14): undefined reference to 'two' collect2: error: ld returned 1 exit status [user1@localhost ch9]$
04 소프트웨어 컴파일 • make 명령 사용하기 • 두 번째 파일 생성: two() 함수 정의 • makefile작성하기 [user1@localhost ch9]$ vi two.c #include <stdio.h> two() { printf("In Module Two--\n"); printf("--- This is a Moudule Two.\n"); printf("End of Module Two.\n"); } :wq [user1@localhost ch9]$ vi maekfile TARGET=one OBJECTS=one.otwo.o ${TARGET} : ${OBJECTS} gcc -o ${TARGET} ${OBJECTS} one.o : one.c gcc -c one.c two.o : two.c gcc -c two.c :wq
04 소프트웨어 컴파일 • make 파일 실행 [user1@localhost ch9]$ make gcc -c one.c gcc -c two.c gcc -o one one.otwo.o [user1@localhost ch9]$ ./one Go to Module Two-- In Module Two-- --- This is a Moudule Two. End of Module Two. End of Module One. [user1@localhost ch9]$