50
Chapter 09. 소프트웨어 관리하기

Chapter 09. 소프트웨어관리하기mclab.silla.ac.kr/lecture/201501/sm/sm_lecture_09.pdf01 RPM 패키지설치 CD/DVD 장치연결하기 CD/DVD 마운트 패키지위치찾기:

  • Upload
    others

  • View
    43

  • Download
    1

Embed Size (px)

Citation preview

Chapter 09. 소프트웨어 관리하기

00. 개요

01. RPM 패키지 설치

02. yum을 이용한 패키지 설치

03. 파일 아카이브와 압축

04. 소프트웨어 컴파일

• RPM의 장점과 단점을 설명할 수 있다.

• rpm 명령으로 패키지를 설치하고 업그레이드할 수 있다.

• rpm 명령으로 패키지를 검색하고 상세 정보를 확인할 수 있다.

• yum 명령으로 설치한 패키지와 설치 가능한 패키지, 업데이트할 수 있는 패키지

의 목록을 확인할 수 있다.

• yum 명령으로 패키지를 설치하고 업데이트하고 삭제할 수 있다.

• tar 명령으로 아카이브를 생성하고, 내용을 확인하고 풀 수 있다.

• 파일을 압축하고 압축을 풀 수 있다.

• gcc로 C 파일을 컴파일할 수 있다.

• makefile을 작성하여 make 명령으로 실행 파일을 만들 수 있다.

리눅스 실습 스터디 맵

00 개요

[그림 9-1] 9장의 내용 구성

01 RPM 패키지 설치

리눅스에서 주로 사용하는 패키지

RPM(Redhat Package Manager): 레드햇에서 만든 패키지 관리 도구

.deb: 데비안, 우분투 계열에서 사용하는 패키지

RPM의 특징

바이너리 파일로 구성되어 있어 컴파일이 필요 없다.

패키지의 파일들이 관련 디렉터리로 바로 설치된다.

한 번에 설치된 패키지의 파일을 일괄적으로 삭제할 수 있다.

기존에 설치된 패키지를 삭제하지 않고 바로 업그레이드할 수 있다.

패키지의 설치 상태를 검증할 수 있다.

패키지에 대한 정보를 제공한다.

단점: 패키지 의존성에 따라 관련 패키지가 먼저 설치되어 있지 않으면 설치할 수 없다.

RPM 패키지의 이름 구성

패키지 이름 : 첫 번째 항목에는 패키지의 이름

패키지 버전 : 두 번째 항목은 패키지의 버전

패키지 릴리즈 : 릴리즈는 해당 버전에서 몇 번째 만들어진 것인지를

나타냄. ‘1.fc19’에서 1은 첫 번째 만들어진 패키지임을, fc19는 페도라 19용으로 만들어진 것임을 의미

아키텍처 : 사용하는 시스템 아키텍처로 x86은 인텔 x86 CPU를, 64는 64비트 운영체제임을 의미

확장자 : RPM 패키지의 확장자는 .rpm을 사용하여 다른 패키지와 구분

01 RPM 패키지 설치

rpm 명령

현재 사용 중인 rpm의 버전 확인

[root@localhost ~]# rpm --versionRPM 버전 - 4.11.1[root@localhost ~]#

01 RPM 패키지 설치

RPM 패키지 설치하기

CD/DVD 장치 연결하기

페도라 iso 파일 마운트

Player→Removable Devices→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@localhost cdrom]# lsEFI LiveOS Packages TRANS.TBL images isolinux repodata[root@localhost cdrom]#

[root@localhost cdrom]# cd Packages[root@localhost Packages]# lsTRANS.TBL b d f h j l n p r t v x za 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]# ls libXaw*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]# whereis xtermxterm: /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 -qakexec-tools-2.0.4-10.fc19.x86_64libnice-0.1.3-2.fc19.x86_64pam-1.1.6-12.fc19.x86_64mtdev-1.1.3-3.fc19.x86_64gnome-user-docs-3.8.2-1.fc19.noarch(생략)

01 RPM 패키지 설치

특정 패키지 설치 여부 확인하기 : -qa | grep

특정 파일을 포함한 패키지 확인하기 : -qf

왜 오류 발생? -> -f 옵션으로 파일을 지정할 때는 절대 경로 사용

[root@localhost l]# rpm -qa | grep bashbash-completion-2.1-2.fc19.noarchbash-4.2.45-1.fc19.x86_64[root@localhost l]#

