Chapter 09. 소프트웨어관리하기
00. 개요 01. 우분투패키지의개요 02. 우분투패키지설치 03. 파일아카이브와압축 04. 소프트웨어컴파일
우분투패키지를설치하고업그레이드할수있다. APT 명령으로패키지를검색하고상세정보를확인할수있다. dpkg 명령으로패키지를설치하고업데이트하고삭제할수있다. aptitude 명령으로패키지를관리할수있다. 우분투소프트웨어센터에서프로그램을확인하고설치할수있다. tar 명령으로아카이브를생성하고, 내용을확인하고풀수있다. 파일을압축하고압축을풀수있다. gcc로 C 파일을컴파일할수있다. makefile을작성하여 make 명령으로실행파일을만들수있다.
리눅스실습스터디맵
00 개요 [ 그림 9-1] 9 장의내용구성
01 우분투패키지의개요 리눅스에서주로사용하는패키지.deb: 데비안, 우분투계열에서사용하는패키지 RPM(Redhat Package Manager): 레드햇에서만든패키지관리도구 우분투패키지의특징 바이너리파일로구성되어있어컴파일이필요없다. 패키지의파일들이관련디렉터리로바로설치된다. 한번에설치된패키지의파일을일괄적으로삭제할수있다. 기존에설치된패키지를삭제하지않고바로업그레이드할수있다. 패키지의설치상태를검증할수있다. 패키지에대한정보를제공한다. 해당패키지와의존성을가지고있는패키지가무엇인지알려준다. 따라서의존성이있는패키지를미리설치할수도있고, apt-get 명령을사용하면의존성이있는패키지가자동으로설치된다.
01 우분투패키지의개요 우분투패키지의카테고리 공식적으로데비안배포판에포함된모든패키지는데비안자유소프트웨어지침에따라자유롭게사용하고배포할수있음 우분투도네개의카테고리로나누어소프트웨어를제공 main : 우분투에의해공식적으로지원되며자유롭게배포할수있다. restricted : 우분투에의해지원되나완전한자유라이선스소프트웨어는아니다. universe : 리눅스에서사용할수있는거의대부분의소프트웨어로자유소프트웨어일수도있고아닐수도있으며, 기술적지원을보장하지않는다. multiverse : 자유소프트웨어가아닌소프트웨어가포함되어있으며, 개인이직접라이선스를확인해야한다. 우분투패키지의이름구성 파일명 : 첫번째항목은패키지의성격을표시 패키지버전 : 두번째항목은패키지의버전을의미 패키지리비전 : 리비전은원래소스의버전이업그레이드되지는않았지만패키지의보안문제나의존성변화, 스크립트의변화등이있음을의미 아키텍처 : 사용하는시스템아키텍처로 i386 은인텔을, all 은시스템과상관없는문서나스크립트등을의미 확장자 : 우분투패키지의확장자는.deb 를사용
01 우분투패키지의개요 우분투패키지저장소 우분투는패키지와패키지에대한정보를저장하고있는서버인패키지저장소라는개념을사용 패키지저장소에서는패키지의기능추가나보안패치등지속적인업그레이드를집중적으로관리 사용자는저장소에접속하여최신패키지를내려받아설치가능 패키지저장소에대한정보는 /etc/apt/sources.list 파일에저장 패키지유형 : deb 는바이너리패키지의저장소를, deb-src 는패키지의소스저장소를의미한다. 보통한저장소에바이너리와소스를함께저장 저장소주소 : http 프로토콜을사용하는 URL 주소를사용 우분투버전정보 : 저장소에서관리하는패키지에해당하는우분투의버전을표시한다. 버전은번호가아니라버전의이름을사용 카테고리 : 저장소가가지고있는소프트웨어카테고리 (main, restricted 등 ) 를표시 user1@myubuntu:~$ cat /etc/apt/sources.list #deb cdrom:[ubuntu 13.10 _Saucy Salamander_ - Release i386 (20131016.1)]/ saucy main restricted # See http://help.ubuntu.com/community/upgradenotes for how to upgrade to # newer versions of the distribution. deb http://kr.archive.ubuntu.com/ubuntu/ saucy main restricted deb-src http://kr.archive.ubuntu.com/ubuntu/ saucy main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://kr.archive.ubuntu.com/ubuntu/ saucy-updates main restricted deb-src http://kr.archive.ubuntu.com/ubuntu/ saucy-updates main restricted ( 생략 )
APT 명령으로패키지관리하기 apt-cache 명령 : APT 캐시 ( 패키지데이터베이스 ) 에서정보를검색하여출력
apt-cache 명령 APT 캐시통계정보보기 : stats 전체패키지이름 : 패키지이름의전체개수 일반패키지 : 일반적으로사용하는패키지의개수 순수가상패키지 (pure virtual package) 가상패키지는패키지의이름만제공하며그이름을가진별도의패키지가실제로있는것은아님 단일가상패키지 (single virtual package) 한패키지가특정가상패키지의기능을제공 혼합가상패키지 (mixed virtual package) 특정가상패키지를제공하거나가상패키지의이름을패키지이름으로사용하는경우 빠짐 (missing) : 의존성은있지만어떠한패키지도제공하지않는패키지 개별버전전체 (total distinct version) : 캐시에있는패키지버전의개수를의미 user1@myubuntu:~$ apt-cache stats 전체패키지이름 : 54542 (1,091 k) 전체패키지구조 : 54542 (2,618 k) 일반패키지 : 42089 순수가상패키지 : 550 단일가상패키지 : 4201 혼합가상패키지 : 862 빠짐 : 6840 개별버전전체 : 45364 (2,903 k) 개별설명전체 : 87878 (2,109 k) 전체의존성 : 267404 (7,487 k) 전체버전 / 파일관계 : 47856 (766 k) 전체설명 / 파일관계 : 87878 (1,406 k) 전체제공매핑 : 8100 (162 k) 전체패턴문자열 : 240 (2,731 ) 전체의존성버전용량 : 1,244 k 전체빈용량 : 85.2 k 차지하는전체용량 : 14.0 M user1@myubuntu:~$
apt-cache 명령 사용가능한패키지이름보기 : pkgnames user1@myubuntu:~$ apt-cache pkgnames crm114 e3 filelight fonts-moe-standard-kai gstreamer1.0-fluendo-mp3 icewm-themes kde-config-tablet language-pack-fil-base libauthen-simple-http-perl libbio-ruby libbiojava1.7-java ( 생략 )
apt-cache 명령 패키지이름검색하기 : search user1@myubuntu:~$ apt-cache search vsftpd vsftpd - lightweight, efficient FTP server written for security ccze - A robust, modular log coloriser ftpd - File Transfer Protocol (FTP) server yasat - simple stupid audit tool user1@myubuntu:~$ 패키지정보검색하기 : show 버전, 패키지크기, 카테고리, 체크섬등패키지에관한정보를확인하려면 show 서브명령을사용 user1@myubuntu:~$ apt-cache show vsftpd Package: vsftpd Priority: extra Section: net Installed-Size: 363 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Daniel Baumann <daniel.baumann@progress-technologies.net> Architecture: i386 Version: 3.0.2-1ubuntu2 ( 생략 )
apt-cache 명령 패키지의존성검색하기 : showpkg user1@myubuntu:~$ apt-cache showpkg vsftpd Package: vsftpd Versions: 3.0.2-1ubuntu2 (/var/lib/apt/lists/kr.archive.ubuntu.com_ubuntu_dists_saucy_main _binary-i386_packages) ( 생략 ) Reverse Depends: ubumirror,vsftpd harden-servers,vsftpd Dependencies: 3.0.2-1ubuntu2 - debconf (18 0.5) debconf-2.0 (0 (null)) upstart-job (0 (null)) libc6 (2 2.15) libcap2 (2 2.10) libpam0g (2 0.99.7.1) libssl1.0.0 (2 1.0.0) libwrap0 (2 7.6-4~) adduser (0 (null)) libpam-modules (0 (null)) netbase (0 (null)) logrotate (0 (null)) ftp-server (0 (null)) ftp-server (0 (null)) Provides: 3.0.2-1ubuntu2 - ftp-server Reverse Provides: user1@myubuntu:~$
apt-get 명령
apt-get 명령 패키지정보업데이트하기 : update /etc/apt/sources.list에명시한저장소에서패키지정보를읽어동기화 새로운패키지정보를가져와서 APT 캐시를수정 user1@myubuntu:~$ sudo apt-get update [sudo] password for user1: 무시 http://kr.archive.ubuntu.com saucy InRelease 무시 http://kr.archive.ubuntu.com saucy-updates InRelease 무시 http://kr.archive.ubuntu.com saucy-backports InRelease 기존 http://kr.archive.ubuntu.com saucy Release.gpg 받기 :1 http://kr.archive.ubuntu.com saucy-updates Release.gpg [933 B] 받기 :2 http://kr.archive.ubuntu.com saucy-backports Release.gpg [933 B] 기존 http://kr.archive.ubuntu.com saucy Release 받기 :3 http://kr.archive.ubuntu.com saucy-updates Release [49.6 kb] ( 생략 )
apt-get 명령 패키지업그레이드하기 : upgrade 현재설치되어있는모든패키지중에서새로운버전이있는패키지를모두업그레이드 user1@myubuntu:~$ sudo apt-get upgrade 패키지목록을읽는중입니다... 완료의존성트리를만드는중입니다상태정보를읽는중입니다... 완료다음패키지를과거버전으로유지합니다 : linux-generic linux-headers-generic linux-image-generic python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk 다음패키지를업그레이드할것입니다 : account-plugin-aim account-plugin-jabber account-plugin-salut account-plugin-yahoo apparmor apport apport-gtk aptdaemon aptdaemon-data at-spi2-core avahi-autoipd avahi-daemon avahi-utils bind9-host cpp-4.8 cups cups-browsed cups-bsd cups-client cups-common cups-daemon cups-filters ( 생략 ) 285 개업그레이드, 0 개새로설치, 0 개제거및 6 개업그레이드안함. 127 M 바이트 /211 M 바이트아카이브를받아야합니다. 이작업후 4,821 k 바이트의디스크공간을더사용하게됩니다. 계속하시겠습니까 [Y/n]?
apt-get 명령 특정패키지설치또는업그레이드하기 : install 하나이상의패키지를설치하거나업그레이드할때는 install 서브명령을사용 user1@myubuntu:~$ sudo apt-get install netcat 패키지목록을읽는중입니다... 완료의존성트리를만드는중입니다상태정보를읽는중입니다... 완료다음패키지를더설치할것입니다 : netcat-traditional 다음새패키지를설치할것입니다 : netcat netcat-traditional 0 개업그레이드, 2 개새로설치, 0 개제거및 291 개업그레이드안함. 67.1 k 바이트아카이브를받아야합니다. 이작업후 186 k 바이트의디스크공간을더사용하게됩니다. 계속하시겠습니까 [Y/n]? y ( 생략 ) Selecting previously unselected package netcat. netcat 패키지를푸는중입니다 (.../netcat_1.10-40_all.deb 에서 )... man-db 에대한트리거를처리하는중입니다... netcat-traditional (1.10-40) 설정하는중입니다... netcat (1.10-40) 설정하는중입니다... user1@myubuntu:~$
apt-get 명령 특정패키지설치또는업그레이드하기 : install 여러패키지를한번에설치하려면다음과같이패키지이름을나열 user1@myubuntu:~$ sudo apt-get install nethogs goaccess 패키지를설치할때업그레이드를하지않으려면 --no-upgrade 옵션을사용 user1@myubuntu:~$ sudo apt-get install netcat --no-upgrade 새로운패키지를설치하지않고업그레이드만할때는 --only-upgrade 옵션을사용 user1@myubuntu:~$ sudo apt-get install netcat --only-upgrade
apt-get 명령 패키지삭제하기 : remove user1@myubuntu:~$ sudo apt-get remove netcat [sudo] password for user1: 패키지목록을읽는중입니다... 완료의존성트리를만드는중입니다상태정보를읽는중입니다... 완료다음패키지가자동으로설치되었지만더이상필요하지않습니다 : netcat-traditional Use 'apt-get autoremove' to remove it. 다음패키지를지울것입니다 : netcat 0 개업그레이드, 0 개새로설치, 1 개제거및 291 개업그레이드안함. 이작업후 30.7 k 바이트의디스크공간이비워집니다. 계속하시겠습니까 [Y/n]?y ( 데이터베이스읽는중... 현재 168073 개의파일과디렉터리가설치되어있습니다.) netcat 패키지를지우는중입니다... user1@myubuntu:~$ 설정파일을포함하여패키지를삭제하려면 purge 서브명령을사용 user1@myubuntu:~$ sudo apt-get purge netcat user1@myubuntu:~$ sudo apt-get remove --purge netcat
apt-get 명령 패키지자동정리및삭제하기 : autoremove 자동으로설치되었으나필요없는패키지는 autoremove 서브명령으로정리 user1@myubuntu:~$ sudo apt-get autoremove 패키지목록을읽는중입니다... 완료의존성트리를만드는중입니다상태정보를읽는중입니다... 완료다음패키지를지울것입니다 : netcat-traditional 0 개업그레이드, 0 개새로설치, 1 개제거및 288 개업그레이드안함. 이작업후 156 k 바이트의디스크공간이비워집니다. 계속하시겠습니까 [Y/n]? y ( 데이터베이스읽는중... 현재 168070 개의파일과디렉터리가설치되어있습니다.) netcat-traditional 패키지를지우는중입니다... man-db 에대한트리거를처리하는중입니다... user1@myubuntu:~$ 디스크공간정리하기 : clean 검색했거나내려받은패키지파일들을삭제하고디스크공간을정리 user1@myubuntu:~$ sudo apt-get clean
apt-get 명령 패키지내려받기 : download 패키지를설치하지않고내려받기만하려면 download 서브명령을사용 user1@myubuntu:~$ sudo apt-get download netcat 받기 :1 netcat 1.10-40 다운로드중 [3,340 B] 내려받기 3,340 바이트, 소요시간 1 초 (1,775 바이트 / 초 ) user1@myubuntu:~$ ls net* netcat_1.10-40_all.deb user1@myubuntu:~$ 패키지의소스관련서브명령 : source 특정패키지의소스코드를내려받기만하는경우 user1@myubuntu:~$ sudo apt-get --download-only source 패키지명 특정패키지의소스코드를내려받고압축을푸는경우 user1@myubuntu:~$ sudo apt-get source 패키지명 특정패키지의소스코드를내려받아압축을풀고컴파일하는경우 user1@myubuntu:~$ sudo apt-get --compile source 패키지명
dpkg 명령으로패키지관리하기
dpkg 명령으로패키지관리하기 패키지목록보기 : -l 옵션 출력결과에서첫글자는상단의희망상태를나타내고, 두번째글자는상태를표시 user1@myubuntu:~$ dpkg -l 희망상태 = 알수없음 (U)/ 설치 (I)/ 지우기 (R)/ 깨끗이 (P)/ 고정 (H) 상태 = 아님 (N)/ 설치 (I)/ 설정 (C)/ 풀림 (U)/ 절반설정 (F)/ 일부설치 (H)/ 트리거대기 (W)/ / 트리거밀림 (T) / 오류?=( 없음 )/ 다시설치필요 (R) ( 상태, 오류가대문자 = 불량 ) / 이름 버전 Architecture 설명 + + + - = = = = = = = = = = = = = = - = = = = = = = = = = = = - = = = = = = = = = = = = - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ( 생략 ) ii yelp-xsl 3.8.1-2 all XSL stylesheets for the yelp help ii zeitgeist 0.9.14-0ubun all event logging framework ii zeitgeist-core 0.9.14-0ubun i386 event logging framework - engine ii zeitgeist-data 0.9.14-0ubun i386 event logging framework - passive ii zenity 3.8.0-1 i386 Display graphical dialog boxes fr ii zenity-common 3.8.0-1 all Display graphical dialog boxes fr ii zip 3.0-7 i386 Archiver for.zip files ii zlib1g:i386 1:1.2.8.dfsg i386 compression library - runtime user1@myubuntu:~$
dpkg 명령으로패키지관리하기 패키지목록보기 : -l 옵션 -l 다음에특정패키지의이름을지정하면해당패키지에관한정보만출력 user1@myubuntu:~$ dpkg -l zip 희망상태 = 알수없음 (U)/ 설치 (I)/ 지우기 (R)/ 깨끗이 (P)/ 고정 (H) 상태 = 아님 (N)/ 설치 (I)/ 설정 (C)/ 풀림 (U)/ 절반설정 (F)/ 일부설치 (H)/ 트리거대기 (W)/ / 트리거밀림 (T) / 오류?=( 없음 )/ 다시설치필요 (R) ( 상태, 오류가대문자 = 불량 ) / 이름버전 Architecture 설명 + + + - = = = = = = = = = = = = = = - = = = = = = = = = = = = - = = = = = = = = = = = = - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ii zip 3.0-7 i386 Archiver for.zip files user1@myubuntu:~$
dpkg 명령으로패키지관리하기 패키지상세정보보기 : -s 옵션 user1@myubuntu:~$ dpkg -s zip Package: zip Status: install ok installed Priority: optional Section: utils Installed-Size: 590 Maintainer: Ubuntu Developers ubuntu-devel-discuss@lists.ubuntu.com Architecture: i386 Multi-Arch: foreign Version: 3.0-7 Replaces: zip-crypt (<= 2.30-2) Depends: libbz2-1.0, libc6 (>= 2.7) Recommends: unzip Conflicts: zip-crypt (<= 2.30-2) Description: Archiver for.zip files This is InfoZIP's zip program. It produces files that are fully compatible with the popular PKZIP program; however, the command line options are not identical. In other words, the end result is the same, but the methods differ. :-). ( 생략 ) user1@myubuntu:~$
dpkg 명령으로패키지관리하기 특정파일이포함된패키지검색하기 : -S 옵션 user1@myubuntu:~$ dpkg -S /bin/ls coreutils: /bin/ls user1@myubuntu:~$ 패키지가설치한파일목록검색하기 : -L 옵션 user1@myubuntu:~$ dpkg -L zip /. /usr /usr/bin /usr/bin/zipnote /usr/bin/zip /usr/bin/zipsplit /usr/bin/zipcloak ( 생략 ) user1@myubuntu:~$
dpkg 명령으로패키지관리하기 패키지의파일목록검색하기 : -c 옵션 user1@myubuntu:~$ dpkg -c netcat_1.10-40_all.deb drwxr-xr-x root/root 0 2012-06-13 19:15./ drwxr-xr-x root/root 0 2012-06-13 19:15./usr/ drwxr-xr-x root/root 0 2012-06-13 19:15./usr/share/ drwxr-xr-x root/root 0 2012-06-13 19:15./usr/share/doc/ drwxr-xr-x root/root 0 2012-06-13 19:15./usr/share/doc/netcat/ -rw-r--r-- root/root 735 2011-02-11 14:21./usr/share/doc/netcat/copyright -rw-r--r-- root/root 1729 2012-06-13 19:15./usr/share/doc/netcat/changelog. Debian.gz user1@myubuntu:~$
dpkg 명령으로패키지관리하기 패키지설치하기 : -i 옵션 1 netcat_1.10-40_all.deb 패키지를설치시도 user1@myubuntu:~$ sudo dpkg -i netcat_1.10-40_all.deb [sudo] password for user1: Selecting previously unselected package netcat. ( 데이터베이스읽는중... 현재 168036 개의파일과디렉터리가설치되어있습니다.) netcat 패키지를푸는중입니다 (netcat_1.10-40_all.deb 에서 )... dpkg: dependency problems prevent configuration of netcat: netcat 패키지는다음패키지에의존 : netcat-traditional (>= 1.10-39): 하지만 : netcat-traditional 패키지는설치하지않았습니다. dpkg: error processing netcat (--install): 의존성문제 - 설정하지않고남겨둠처리하는데오류가발생했습니다 : netcat user1@myubuntu:~$ APT 명령과달리 dpkg 명령은의존성이있는패키지를자동으로설치하지않으므로사용자가일일이설치해야함 따라서 netcat-traditional 패키지를내려받아먼저설치한다음 netcat 패키지를설치해야함
dpkg 명령으로패키지관리하기 2 netcat-traditional 패키지를다운로드 user1@myubuntu:~$ apt-get download netcat-traditional 받기 :1 netcat-traditional 1.10-40 다운로드중 [63.8 kb] 내려받기 63.8 k 바이트, 소요시간 0 초 (65.0 k 바이트 / 초 ) user1@myubuntu:~$ ls netcat* netcat-traditional_1.10-40_i386.deb netcat_1.10-40_all.deb user1@myubuntu:~$ 3 차례로설치 user1@myubuntu:~$ sudo dpkg -i netcat-traditional_1.10-40_i386.deb Selecting previously unselected package netcat-traditional. ( 데이터베이스읽는중... 현재 168039 개의파일과디렉터리가설치되어있습니다.) netcat-traditional 패키지를푸는중입니다 (netcat-traditional_1.10-40_i386.deb 에서 )... netcat-traditional (1.10-40) 설정하는중입니다... man-db 에대한트리거를처리하는중입니다... user1@myubuntu:~$ sudo dpkg -i netcat_1.10-40_all.deb ( 데이터베이스읽는중... 현재 168075 개의파일과디렉터리가설치되어있습니다.) netcat 1.10-40 패키지를대체할준비하는중입니다 (netcat_1.10-40_all.deb 사용 )... 대체되는 netcat 패키지를푸는중입니다... netcat (1.10-40) 설정하는중입니다... user1@myubuntu:~$
dpkg 명령으로패키지관리하기 패키지삭제하기 : -r, -P 옵션 -r 옵션은설치된패키지만삭제하고, -P 옵션은패키지와설정정보를모두삭제 user1@myubuntu:~$ sudo dpkg -r netcat ( 데이터베이스읽는중... 현재 168073 개의파일과디렉터리가설치되어있습니다.) netcat 패키지를지우는중입니다... user1@myubuntu:~$ user1@myubuntu:~$ sudo dpkg -P netcat-traditional ( 데이터베이스읽는중... 현재 168070 개의파일과디렉터리가설치되어있습니다.) netcat-traditional 패키지를지우는중입니다... man-db 에대한트리거를처리하는중입니다... user1@myubuntu:~$
dpkg 명령으로패키지관리하기.deb 파일풀기 : -x 옵션 user1@myubuntu:~$ mkdir netcat user1@myubuntu:~$ sudo dpkg -x netcat_1.10-40_all.deb netcat user1@myubuntu:~$ ls -R netcat netcat: usr netcat/usr: share netcat/usr/share: doc netcat/usr/share/doc: netcat netcat/usr/share/doc/netcat: changelog.debian.gz copyright user1@myubuntu:~$
aptitude 명령으로패키지관리하기 aptitude 는 APT 명령처럼패키지관리를자동화하여쉽게작업할수있도록해줌 옵션이나서브명령없이실행할경우 curses 를이용한비주얼모드로동작
aptitude 명령으로패키지관리하기 aptitude 명령설치 user1@myubuntu:~$ sudo apt-get install aptitude aptitude 단독으로실행하기 user1@myubuntu:~$ sudo aptitude [ 그림 9-5] apitude 실행화면
aptitude 를명령으로사용하기 패키지정보업데이트하기 : update user1@myubuntu:~$ sudo aptitude update ( 생략 ) Ign http://security.ubuntu.com saucy-security/restricted Translation-ko_KR Ign http://security.ubuntu.com saucy-security/restricted Translation-ko Ign http://security.ubuntu.com saucy-security/universe Translation-ko_KR Ign http://security.ubuntu.com saucy-security/universe Translation-ko Fetched 238 kb in 23 초 (10.2 kb/s) user1@myubuntu:~$ 패키지검색하기 : search user1@myubuntu:~$ aptitude search gnome p amule-gnome-support - ed2k links handling support for GNOME web p apt-watch-gnome - Applet that monitors apt sources for upgra p backintime-gnome - GNOME front-end for backintime p celestia-gnome - real-time visual space simulation (GNOME f i compiz-gnome - OpenGL window and compositing manager - GN p desktopnova-module-gnome - GNOME module for DesktopNova p dia-gnome - Diagram editor (GNOME version) ( 생략 )
aptitude 를명령으로사용하기 패키지상세정보확인하기 : show user1@myubuntu:~$ aptitude show gnome-clocks p gnome-clocks - Simple GNOME app with stopwatch, timer, an user1@myubuntu:~$ aptitude show gnome-clocks Package: gnome-clocks State: not installed Version: 3.8.2-1 Priority: 옵션 Section: universe/gnome Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: i386 Uncompressed Size: 1,258 k Depends: libc6 (>= 2.4), libcairo2 (>= 1.2.4), libcanberra0 (>= 0.30), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.18), libgnome-desktop-3-7 (>= 3.7.90), libgtk-3-0 (>= 3.7.12), libgweather-3-3 (>= 3.7.91), libnotify4 (>= 0.7.0), libpango-1.0-0 (>= 1.14.0), dconf-gsettings-backend gsettings-backend Description: Simple GNOME app with stopwatch, timer, and world clock support GNOME Clocks is a simple application to show the time and date in multiple locations and set alarms or timers. A stopwatch is also included. Homepage: https://live.gnome.org/gnomeclocks user1@myubuntu:~$
aptitude 를명령으로사용하기 패키지설치하기 : install user1@myubuntu:~$ sudo aptitude install gnome-clocks The following NEW packages will be installed: gnome-clocks 0 packages upgraded, 1 newly installed, 0 to remove and 288 not upgraded. Need to get 273 kb of archives. After unpacking 1,258 kb will be used. Get: 1 http://kr.archive.ubuntu.com/ubuntu/ saucy/universe gnome-clocks i386 3.8.2-1 [273 kb] Fetched 273 kb in 0 초 (445 kb/s) Selecting previously unselected package gnome-clocks. ( 데이터베이스읽는중... 현재 168877 개의파일과디렉터리가설치되어있습니다.) gnome-clocks 패키지를푸는중입니다 (.../gnome-clocks_3.8.2-1_i386.deb 에서 )... libglib2.0-0:i386 에대한트리거를처리하는중입니다... hicolor-icon-theme 에대한트리거를처리하는중입니다... gnome-menus 에대한트리거를처리하는중입니다... desktop-file-utils 에대한트리거를처리하는중입니다... bamfdaemon 에대한트리거를처리하는중입니다... Rebuilding /usr/share/applications/bamf-2.index... mime-support 에대한트리거를처리하는중입니다... gnome-clocks (3.8.2-1) 설정하는중입니다... user1@myubuntu:~$
우분투소프트웨어센터
03 파일아카이브와압축 파일아카이브 파일을묶어서하나로만든것 tar(tape archive) 명령은원래여러파일이나디렉터리를묶어서마그네틱테이프와같은이동식저장장치에보관하기위해사용하는명령 현재는다른시스템과파일을주고받거나, 백업을하기위해여러파일이나디렉터리를하나의아카이브파일로생성하거나, 기존아카이브에서파일을추출하기위해사용
03 파일아카이브와압축 아카이브생성하기 : cvf user1@myubuntu:~/linux_ex$ tar cvf ch2.tar ch2 ch2/ ch2/one/ ch2/one/tmp/ ch2/one/tmp/test/ ch2/data1.ln ch2/temp/ ch2/temp/hosts ch2/temp/services ch2/temp/data1.cp ch2/temp/text2 ch2/data ch2/test ch2/data1.sl user1@myubuntu:~/linux_ex$ ls ch2 ch2.tar ch3 ch4 ch5 ch6 user1@myubuntu:~/linux_ex$ tar 명령으로파일을묶어서아카이브파일을만들어도원본파일은그대로있음
03 파일아카이브와압축 아카이브내용확인하기 : tvf user1@myubuntu:~/linux_ex$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/test/ -rw-r--r-- user1/user1 223 2014-02-22 12:36 ch2/data1.ln drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/temp/ -rw-r--r-- user1/user1 223 2014-02-22 12:42 ch2/temp/hosts -rw-r--r-- user1/user1 19436 2014-02-22 12:42 ch2/temp/services -rw-r--r-- user1/user1 223 2014-02-22 14:54 ch2/temp/data1.cp -rw-r--r-- user1/user1 223 2014-02-22 12:40 ch2/temp/text2 -rw-r--r-- user1/user1 19436 2014-02-22 14:56 ch2/data -rw-rw-r-- user1/user1 0 2014-01-01 12:00 ch2/test lrwxrwxrwx user1/user1 0 2014-02-22 14:40 ch2/data1.sl -> data1 user1@myubuntu:~/linux_ex$
03 파일아카이브와압축 아카이브풀기 : xvf user1@myubuntu:~/linux_ex$ mkdir ch9 user1@myubuntu:~/linux_ex$ mv ch2.tar ch9 user1@myubuntu:~/linux_ex$ cd ch9 user1@myubuntu:~/linux_ex/ch9$ tar xvf ch2.tar ch2/ ch2/one/ ch2/one/tmp/ ch2/one/tmp/test/ ch2/data1.ln ch2/temp/ ch2/temp/hosts ch2/temp/services ch2/temp/data1.cp ch2/temp/text2 ch2/data ch2/test ch2/data1.sl user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 아카이브업데이트하기 : uvf u 기능은지정한파일이아카이브에없는파일이거나, 아카이브에있는파일이지만수정된파일일경우아카이브의마지막에추가 -> ch2/data 파일의수정시간을 touch 명령으로수정후아카이브업데이트 user1@myubuntu:~/linux_ex/ch9$ tar uvf ch2.tar ch2 user1@myubuntu:~/linux_ex/ch9$ touch ch2/data user1@myubuntu:~/linux_ex/ch9$ tar uvf ch2.tar ch2 ch2/data user1@myubuntu:~/linux_ex/ch9$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/test/ -rw-r--r-- user1/user1 223 2014-02-22 12:36 ch2/data1.ln drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/temp/ -rw-r--r-- user1/user1 223 2014-02-22 12:42 ch2/temp/hosts -rw-r--r-- user1/user1 19436 2014-02-22 12:42 ch2/temp/services -rw-r--r-- user1/user1 223 2014-02-22 14:54 ch2/temp/data1.cp -rw-r--r-- user1/user1 223 2014-02-22 12:40 ch2/temp/text2 -rw-r--r-- user1/user1 19436 2014-02-22 14:56 ch2/data -rw-rw-r-- user1/user1 0 2014-01-01 12:00 ch2/test lrwxrwxrwx user1/user1 0 2014-02-22 14:40 ch2/data1.sl -> data1 -rw-r--r-- user1/user1 19436 2014-03-20 08:05 ch2/data user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 아카이브에파일추가하기 : rvf r 기능은지정한파일을무조건아카이브의마지막에추가 user1@myubuntu:~/linux_ex/ch9$ cp /etc/hosts. user1@myubuntu:~/linux_ex/ch9$ tar rvf ch2.tar hosts hosts user1@myubuntu:~/linux_ex/ch9$ tar tvf ch2.tar drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/ ( 생략 ) -rw-r--r-- user1/user1 19436 2014-03-20 08:05 ch2/data -rw-r--r-- user1/user1 223 2014-03-20 08:07 hosts user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 파일압축과아카이브 아카이브를생성하면서동시에압축수행 예 : gzip 으로압축 user1@myubuntu:~/linux_ex/ch9$ tar cvzf ch2.tar.gz ch2 ch2/ ch2/one/ ch2/one/tmp/ ch2/one/tmp/test/ ch2/data1.ln ( 생략 ) user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar ch2.tar.gz hosts user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 파일압축과아카이브 아카이브를생성하면서동시에압축실행 예 : bzip2 로압축실행 : bzip2 로압축할경우 j 옵션을사용 user1@myubuntu:~/linux_ex/ch9$ tar cvjf ch2.tar.bz2 ch2 ch2/ ch2/one/ ch2/one/tmp/ ch2/one/tmp/test/ ch2/data1.ln ( 생략 ) user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar ch2.tar.bz2 ch2.tar.gz hosts user1@myubuntu:~/linux_ex/ch9$ 압축한아카이브파일의내용은 tvf 로확인이가능하며 xvf 로추출가능 user1@myubuntu:~/linux_ex/ch9$ tar tvf ch2.tar.gz drwxrwxr-x user1/user1 0 2014-02-22 15:10 ch2/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/ drwxrwxr-x user1/user1 0 2014-02-22 12:11 ch2/one/tmp/test/ -rw-r--r-- user1/user1 223 2014-02-22 12:36 ch2/data1.ln ( 생략 )
03 파일아카이브와압축 파일압축하기 : gzip/gunzip -.gz 파일 user1@myubuntu:~/linux_ex/ch9$ rm ch2.tar.gz rm: 일반파일 'ch2.tar.gz' 를제거할까요? y user1@myubuntu:~/linux_ex/ch9$ gzip ch2.tar user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar.bz2 ch2.tar.gz hosts user1@myubuntu:~/linux_ex/ch9$ gzip -l ch2.tar.gz compressed uncompressed ratio uncompressed_name 8648 71680 88.0% ch2.tar user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 압축파일의내용보기 : zcat user1@myubuntu:~/linux_ex/ch9$ zcat ch2.tar.gz more ch2/ 0000000 127.0.0.1 localhost 127.0.1.1 myubuntu # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback ( 생략 )
03 파일아카이브와압축 압축풀기 : gunzip user1@myubuntu:~/linux_ex/ch9$ gunzip ch2.tar.gz user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar ch2.tar.bz2 hosts user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 bzip2/bunzip2 :.bz2 파일 user1@myubuntu:~/linux_ex/ch9$ rm ch2.tar.bz2 rm: 일반파일 'ch2.tar.bz2' 를제거할까요? y user1@myubuntu:~/linux_ex/ch9$ bzip2 ch2.tar user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar.bz2 hosts user1@myubuntu:~/linux_ex/ch9$
03 파일아카이브와압축 압축파일의내용보기 : bzcat 압축풀기 : bunzip2 user1@myubuntu:~/linux_ex/ch9$ bunzip2 ch2.tar.bz2 user1@myubuntu:~/linux_ex/ch9$ ls ch2 ch2.tar hosts user1@myubuntu:~/linux_ex/ch9$
04 소프트웨어컴파일 컴파일러설치하기 C 언어로작성한프로그램을컴파일하기위해서는 C 컴파일러가필요 리눅스에서사용하는 C 컴파일러는 GNU C 컴파일러로패키지이름이 gcc gcc 설치 user1@myubuntu:~/linux_ex/ch9$ aptitude show gcc Package: gcc State: installed Automatically installed: no Version: 4:4.8.1-2ubuntu3 Priority: 옵션 Section: devel Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: i386 ( 생략 )
04 소프트웨어컴파일 간단한 C 프로그램작성하기 user1@myubuntu:~/linux_ex/ch9$ vi hello.c #include <stdio.h> main() { printf("hello, World. n"); } :wq C 프로그램컴파일하기 : 실행파일명은 a.out user1@myubuntu:~/linux_ex/ch9$ gcc hello.c user1@myubuntu:~/linux_ex/ch9$ ls a.out ch2 ch2.tar hello.c hosts user1@myubuntu:~/linux_ex/ch9$ C 프로그램실행하기 : 경로지정확인 user1@myubuntu:~/linux_ex/ch9$ a.out a.out: command not found user1@myubuntu:~/linux_ex/ch9$./a.out Hello, World. user1@myubuntu:~/linux_ex/ch9$
04 소프트웨어컴파일 실행파일명변경하기 gcc 로생성한기본실행파일은 a.out 사용자가원하는이름으로지정하려면 o 옵션사용 user1@myubuntu:~/linux_ex/ch9$ gcc -o hello hello.c user1@myubuntu:~/linux_ex/ch9$./hello Hello, World. user1@myubuntu:~/linux_ex/ch9$
04 소프트웨어컴파일 make 명령사용하기 make 명령은 makefile( 또는 Makefile) 에설정된정보를읽어서여러소스파일을컴파일하고링크하여최종실행파일을생성 소스파일준비 user1@myubuntu:~/linux_ex/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 컴파일하면오류발생 : two() 가무엇인지모르겠다는메시지 user1@myubuntu:~/linux_ex/ch9$ gcc one.c /tmp/ccoayv9w.o: In function 'main': one.c:(.text+0x16): undefined reference to 'two' collect2: error: ld returned 1 exit status user1@myubuntu:~/linux_ex/ch9$
04 소프트웨어컴파일 make 명령사용하기 두번째파일생성 : two() 함수정의 user1@myubuntu:~/linux_ex/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 makefile 작성하기 user1@myubuntu:~/linux_ex/ch9$ vi makefile TARGET=one OBJECTS=one.o two.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@myubuntu:~/linux_ex/ch9$./one Go to Module Two-- In Module Two-- --- This is a Moudule Two. End of Module Two. End of Module One. user1@myubuntu:~/linux_ex/ch9$