본문 바로가기

Linux/기타

소프트웨어 설치

리눅스


주제 : 소프트웨어 설치


미러사이트 : 외국에 있는 배포사이트를 똑같이 만들어 놓은 것.


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    (소스형태, 컴파일형태)

~.rpm : rpm  (소스형태, 컴파일형태)

~.src.rpm : (소스형태)  >>  전체가 다 C언어로 되어 있어서 분석을 할 수 있다.

~.i386.rpm, ~.i586.rpm, ~.i686.rpm : (컴파일형태)  >> 이미 컴파일 되어 있는 형태(intel 계열)

~.deb : 데비안계열의 패키징 방식





rpm 의 가장 큰 단점.
- 패키지의 의존성이 존재하면 설치하기가 어렵다.
ex) 리눅스에서 네이트온 한번 깔아 볼 것 -> 설치가 되면 잘하는 것


~.rpm : rpm 명령어로 설치
yum   : rpm 파일을 설치  >> 어떤 소프트웨어를 설치할 때 의존성 있는 것들을 자동으로 설치해준다.

yum : 이미 컴파일이 되어있는 패키지를 인터넷으로 다운받아서 설치하는 방식


의존성 : 패키지끼리 서로 연관 되어있는 형태이다.
- 리눅스용 웹브라우저(firefox 를 설치했다.)
- 강제로 설치했다고 해도 firefox 가 실행이 안된다.
- 이것을 실행하기 위해서는 의존성이 걸린 Xwindow system 의 관련된 패키지들을
- 모두 설치해야 firefox 를 설치하고 사용할 수 있다.



chrome 설치
>> 설치해야 하는 패키지가 많다.



~~~~.i386.rpm  <-- 컴파일된 rpm 파일
~~~~.src.rpm   <-- 소스 rpm 파일
~~~~.tar.gz    <-- 압축된 파일 (tar + gzip) 
~~~~.tar.bz2   <-- 압축된 파일 (tar + bzip2)
~~~~.tar.xz   <-- 압축된 파일 (tar + xz)



아카이브 : 여러개의 파일을 하나로 묶어 놓은 것.




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







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

압축해제 : bzip2 -d filename  or bunzip2 -d filename





o xz
- 요즘 나온 압축 프로그램
- 사용법은 비슷하다.
- 리눅스 커널 소스가 이 압축프로그램으로 압축되어 있다. 
linux-3.17.2.tar.xz


** 커널 컴파일을 할 줄 알아야한다**




https://www.kernel.org/




아카이브 : 여러개의 파일을 하나로 묶어 놓은 것.

o tar (압축하는 프로그램이 아님!!!)
- tar는 단순히 하나의 아카이브 파일로 묶어 주는 역할만 할 뿐, 
  파일의 크기를 줄여주는 압축 기능은 없으므로 
  tar 명령어 안에서 gzip이나 bzip2 명령어와 함께 사용한다.
- 파일을 원래 상태로 복원하기 위해 파일의 퍼미션이나 소유권 등의 정보를 유지하면서 여러개의 파일들을 하나의 파일로 묶는 기능을 가진다.

Usage: tar [OPTION...] [FILE]...

ex) tar options 파일.tar 파일들 ... (반드시 확장자를 써줘야 한다!)
tar cvf tarfile files 
gzip -9 tarfile  >>  tarfile.tar.gz 파일이 생성

option
c : 새로운 아카이브의 생성
x : 아카이브로부터 파일 추출
v : 파일을 묶거나 풀 때 정보를 출력
f : 읽거나 기록할 tar 파일을 정의
z : gzip으로 압축한다 >> 압축 프로그램을 옵션으로 사용
j : bzip2 로 압축한다 >> 압축 프로그램을 옵션으로 사용
C <DIR> : 압축을 해당 <DIR> 로 해제한다



=============================================================================
LAB1> 압축 연습 (사용자와 그룹에 관련된 중요 파일 3개를 현재 디렉토리에 복사한다)