[root@localhost l]# rpm -qf ls오류:/mnt/cdrom/Packages/l/ls 파일: 그런 파일이나 디렉터리가 없습니다’[root@localhost l]#

[root@localhost l]# rpm -qf /usr/bin/lscoreutils-8.21-11.fc19.x86_64[root@localhost l]#

01 RPM 패키지 설치

패키지 상세 정보 확인하기 : -qi

패키지 이름 구성에서 첫 번째 항목에 해당하는 부분을 지정

[root@localhost l]# rpm -qi bashName : bashVersion : 4.2.45Release : 1.fc19Architecture : x86_64Install Date :Group : System Environment/ShellsSize : 3648696License : GPLv3+Signature : RSA/SHA256, 2013년 03월 14일 (목) 오후 02시 36분 55초, Key ID 07477e65fb4b18e6Source RPM : bash-4.2.45-1.fc19.src.rpmBuild Date :Build Host : buildvm-19.phx2.fedoraproject.orgRelocations : (not relocatable)Packager : Fedora ProjectVendor : Fedora ProjectURL : http://www.gnu.org/software/bashSummary : The GNU Bourne Again shellDescription :The GNU Bourne Again shell (Bash) is a shell or command languageinterpreter that is compatible with the Bourne shell (sh). Bashincorporates 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/lsName : coreutilsVersion : 8.21Release : 11.fc19Architecture : x86_64Install Date :Group : System Environment/BaseSize : 14559867License : GPLv3+Signature : RSA/SHA256, 2013년 05월 09일 (목) 오전 12시 56분 21초, Key ID 07477e65fb4b18e6Source RPM : coreutils-8.21-11.fc19.src.rpm(생략)

01 RPM 패키지 설치

패키지 상세 정보 확인하기 : -qip

-p 옵션을 사용할 때는 해당 패키지가 위치한 디렉터리를 지정: 패키지 이름만 지정할 경우 오류 발생

-p 옵션을 사용할 때는 다음과 같이 패키지 파일이 위치한 디렉터리로 이동하거나 경로를 지정

[root@localhost l]# cd ../c[root@localhost c]# rpm -qip coreutils-8.21-11.fc19.x86_64.rpmName : coreutilsVersion : 8.21Release : 11.fc19Architecture : x86_64Install Date : (not installed)Group : System Environment/BaseSize : 14559867License : GPLv3+(생략)

[root@localhost l]# rpm -qip bash오류: bash(을)를 여는데 실패함: 그런 파일이나 디렉터리가 없습니다[root@localhost l]#

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/shlibICE.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 | moreLoaded plugins: langpacks, refresh-packagekitInstalled PackagesGConf2.x86_64 3.2.6-6.fc19 @anacondaLibRaw.x86_64 0.14.8-3.fc19.20120830git98d925

@updatesModemManager.x86_64 0.6.2.0-1.fc19 @anacondaNetworkManager.x86_64 1:0.9.8.2-9.git20130709.fc19 @updatesNetworkManager-glib.x86_64 1:0.9.8.2-9.git20130709.fc19 @updatesNetworkManager-l2tp.x86_64 0.9.8-4.fc19 @updatesNetworkManager-openconnect.x86_64 0.9.7.0-2.git20120918.fc19 @anacondaNetworkManager-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 | moreLoaded plugins: langpacks, refresh-packagekitAvailable Packages0ad.x86_64 0.0.14-1.fc19 updates0ad-data.noarch 0.0.14-1.fc19 updates0xFFFF.x86_64 0.3.9-9.fc19 fedora2ping.noarch 2.0-1.fc19 updates389-admin.i686 1.1.35-1.fc19 updates389-admin.x86_64 1.1.35-1.fc19 updates389-admin-console.noarch 1.1.8-5.fc19 fedora389-admin-console-doc.noarch 1.1.8-5.fc19 fedora(생략)

[root@localhost ~]# yum list updatesLoaded plugins: langpacks, refresh-packagekitUpdated Packagesyum-langpacks.noarch 0.4.1-3.fc19 updates[root@localhost ~]#

02 yum을 이용한 패키지 설치

yum check-update: 업데이트 가능한 패키지 목록 확인하기

[root@localhost ~]# yum check-updateLoaded plugins: langpacks, refresh-packagekityum-langpacks.noarch 0.4.1-3.fc19 updates[root@localhost ~]#

02 yum을 이용한 패키지 설치

패키지 설치하기: yum install 패키지명

