압축 :
xz, bzip2, gzip
# cp /bin/gawk .
# cat /bin/sed > sed
# install /bin/mv .
# ls
gawk mv sed ...
- xz 로 압축
# ls -l gawk
-rwxr-xr-x 1 root root 320800 Apr 3 13:40 gawk
# xz gawk <-- xz로 압축하기
# ls -l gawk.xz
-rwxr-xr-x 1 root root 134252 Apr 3 13:40 gawk.xz
- bzip2 로 압축
# ls -l mv
-rwxr-xr-x 1 root root 82116 Apr 3 13:41 mv
# bzip2 mv
# ls -l mv.bz2
-rwxr-xr-x 1 root root 37665 Apr 3 13:41 mv.bz2
- gzip 으로 압축
# ls -l sed
-rwxr-xr-x 1 root root 51860 Apr 3 13:40 sed
# gzip sed
# ls -l sed.gz
-rwxr-xr-x 1 root root 23881 Apr 3 13:40 sed.gz
- 파일 확인하기 (file 명령어 이용)
# file mv.bz2
mv.bz2: bzip2 compressed data, block size = 900k
# file gawk.xz
gawk.xz: data
# file sed.gz
sed.gz: gzip compressed data, was "sed", from Unix, last modified: Thu Apr 3 13:40:34 2014
- 압축해제하기
gzip : gzip -d , gunzip
bzip2 : bzip2 -d , bunzip2
xz : xz -d , unxz
- xz 압축해제
# unxz gawk.xz or xz -d gawk.xz
- bzip2 압축해제
# bunzip2 mv.bz2 or bzip2 -d mv.bz2
- gzip 압축해제
# gunzip sed.gz or gzip -d mv.bz2
- 압축 명령어는 파일마다 압축을 한다. (하나로 묶는 것은 X)
# gzip mv gawk sed
# gzip -d *.gz
- tar 옵션 <묶을파일명> <파일리스트 ...>
!!! tar 묶는 역할만 하고 압축은 안한다 !!!
!!! 여러개의 파일을 묶을때는 디렉토리에 파일들을 넣고
!!! 디렉토리를 묶는다.
# tar cvf test.tar mv gawk sed
# ls -l
-rw-r--r-- 1 root root 460800 Apr 3 13:56 test.tar
# gzip test.tar
# ls -l test.tar.gz
-rw-r--r-- 1 root root 218093 Apr 3 13:56 test.tar.gz
- tar + gzip
압축할때 : tar czf <파일명> <압축할 파일들 ...>
압축해제시 : tar xzf <파일명>
압축의 내용을 확인 : tar tvzf <파일명>
# tar cvzf test2.tar.gz gawk mv sed
~ ~~
| |
+-------------+
# tar tvzf test2.tar.gz <-- 압축을 보고자할때 -t 옵션을 사용
# tar xvzf test2.tar.gz -C /tmp <-- 다른디렉토리에 풀때 -C
- tar + bzip2
# tar cvjf test3.tar.bz2 gawk mv sed
~ ~~~
| |
+-------------+
- 압축된 상태를 출력한다.
# tar tvjf test3.tar.bz2
- 현재 디렉토리에 풀린다.
# tar xvjf test3.tar.bz2
- /usr/local/bin 디렉토리에 풀때 -C 사용
# tar xvjf test3.tar.bz2 -C /usr/local/bin
!!! 시스템의 시간을 동기화하는 방법 !!!
# cd /etc/cron.hourly
# install /dev/null rdate.sh
# vi rdate.sh
-- rdate.sh --
#!/bin/sh
rdate -s time.bora.net && clock -w
-- rdate.sh --
# /etc/init.d/crond restart
--> /etc/cron.hourly 에 디렉터리 넣어두면
1시간마다 자동 실행됨(스케쥴링)
LAB> 아파치 웹서버를 가지고와서 시스템에 설치해보자.
공식사이트 : httpd.apache.org
# wget http://mirror.apache-kr.org//httpd/httpd-2.4.10.tar.bz2
# tar xjf httpd-2.4.10.tar.bz2
# cd httpd-2.4.10
# ./configure make make install <-- 생략
===============================
#########################
## 소프트웨어 설치하기 ##
#########################
http://vault.centos.org
http://rpmfind.net
리눅스 (RedHat 계열의 리눅스)
rpm : 소스, 컴파일
tar.gz, tar.bz2 : 소스, 컴파일
~~~~.i386.rpm <-- 컴파일된 rpm 파일 (윈도우 install.exe 동일)
~~~~.src.rpm <-- 소스 rpm 파일
~~~~.tar.gz <-- 압축된 파일 (tar + gzip) , 자바 (윈도우 이클립스처럼 압축해제)
~~~~.tar.bz2 <-- 압축된 파일 (tar + bzip2) (윈도우 이클립스처럼 압축해제)
######################
## gzip, bzip2, tar ##
######################
o gzip
- gzip은 GNU 프로젝트를 통해 배포되는 유틸리티
- gzip으로 압축한 파일은 파일명이 : 파일명.gz 확장자를 갖는다.
- 또한 여러 파일들을 지정하면 각각의 파일명.gz 파일로 저장한다.
사용법 : gzip 옵션 파일들...
옵션 :
-d --decompress decompress
-1 --fast compress faster
-9 --best compress better
사용예 : gzip filename
- filename 을 압축해서 filename.gz 파일이 생성된다.
- 여러 파일을 gzip으로 압축해도 각각 filename.gz 이 생성이 된다.
- 여러개의 파일을 하나의 파일로 묶이지 않는다.
- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다.
압축해제 : gunzip filename or gzip -d filename
=================================================================
실습> gzip 을 이용해서 압축과 압축해제를 해보자.
# mkdir test; cd test
# cp /etc/passwd /bin/mv .
# ls -l
total 100
-rwxr--r-x 1 root root 82116 Feb 18 06:39 mv
-rw-r--r-- 1 root root 1550 Feb 18 06:39 passwd
# gzip mv
# gzip passwd
# ls -l
total 52
-rwxr--r-x 1 root root 38711 Feb 18 06:39 mv.gz
-rw-r--r-- 1 root root 653 Feb 18 06:39 passwd.gz
# file *
mv.gz: gzip compressed data, was "mv", from Unix, last modified: Tue Feb 18 06:39:57 2014
passwd.gz: gzip compressed data, was "passwd", from Unix, last modified: Tue Feb 18 06:39:57 2014
# ls -li /bin/gzip
255795 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/gzip
# find /bin -inum 255795 -ls
255795 72 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/gunzip
255795 72 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/gzip
255795 72 -rwxr-xr-x 3 root root 63316 Jul 22 2011 /bin/zcat
# gunzip mv.gz
# gzip -d passwd.gz
# file *
mv: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
passwd: ASCII text
=================================================================
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 파일이 생성된다.
- 여러 파일을 bzip2로 압축해도 각각 filename.bz2 가 생성이 된다.
- 여러개의 파일을 하나의 파일로 묶이지 않는다.
- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다.
ex) bzip2 filename
압축해제 : bunzip2 -d filename or bzip2 -d filename
=================================================================
실습> bzip2 를 이용해서 압축과 압축해제를 해보자.
# ls -l
total 52
-rwxr--r-x 1 root root 37617 Feb 18 06:39 mv.bz2
-rw-r--r-- 1 root root 687 Feb 18 06:39 passwd.bz2
# bzip2 -d mv.bz2
# bunzip2 passwd.bz2
# ls -l
total 100
-rwxr--r-x 1 root root 82116 Feb 18 06:39 mv
-rw-r--r-- 1 root root 1550 Feb 18 06:39 passwd
# ls -l /usr/bin/bzip2
-rwxr-xr-x 1 root root 36180 Sep 21 2010 /usr/bin/bzip2
# ls -li /usr/bin/bzip2
256283 -rwxr-xr-x 1 root root 36180 Sep 21 2010 /usr/bin/bzip2
# ls -li /usr/bin/bunzip2
255867 lrwxrwxrwx 1 root root 5 Feb 14 12:52 /usr/bin/bunzip2 -> bzip2
# ls -l /usr/bin/bzcat
lrwxrwxrwx 1 root root 5 Feb 14 12:52 /usr/bin/bzcat -> bzip2
=================================================================
o tar
- tar는 단순히 하나의 아카이브 파일로 묶어 주는 역할만 할 뿐, 파일의 크기를 줄여주는 압축 기능은 없으므로 tar 명령어 안에서 gzip이나 bzip2 명령어와 함께 사용하는 옵션이 있다.
- 파일을 원래 상태로 복원하기 위해 파일의 퍼미션이나 소유권 등의 정보를 유지하면서 여러개의 파일들을 하나의 파일로 묶는 기능을 가진다.
Usage: tar [OPTION...] [FILE]...
ex) tar options 압축파일.tar 압축할파일들 ...
tar cvf tarfile files
gzip -9 tarfile
option
c : 새로운 아카이브의 생성
x : 아카이브로부터 파일 추출
v : 파일을 묶거나 풀 때 정보를 출력
f : 읽거나 기록할 tar 파일을 정의
z : 자료를 쓸 때 gzip으로 압축하도록 지시하거나 파일 안의 자료가 gzip으로 압축되어 있음을 알림
v : 묶거나 풀고 있는 파일을 보여줌
-C : 다른 디렉토리에 압축을 해제할때 쓴다.
=================================================================
실습> tar 를 이용해서 압축과 압축해제를 해보자.
# tar czf test1.tar.gz mv passwd <-- tar 명령어의 z (gzip 을 이용해서 압축)
# tar cjf test2.tar.bz2 mv passwd <-- tar 명령어의 j (bzip2를 이용해서 압축)
# tar xzf test1.tar.gz <-- gzip 을 이용해서 압축해제 하는데 현재 디렉토리에 해제)
# tar xjf test2.tar.bz2 <-- bzip2 를 이용해서 압축해제 하는데 현재 디렉토리에 해제)
# tar xzf test1.tar.gz -C /tmp <-- 압축해제를 다른 디렉토리에 풀때 -C를 이용한다.
# ls /tmp
# tar xjf test2.tar.bz2 -C /tmp
# ls /tmp
mv passwd ...
# ls /var/tmp
# tar xzf test1.tar.gz -C /var/tmp
# ls /var/tmp
mv passwd
=================================================================
=================================================================
실습> C 언어의 기본 라이브러리를 확인해보자.
!!! 라이브러리 형식 : lib<라이브러리명>.a <-- 정적
!!! 라이브러리 형식 : lib<라이브러리명>.so <-- 동적
# ls -l /usr/lib/libc.a
ls
-rw-r--r-- 1 root root 3016658 2012-02-22 07:51 /usr/lib/libc.a
# ls -l /usr/lib/libc.so
ls
-rw-r--r-- 1 root root 238 2012-02-22 07:22 /usr/lib/libc.so
# ar t /usr/lib/libc.a | head
init-first.o
libc-start.o
sysdep.o
version.o
check_fds.o
libc-tls.o
elf-init.o
dso_handle.o
errno.o
errno-loc.o
=================================================================
=================================================================
실습> 디렉토리를 묶을때 주의점
!!! 디렉토리안에 들어가서 묶지말고 반드시 디렉토리 자체로 묶는다. !!!
!!! 그러면 압축을 해제할때도 묶인 디렉토리가 그대로 나온다.
# cd /etc
# tar czf etc.tar.gz *
# mv etc.tar.gz /var/tmp
# cd /var/tmp
# ls
etc.tar.gz mv passwd
# tar xzf etc.tar.gz
# ls
... <-- 압축이 여기에 풀려버린다... (문제점!!!)
# cd
# tar czf etc2.tar.gz /etc <-- /etc 디렉토리 자체를 묶는다.
tar: Removing leading `/' from member names
# rm -rf /var/tmp/*
# ls /var/tmp/
# mv etc2.tar.gz /var/tmp/
# cd /var/tmp
# ls
etc2.tar.gz
# tar xzf etc2.tar.gz
# ls
etc etc2.tar.gz <-- 문제점을 보완 ( 압축해제시 etc 디렉토리가 나온다. )
=================================================================
=================================================================
실습> 아파치를 설치하고 tar.gz 의 문제점을 파악해보자.
!!! 소스파일을 설치하면 아래 4가지 정도를 거쳐야 한다.
!!! 1. 환경설정 단계
!!! 2. 컴파일 단계
!!! 3. 설치 단계
!!! 4. 설정세팅 단계
# tar xzf apache_1.3.41.tar.gz
# cd apache_1.3.41
# ./configure \ <-- 환경설정 단계
> --enable-shared=max \
> --enable-rule=SHARED_CORE \
> --enable-module=so
# make <-- 컴파일 단계
# make install <-- 설치 단계
# PATH=$PATH:/usr/local/apache/bin <-- 경로변수 세팅
# /etc/init.d/httpd stop <-- 리눅스 설치시 웹서버가 설치되었다면 중지한다.
# iptables -F <-- 방화벽 중지
# /usr/local/apache/bin/apachectl start <-- 새로 소스 컴파일한 웹서버를 시작한다.
# echo "Hello Linux Server" > /usr/local/apache/htdocs/index.html
# netstat -nat <-- 웹서버 포트 확인
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
:
:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
:
:
Host OS에서 Guest OS 리눅스로 접속을 시도해서 "Hello Linux Server" 가 나오면 성공이다.
=================================================================
#########
## rpm ##
#########
http://rpmfind.net
o rpm 이란 ?
- rpm이란 Redhat Package Manger 의 약자로 소스설치의 어려움을 극복하기 위해서
레드햇사에서 만들어 놓은 패키징 관리 프로그램이다.
- 의존성의 문제점을 안고 있다.
=================================================================
실습> rpm 을 이용해서 mc 패키지를 설치해보자.
Settings -> DVD 1번을 삽입 -> 리눅스에서 아래를 진행한다.
# mount /dev/cdrom /mnt
# cd /mnt/CentOS
# rpm -Uvh mc-4.6.1a-35.el5.i386.rpm
Preparing... ########################################### [100%]
1:mc ########################################### [100%]
# LANG=C
# mc
=================================================================
=================================================================
실습> 의존성이 있는 파일을 설치해보자.
# cd /mnt/CentOS
# ls firefox-3.6.26-1.el5.centos.i386.rpm
firefox-3.6.26-1.el5.centos.i386.rpm
# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm
error: Failed dependencies:
xulrunner >= 1.9.2.26-1 is needed by firefox-3.6.26-1.el5.centos.i386
libxpcom.so is needed by firefox-3.6.26-1.el5.centos.i386
libxul.so is needed by firefox-3.6.26-1.el5.centos.i386
# rpm -Uvh xulrunner-1.9.2.26-1.el5_7.i386.rpm
Preparing... ########################################### [100%]
1:xulrunner ########################################### [100%]
# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm
Preparing... ########################################### [100%]
1:firefox ########################################### [100%]
# firefox
Error: no display specified <-- Xwindow 가 없으면 실행이 안되는 문제가 발생
# rpm -Uvh xorg-x11-server-Xorg-1.1.1-48.90.el5.i386.rpm
error: Failed dependencies:
xkbcomp is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xkbdata is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-drv-evdev is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-drv-keyboard is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-drv-mouse is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-drv-vesa is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-drv-void is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
xorg-x11-utils is needed by xorg-x11-server-Xorg-1.1.1-48.90.el5.i386
의존성있는 파일이 없으면 설치가 안된다.
혹은 되더라도 정상작동하는데 문제가 있다.
=================================================================
=================================================================
실습> yum 을 이용해서 X Window System 을 설치해보자.
# yum -y grouplist
:
:
Installed Groups: <-- 이미 설치된 그룹
Development Tools
Dialup Networking Support
Editors
:
:
Available Groups: <-- 설치가 안된 그룹
:
:
X Window System
:
:
Done
# yum -y groupinstall "X Window System" <-- X Window System 그룹을 설치한다.
# startx <-- X Window 가 실행된다.
# xeyes
--> 최초 설치시 설치 했다
=================================================================
rpm 파일을 설치하는 방법
mc-4.6.1a-35.el5.i386.rpm
패키지명-버전-배포판.아키텍처.rpm
fc19
el5
src
noarch <-- 모든 아키텍처에 설치가 가능하다.
arm..
sparc <--- 자기 아키텍처만 설치/실행
ppc
x86_64 64bit
i386 -> i486 -> i586 -> i686 32bit
<----------------------- X
O ------------------------>
1. DVD 넣는다.
2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.
3. rpm 파일이 있는 디렉토리에서 파일을 설치한다.
-i 설치
-U 업그레이드 / 설치
-v 설치할때 파일명을 출력
-h # 으로 설치진행을 출력
-e 삭제
--force 강제설치
--nodeps 의존성을 무시하고 설치
-Uvh 설치
# mount -t iso9660 -o ro /dev/cdrom /mnt
# cd /mnt/CentOS
# rpm -i mc-4.6.1a-35.el5.i386.rpm <-- 설치
# rpm -i mc-4.6.1a-37.el5.i386.rpm <-- 에러
-e 삭제
rpm -e 패키지명
rpm -e 패키지명-버전
# yum update kerne tar xzf httpd-2.4.6.tar.gz l
# rpm -q kernel
kernel-2.6.18-348.16.1.el5
kernel-2.6.18-371.1.2.el5
- 같은 패키지명이 동시에 존재할때는 삭제할 패키지를
버전까지 써줘야 삭제가 된다.
# rpm -e kernel-2.6.18-371.1.2.el5
!!! /var/lib/rpm 디렉토리를 참고 !!!
-q rpm DB에서 정보에서 찾는다.
- 실행파일 (/bin,/usr/bin,/sbin,/usr/sbin,/usr/X11R6/bin)
- 설정파일 (/etc)
- 문서파일 (/usr/share/doc)
- 도움말파일 (/usr/share/man)
1. 어떤 패키지가 이 시스템에 설치 ?
- rpm -qa
2. 어떤 패키지가 어떤 파일들을 설치 ?
- rpm -ql coreutils
- rpm -qd coreutils
- rpm -qc coreutils
- 숙제 바이너리 파일은 어떻게 볼까 ?
3. 파일이 어떤 패키지에서 나왔는지 ?
- rpm -qf /bin/ls
===========================================================
LAB> 의존성을 무시하고 rpm 파일을 설치해보자.
!!! --nodeps 옵션을 주고 설치해도 실제 동작은 안될 수 있다. !!!
DVD 넣고
# rpm -Uvh /mnt/CentOS/gnome-mime-data-2.4.2-3.1.i386.rpm
준비 중... ########################################### [100%]
gnome-mime-data-2.4.2-3.1.i386 패키지는 이미 설치되어 있습니다
# rpm -Uvh /mnt/CentOS/gnome-speech-0.4.5-1.fc6.i386.rpm
오류: Failed dependencies:
festival is needed by gnome-speech-0.4.5-1.fc6.i386
# rpm -Uvh --nodeps /mnt/CentOS/gnome-speech-0.4.5-1.fc6.i386.rpm
준비 중... ########################################### [100%]
1:gnome-speech ########################################### [100%]
===========================================================
===========================================================
LAB> /bin 디렉토리에 파일들의 패키지를 뽑고 그 패키지에 담긴
실행파일들을 확인해보자.
# install /dev/null rpmlist.sh
# vi rpmlist.sh
-- rpmlist.sh --밑에는 rpmlist.sh 내용
#!/bin/sh
# /bin 디렉토리에 있는 파일들을 검사해서 어느 패키지에
# 나왔는지 확인하고 그 내용을 rpmlist 변수에 넣어준다.
rpmlist=$(rpm -qf /bin/* | sort | uniq)
> rpmlist.txt
# 현재 rpmlist 변수에 담긴 패키지를 검색해서 파일로 저장한다.
for i in $rpmlist
do
echo "== $i ==" >> rpmlist.txt
rpm -ql $i | grep bin >> rpmlist.txt
echo "" >> rpmlist.txt
done
-- rpmlist.sh --
# ./rpmlist.sh
# cat rpmlist.txt
:
:
===========================================================
rpm 패키지를 검증 (-qV)
-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
tar.gz 파일을 설치하는 방법
tar - 파일을 묶는 역할만 한다.
tar 옵션
-c 묶는다.
-x 푼다.
-f 파일명
-v 보여준다.
-t tar 에 묶여있는 파일들을 출력
-z /bin/gzip 호출
-j /usr/bin/bzip2 호출
-C <디렉토리> 특정 디렉토리에 압축을 해제
# mkdir -m 700 test; cd test
# mkdir -m 700 test&& cd test
# echo 1234 > 1.txt
# echo 6789 > 2.txt
# ls -l
total 8
-rw-r--r-- 1 root root 5 Nov 23 23:41 1.txt
-rw-r--r-- 1 root root 5 Nov 23 23:42 2.txt
# gzip 1.txt 2.txt
# ls -l
total 8
-rw-r--r-- 1 root root 31 Nov 23 23:41 1.txt.gz
-rw-r--r-- 1 root root 31 Nov 23 23:42 2.txt.gz
# rpm -q atd
rpm - 패키지 파일을 설치 (인터넷 필요 x , 파일이 존재 O)
yum - 인터넷을 통해서 패키지를 설치 (파일이 존재 X , 인터넷 연결 O)
~~.i386.rpm <-- 바이너리 386 ~ 686 모두 설치가능
~~.i586.rpm <-- 386 x 486 x 586 ~ 686 ... 786 ...
=========================================================
실습> 파일이 변조가 되었을때 다시 설치하는 방법
# > /bin/vi
# ls -l /bin/vi
-rwxr-x--- 1 root root 0 2014-04-07 09:43 /bin/vi*
# rpm -qV vim-minimal
SM5....T /bin/vi
- DVD 를 넣고
# mount -t iso9660 -o ro /dev/cdrom /mnt
- 이미 설치되었으므로 설치오류가 발생한다.
# rpm -Uvh /mnt/CentOS/vim-minimal-7.0.109-7.el5.i386.rpm
준비 중... ########################################### [100%]
vim-minimal-7.0.109-7.el5.i386 패키지는 이미 설치되어 있습니다
- -- force 옵션을 이용해서 강제로 설치한다.
# rpm -Uvh --force /mnt/CentOS/vim-minimal-7.0.109-7.el5.i386.rpm
준비 중... ########################################### [100%]
1:vim-minimal ########################################### [100%]
# ls -l /bin/vi
-rwxr-xr-x 1 root root 593160 2011-03-06 11:36 /bin/vi*
# rpm -qV vim-minimal
=========================================================
실습> 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 사용자만 사용!!! (`는 1왼쪽에 `이다)
` `안에 있는 명령이 먼저 실행되어 그 결과가 나온다
# 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
!!! 전체 설치된 패키지를 알아야 하고, 패키지에서 각각의 설치된 정보를 뽑아낼 수 있어야 한다. !!!
실습> 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 <-- 전체 설치된 파일들을 출력
=======================================================
실습> 리눅스 패키지를 소스로 받아 컴파일해보자.
*** 리눅스 소스는 모두 공개되어 있으므로 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 --
- coreutils 소스 다운로드
[root@www ~]# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm
[root@www ~]# mkdir -p /usr/src/redhat/SOURCES <-- 디렉토리가 없으면 생성한다.
[root@www ~]# rpm -Uvh coreutils-5.97-34.el5.src.rpm <-- 프로그램 설치
[root@www ~]# cd /usr/src/redhat/SOURCES
[root@www SOURCES]# tar xjf coreutils-5.97.tar.bz2 <-- 압축해제
[root@www SOURCES]# cd coreutils-5.97
[root@www coreutils-5.97]# ./configure
[root@www coreutils-5.97]# make
[root@www coreutils-5.97]# cd src
[root@www src]# ls
<-- 컴파일된 파일을 확인한다.
[root@www src]# vi ls.c <-- ls 소스를 수정한다.
-- ls.c --
:set nu <-- vi 명령 : 번호 세팅
/main <-- vi 명령 : 검색
puts("my ls"); <-- 1128번 라인에 출력 함수를 추가한다.
ESC -> :wq <-- vi 명령 : 저장하고 종료
-- ls.c --
[root@www src]# make ls
[root@www src]# ./ls
my ls <-- 수정된 내용이 출력된다.
:
:
=======================================================
#########
## yum ##
#########
사용법 : yum [options] COMMAND
http://blog.outsider.ne.kr/346
yum : redhat 계열의 리눅스에서 사용한다.
apt-get : Debian 계열의 리눅스에서 사용한다.
ex)
CentOS : yum install mc , yum remove mc
Ubuntu : apt-get install mc , apt-get remove mc
참고 : http://blog.outsider.ne.kr/346
실습> yum 테스트
# ping -c 2 kr.yahoo.com <-- 인터넷 연결 확인
# yum install vim-enhanced <-- vim-enhanced 패키지 설치
# rpm -qa | grep cvs <-- 전체 설치된 패키지에서 cvs 만 검색
cvs-1.11.22-11.el5
# yum remove cvs <-- 설치된 cvs 패키지 삭제
# yum install cvs <-- 삭제된 cvs 패키지 설치
#
#
예전에는 리눅스에 프로그램을 설치하기 위해서는 아래와 같은 과정을 거쳤다.
소스 -> 환경설정 -> 컴파일 -> 설치
~~~~ ~~~~~~~~
|
+--> 미리 컴파일 -> 패키지명.버전명.i386.rpm -> 설치
|
+--> 소스 파일 -> 설치 -> 컴파일
==========================================================
LAB> yum 이용해서 설치/삭제에 대한 로그를 확인해보자.
로그기록 파일 : /var/log/yum.log
pts/0# tail -f /var/log/yum.log
:
:
Apr 08 09:35:00 Installed: 1:mc-4.6.1a-35.el5.i386 <-- 설치로그
Apr 08 09:35:35 Erased: mc <-- 삭제로그
pts/1# yum -y install mc
pts/1# yum -y remove mc
==========================================================