#############################################
## 주제 : 소프트웨어 설치 ##
#############################################
http://centos.org
http://ftp.daum.net
http://ftp.neowiz.com
ftp://ftp.kaist.ac.kr
http://vault.centos.org
http://rpmfind.net
rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.
tar.gz, tar.bz2, tar.xz 은 압축을 해제해야 소스인지, 컴파일한 파일인지 알 수 있다.
그러니 rpm 으로 끝나는 확장자는 파일명만 보고도 소스인지, 컴파일한 파일인지 알 수 있다.
~.tar.gz : tar + gzip (소스형태, 컴파일형태)
~.tar.bz2 : tar + bzip2 (소스형태, 컴파일형태)
~.tar.xz : tar + xz (소스형태, 컴파일형태)
~.i386.rpm : rpm (컴파일된 형태)
~.src.rpm : (소스 형태)
~.i386.rpm, ~.i586.rpm, ~.i686.rpm : (컴파일형태)
~.deb : 데비안계열의 패키징 방식
~.rpm : rpm 명령어로 설치
yum : rpm 파일을 설치
~.deb : dpkg 명령어로 설치
apt-get : deb 파일을 설치
예전에는 리눅스에 프로그램을 설치하기 위해서는 아래와 같은 과정을 거쳤다.
소스 -> 환경설정 -> 컴파일 -> 설치
~~~~ ~~~~~~~~
|
+--> 컴파일 -> 패키지명.버전명.i386.rpm -> 설치
+--> 소스 파일 -> 컴파일 -> 설치
rpm 의 가장 큰 단점.
- 패키지의 의존성이 존재하면 설치하기가 어렵다.
의존성 : 패키지끼리 서로 연관 되어있는 형태이다.
- 리눅스용 웹브라우저(firefox 를 설치했다.)
- 강제로 설치했다고 해도 firefox 가 실행이 안된다.
- 이것을 실행하기 위해서는 의존성이 걸린 Xwindow system 의 관련된 패키지들을
- 모두 설치해야 firefox 를 설치하고 사용할 수 있다.
yum : 이미 컴파일이 되어있는 패키지를 인터넷으로 다운받아서 설치하는 방식
~~~~.i386.rpm <-- 컴파일된 rpm 파일
~~~~.src.rpm <-- 소스 rpm 파일
~~~~.tar.gz <-- 압축된 파일 (tar + gzip)
~~~~.tar.bz2 <-- 압축된 파일 (tar + bzip2)
~~~~.tar.xz <-- 압축된 파일 (tar + xz)
########################
## tar + gzip + bzip2 ##
########################
o gzip
- 파일을 압축하는 명령어다.
- gzip은 GNU 프로젝트를 통해 배포되는 유틸리티
- gzip으로 압축한 파일은 파일명이 : 파일명.gz 확장자를 갖는다.
- 또한 여러 파일들을 지정하면 각각의 파일명.gz 파일로 저장한다.
사용법 : gzip 옵션 파일들...
옵션 :
-d --decompress decompress
-1 --fast compress faster
-9 --best compress better
사용예 : gzip filename
- filename 을 압축해서 filename.gz 파일이 생성된다.
- 이때 원본파일인 filename 없어지고 압축된 파일만 남는다.
- 여러 파일을 gzip으로 압축해도 각각 filename.gz 이 생성이 된다.
- 여러개의 파일을 하나의 파일로 묶이지 않는다.
- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다.
압축해제 : gunzip filename or gzip -d filename
o bzip2
- 압축하면 나오는 파일명 : 파일명.bz2
- 대체로 gzip보다 10~20% 뛰어난 압축률이 더 좋다.
사용법 : bzip2 OPTION 파일들...
옵션 :
-d --decompress force decompression
-1 .. -9 set block size to 100k .. 900k
--fast alias for -1
--best alias for -9
사용예 : bzip2 filename
- filename 을 압축해서 filename.bz2 파일이 생성된다.
- 이때는 filename 이 지워진다.
- 여러 파일을 bzip2로 압축해도 각각 filename.bz2 가 생성이 된다.
- 여러개의 파일을 하나의 파일로 묶이지 않는다.
- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다.
ex) bzip2 filename
압축해제 : bzip2 -d filename or bunzip2 -d filename
o xz : 요즘 나온 압축 프로그램
사용법은 비슷하다.
리눅스 커널 소스가 이 압축프로그램으로 압축되어 있다.
linux-3.17.2.tar.xz
xz
unxz
o tar
- 압축하는 프로그램이 아니다.
- tar는 단순히 하나의 아카이브 파일로 묶어 주는 역할만 할 뿐,
파일의 크기를 줄여주는 압축 기능은 없으므로
tar 명령어 안에서 gzip이나 bzip2 명령어와 함께 사용한다.
- 이때 원본파일은 그대로 남는다.
- 파일을 원래 상태로 복원하기 위해 파일의 퍼미션이나 소유권 등의 정보를 유지하면서 여러개의 파일들을 하나의 파일로 묶는 기능을 가진다.
Usage: tar [OPTION...] [FILE]...
ex) tar options 파일.tar 파일들 ...
tar cjf tarfile.tar.bz2 files
tar czf tarfile.tar.gz files
tar cvf tarfile.tar files
~~ ~~~ ~~~~~~~~~~~~~~~ ~~~~~
| | | |
| | | +-- 묶일 파일 리스트들
| | + 묶을 파일명
| +-- 옵션
+-- 명령어
gzip -9 tarfile.tar <-- tarfile.tar.gz
option
c : 새로운 아카이브의 생성
x : 아카이브로부터 파일 추출
t : 파일안에 묶인 내용을 출력
v : 파일을 묶거나 풀 때 정보를 출력
f : 읽거나 기록할 tar 파일을 정의
z : gzip으로 압축한다
j : bzip2 로 압축한다
C <DIR> : 압축을 해당 <DIR> 로 해제한다
==================================================================
LAB> 압축 연습하기
-- 조건 --
작업 디렉토리 : 홈디렉토리(/root)
-- 조건 --
o 파일 압축
- 사용자와 그룹에 관련된 중요 파일 3개를 현재 디렉토리에 복사한다.
- /etc/passwd, /etc/group, /etc/shadow 파일을 현재 디렉토리에
- 복사한다. 그런데 왜 명령어가 틀린가 ???? 다양한 방법이 있다는걸
- 보여주기 위해서 쓴 것이다.
# cd
# rsync /etc/passwd .
# install -m 644 /etc/group .
# cat /etc/shadow > shadow
- 복사한 파일을 확인한다.
# ls -l /etc/passwd passwd
# ls -l /etc/shadow shadow
# ls -l /etc/group group
# diff /etc/passwd passwd
# cmp /etc/shadow shadow
# diff /etc/group group
- 각 파일을 압축한다.
- 만약 xz 명령어가 없다면 yum -y install xz 으로 패키지를 설치해야 한다.
# gzip group
# bzip2 passwd
# xz shadow
- 압축된 파일을 확인한다.
- 중요한 것은 원본 파일이 삭제되고 각 파일명에 압축프로그램의
- 고유 확장자가 붙어있다는 것이다.
- 고유 확장자 : gzip -> .gz, bzip2 -> .bz2, xz -> .xz
# ls -l
total 24
-rw-r--r-- 1 root root 440 Mar 20 21:44 group.gz
-rw-r--r-- 1 root root 832 Mar 20 21:43 passwd.bz2
-r-------- 1 root root 368 Mar 20 21:46 shadow.xz
o 첫 번째 압축해제
- 각 압축 프로그램의 명령어의 -d 옵션을 이용해서 압축을 해제한다.
# gzip -d group.gz
# bzip2 -d passwd.bz2
# xz -d shadow.xz
o 두 번째 압축해제
- 각 압축 프로그램의 -d 옵션이 아닌 다른 이름으로 된 해제 명령어를
- 이용해서 압축을 해제한다.
# gzip group
# bzip2 passwd
# xz shadow
# gunzip group.gz
# bunzip2 passwd.bz2
# unxz shadow.xz
- 압축 프로그램과 압축해제 프로그램의 하드링크와 심볼릭링크를
- 확인하는 부분이다.
# ls -li `which gunzip`
# ls -li `which gzip`
# ls -li `which zcat`
# ls -li `which bzip2`
# ls -li `which bunzip2`
:
:
==================================================================
==================================================================
LAB> tar + gzip 으로 압축하기 (단일 파일인 경우)
- tar 와 gzip 을 각각 실행하는 경우
- 순서 : tar 로 묶고 gzip 으로 압축한다.
# tar cvf test.tar passwd shadow group
# gzip test.tar <-- test.tar.gz
- tar 와 gzip 을 한번에 실행하는 경우
- 순서 : tar 명령어에 z 옵션을 넣어주면 test2.tar.gz 이 생성된다.
- tar 명령어에 z 옵션이 들어가면 tar 프로그램 내부에서 외부의
- gzip 실행파일을 호출한다.
# tar cvzf test2.tar.gz passwd shadow group
- tar 와 bzip2 를 각각 실행하는 경우
- 순서 : tar 로 묶고 bzip2 로 압축한다.
# tar cvf test3.tar passwd shadow group
# bzip2 test3.tar <-- test3.tar.bz2
- tar 와 bzip2 를 한번에 실행하는 경우
- 순서 : tar 명령어에 j 옵션을 넣어주면 test2.tar.bz2 가 생성된다.
- tar 명령어에 j 옵션이 들어가면 tar 프로그램 내부에서 외부의
- bzip2 실행파일을 호출한다.
# tar cvjf test4.tar.bz2 passwd shadow group <-- test4.tar.bz2
==================================================================
==================================================================
LAB> tar + gzip 으로 압축하기 (디렉토리인 경우)
*** 인터넷상에서 프로그램을 압축해서 배포하는 경우에는
*** 두 번째 예제처럼 디렉토리에 넣고 그 디렉토리를 묶는게 일반적이다.
o 디렉토리에 넣지 않고 묶을 경우
- 압축을 해제할 경우에는 현재 디렉토리 파일이 몽땅 풀린다.
# cd /etc
# tar czf etc.tar.gz *
# mv etc.tar.gz /tmp
# cd /tmp
# ls
etc.tar.gz
# tar xzf etc.tar.gz
# ls
:
:
# rm -rf *
o 디렉토리에 넣고 묶을 경우
- 압축을 해제할 경우에는 디렉토리 자체가 나온다.
# cd /
# ls -F
bin/ boot/ etc/ ...
# tar czf etc.tar.gz etc
# mv etc.tar.gz /tmp
# cd -
/tmp
# ls
etc.tar.gz
# tar xzf etc.tar.gz
# ls
etc etc.tar.gz
==================================================================
==================================================================
LAB> tar 에서 -z(gzip) 옵션과 -j(bzip2) 옵션 확인하기.
tar 의 z 옵션 : 외부의 gzip 명령어인 /bin/gzip 을 호출한다.
tar 의 j 옵션 : 외부의 bgzip2 명령어인 /usr/bin/bzip2 를 호출한다.
o tar의 x 옵션 테스트
- gzip 명령어를 이동시키고 tar 의 x 옵션을 호출하면 tar 명령어
- 내부에서 /bin/gzip을 호출하는 것을 알 수 있다.
# mv /bin/gzip .
# ls -l /bin/gzip
ls: /bin/gzip: No such file or directory
# tar czf etc.tar.gz /etc
tar: gzip: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
tar: Removing leading `/' from member names
- 다시 원래대로 복구한다.
# mv gzip /bin
# tar czf etc.tar.gz /etc
# ls -l etc.tar.gz
-rw-r--r-- 1 root root 4958956 Nov 4 17:11 etc.tar.gz
o tar의 j 옵션 테스트
- bzip2 명령어를 이동시키고 tar 의 j 옵션을 호출하면 tar 명령어
- 내부에서 /usr/bin/bzip2 를 호출하는 것을 알 수 있다.
# mv /usr/bin/bzip2 .
# ls /usr/bin/bzip2
ls: /usr/bin/bzip2: No such file or directory
# tar cjf etc.tar.bz2 /etc
tar: Removing leading `/' from member names
tar: bzip2: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
- 다시 원래대로 복구한다.
# mv bzip2 /usr/bin
# tar cjf etc.tar.bz2 /etc
# ls -l etc.tar.bz2
-rw-r--r-- 1 root root 3183126 Nov 4 17:18 etc.tar.bz2
===================================================================
===================================================================
LAB> 위에서 exec 를 이해하기 위한 프로그램을 짜보기.
- program 을 실행하면 외부의 ls 가 실행된다.
- 이때는 프로그램에서 exec 계열의 함수를 이용해서 외부 명령어를
- 실행한다.
- man execl 을 이용해서 exec 계열의 함수들을 확인할 수 있다.
# vi program.c
-- program.c --
#include <unistd.h>
int main()
{
execl("/bin/ls", "ls", NULL);
return 0;
}
-- program.c --
# gcc -Wall -o program program.c
# ./program
:
:
# cp -v program.c program2.c
# vi program2.c
-- program2.c --
#include <unistd.h> // execl
#include <stdio.h> // printf
int main()
{
execl("/bin/ls", "/bin/ls", NULL);
fprintf(stderr, "program: /bin/ls: Cannot exec: No such file or directory\n");
return 0;
}
-- program2.c --
# gcc -Wall -o program2 program2.c
# ./program2
:
:
# mv /bin/ls .
# ./program2
program: /bin/ls: Cannot exec: No such file or directory
# mv ls /bin
# cp -v program.c program3.c
# vi program3.c
-- program3.c --
#include <unistd.h> // execl
#include <stdio.h> // printf
int main(int argc, char *argv[]) // 명령행 인자를 쓸 때 반드시 넣어주어야 한다.
{
// # gunzip fstab
// ~~~~~~ ~~~~~
// argv[0] argv[1]
execl("/bin/gzip", "/bin/gzip", argv[1], NULL); // execl함수는 환경변수 세팅이 안된다.
fprintf(stderr, "program: /bin/gzip: Cannot exec: No such file or directory\n");
return 0;
}
-- program3.c --
- 정상 테스트
# gcc -Wall program3 program3.c
# cp /etc/fstab
# ./program3 fstab
# ls fs*
# gunzip fstab.gz
- 에러발생 테스트
# mv /bin/gzip .
# ./program3 fstab
program: /bin/gzip: Cannot exec: No such file or directory
- 원상복귀
# mv gzip /bin
=================================================================
==================================================================
LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.
목표 : 웹서버의 소스파일을 서버에서 설치한다.
http://httpd.apache.org
웹서버 파일명 : apache_1.3.41.tar.gz
-- 설치 순서 --
1. 압축 해제
2. 환경설정
3. 컴파일
4. 설치
5. 웹서버 실행
6. 웹서버 확인
7. 메인 페이지 생성
8. 브라우저로 접속
-- 설치 순서 --
0. 체크사항
- 개발툴 없다면 설치한다.
# yum -y groupinstall "Development Tools"
- 아파치 웹서버가 있다면 삭제한다.
// 설치 확인
# rpm -q httpd
// 삭제
# rpm -e httpd
// 의존성 있는 http 삭제
# /etc/init.d/httpd stop
# yum -y groupremove httpd
1. 압축 해제
- 압축파일로 된 아파치 웹서버를 압축해제 한다.
# tar xzf apache_1.3.41.tar.gz
2. 환경설정
- ./configure 명령어를 이용해서 환경을 설정한다.
- UNIX(LINUX) 에서는 현재 디렉토리의 실행파일들은 실행할 수 없도록
- 기본값은 막혀있다. 이를 풀수도 있지만 보안상의 이유로 안푸는 것이 좋다.
- 항상 현재 디렉토리의 실행파일은 ./실행파일명 으로 실행을 해야한다.
- configure 에서 옵션은 다 생략하고 가장 간단한 형태로 실행한다.
# cd apache_1.3.41
# ./configure
3. 컴파일
- make 는 프로젝트 단위로 컴파일을 한다.
# make
4. 설치
- make 뒤에 install 이라는 인자를 준다.
- 그러면 컴파일된 파일들을 시스템에 자동으로 설치해준다.
# make install
5. 웹서버 실행
- apachectl 명령어는 웹서버를 실행시켜주는 명령어이다.
# /usr/local/apache/bin/apachectl start
6. 웹서버 확인
- netstat 명령어는 현재 서버에 LISTEN 되어 있는 포트를 출력해준다.
- 그중에서 0.0.0.0:80 이 부분이 나오면 된다.
# netstat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
7. 메인 페이지 생성
- 웹페이지가 제공되는 디렉토리 : /usr/local/apache/htdocs
# cd /usr/local/apache/htdocs
// 필요 없는 파일 삭제
# rm -f *
# echo Welcome to Ko Seung-Wook Server. > index.html
8. 브라우저로 접속
- 자신의 IP주소를 확인하고 그 IP주소로 웹브라우저로 접속해본다.
// vmware
# ifconfig eth0
// virtual box
# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:0C:29:7C:CF:29
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
:
:
# iptables -F
http://192.168.56.101
Welcome to Ko Seung-Wook Server.
==================================================================
==================================================================
LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.
http://netcat.sourceforge.net
netcat-0.7.1.tar.gz
-- 순서 --
1. 압축 해제
2. 환경설정
3. 컴파일
4. 설치
5. 실행
6. 확인
-- 순서 --
1. 압축해제
- 업로드한 압축 파일을 해제한다.
# tar xvzf netcat-0.7.1.tar.gz
netcat-0.7.1/
netcat-0.7.1/m4/
netcat-0.7.1/m4/lib-link.m4
netcat-0.7.1/m4/inttypes_h.m4
netcat-0.7.1/m4/lcmessage.m4
netcat-0.7.1/m4/inttypes.m4
:
:
2. 환경설정
- 압축이 해제된 netcat 디렉토리에 들어가서 환경설정을 한다.
# cd netcat-0.7.1
# ./configure
3. 컴파일
- 컴파일을 한다.
# make
4. 설치
- 시스템에 설치한다.
# make install
# yum groupinstall "development tools"
5. 실행
- nc를 실행한다.
- 실행하기 전에 이미 설치된 nc 패키지를 삭제한다.
pts/0# rpm -q nc
pts/0# rpm -e nc
- 방화벽정책으로 인해서 접속이 안되면 모두 해제한다.
pts/0# iptables -F
- 8888 포트를 대기한다. (server 개념)
pts/0# nc -l -v -p 8888
Connection from 127.0.0.1:57059
Hello
Hi~~
- 리슨된 포트로 접속한다. (client 개념)
pts/1# nc localhost 8888
Hello
Hi~~
==================================================================
==================================================================
LAB> Linux 에서 Java 를 설치하기.
JAVA_and_JSP 설치 문서를 참고할 것!!!
==================================================================
#########
## rpm ##
#########
o rpm 이란 ?
rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.
장점 : 소스로 설치하는 어려운 부분을 간단히 해결할 수 있다.
단점 : 의존성 에러로 인해 설치가 어렵다.
rpm 파일을 설치하는 형식 :
mc-4.6.1a-35.el5.i386.rpm
패키지명-버전-배포판-아키텍처-rpm
버전 : 주번호, 부번호, 패치레벨
fc19 : 페도라 V 19
el5 : Enterprise Linux V 5
noarch : 모든 아키텍처에 설치가 가능한 패키지들(font ...)
s390, s390x <-- IBM S390 메인프레임에서 실행
src <--- 컴파일이 안된 소스형태로 배포
arm <--- 임베디드 분야
sparc <--- 자기 아키텍처만 설치/실행
ppc <--- 애플 MAC
ppc64 <--- 애플 MAC 64bit
x86_64 <--- 64bit intel
i386 -> i486 -> i586 -> i686 <-- 32bit intel
<----------------------- X
O ------------------------>
o 아키텍처 종류를 확인해보자.
http://rpmfind.net
o rpm 옵션
Usage: rpm [OPTION...]
-i 설치
-U 업그레이드 / 설치
-v 설치할때 파일명을 출력
-h # 으로 설치진행을 출력
-e 삭제
--force 강제설치
--nodeps 의존성을 무시하고 설치
- --nodeps 를 이용해서 설치하면 프로그램이 정상동작을 하지 않을 수 있다.
-Uvh 설치할 때 사용하는 옵션
-e 삭제할 때 사용하는 옵션
ex)
rpm -Uvh 파일명
rpm -Uvh --nodeps 파일명
rpm -e 패키지명
rpm -e 패키지명-버전
=====================================================================
rpm-LAB1> CentOS5.8 DVD의 rpm 을 확인해보자.
-- 순서 --
1. DVD 넣는다.
2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.
3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.
-- 순서 --
1. DVD 넣는다.
- VB 에서 DVD를 삽입한다.
저장소 -> CentOS 5.8 1번 DVD를 선택한다.
2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.
- -t iso9660 : cdrom filesystem
- -o ro (read only)
# mount -t iso9660 -o ro /dev/cdrom /mnt
# df
:
:
/dev/hdc 3831642 3831642 0 100% /mnt
3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.
# cd /mnt/CentOS
# ls
:
x3270-text-3.3.4p7-3.el5.4.i386.rpm
x3270-x11-3.3.4p7-3.el5.4.i386.rpm
:
yum-utils-1.1.16-21.el5.centos.noarch.rpm
:
zisofs-tools-1.0.6-3.2.2.i386.rpm
:
# ls mc*
mc-4.6.1a-35.el5.i386.rpm
# rpm -Uvh mc-4.6.1a-35.el5.i386.rpm
# mc <-- 실행이 된다.
- mc 패키지를 삭제한다.
# rpm -e mc
# mc <-- 실행이 안된다.
- 의존성 에러가 발생한다.
# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm
- 의존성을 무시(--nodeps)하고 설치한다.
- --nodeps 옵션은 아무데나 사용해도 상관없다.
# rpm -Uvh --nodeps firefox-3.6.26-1.el5.centos.i386.rpm
# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm --nodeps
# rpm --nodeps -Uvh firefox-3.6.26-1.el5.centos.i386.rpm
# firefox <-- 설치는 했지만 실행은 안된다. (의존성 때문에)
=====================================================================
===================================================================
rpm-LAB2> --force 옵션을 이용해서 패키지를 다시 설치해보자.
! 강제로 재설치하는 경우
! 1. 실제로 파일이 사용중에 실수로 삭제가 되었을 때
! 2. 외부의 불법침입자에 의해서 파일이 변조가 되었을 때
- --force 옵션을 이용해서 다시 설치한다.
- --force 옵션은 앞이나 뒤나 위치는 상관없다.
# rm -fv /bin/ls
# ls
-bash: /bin/ls: No such file or directory
# mount -t iso9660 -o ro /dev/cdrom /mnt
# rpm -Uvh /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm <-- 설치 X
# rpm -Uvh --force /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm <-- 설치 O
# ls
:
:
===================================================================
===================================================================
LAB> 버전이 높은 패키지를 받아서 설치해보자.
- 시스템에 설치된 httpd 패키지를 확인한다.
# rpm -q httpd
httpd-2.2.3-63.el5.centos
- 인터넷에서 더 높은 버전을 다운로드 받는다.
# wget http://vault.centos.org/5.8/updates/i386/RPMS/httpd-2.2.3-65.el5.centos.i386.rpm
- 시스템에 httpd 패키지를 업데이트한다.
# rpm -Uvh httpd-2.2.3-65.el5.centos.i386.rpm
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
- 업데이트를 확인한다.
# rpm -q httpd
httpd-2.2.3-65.el5.centos
- yum 을 이용해서 더 최신 버전으로 업데이트한다.
# yum -y update httpd
# rpm -q httpd
httpd-2.2.3-91.el5.centos
===================================================================
===================================================================
LAB> rpm 으로 설치하면 설치된 내용이 저장되는 디렉토리에 대한 실습
!!! /var/lib/rpm 디렉토리를 참고 !!!
-q rpm DB에서 정보에서 찾는다.
- 실행파일 (/bin,/usr/bin,/sbin,/usr/sbin,/usr/X11R6/bin)
- 설정파일 (/etc)
- 문서파일 (/usr/share/doc)
- 도움말파일 (/usr/share/man)
# cat /etc/redhat-release
CentOS release 5.8 (Final)
# rpm -q kernel
kernel-2.6.18-308.el5
# yum update kernel
kernel-2.6.18-402.el5
kernel-2.6.18-308.el5
1. 어떤 패키지가 이 시스템에 설치되었는지 ?
- 모든 패키지를 화면에 출력한다.
# rpm -qa
- 모든 패키지의 개수를 화면에 출력한다.
# rpm -qa | wc -l
- 모든 패키지명을 rpmlist.txt 파일로 저장한다.
# rpm -qa > rpmlist.txt
- tee 명령어는 화면도 출력하고 rpmlist.txt 파일로 저장도 한다.
# rpm -qa | tee rpmlist.txt
:
2. 어떤 패키지가 어떤 파일들을 설치했는지 ?
- 패키지에 속한 전체 파일들을 출력한다.
- Shift + Page UP, Page DOWN
# rpm -ql coreutils
:
- 패키지에 속한 문서파일(document) 들을 출력한다.
# rpm -qd coreutils
:
- 패키지에 속한 설정파일(configuration) 들을 출력한다.
# rpm -qc coreutils
:
3. 어떤 파일이 어떤 패키지에서 나왔는지 ?
# rpm -qf /bin/ls
:
===================================================================
===================================================================
LAB> rpm 패키지를 검증하기 실습
패키지를 검증할때는 -qV 옵션을 사용한다.
# rpm -qVa
S file Size differs
M Mode differs (includes permissions and file type)
5 MD5 sum differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
# rpm -qf /bin/ls
coreutils-5.97-34.el5_8.1
# rpm -qV coreutils
<-- 아무 메세지가 나오지 않으면 패키지가 무결성하다는 뜻이다.
- 파일의 권한을 변경하고 검증해보자.
# ls -l /bin/ls
-rwxr-xr-x 1 root root 95116 Mar 21 2012 /bin/ls
~~~~~~~~~
# ls -l /bin/ls
-rwx--x--x 1 root root 95116 Mar 21 2012 /bin/ls
# rpm -qV coreutils
.M...... /bin/ls
- 파일의 크기/내용 수정을 변경하고 검증해보자.
# cp /bin/ls .
# echo "=========" >> /bin/ls
# rpm -qV coreutils
SM5....T /bin/ls
# ls -l ls
-rwx--x--x 1 root root 93560 Sep 6 01:26 ls
# ls -l /bin/ls
-rwx--x--x 1 root root 93564 Sep 6 01:26 /bin/ls
===================================================================
rpm - 패키지 파일을 설치 (인터넷 필요 x , 파일이 존재 O)
yum - 인터넷을 통해서 패키지를 설치 (파일이 존재 X , 인터넷 연결 O)
~~.i386.rpm <-- 바이너리 386 ~ 686 모두 설치가능
~~.i586.rpm <-- 386 x 486 x 586 ~ 686 ... 786 ...
LAB> http://ftp.daum.net/ 에서 ntsysv 패키지를 가져와서 시스템에 설치하기
http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm
# cat /etc/redhat-release
CentOS release 5.8 (Final)
# wget
-bash: wget: command not found
# yum install wget
...
Is this ok [y/N]: y <-- y를 입력(설치) n(취소)
# chmod -c 700 `which wget` <-- 보안상 wget은 root 사용자만 사용!!!
# wget http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm
# rpm -Uvh ntysv<tab 키> <-- ntsysv 설치
# LANG=C
# ntsysv
network, sshd, syslog <-- 이거빼고 모두 제거
x86_64
# rpm -qf /usr/sbin/useradd
# rpm -ql coreutils <--
# rpm -ql coreutils > coureutils.txt
# cat -n coureutils.txt
!!! 전체 설치된 패키지를 알아야 하고, 패키지에서 각각의 설치된 정보를 뽑아낼 수 있어야 한다. !!!
LAB> coreutils 패키지에서 나온 여러가지 정보를 확인해보기
o 패키지 설치시 설치되는 파일들
도움말, 문서파일, 실행파일, 설정파일
# rpm -q coreutils <-- 패키지명을 완벽하게 알때 사용
# rpm -qa | grep core <-- 패키지명을 모를때 ( core 만 알때 )
# rpm -qi coreutils <-- coreutils 패키지의 정보를 출력
# rpm -qc coreutils <-- coreutils 패키지의 설정파일들을 출력
# rpm -qd coreutils <-- coreutils 패키지의 문서(도움말)파일들을 출력
# rpm -ql coreutils | grep bin <-- coreutils 실행파일을 출력
# rpm -ql coreutils <-- 전체 설치된 파일들을 출력
LAB> 리눅스 패키지를 소스로 받아 컴파일해보자.
*** 리눅스 소스는 모두 공개되어 있으므로 C 언어로 개발할 수 있는 능력만 있으면 얼마든지 수정할 수 있다. ***
1. 개발툴 패키지 확인
2. 인터넷에 연결되어 있는지 확인
- 네임서버설정
- IP주소 세팅
- Gateway 주소 세팅
[root@www ~]# yum grouplist <-- 개발툴이 설치되었는지 확인한다.
Installed Groups:
Administration Tools
Development Libraries
Development Tools
:
:
Available Groups:
Authoring and Publishing
Base
:
:
[root@www ~]# yum -y groupinstall "Development Tools" <-- 개발툴이 없다면 설치하고 있다면 생략한다.
[root@www ~]# cat /etc/resolv.conf <-- 네임서버 확인
-- /etc/resolv.conf --
nameserver 168.126.63.1
nameserver 168.126.63.2
-- /etc/resolv.conf --
===================================================================
LAB> rpm DB 에서 검색하기
/var/lib/rpm/
- 시스템에 설치된 전체 패키지 목록을 확인한다.
# rpm -qa
- coreutils 패키지를 확인한다.
# rpm -q coreutils
coreutils-5.97-34.el5_8.1
# rpm -q mcmong
package mcmong is not installed
# rpm -q coreutil
package coreutil is not installed
- 패키명을 정확히 모를 경우에는 grep 명령어를 이용한다.
# rpm -qa | grep coreutil
policycoreutils-1.33.12-14.8.el5
coreutils-5.97-34.el5_8.1
# rpm -qf /bin/ls
# rpm -ql coreutils
# rpm -qc coreutils
# rpm -qd coreutils
# rpm -ql coreutils | grep bin
- verify의 약자로 패키지를 검증할때 사용되는 옵션이다.
# rpm -qV coreutils
# echo test >> /bin/ls
# rpm -qV coreutils
S.5....T /bin/ls
# ls -l /bin/ls
-rwxr-xr-x 1 root root 93565 Nov 4 16:10 /bin/ls
# chmod 711 /bin/ls
# ls -l /bin/ls
-rwx--x--x 1 root root 93565 Nov 4 16:10 /bin/ls
# rpm -qV coreutils
SM5....T /bin/ls
# chown nobody /bin/ls
# ls -l /bin/ls
-rwx--x--x 1 nobody root 93565 Nov 4 16:10 /bin/ls
# rpm -qV coreutils
SM5..U.T /bin/ls
# chgrp users /bin/ls
# ls -l /bin/ls
-rwx--x--x 1 nobody users 93565 Nov 4 16:10 /bin/ls
# rpm -qV coreutils
SM5..UGT /bin/ls
# md5sum /bin/ls
4736357f77b3fa17a0005418f169574f /bin/ls
# echo test2 >> /bin/ls
# md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76 /bin/ls
# md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76 /bin/ls
# md5sum /bin/ls
8a49ead65efb6dc3d50ae48025913b76 /bin/ls
# echo test3 >> /bin/ls
# md5sum /bin/ls
a291df3929e4f07d86975311fa5e9295 /bin/ls
# yum -y reinstall coreutils >/dev/null 2>&1
# md5sum /bin/ls
a55a0733413620f0b3aa401541a00d83 /bin/ls
- 재설치를 했으므로 어떤 메세지도 출력이 안된다.
# rpm -qV coreutils
===================================================================
===================================================================
LAB> yum 사용하기
# yum
:
:
# yum list
# yum install mc
# yum remove mc
# yum grouplist
Installed Groups: 설치된 그룹들
:
:
Available Groups: 미설치된 그룹들
:
:
# yum groupinstall "MySQL Database"
# /etc/init.d/mysqld start
# mysql
mysql> show databases;
mysql> exit
# /etc/init.d/mysqld stop
# yum -y groupremove "MySQL Database"
# yum search httpd
# rpm -qa | grep ^coreutils
# rpm -q coreutils
# yum -y update coreutils
# yum -y reinstall coreutils
# rm -f /bin/ls
# ls
-bash: ls: command not found
# yum -y reinstall coreutils
# ls
...
===================================================================
===================================================================
LAB> 소스 파일을 가져와서 컴파일해보자.
*** 참고 :
*** 소스 rpm 을 설치시 어느 디렉토리에 설치가 되는지 알 수 있다.
*** rpm 을 설치할 수 있는 능력
*** 소스파일을 수정할 수 있는 능력
*** 컴파일할 수 있는 능력
*** src.rpm 파일은 rpmbuild 명령어로 컴파일할 수 있다.
# rpm -qf /bin/ls
coreutils-5.97-34.el5
# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm
# ls -l coreutils-5.97-34.el5.src.rpm
-rw-r--r-- 1 root root 5256520 Jul 22 2011 coreutils-5.97-34.el5.src.rpm
- 디렉토리가 없으면 생성한다.
# mkdir -p /usr/src/redhat/SOURCES
- coreutils 소스 패키지를 설치한다.
# rpm -Uvh coreutils-5.97-34.el5.src.rpm
# cd /usr/src/redhat/SOURCES
# tar xjf coreutils-5.97.tar.bz2
# cd coreutils-5.97
- 환경설정을 한다.
# ./configure
- 컴파일 한다.
# make
- 컴파일된 파일들을 확인한다.
# cd src
# ls
: <-- 소스와 컴파일된 실행파일들이 존재한다.
:
- ls 소스를 수정한다.
# vi ls.c
-- ls.c --
:set nu <-- vi 명령 : 번호 세팅
/main <-- vi 명령 : 검색
:
:
puts("KSW ls"); <-- 1129번 라인에 출력 함수를 추가한다.
:
:
-- ls.c --
# make ls
- 수정된 내용이 출력된다.
# ./ls
KSW ls
:
:
===================================================================
#########
## yum ##
#########
yum은 Yellowdog Updater Modified 의 약자로 rpm 기반의 시스템(redhat계열) 을 위한
자동 업데이터이자 패키지를 설치/삭제도구이다.
yum 은 자동적으로 의존성을 처리해주며 rpm 패키지들을 안전하게 설치, 삭제 및
업데이트하기 위해 반드시 해야할 이들을 스스로 해결한다.
또한 yum 은 이미 설치되어 있거나 혹은 저장소에 설치가능한 패키지에 관한 정보를
효율적이고 쉽게 검색해 온다.
yum 은 rpm 이나 다른 도구들처럼 일일이 수동으로 업데이트할 필요가 없으므로 수 많은
시스템들을 더욱 관리하기 쉽게 해준다.
yum 으로 update 할 경우 커널을 제외한 나머지 패키지들은 모두 삭제 및 업데이트를 할수 있다.
커널의 경우는 업데이트를 하더라도 계속 쌓이게 된다.
yum 을 사용하여 install 하거나 update 할 경우 저장소라는 곳에서 해당 rpm파일을 다운 받은 후 설치하게 된다.
패키지 파일을 다운받아 임시로저장하는 위치는 /var/cache/yum 하위 디렉토리이다.
o 사용법 :
yum [options] COMMAND
o yum의 명령어들
install : 단일 패키지 설치
remove : 단일 패키지 삭제
groupinstall : 그룹으로 설치
groupremove : 그룹으로 삭제
update : 업데이트
check-update : 업데이트가 있는지 체크한다.
list : ...
grouplist :
:
:
# LANG=C
- 인터넷을 통해서 단일 패키지를 검색한다.
# yum list
- 인터넷을 통해서 그룹으로 검색한다.
# yum grouplist
- 인터넷을 통해서 단일 패키지 mc를 설치한다.
# yum install mc
- 인터넷을 통해서 단일 패키지 mc를 삭제한다.
# yum remove mc
- 인터넷을 통해서 웹서버 그룹을 설치한다.
# yum groupinstall "Web Server"
=========================================================================
LAB> 아파치 웹서버를 시스템에 설치하고 외부에 웹문서를 만들어보자.
-- 작업 순서 --
1. 방화벽 중지
2. 웹 문서 생성
3. 웹서버 시작
4. IP주소 확인
5. 서버로 접속
-- 작업 순서 --
1. 방화벽 중지
- 방화벽을 중지한다.
# iptables -F
2. 웹 문서 생성
- 웹 문서 디렉토리로 이동해서 외부에 제공할 웹문서를 생성한다.
- 이때 확장자는 html로 생성한다.
# cd /var/www/html
# vi index.html
-- index.html --
Hello K.S.W Server
-- index.html --
3. 웹서버 시작
- 웹서버를 재시작한다.
# /etc/init.d/httpd start
Starting httpd: [ OK ]
4. IP주소 확인
- 자신의 IP주소를 확인한다.
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:01:97:CC
inet addr:192.168.20.165 Bcast:192.168.20.255 Mask:255.255.255.0
:
:
5. 서버로 접속
- 서버로 접속한다.
웹브라우저에서 eth0의 IP주소로 접속해서 위에서 만든 문서가 나오면
정상적으로 웹서버가 설치된 것이다.
http://192.168.20.165/
=========================================================================
===============================================================================
LAB> yum 사용법
- yum 의 실행부분에서 출력되는 메세지를 다음 프로세스인 head 로
넘겨준다. 이때 head 넘겨준 메세지를 30줄만 보여주게 설정한다.
# yum | head -30
===============================================================================
===============================================================================
LAB> yum 전체 패키지 리스트(단일패키지)
# yum list
===============================================================================
===============================================================================
LAB> yum 전체 패키지 그룹 리스트(그룹단위)
# yum grouplist
===============================================================================
===============================================================================
LAB> yum 을 이용한 패키지 설치 (단일패키지)
- mc 패키지가 설치가 되었는지 확인한다.
- 파일이 없다면 설치된 것이고 있다면 패키지명과 버전이 나올 것이다.
# rpm -qf /usr/bin/mc
mc-4.6.1a-35.el5
# rpm -q mc
- mc 패키지를 삭제한다.
# rpm -e mc
- mc 패키지를 yum으로 설치한다.
# yum -y install mc
- mc 명령어를 확인한다.
# which mc
- mc 패키지를 확인한다.
# rpm -q mc
===============================================================================
===============================================================================
LAB> yum 을 이용한 패키지 삭제 (단일패키지)
- mc 패키지를 yum을 이용해서 삭제한다.
# yum remove mc
- mc 패키지를 확인한다.
- mc 패키지가 삭제가 되었다면 해당 정보가 출력이 안된다.
# rpm -q mc
package mc is not installed
# which mc
===============================================================================
===============================================================================
LAB> yum 을 이용한 패키지그룹 설치 (그룹단위)
- DB 종류
! Oracle : 1521
! MS-SQL : 1433
! MySQL : 3306
! Sybase
! DB2
! MariaDB
! PostgreSQL
! MongoDB
# which mysql
# which mysqld
# LANG=C yum grouplist
# yum -y groupinstall "MySQL Database"
# rpm -q mysql
# rpm -q mysql-server
- mysql 데몬(서비스)을 시작하는 명령어
# /etc/init.d/mysqld start
- 네트워크 상태를 보는 명령어 (mysql 이 사용하는 포트 : 3306)
# netstat -nltp
# mysql
mysql> show databases;
mysql> quit
- mysql 데몬(서비스)을 종료하는 명령어
# /etc/init.d/mysqld stop
# yum -y groupremove "MySQL Database"
===============================================================================
===============================================================================
LAB> yum 을 이용한 업데이트 테스트
!!! 커널은 업데이트를 하면 이전 커널은 삭제하지 않는다.
!!! 커널이 아닌 일반 애플리케이션들은 업데이트를 하면 자동으로 이전 파일들은
!!! 없어지고 새로 설치한 패키지의 파일이 대체가 된다.
# rpm -q coreutils
coreutils-5.97-34.el5
# yum -y update kernel
# rpm -q kernel
kernel-2.6.18-308.el5
kernel-2.6.18-402.el5
- coreutils 패키지를 업데이트하되 정상출력과 비정상출력의 메세지를
/dev/null(블랙홀:쓰레기소각장)으로 보내서 메세지를 감춘다.
다시 얘기해서 정상/비정상 출력을 감추고 싶다면 아래 명령어를 사용한다.
> /dev/null 2>&1 or 2> /dev/null 1>&2
정상 출력을 감추고 싶으면 ? ls > /dev/null
비정상 출력을 감추고 싶으면 ? ls 2> /dev/null
동시에 감추고 싶으면 ? ls > /dev/null 2>&1
# yum -y update coreutils > /dev/null 2>&1
# rpm -q coreutils
coreutils-5.97-34.el5_8.1
# uname -a
Linux localhost.localdomain 2.6.18-308.el5 #1 SMP ...
# reboot
- 새로운 커널로 부팅을 했다면 이전 커널은 확인해서 필요없다면 삭제하는 것이 좋다.
# uname -a
Linux localhost.localdomain 2.6.18-402.el5 #1 SMP ...
# rpm -e kernel-2.6.18-308.el5
# rpm -q kernel
kernel-2.6.18-402.el5
===============================================================================
===============================================================================
LAB> yum 을 이용한 단일 패키지 설치하기
!!!
!!! - 패키지명을 정확하게 알지 못하면 아래 -q 옵션을 사용하면 안된다.
!!! # rpm -q core
!!! package core is not installed
!!!
!!! - -qa 옵션을 사용해서 전체 패키지를 검사한 후 파이프로 grep 이
!!! - 잡을 수 있도록 넘겨야 한다.
!!! # rpm -qa | grep core
!!! svrcore-4.0.4-3.el5
!!! policycoreutils-1.33.12-14.8.el5
!!! coreutils-5.97-34.el5_8.1
# ifconfig
# route -n
# cat /etc/resolv.conf
VBox 이더넷연결 확인
-
# ping -c 2 kr.yahoo.com <-- 인터넷 연결 확인
# yum -y install vim-enhanced <-- vim-enhanced 패키지 설치
# rpm -qa | grep cvs <-- 전체 설치된 패키지에서 cvs 만 검색
cvs-1.11.22-11.el5
# yum -y remove cvs <-- 설치된 cvs 패키지 삭제
# yum -y install cvs <-- 삭제된 cvs 패키지 설치
===============================================================================
===============================================================================
LAB> yum 을 이용한 그룹 패키지 설치하기
# yum -y grouplist
# yum -y groupinstall "패키지 그룹명"
ex) yum -y groupinstall "Development tools"
===============================================================================
===============================================================================
LAB> yum 을 이용한 그룹 패키지 삭제하기
# yum -y groupremove "패키지 그룹명"
ex) yum -y groupremove "Development tools"
===============================================================================
===============================================================================
LAB> yum 을 이용한 패키지 검색하기
# yum search httpd
===============================================================================
===============================================================================
LAB> yum 을 이용한 업데이트 확인하기
# yum check-update
===============================================================================
===============================================================================
LAB> yum 설정파일과 저장소 설정파일 확인하기
!!! 사용자가 내용을 수정할 수 있다. !!!
# ls -l /etc/yum.conf
-rw-r--r-- 1 root root 379 Jul 26 2012 /etc/yum.conf
# ls -l /etc/yum.repos.d/
total 36
-rw-r--r-- 1 root root 1926 Jan 12 2013 CentOS-Base.repo
-rw-r--r-- 1 root root 636 Jan 12 2013 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 626 Jan 12 2013 CentOS-Media.repo
-rw-r--r-- 1 root root 6846 Jan 12 2013 CentOS-Vault.repo
===============================================================================
===============================================================================
LAB> yum 을 이용한 패키지 검색하기
!!! 실무에 적용을 잘하기 위해서는 패키지명을 잘 알고 있으면 도움이 된다.
# which useradd
# rpm -qf /usr/sbin/useradd
# rpm -qf `which useradd`
# rpm -qi shadow-utils
# rpm -ql shadow-utils | grep bin
===============================================================================
===============================================================================
LAB> 소스 rpm 파일 설치하기
!!! rpmbuild 명령어를 이용해서 ~.src.rpm -> ~.i386.rpm !!!
!!! 아래 디렉토리가 없다면 생성한다.
# cd /usr/src/redhat
- BUILD RPMS SOURCES SPECS SRPMS 디렉토리가 없다면 생성
# mkdir BUILD RPMS SOURCES SPECS SRPMS
# cd RPMS
# mkdir athlon geode i386 i486 i586 i686 noarch
/usr/src/redhat
|-- BUILD
|-- RPMS
| |-- athlon
| |-- geode
| |-- i386
| |-- i486
| |-- i586
| |-- i686
| `-- noarch
|-- SOURCES
|-- SPECS
`-- SRPMS
- rpm-build 패키지가 없다면 yum 을 이용해서 설치한다.
# rpm -qf `which rpmbuild`
rpm-build-4.4.2.3-36.el5_11
o src.rpm 파일을 i386.rpm 으로 컴파일/build 하기 위한 순서
-- 순서 --
1. rpm 소스 파일 다운로드
2. 소스 파일 설치
3. rpm 디렉토리로 이동
4. rpmbuild로 컴파일
-- 순서 --
1. rpm 소스 파일 다운로드
# cd
# wget http://vault.centos.org/5.8/os/SRPMS/mc-4.6.1a-35.el5.src.rpm
2. 소스 파일 설치
# rpm -Uvh mc-4.6.1a-35.el5.src.rpm
3. rpm 디렉토리로 이동
# cd /usr/src/redhat
# tree -L 3 *
4. rpmbuild로 컴파일
- rpmbuild 로 컴파일시 의존성 에러가 발생하면 의존성에 관련된
패키지들을 먼저 설치하고 rpmbuild를 다시 실행한다.
# yum -y install glib2-devel e2fsprogs-devel slang-devel
# cd SPECS
# rpmbuild -ba mc.spec
# ls ../RPMS/i386/
mc-4.6.1a-35.i386.rpm mc-debuginfo-4.6.1a-35.i386.rpm
===============================================================================
===============================================================================
LAB> 소스 rpm 파일 설치하기
coreutils source rpm 패키지를 가져와서 rpmbuild 명령어를 이용해서
rpm 파일을 생성해본다.
# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm
# rpm -Uvh coreutils-5.97-34.el5.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -ba coreutils.spec
- coreutils-5.97-34.el5.src.rpm 파일을 가지고 나온 컴파일된 파일이다.
# ls ../RPMS/i386
coreutils-5.97-34.i386.rpm
===============================================================================
===============================================================================
LAB> 자신의 소스를 생성해서 rpm 파일로 만들어보자.
*** SPEC 파일을 만드는 것이 중요하다. ***
*** 구글에서 찾으면 많이 나옴. ***
===============================================================================
===============================================================================
LAB> 명령어에 대한 패키지를 구해서 하나의 파일로 저장해보자.
!!! 나중에 프린터로 뽑아서 분석하면 도움이 된다.
!!! /bin /usr/bin /sbin /usr/sbin
- 자신의 홈디렉토리에 bin 디렉토리를 만들고 이동한다.
# mkdir ~/bin ; cd ~/bin
- 실행권한의 package_list.sh 파일을 생성한다.
# install /dev/null package_list.sh
- 자동화 파일(쉘스크립트)를 작성한다.
# vi package_list.sh
-- package_list.sh --
#!/bin/sh
dirlist="/bin/* /usr/bin/* /sbin/* /usr/sbin/*"
savefile=/root/package_list.txt
cp /dev/null $savefile
for file in $dirlist
do
echo "-- $file --" >> $savefile
package_name=$(rpm -qf $file)
echo "package name : $package_name" >> $savefile
printf "\n" >> $savefile
rpm -qi $package_name >> $savefile
echo "" >> $savefile
done
-- package_list.sh --
# ./package_list.sh
- 저장된 정보를 이용해서 각 명령어가 속한 패키지명과
패키지에 대한 정보를 확인하고 종료한다.
# vi ../package_list.txt
:
:
===============================================================================
===================================================================
LAB> gzip 과 bzip2 관련 명령어 살펴보기
# ls -li `which gzip`
191851 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/gzip
# ls -li `which gunzip`
191851 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/gunzip
# ls -li `which zcat`
191851 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/zcat
# ls -li `which bzip2`
32947 -rwxr-xr-x 1 root root 36180 Sep 21 2010 /usr/bin/bzip2
# ls -li `which bunzip2`
32776 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bunzip2 -> bzip2
# ls -li `which bzcat`
32777 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bzcat -> bzip2
# find /usr/local/java/ -name "*jar"
# find /usr/lib -name "*.a"
===================================================================
'OS > [Linux] CentOS' 카테고리의 다른 글
[CentOS] 14-2 패키지 관리 - tomcatWAS설치 (3) | 2016.07.10 |
---|---|
[CentOS] 14-1 패키지 관리 - tomcat 환경설정 (0) | 2016.07.10 |
[CentOS] 13-2. 사용자 생성 (0) | 2016.07.10 |
[CentOS] 13-1. 사용자관리체크 (0) | 2016.07.10 |
[CentOS] 13. 사용자관리 (0) | 2016.07.10 |