먼저 의존성이 있는 패키지의 존재 여부를 확인

함께 설치해야 할 패키지 목록 출력

내려받을 파일의 크기와 실제로 설치되었을 때 필요한 디스크 용량

설치를 진행할 것인지 확인

① 예: autotrace 패키지 설치 -> 의존성 확인 및 함께 설치할 패키지 목록 출력

[root@localhost ~]# yum install autotraceLoaded plugins: langpacks, refresh-packagekitResolving 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 MOpenEXR-libs x86_64 1.7.1-5.fc19 fedora 214 kilmbase x86_64 1.0.3-5.fc19 fedor 99 klibwmf-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 MInstalled size: 9.4 MIs 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.fc19Dependency Installed:

ImageMagick.x86_64 0:6.7.8.9-5.fc19 OpenEXR-libs.x86_64 0:1.7.1-5.fc19ilmbase.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-langpacksLoaded plugins: langpacks, refresh-packagekitResolving 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-langpacks noarch 0.4.1-3.fc19 updates 27 k

Transaction Summary===================================================================================Upgrade 1 PackageTotal download size: 27 kIs this ok [y/d/N]:

02 yum을 이용한 패키지 설치

패키지 정보 검색하기: yum info 패키지명

패키지 이름, 패키지 아키텍처, 버전, 릴리즈, 패키지 파일 크기, 저장소, 요약 정보, URL, 라이선스, 설명 출력

[root@localhost ~]# yum info autotraceLoaded plugins: langpacks, refresh-packagekitInstalled PackagesName : autotraceArch : x86_64Version : 0.31.1Release : 36.fc19Size : 339 kRepo : installedFrom repo : updatesSummary : Utility for converting bitmaps to vector graphicsURL : http://autotrace.sourceforge.net/License : GPLv2+ and LGPLv2+Description : AutoTrace is a program for converting bitmaps to vector graphics.(생략)

Available PackagesName : autotraceArch : i686Version : 0.31.1Release : 36.fc19(생략)[root@localhost ~]#

02 yum을 이용한 패키지 설치

패키지 삭제하기: yum remove 패키지명

패키지를 삭제할 때도 의존성을 확인한 후, 패키지 삭제를 진행할 것인지를 물어봄

[root@localhost ~]# yum remove autotraceLoaded plugins: langpacks, refresh-packagekitResolving Dependencies--> Running transaction check---> Package autotrace.x86_64 0:0.31.1-36.fc19 will be erased--> Finished Dependency ResolutionDependencies Resolved===================================================================================Package Arch Version Repository

Size===================================================================================Removing:autotrace x86_64 0.31.1-36.fc19 @updates 339 k

Transaction Summary===================================================================================Remove 1 PackageInstalled size: 339 kIs this ok [y/N]:

03 파일 아카이브와 압축

파일 아카이브

파일을 묶어서 하나로 만든 것

tar(tape archive) 명령은 원래 여러 파일이나 디렉터리를 묶어서 마그네틱테이프와 같은 이동식 저장 장치에 보관하기 위해 사용하는 명령

현재는 다른 시스템과 파일을 주고받거나, 백업을 하기 위해 여러 파일이나 디렉터리를 하나의 아카이브 파일로 생성하거나, 기존 아카이브에서 파일을 추출하기 위해 사용

03 파일 아카이브와 압축

아카이브 생성하기 : cvf

tar 명령으로 파일을 묶어서 아카이브 파일을 만들어도 원본 파일은 그대로 있음

[user1@localhost linux_ex]$ tar cvf ch2.tar ch2ch2/ch2/data1.slch2/data1.lnch2/datach2/temp/ch2/temp/data1.cpch2/temp/servicesch2/temp/hostsch2/temp/text1ch2/testch2/one/ch2/one/tmp/ch2/one/tmp/test/[user1@localhost linux_ex]$ lsch2/ ch2.tar ch3/ ch4/ ch5/ ch6/[user1@localhost linux_ex]$

03 파일 아카이브와 압축

아카이브 내용 확인하기 : tvf

[user1@localhost linux_ex]$ tar tvf ch2.tardrwxrwxr-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/datadrwxrwxr-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/testdrwxrwxr-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.tarch2/ch2/data1.slch2/data1.ln(생략)[user1@localhost ch9]$ lsch2/ 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/datach2/data[user1@localhost ch9]$ tar tvf ch2.tardrwxrwxr-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/datadrwxrwxr-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/testdrwxrwxr-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 hostshosts[user1@localhost ch9]$ tar tvf ch2.tardrwxrwxr-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 ch2ch2/ch2/data1.slch2/data1.ln(생략)[user1@localhost ch9]$