# rsync /etc/passwd .         >> /etc/shadow파일을 현재 디렉토리에 복사한다.
# install -m 644 /etc/group .   >>  >> /etc/group파일을 현재 디렉토리에 복사한다.
# cat /etc/shadow > shadow   >> /etc/shadow파일을 현재 디렉토리에 복사한다.

-- 복사한 파일을 확인하는 명령어--
cmp
diff

--각 파일을 압축한다.
gzip group
bzip2 passwd
xz shadow    << yum -y install xz


- 압축된 파일을 확인한다.
- 중요한 것은 원본 파일이 삭제되고 각 파일명에 압축프로그램의 고유 확장자가 붙어있다는 것.

# chmod 400 shadow




o 첫 번째 압축해제
- 각 압축 프로그램의 명령어의 -d 옵션을 이용해서 압축을 해제한다.
# gzip -d group.gz 
# bzip2 -d passwd.bz2 
# xz -d shadow.xz 

o 두 번째 압축해제
- 각 압축 프로그램의 해제 명령어를 이용해서 압축을 해제한다.
# gzip group 
# bzip2 passwd 
# xz shadow 
>> 먼저 압축을 한뒤
# gunzip group.gz 
# bunzip2 passwd.bz2 
# unxz shadow.xz
>> 해제 명령어를 이용해서 압축 해제
=============================================================================




o 하드/심볼릭링크 확인하기 
- 압축 프로그램과 압축해제 프로그램의 하드링크와 심볼릭링크를 확인하는 부분.
# ls -li `which gunzip`
# ls -li `which gzip`
# ls -li `which zcat`
# ls -li `which bzip2`
# ls -li `which bunzip2`



=============================================================================
LAB2>tar + gzip 으로 압축하기 (단일 파일인 경우)

- tar 와 gzip 을 각각 실행하는 경우
# tar cvf test.tar passwd shadow group
# gzip test.tar             <-- test.tar.gz
  >> tar로 묶고 gzip으로 압축

- tar 와 gzip 을 한번에 실행하는 경우
# tar cvzf test2.tar.gz *   <-- test2.tar.gz       ==> z 옵션은 gzip 호출
  >> tar 명령어에 z 옵션을 넣어주게 되면 한번에 실행된다.
     tar 명령어에 z옵션을 주게 되면 tar프로그램 내부에서 외부의 gzip을 호출하게 되어 압축까지 한다.



- tar 와 bzip2 를 각각 실행하는 경우
# tar cvf test3.tar passwd shadow group    
# bzip2 test3.tar           <-- test3.tar.bz2

- tar 와 bzip2 를 한번에 실행하는 경우
# tar cvjf test4.tar.bz2 *  <-- test4.tar.bz2      ==> j 옵션은 bzip2호출
=============================================================================





=============================================================================
** 디렉토리로 묶어서 배포를 하지 않으면 불편할 때가 있다
(ex. 500개 파일을 디렉토리로 묶지 않고 배포를 하게 된다면 압축을 해제하는 폴더에 500개의 파일이 생성 될 것이다)
대부분의 배포는 디렉토리를 묶어 놓고 묶어놓은 디렉토리를 배포를 한다.

LAB3> tar + gzip으로 압축하기 ( 디렉토리에 넣고 묶을 경우)

*** 항상 인터넷 상에서는 어떤 프로그램을 압축해서 배포하는 경우에는 디렉토리에 넣고 그 디렉토리를 묶어서 배포한다.

  192  tar czf etc.tar.gz *
  193  mv etc.tar.gz /tmp/
  194  cd /tmp/
  195  ls
  196  tar xzf etc.tar.gz 
  197  ls
  198  rm -rf *
  199  ls
  200  cd /
  201  ls
  202  tar czf etc.tar.gz etc
  203  ls
  204  cd /tmp/
  205  ls
  206  cd /etc
  207  ls
  208  cd ..
  209  ls
  210  mv etc.tar.gz /tmp/
  211  cd /tmp/
  212  ls
  213  tar xzf etc.tar.gz 


cd -
>> 이전 디렉토리로 이동
=============================================================================