[user1@localhost ch9]$ tar cvjf ch2.tar.bz2 ch2ch2/ch2/data1.slch2/data1.ln(생략)[user1@localhost ch9]$

03 파일 아카이브와 압축

파일 압축과 아카이브

tar 파일로 생성한 것과 압축한 결과의 파일 크기를 비교

압축한 아카이브 파일의 내용은 tvf로 확인이 가능하며 xvf로 추출 가능

[user1@localhost ch9]$ ls -l합계 2396drwxrwxr-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.gzdrwxrwxr-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.gzrm: remove 일반 파일 'ch2.tar.gz'? y[user1@localhost ch9]$ gzip ch2.tar[user1@localhost ch9]$ lsch2/ ch2.tar.bz2 ch2.tar.gz hosts[user1@localhost ch9]$[user1@localhost ch9]$ gzip -l ch2.tar.gz

compressed uncompressed ratio uncompressed_name399788 1996800 80.0% ch2.tar

[user1@localhost ch9]$

03 파일 아카이브와 압축

압축 파일의 내용 보기 : zcat

[user1@localhost ch9]$ zcat ch2.tar.gz | morech2/0000000t4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# $Id: services,v 1.53 2011/06/13 15:00:06 ovasik Exp $## Network services, Internet style# IANA services version: last updated 2011-06-10(생략)

03 파일 아카이브와 압축

압축 풀기 : gunzip

[user1@localhost ch9]$ gunzip ch2.tar.gz[user1@localhost ch9]$ lsch2/ ch2.tar ch2.tar.bz2 hosts[user1@localhost ch9]$

03 파일 아카이브와 압축

bzip2/bunzip2 : .bz2 파일

[user1@localhost ch9]$ rm ch2.tar.bz2rm: remove 일반 파일 'ch2.tar.bz2'? y[user1@localhost ch9]$ bzip2 ch2.tar[user1@localhost ch9]$ lsch2/ ch2.tar.bz2 hosts[user1@localhost ch9]$

03 파일 아카이브와 압축

압축 파일의 내용 보기 : bzcat

압축 풀기 : bunzip2

[user1@localhost ch9]$ bunzip2 ch2.tar.bz2[user1@localhost ch9]$ lsch2/ ch2.tar hosts[user1@localhost ch9]$

04 소프트웨어 컴파일

컴파일러 설치하기

C 언어로 작성한 프로그램을 컴파일하기 위해서는 C 컴파일러가 필요

리눅스에서 사용하는 C 컴파일러는 GNU C 컴파일러로 패키지 이름이 gcc

gcc 설치 여부 확인 -> 설치되어 있지 않음

gcc 설치

[user1@localhost ~]$ rpm -qa | grep gcclibgcc-4.8.1-1.fc19.x86_64[user1@localhost ~]$

[root@localhost ~]# yum install gccLoaded plugins: langpacks, refresh-packagekitResolving 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.fc19Dependency Installed:cpp.x86_64 0:4.8.1-1.fc19 glibc-devel.x86_64 0:2.17-18.fc19glibc-headers.x86_64 0:2.17-18.fc19 kernel-headers.x86_64 0:3.11.2-201.fc19libmpc.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]$ lsa.out* ch2/ ch2.tar hello.c hosts[user1@localhost ch9]$

[user1@localhost ch9]$ ./a.outHello, World.[user1@localhost ch9]$

04 소프트웨어 컴파일

실행 파일명 변경하기

gcc로 생성한 기본 실행 파일은 a.out

사용자가 원하는 이름으로 지정하려면 –o 옵션 사용

[user1@localhost ch9]$ gcc -o hello hello.c[user1@localhost ch9]$ ./helloHello, 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]$ gcc one.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 maekfileTARGET=oneOBJECTS=one.o two.o${TARGET} : ${OBJECTS}

gcc -o ${TARGET} ${OBJECTS}one.o : one.c

gcc -c one.ctwo.o : two.c

gcc -c two.c:wq

04 소프트웨어 컴파일

make 파일 실행

[user1@localhost ch9]$ makegcc -c one.cgcc -c two.cgcc -o one one.o two.o[user1@localhost ch9]$ ./oneGo to Module Two--In Module Two----- This is a Moudule Two.End of Module Two.End of Module One.[user1@localhost ch9]$