=============================================================================
LAB4> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기

http://httpd.apache.ogr
>> 최신판만 있음





1. 압축 해제
- 압축파일로 된 아파치 웹서버를 압축해제 한다.
tar xzf apache_1.3.41.tar.gz

2. 환경설정
- ./configure 명령어를 이용해서 환경을 설정한다
#cd apache_1.3.41
# ./configure   
>> UNIX (LINUX)에서는 보안 적인 이유로 현재 디렉토리의 실행파일들은 실행할 수 없게 기본값으로 막혀있다. -> 이를 풀수도 있지만 보안상의 이유로 안푸는 것이 좋다.
>> 항상 현재 디렉토리의 실행파일은 ./실행파일명 으로 실행을 해야한다.

3. 컴파일
- make 는 플젝트 단위로 컴파일을 한다.
#make


4. 설치
- make 뒤에 install 이라는 인자를 준다 > 그러면 컴파일된 파일들을 시스템에 자동으로 설치해준다.
#make install 


5. 웹서버 실행
- apachectl 명령어는 웹서버를 실행시켜주는 명령어이다.
#/usr/local/apache/bin/apachectl start

6. 웹서버 확인
- netstat 명령어는 현재 서버에 LISTEN 되어 있는 포트를 출력해준다.
#netstat -nltp


[11:28:36@localhost ~/apache_1.3.41]#netstat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
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      
tcp        0      0 0.0.0.0:825                 0.0.0.0:*                   LISTEN      
tcp        0      0 :::22    

>> 0 0.0.0.0:80 -> 이 부분이 나오면 된다.


LISTEN >> 

소켓통신 
socket : 전화기에 해당
bind : 전화번호에 해당
listen : 외부에서 전화가 오기를 기다리는 상태에 해당
accept : 전화가 받아지는 상태에 해당 (blocking 상태 : 다른 사람에게 전화 오는 것을 막는다)
connetc : 전화를 거는 상태에 해당


7. 메인 페이지 생성
#cd /usr/local/apache/htdocs/
#ls
#rm -rf *
#echo Welcome to Lim Ho-Young Sercer > index.html
i#fconfig eth1
#iptables -F



8. 브라우저로 접속
http://192.168.56.102 (자신의 VirtualBox eth1 IP)

=============================================================================








=============================================================================
LAB5> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기****중요하다 꼭 알아 둘 것 *****


http://netcat.sourceforge.net
netcat-0.7.1.tar.gz
  >> netcat에 관한 공부는 개인적으로 많이 할 것 -> 소스 분석 해볼 것.

-- 순서 --
1. 압축을 해제한다.
2. 환경설정을 한다.
3. 컴파일을 한다.
4. 설치한다.
5. 실행한다.
- - - - - -

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

!!(rmp -q nc 해서 결과가 나오면 그거 지워야 함)

4. 설치한다.
- 시스템에 설치한다.
# make install

5. 실행한다.
- 실행하기 전에 이미 설치된 nc 패키지를 삭제한다.
pts/0# rpm -q nc
pts/0# rpm -e nc

- 방화벽정책으로 인해서 접속이 안되면 모두 해제한다.
pts/0# iptables -F

(리눅스에서는 넷필터가 방화벽 역할을 한다. iptables 는 넷필터를 제어하는 역할.)


- 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~~

(pts0, pts1 두개의 터미널을 이용)


** 프로그램 간의 통신에서는 IP주소와 포트번호가 반드시 필요하다

=============================================================================


==================================================================

LAB1> 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


//exec : 프로그램 내부에서 다른 프로그램을 호출할 때 사용하는 명령어


- 다시 원래대로 복구한다.

# 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

===================================================================



===================================================================

LAB2> 위에서 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

=================================================================

'Linux > 기타' 카테고리의 다른 글

퍼미션  (0) 2015.04.21
yum  (0) 2015.04.20
rpm  (0) 2015.04.17
vi편집기 사용하기  (0) 2015.04.15
기본 명령어  (0) 2015.04.15