'Linux'에 해당되는 글 46건

  1. 2009.03.17 전체 세팅
  2. 2009.03.17 [리눅스] 아파치, mysql, php 소스 설치 절차
  3. 2009.03.17 리눅스에서 Apache2.2.4 + PHP 5.2.3 + mysql 5.1.19 설치
  4. 2008.07.25 tar
  5. 2008.07.25 명령어2
  6. 2008.07.25 명령어1
  7. 2008.07.25 gcc 사용
  8. 2008.07.25 gcc install
  9. 2008.07.25 chown
  10. 2008.06.04 linux java install

전체 세팅

Linux 2009. 3. 17. 18:00

Source downloads --Compressed GNU TAR archive (tar.gz)

#yum install gcc*
#yum -y install termcap libtermcap libtermcap-devel

#./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr --with-mysql-user=mysql --sysconfdir=/etc

 #make
 #make install
 -----------------------------

# GRANT ALL PRIVILEGES ON *.* to root@"%" IDENTIFIED BY 'root' WITH GRANT OPTION;
# flush privileges;
 ------------------------------
 Linux 초보들을 위한 글입니다.

제가 너무 허접 삽질을 많이 해서 익힌거라 ㅠㅠ

고수분들에게는 너무나 쉬운 것이겠지만

http://database.sarang.net 이나
http://www.linux.co.kr 쪽에 가니
많은 분들이 저랑 같은 삽질을 하더군요

오픈되어 있는 리눅스 메뉴얼대로 하니까 안되는 부분이 많더라구요 ㅠㅠ

쪽팔리지만 글 한번 올려 봅니다.

mysql.com 에 가서 최신 버젼을 다운 받으세요.
단, 소스를 다운 받지 마시고 컴파일이 다 되어진 파일( xxxx-linux-i686.tar.gz) 을 받습니다.


2003년 10월 31일

mysql-standard-4.0.18-pc-linux-i686.tar.gz 

이 파일을 받아 왔습니다.

더 상위 버젼을 받으셔도 됩니다.

참고로 소스파일의 파일명은 mysql-버젼.tar.gz 입니다.

소스를 받아 오신 분들은 아래 방법으로는 설치가 안됩니다.


[root@linux root]# tar zxvf mysql-standard-4.0.18-pc-linux-i686.tar.gz

압축을 풉니다


압축이 풀려서 생긴 디렉토리를  /usr/local/mysql 로 이동 시킵니다.
( 꼭 거기에 하실 필요는 없고 .. 원하는 디렉토리로 해도 됩니다 )

[root@linux root]mv mysql-standard-4.0.18-pc-linux-i686 /usr/local/mysql
[root@linux root]# cd /usr/local/mysql


설치 스크립트를 실행 합니다.

[root@linux root]#./scripts/mysql_install_db
Preparing db table
Preparing host table
Preparing user table
Preparing func table
Preparing tables_priv table
Preparing columns_priv table
Installing all prepared tables
031022 22:37:09  ./bin/mysqld: Shutdown Complete

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h myserver.co.kr password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the ./bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com

[root@linux root]#

위와 같은 메시지가 나오면 90% 끝입니다.

자 이제 mysql 작동을 위해 기본 설정을 해 줘야 합니다.
아래 부분에서 가장 해메는 부분 입니다.


[root@linux root]# groupadd mysql    
이미 있는 그룹이라고 나오면 그냥 넘어 가세요
[root@linux root]# adduser -g mysql mysql
이미 있는 유저라고 나오면 그냥 넘어 가세요
[root@linux root]# chown root.mysql /usr/local/mysql -R
root 로 권한을 줍니다.
[root@linux root]# chown mysql /usr/local/mysql/data -R
data 의 권한을 mysql 로 변경 합니다.
[root@linux root]# cp support-files/my-medium.cnf /etc/my.cnf
환경 설정 파일을 복사 합니다.

/etc/my.cnf 파일을 열어
한글 검색이 가능하도록 아래의 설정을 추가합니다.

[root@linux root]# vi /etc/my.cnf

default-character-set= euc_kr


자 이제 데몬을 띄웁니다.


[root@linux root]# ./bin/safe_mysqld --user=mysql &
[1] 5217
[root@linux root]# Starting mysqld daemon with databases from /usr/local/mysql/data


데몬이 정상적으로 떠 있는지 확인 해 봅니다.

[root@linux root]# ps ax|grep mysql
1634 pts/0    S      0:00 /bin/sh ./bin/safe_mysqld --user=mysql
1660 pts/0    S      0:00 [mysqld]
1662 pts/0    S      0:00 [mysqld]
1663 pts/0    S      0:00 [mysqld].
.
.


만약 데몬이 정상적으로 뜨지 않고
shutdown 어쩌구 메시지가 나오면
권한 변경 부분에서  잘못 된 경우가 많습니다.
그 부분을  다시 설정 해 보세요

그리고 서버가 부팅 될때 자동적으로 Mysql 돌아가게 설정 합니다.


[root@linux root]vi/etc/rc.d/rc.local  

/usr/local/mysql/bin/safe_mysqld --user=mysql &

위 내용을 추가 하면 됩니다.
[출처] Linux 에서 Mysql 설치법|작성자 훌박

 -----------------------------
 Java SE Development Kit (JDK) 6 Update 10
다운받아서 실행하면 지가 알아서 압축다풀고 설치다됐다고한다. -_-;
실행한 위치에 압축이 풀리므로 옮긴다!
(RPM 버전을 받으면 /usr/java에 jdk가 위치한다.)

mv jdk1.6.0_10 /usr/local/

그리고 나중에 버전업이 되었을때 자바 관련 패스를 전부 바꿔야하는 큰아픔을 막기 위해 심볼릭링크를 해준다.
ln -s /usr/local/jdk1.6.0_10 java
SDK와 같은 Kit은 이렇게 링크를 걸어주는게 좋다.
(RPM 버전을 받으면 /usr/java/default라는 링크가 이미 걸려있다.)

패스를 설정해보자.
vi /etc/profile
export JAVA_HOME=/usr/local/java
(RPM 버전이면 /usr/java/default)
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME/lib/tools.jar
위 3줄을 적당한 위치에 넣고 저장한 후~
수정사항을 바로적용하기 위해
source /etc/profile

패스가 제대로 걸렸는지 테스트 해본다! 아무대서나
java
뭔가 쭉쭉 나온다면 OK! env 같은 명령어로 확인해도 된다.

이제 Tomcat을 설치하자!
http://tomcat.apache.org/download-60.cgi
위 링크는 6.x 버전 링크다. wget으로 해당 링크의 파일을 받는다~

압축 풀고 위치를 옮긴다. 관리 편하려고...
tar -xzvf apache-tomcat-6.0.18.tar.gz
mv apache-tomcat-6.0.18 /usr/local/web/
cd /usr/local/web/
apache와 같은 디렉토리에 놓이게 되었다.
설치된 디렉토리 이름을 그냥 tomcat으로 바꾸자.
mv apache-tomcat-6.0.18/ ./tomcat

마지막으로 패스만 설정해주면 끝난다.
vi /etc/profile
export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/web/tomcat
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA
_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar

위와 마찬가지로 바로적용하기 위해
source /etc/profile

방화벽이 문제가 될테니 다음과 같이~ iptables 파일에 추가한다.
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

방화벽을 제시작하고 테스트!
/etc/rc.d/init.d/iptables restart
/usr/local/web/tomcat/bin/startup.sh

http://ip:8080/
접속해서 고양이 나오면 성공!
혹시라도
Cannot find /usr/local/server/tomcat/bin/setclasspath.sh
This file is needed to run this program
이런 메세지가 나온다면 CATALINA_HOME Path를 확인해봐야한다.

만약 톰캣도 리부팅후 자동 실행되게 하고 싶다면 다음과 같이 스크립트를 작성한다.
(소스는 인터넷에서 퍼 온것~ 몇몇 경로 부분만 현재 내 서버에 맞게 고쳤다.)
저장은 -> /etc/rc.d/init.d/tomcatd

#!/bin/sh
#chkconfig: 2345 89 89
#description: tomcatd
#processname: /usr/local/tomcat/bin/catalina.sh
#config : /usr/local/tomcat/conf/server.xml
#config : /usr/local/tomcat/conf/web.xml
#pidfile : /var/run/tomcatd.pid
#
# author      : jongho, Ahn(...)
# email       : skylimit@syspam.co.kr, skylimit71@gmail.com
# date        : 2006. 07. 10
#

# Get Config
[ -f /usr/local/tomcat/conf/server.xml ] && [ -f /usr/local/tomcat/conf/web.xml ] || exit 0

source /etc/profile

# Source function library
. /etc/rc.d/init.d/functions

# caution :
#           variable=<value> space between variable and value is not allowed
RETVAL=0
prog=tomcatd

# Start function
start()
{
  echo -n "Starting $prog : "
  daemon $CATALINA_HOME/bin/catalina.sh start
  RETVAL=$?
  echo
  touch /var/lock/subsys/tomcatd
  return $RETVAL
}

# Stop fucntion
stop()
{
  echo -n "Stopping $prog : "
  daemon $CATALINA_HOME/bin/catalina.sh stop
  RETVAL=$?
  echo
  rm -f /var/lock/subsys/tomcatd
  return $RETVAL
}

# Restart function
restart()
{
  stop
  start
}

# See how we were called
case "$1" in
     start)
           start
           ;;
     stop)
           stop
           ;;
     restart)
           restart
           ;;
     *)
           echo $"Usage : $0 {start|stop|restart}"
esac

exit $RETVAL

그리고 나서 chmod 755 tomcatd로 권한주고 /sbin/chkconfig --add tomcatd 해주면 끝~
만약 다른 대몬과의 연동으로 실행 순서를 변경해야 한다면
아래와 같은 부분을 조정하면 된다.

#chkconfig: 2345 89 89

2345는 런레벨이며 첫번째 89는 시작우선권 두번째 89는 종료우선권이다.
끝~

----------------------------------
아놔... Onenote에 정리한거 날려 먹고 첫 글!
언제나 시간이 지나면 이래저래 까먹는 것들이라 조금씩 정리해놔야지...

% root 권한으로 진행

먼저, 소스를 받아온다!
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.67.tar.gz/from/http://mysql.byungsoo.net/

받아온 녀석을 풀어주자~
tar -zxvf mysql-5.0.67.tar.gz
cd mysql-5.0.67

설치환경 정하고 설치!
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all
--prefix=dir을 통해 설치될 곳을 지정하고 나머지는 캐릭터셋~ 기본을 utf8로!
make && make install

환경설정 파일을 복사해준다. 튜닝은 상황에 맞게 알아서~
my-huge, my-large, my-medium, my-small.cnf 중 필요한 파일 선택.
cp support-files/my-huge.cnf /etc/my.cnf

이제 mysql이라는 DB실행용 계정을 생성하고 기본 DB를 만든다.
/usr/sbin/useradd -M -s /bin/false mysql
cd /usr/local/mysql/
bin/mysql_install_db --user=mysql
Support MySQL by 어쩌구 나오면 완료.

mysql이 설치된 디렉토리 권한을 바꾸고 PATH를 걸어주자. (현재 위치 /usr/local/mysql)
chown -R root .
chown -R mysql var
chgrp -R mysql .
vi ~/.bash_profile (각자의 쉘 환경에 맞게...)
PATH에 다음 디렉토리 추가 /usr/local/mysql/bin
source ~/.bash_profile

마지막으로 서버가 부팅시 자동실행 되도록 설정하고 mysql의 root 패스워드를 정한 후 최종 완료!
cp share/mysql/mysql.server /etc/init.d/mysqld
/sbin/chkconfig --add mysqld
/etc/init.d/mysqld start
mysqladmin -u root password 패스워드
mysql -u root -p
아까 입력한 패스워드 입력! 잘 접속되면 설치 끝!

방화벽으로 MySQL 접근이 제한되어 있다면 다음과 같이 해준다!
vi /etc/sysconfig/iptables
아래 내용 추가! iptables는 Table 형태이므로 Reject된 후에 추가하면 소용 없음.
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

---------------------------------
#yum install mysql mysql-server
#mysqladmin -u root password 'password'
#service mysqld start


___________________________________
#chmod 555  java..bin
#vi etc/profile
 export JAVA_HOME=/usr/local/java
#source /etc/profile


------------------------------------
#wget http://mirror.khlug.org/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz
#./startup.sh


------------------------------
#make clean
#wget http://apache.tt.co.kr/httpd/httpd-2.2.11.tar.gz
tar -zxvf httpd-2.2.10.tar.gz
./configure --prefix=/usr/local/web/apache --enable-mods-shared=all --enable-so --enable-rewrite


소스를 받고 압축풀기!

wget http://apache.tt.co.kr/httpd/httpd-2.2.11.tar.gz
tar -zxvf httpd-2.2.10.tar.gz
cd httpd-2.2.10

root 권한으로 설치환경 잡아주고 설치 시작!
su
./configure --prefix=/usr/local/web/apache --enable-mods-shared=most --enable-so --enable-rewrite
뒤에 옵션은 설치 위치 지정 및 동적 모듈 방식 설정 하고 마지막으로 URL 재작성 모듈을 on하는 설정이다.
make && make install
----mod-jk-------
 ./configure --enable-proxy_http --enable-proxy_connect --enable-ssl --enable-cache --enable-mem-cache --enable-disk-cache

 ./configure --enable-proxy --enable-mods-shared=most --enable-proxy_connect  --enable-rewrite

 ./configure --enable-proxy --enable-proxy_http --enable-proxy_connect --enable-cache --enable-mem-cache --enable-disk-cache --with-mpm=worker --enable-mods-shared=all

-----------------
구동환경을 설정!
vi /usr/local/web/apache/conf/httpd.conf
ServerName이라는 항목을 찾아서 IP나 도메인을 적어준다. IP:PORT 형태.
% DocumentRoot라는 항목을 수정해서 웹 사이트의 루트를 바꿀 수 있다.

이제 실행스크립트를 복사하고 실행한 후 브라우저로 접속 고고싱!
cp /usr/local/web/apache/bin/apachectl /etc/init.d/httpd
/etc/init.d/httpd start

혹시라도 접속이 안된다면 방화벽 문제일 가능성이 허다~ 방화벽에 다음과 같이 추가해준다.
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
웹브라우저에

It works!
라고 나오면 성공!

마무리 작업으로 서버가 리붓될때 자동으로 Apache가 실행되도록 해준다.
chkconfig로 등록하면 되는데 그냥 하면 지원하지 않는다는 에러메세지가 등장하므로 다음과 같이해준다.

vi /etc/init.d/httpd
젤 윗 줄 #!/bin/sh 밑에 아래 내용을 넣는다~
#chkconfig: 2345 90 90
#description: init file for Apache server daemon
#processname: /usr/local/web/apache/bin/apachectl
#config: /usr/local/web/apache/conf/httpd.conf
#pidfile: /usr/local/web/apache/logs/httpd.conf
저장한 후~
/sbin/chkconfig --add httpd

끝!\



httpd.conf--------------------
Include conf/extra/httpd-vhosts.conf 주석제거
#LoadModule dav_module modules/mod_dav.so 주석제거
#LoadModule dav_fs_module modules/mod_dav_fs.so 주석제거

httpd-vhosts.conf 설정
Options index FollowSymLinks MultiViews    index 제거

cp /usr/local/web/apache/bin/apachectl /etc/init.d/httpd
/etc/init.d/httpd start

vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-------------------------------------


#vi /etc/sysconfig/iptables
#iptables -F
-A RH-Firewall-1-INPUT -p tcp --dport 3306 -j ACCEPT

-----iptables------------
ssh
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
httpd
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
pop3
#iptables -A INPUT -p tcp --dport 109 -j ACCEPT
pop2
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT
imap
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT
mysqld
#iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
ftpd
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT
전부거절하기
#iptables -A INPUT -p tcp --dport1:30000 -j DROP


Posted by 으랏차
,

[리눅스] 아파치, mysql, php 소스 설치 절차

*** 아파치 웹 서버 설치***
-아파치 웹서버 프로그램은 RPM 패키지를 이용하여 설치할 수 있겠지만, RPM패키지 설치보다는 소스 설치위주로 하겠다.
 아파치 소스를 컴파일하여 설치한 후 PHP와 MySQL를 연동하여 설치하는 방법을 알아보겠다.

1.rpm -qa | grep httpd 를 실행하여 httpd RPM 패키지가 설치되어 있는지 확인하여 패키지 정보가 나타난다면
  'rpm -e 패키지 명'을 실행하여 rpm 패키지를 반드시 제거한다.

2.아파치 안정 버전을 다운받는다. 다운 받는 폴더는 임시폴더  /tmp 로 다운 받는다.

3.압축을 푼다.
# tar xvfz httpd-2.2.4.tar.gz -C /tmp (-C /tmp 부분은 생략해도 됨)

4./tmp/httpd-2.2.4 디렉토리로 이동하여 ./configure 명령으로 다음과 같이 컴파일 환경을 설정한다.
 #cd /tmp/httpd-2.2.4
 #./configure --prefix=/usr/local/apache2 --enable-mods-shared=all \
                    --with-mpm=worker --enable-ssl --with-ssl --enable-so 
                             (mpm은 다중처리로서 cpu2개 이상시 설정, ssl은 SecureLayer)
(간단하게,  ./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so 라고 해도 무방)

5.make명령으로 컴파일 한다. 오류 없이 컴파일이 끝나면 make install 명령을 실행하여 컴파일 환경 설정 시
 --prefix= 옵션으로 지정한 위치로 컴파일 파일들이 설치되도록 한다.
 #make  <=소스를 바이너리로 컴파일
 #make install

6. /etc/ld.so.conf 파일에 /usr/local/apache2/lib 과 /usr/local/apache2/modules 경로를 다음과 같이 추가한 후 ldconfig 명령을 실행한다.
 #cat >> /etc/ld.so.conf
/usr/local/apache2/lib
/usr/local/apache2/modules
crtl-d 키를 누름
 #ldconfig (모듈 업데이트)




***MySQL과 PHP설치***
-PHP는 리눅스 상에서 작동하는 강력한 웹 스크립트 언어로 웹 프로그래밍에 많이 사용되는 언이이다.
MySQL은 공개 프로그램이면서 개인 서버로 많이 운영되고 있는 중소형 데이터베이스로, 오라클이나 DB2,MS-SQL 과 같은
대형 데이터베이스에 못지 않는 강력한 성능을 제공하고 있어 리눅스 웹 서버의 일반적인 DB로 많이 사용되어지고 있다.
요즘에 게시판이나 자료실들이 PHP와 MySQL을 연동하여 만들어지고 있으므로, 이러한 것을 사용하기 위해서는 아파치
웹 서버에 이러한 프로그램들을 함께 컴파일하여 설정해야 한다.
(참고) DSO(Dynamic Shared Object : 동적 공유 개체-필요에 따라서 아파치 웹서버에 모듈이나 라이브러리를 언제든지
적재할 수 있는 것을 말함. 아파치에 추가하고자 하는 모듈이 있을 때 재 컴파일 하지 않고서도 사용할 수 있어서 설치 관리
측면에 이점이 있으며, 모듈이 필요할 때마다 적재할 수 있으므로,시스템 리소스를 효율적으로 사용할 수 있는 이점이 있다.




***MySQL 설치***
MySQL을 다운로드할 때에는 주의할 것이 있는데, '바이너리 소스'인지 '소스'인지를 명확히 구별하여야 한다.
여기서는 타볼 소스 파일로 설치를 시행한다.

1.MySQL RPM 패키지가 설치되어 있는지 rpm -qa | grep mysql 를 실행하여 패키지 정보가 나온다면 제거한다.
   의존성으로 삭제가 안되면 "# rpm -e --nodeps mysql-5.0.22-2.1 " 이렇게 한다.

2.mysql-5.x.x 타볼 소스 파일을 /tmp 임시디렉토리에 압축을 풀어 놓는다.
 #tar xvfz mysql-5.x.x.tar.gz. -C /tmp

3./tmp/mysql-5.x.x 디렉토리로 이동하여 ./configure  명령을 실행하여 컴파일 환경을 설정한다. 이때 컴파일 환경
옵션으로는 다음과 같은 옵션을 지정한다.
--prefix=설치경로 ex) --prefix=/usr/local/mysql
--localstatedir=data경로 ex) --localstatedir=/usr/local/mysql/data
--with-charset=euckr
--with-mysql-user=mysql
--sysconfdir=/etc
 기타 옵션에 관한 것은 ./configure --help 명령을 실행하여 참고한다.
(간단하게,# ./configure --prefix=/usr/local/mysql --with-charset=euckr 해도 무방)
*termcap에러가 날 경우 libtermcap-devel-2.0.x-xx.i386.rpm 을 설치 한 후 재시도할 것.)
4. make 명령을 실행하여 MySQL를 컴파일 한다.
 # make

5.컴파일이 완료되면 make install 명령을 실행하며 /usr/local/mysql 디렉토리로 컴파일된 파일들이 설치되도록 한다.
 # make install

<중요> RPM 패키지가 아닌 타볼 소스를 컴파일 하여 사용할 때에는 반드시 RPM 패키지가 설치되어 있는지 확인한다.
  특히 httpd 나 MySQL은 RPM 패키지를 반드시 삭제한 후 소스를 컴파일 하여 사용해야 한다.

6.MySQL 데이터 베이스 디렉토리 생성
-MySQL을 컴파일 설치 후 MySQL의 데이터베이스인 data 디렉터리는 자동으로 생성되지 않으므로 이를 수동으로 생성해 주어야 한다. 그러면 /usr/local/mysql/bin 디렉터리로 이동하여
 “. /mysql_install_db” 명령을 실행하여 /usr/local/mysql/data 디렉터리가 생성되도록 한다.

mysql_install_db  명령은 /usr/local/mysql/data DB 디렉터리를 생성해 주고, 그 디렉터리 안에
mysql DB하위 디렉터리와 파일들을 생성해 주는 것이다.
#cd ../data
#ls

7.MySQL 라이브러리 위치 지정
-MySQL 데몬이 구동될 때 mysql 라이브러리를 이용하므로 이것을 포함하는 /usr/local/mysql/lib 디렉터리를 /etc/ld.so.conf 파일에 추가하여 ldconfig 명령을 실행한다.
#cat >>/etc/ld.so.conf
/usr/local/mysql/lib
ctrl+D를 누름.
#ldconfig

8.MySQL 설정 파일 (my.cnf) 복사
/usr/local/mysql/share/mysql 디렉터리에 있는 my-medium.cnf  파일을 /etc/my.cnf  파일로 복사한다.
 #cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

9.MySQL 게정 생성 및 MySQL 경로 소유권 변경
-MySQL 데몬은  mysql 계정 소유로 띄우는 것이 안전하므로, /etc/passwd 파일에 mysql 계정이 존재하는지
체크하여(cat /etc/passwd | grep mysql 명령 사용) 존재하지 않는다면 다음과 같이 이 계정을 생성한다.
 #groupadd mysql
 #adduser -M -c Mysql_server -d /usr/local/mysql -g mysql -s /bin/nologin mysql
(-c, --comment COMMENT  Any text string. It is generally a short description of the login, and is currently used as the field
          for the user’s full name.
-M The user’s home directory will not be created, even if the system wide settings from /etc/login.defs is
          to create home dirs.)

mysql 계정을 추가한 후 다음과 같이  MySQL 디렉터리의 소유권을 변경한다.
 #chown root.mysql -R /usr/local/mysql    (-R, --recursive  경로와 그 하위 파일들 모두를 바꾼다.)
 #chown mysql.mysql -R /usr/local/mysql/data

10.MySQL데몬 띄우기
 /usr/local/mysql/bin/mysqld_safe 명령으로 MySQL 데몬을 띄운다. 그러면 --user-mysql 옵션을 지정하여
다음과 같이 백그라운드 모드로 MySQL 데몬이 작동하도록 mysqld_safe 명령을 실행한다.
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[1] 31233
Starting mysqld daemon with databases from /usr/local/mysql/data
#

11. MySQL 데몬이 제대로 작동되고 있는지 ps ax 명령으로 확인해 본다.
# ps ax | grep mysqld
-부팅시 자동으로 MySQL 데몬이 작동되도록 하려면 /usr/local/mysql/share/mysql 디렉터리에 존재하는
mysql.server 파일을 /etc/init.d 디렉터리에 mysqld 파일로 복사하고 chkconfig 명령으로 실행레벨 3(콘솔)과
실행레벨 5(x-window) 에서 자동으로 실행되게끔 처리하면 된다.
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
# chkconfig --level 3 mysqld on
# chkconfig --level 5 mysqld on




***MySQL DB 설정***
 mysql 서버에 접속하여 데이터베이스와 사용자를 생성하는 간단한 방법을 알아보겠다. 여기서 생성하는 데이터베이스(db)와
사용자는 나중에 살펴보게 될 제로보드 설치에 사용하게 될 것이다. 제로보드 설치에서도 이 과정을 다시 한 번 복습하게 될
것이다.

1. /usr/local/mysql/bin/mysql 에서 mysql 명령을 실행하여 MySQL 서버에 접속한다.
# /usr/local/mysql/bin/mysql -p mysql
 -p 옵션은 열쇠글 옵션이다. 처음 설치 시에는 루트 열쇠글이 지정되어 있지 않으므로, 열쇠글을 묻게 되면
그냥 엔터키를 치면 된다. 그러나 step 2에서 루트 열쇠글을 지정한 이후부터는 루트 열쇠글을 입력하여
mysql db에 접속하게 된다.

2. mysql> 프롬프트에서 다음과 같이 update 명령으로 MySQL root 열쇠글을 생성한다.
mysql> update user set password=password('baboo') where user='root';
mysql> flush privileges;

3.데이터 베이스를 생성한다. (DB명: adam)
mysql> create database adam;

4.사용자 계정을 생성한다. (계정명: adam 열쇠글:sagan)
mysql> insert into user (host,user,password) values
    -> ('localhost','adam',password('sagan'));

5.생성한 데이터베이스를 등록한다.
mysql> insert into db values
    -> ('%','adam','adam','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
첫 번째 adam은 DB를 의미하고, 두 번째 adam은 계정을 의미한다. Y는 MySQL버전마다 틀리다. 위의 경우는
17개의 Y이므로 갯수에 주의한다.

6. exit 를 입력하여 MySQL DB 접속을 종료한 후 mysqladmin -p reload 명령을 실행하고, 열쇠글은
 mysql db root 의 암호를 입력한다. 이 명령을 실행한 이후로는 MySQL db에 접속할 때는 반드시 -p옵션을 사용하여
열쇠글을 입력해야 한다.
mysql> exit
# /usr/local/mysql/bin/mysqladmin -p reload
Enter password:
#




*** PHP 설치 ***
1. php-5.2.3.tar.tar 파일을 압축해제한다.
# tar xvfz php-5.2.3.tar.tar

2. ./configure 명령으로 다음과 같이 컴파일 환경을 설정한다.
--with-apxs2=아파치의 apxs 경로
--with-mysql= mysql 설치 경로
--with-config-file-path= php.ini경로
--with-exec-dir= 아파치 데몬 실행경로
(다음과 같이 설정해서 실행)
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql \
> --with-config-file-path=/usr/local/apache2/conf --with-exec-dir=/usr/local/apache2/bin --enable-track-vars \
> [--with-gd=shared --enable-gd-native-ttf] --with-openssl --with-xml --enable-trans-sid --with-zlib
 [ ] 이 부분은 에러가 발생할 시 추가 하지 말 것. --enable-sockets 는 추가.
(아주 간소하게,
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql \
--enable-socketr 라고만 해도 됨. PHP버전과 시스템의 설정에 따라서)

3. make 명령으로 컴파일을 진행한다. 컴파일이 성공적으로 완료되면 make install 명령을 실행하여 php 모듈을 아파치
경로의 모듈 디렉터리로 설치되게 끔 한다.(./configure에서 설정되어짐.)
 # make
 # make install

4. php.ini-recommended 파일을 /usr/local/apache2/conf 디렉터리로 복사한다.
 # cp php.ini-recommended /usr/local/apache2/conf/php.ini

5. 아파치 모듈 경로 ( /usr/local/apache2/modules)로 이동하여 libphp4.so 모듈 파일이 존재하는지 확인한다.
 만일 이 파일이 설치되지 않았다면 php 컴파일 상에 문제가 있는 것이므로, 새 php 소스를 이용하여 다시 컴파일 한다.
 #cd /usr/local/apache2/modules
 #ls -l libphp4.so
 #

6. 잠시 후에 살펴보게 될 /usr/local/apache2/conf/httpd.conf 파일 설정 가운데 DSO support 항목을 찾아 다음 설정
라인이 추가 되어 있는지 확인하여, 만일 설정되어 있지 않다면 추가한다.
 # Dynamic Share Object (DSO) Support
LoadModule php4_module modules/libphp4.so
(PHP의 버전에 따라 위의 라인에서 숫자가 달라진다.)

7. /usr/local/apache2/conf/httpd.conf 파일을 vi 에디터로 열어 #ServerName www.example.com:80으로 설정된 부분을 찾아 다음과 같이 수정한다.
ServerName localhost:80
(참고:ip로도 해본다.)

8. httpd.conf 파일 중간의 알맞은 곳 또는 마지막 줄에 다음을 추가한다.
 AddType application/x-httpd-php .php .php3 .php4 .php5 .html .htm

9.httpd.conf 파일을 저장한 뒤에 /usr/local/apache2/bin/httpd 또는
  /usr/local/apache2/bin/apachectl restart 명령을 실행하여 아파치 데몬을 다시 띄운다.
 # /usr/local/apache2/bin/httpd 또는
 # /usr/local/apache2/bin/apachectl restart

10.작동 여부확인
http://localhost 또는 http://ip주소

'Linux' 카테고리의 다른 글

특정 디렉토리 또는 파일 갯수 세기 - Linux명령어  (0) 2011.04.26
전체 세팅  (0) 2009.03.17
리눅스에서 Apache2.2.4 + PHP 5.2.3 + mysql 5.1.19 설치  (0) 2009.03.17
tar  (0) 2008.07.25
명령어2  (0) 2008.07.25
Posted by 으랏차
,

리눅스에서 Apache2.2.4 + PHP 5.2.3 + mysql 5.1.19 설치

아파치와 PHP 소스 파일을 다운로드 받아 설치하는 방법을 설명한다. PHP 5.x에서 mysql을 사용하기 위해서는 반드시 컴파일 과정을 거쳐야 하므로 RPM을 이용한 설치에는 한계가 있다.

1. 준비사항

1-1. PHP 소스 파일 : http://www.php.net 에 접속하여 상단 메뉴 중 downloads를 클릭한다.(http://www.php.net/downloads.php 에 바로 접속할 수도 있다.)

PHP 5.2.3

Complete Source Code
PHP 5.2.3 (tar.gz) [9,123Kb] - 01 June 2007를 클릭하여 소스 코드를 다운로드 받는다.
미러링 사이트 중 Repoublic of Korea kr2.php.net HANBIRO에서 다운로드 하였다면, 다운로드 된 파일 이름은 php-5.2.3.tar.tar 이다.

1-2. 아파치 소스 파일 : http://httpd.apache.org/에 접속하여 Download! from a mirror를 클릭하면(http://httpd.apache.org/download.cgi 에 바로 접속할 수도 있다) 미러링 사이트로 KAIST가 자동 선택된다. 이곳에서 Unix Source: httpd-2.2.4.tar.gz를 클릭 하여 다운로드 받는다. 다운로드 된 파일 이름은 httpd-2.2.4.tar.gz 이다.

1-3. PHP 설치를 위한 XML 확장 설치

PHP 5부터 PHP에서 XML을 지원하기 위해 XML 확장을 설치해야 한다. 이에 따라 필요 라이브러리를 설치한다.
PHP5에서 XML 확장을 위해서 libxml2 와 libxslt 라이브러리를 설치해야 하는데, libxml2에서 zlib와 iconv 라이브러리를 필요로 하므로 이들 라이브러리의 설치가 선행되어야 한다.

1-3-1. zlib : 공식 사이트는 http://www.zlib.net 이다. 이곳에서 zlib source code, version 1.2.3, tar.gz format을 다운로드 받는다.
US(
www.zlib.net)에서 다운로드 받을 수 있으며 다른 미러링 사이트를 이용할 수도 있다. 다운로드된 파일 이름은 zlib-1.2.3.tar.tar 이다.

1-3-2. libconv : 에서 libconv를 다운로드 받을 수 있다. 이 문서는 업데이트가 늦은 관계로 The Latest release is biconv-1.11.tar.gz 로 되어 있지만, 이 링크를 클릭하여 다운로드 받으면 안된다. 앞서 받은 라이브러리의 버전이 최신 이므로 libiconv 역시 최신 버전은 1.9.1을 받아야 한다. 다운로드 받는 방법은 위에 표시되어 있는 libiconv-1.11.tar.gz 에서 파일 이름을 삭제 하면 디렉터리 리스트를 볼 수 있는데, 이곳에서 최신 버전의 소스를 다운로드 받는다. 즉 http://ftp.gnu.org/pub/gnu/libiconv/ 에 접속해서 libiconv-1.9.1.tar.gz를 다운로드 받는다.
다운로드 된 파일은 libiconv-1.9.2.tar.tar 이다.

1-3-3. libxml2 : 에서 libxml2 소스 최신 버전을 다운로드 받는다. 현재 최신 버전은 libxml2-2.6.29.tar.gz 이다. 다운로드 된 파일은 libxml2-2.6.29.tar.gz
1-3-4. libxslt : 에서 libxslt 소스 최신 버전을 다운로드 받는다. 현재 최신 버전은 libxslt-1.1.9.tar.gz 이다. 다운로드 된 파일은 libxslt-1.1.9.tar.gz 이다.

1-4. MySQL 설치 (MySQL은 5.0.37을 이용하였다)
http://www.mysql.com 에 접속하여 mysql 소스를 다운로드 받아 설치한다. mySQL은 두 가지 라이센스를 사용한다. 상업용으로 사용을 하기 위해서는 MySQL Enterprise를 구매해야 한다. 개발자용은 MySQL Community Server를 다운로드 받아 사용할 수 있다. http://www.mysql.com 에 접속하여 우측 사각형에서 MySQL Cmmunity Server Download를 클릭한다. 기본적으로 MySQL 5.0 Downloads에 접속하며, 여기에서 페이지 최 하단에 있는 Source downloads 항목에서 compressed GNU TAR archive(tar.gz)를 다운로드 받는다. 이 페이지에서 다운로드 받거나, 만일 다운로드에 성공하지 못하면 Pick a mirror를 선택하여 다른 다운로드 사이트에서 다운로드 받도록 한다. 다운로드 된 파일 이름은 mysql-5.1.19-beta.tar.gz 이다.

이렇게 해서 준비된 파일은 모두 다음과 같다.
php-5.2.3.tar.tar (
http://www.php.net/downloads.php)
httpd-2.2.4.tar.gz (
http://httpd.apache.org/download.cgi)
zlib-1.2.3.tar.tar (
http://www.zlib.net)
libiconv-1.9.2.tar.tar (
http://ftp.gnu.org/pub/gnu/libiconv/)
libxml2-2.6.29.tar.gz (
http://www.xmlsoft.org/sources/)
libxslt-1.1.9.tar.gz (
http://www.xmlsoft.org/sources/)
mysql-5.1.19-beta.tar.gz (
http://dev.mysql.com/downloads/mysql/5.0.html)


2. 설치

패키지의 설치이므로 root 권한으로 접속한다. 다운로드 패키지는 모두 /root/down/ 디렉터리에 존재하며, 설치는 /usr/local/ 에 설치하도록 한다.

2-1. 아파치 설치
2-1-1 아파치 압축 풀기

[root@ns down]# tar xvfz httpd-2.2.4

2-1-2 아파치 컴파일 및 설치

PHP를 아파치 2.2의 모듈로 다이나믹 로딩 하려면 아파치 서버가 DSO(Dynamic Shared Object)를 지원하도록 컴파일 해야 한다. 이를 위해 --enable-so 옵션을 사용하여 configure를 실행한다.

[root@ns down]# cd httpd-2.2.4
[root@ns httpd-2.2.4]# ./configure --enable-so

--prefix=[DIR] 옵션을 사용하여 원하는 위치에 설치할 수도 있으나, 앞서 전제 조건이 /usr/local/ 디렉토리에 설치하기로 했으므로 추가 옵션을 없어도 가능하다. 옵션 없이 설치 시 /usr/local/apache2 에 설치된다.

[root@ns httpd-2.2.4]# make
[root@ns httpd-2.2.4]# make install

설치가 완료 되었다. /usr/local/apache2 디렉터리로 이동하여 설치를 확인한다.

[root@ns httpd-2.2.4]# cd /usr/local/apache2/bin/
[root@ns bin]# ./apachectl start

※ 이미 아파치가 실행되고 있는 상태라면
[root@ns ~]#service httpd stop 으로 아파치의 구동을 종료한 후 실행한다.



2-2. zlib 설치
2-2-1 zlib 압축 해제
[root@ns down]# tar xvfz zlib-1.2.3.tar.tar

2-2-2 zlib 컴파일 및 설치
[root@ns down]# cd zlib-1.2.3
[root@ns zlib-1.2.3]# ./configure --prefix=/usr/local/

[root@ns zlib-1.2.3]# make
[root@ns zlib-1.2.3]# make install

2-3. libconv 설치
2-3-1 libiconv 압축 해제
[root@ns down]# tar xvfz libiconv-1.9.2.tar.tar

2-3-2 libiconv 컴파일 및 설치
[root@ns down]# cd libiconv-1.9.2
[root@ns libiconv-1.9.2]# ./configure --prefix=/usr/local/


[root@ns libiconv-1.9.2]# make
[root@ns libiconv-1.9.2]# make install


2-4. libxml2 설치
2-4-1 libxml2 압축 해제
[root@ns down]# tar xvfz libxml2-2.6.29.tar.gz

2-4-2 libxml2 컴파일 및 설치
[root@ns down]# cd libxml2-2.6.29
[root@ns llibxml2-2.6.29]# ./configure \
>--prefix=/usr/local/ \
>--with-zlib=/usr/local/ \
>--with-iconv=/usr/local/

[root@ns llibxml2-2.6.29]# make
[root@ns llibxml2-2.6.29]# make install


2-5. libxslt 설치
2-5-1 libxslt 압축 해제
[root@ns down]# tar xvfz libxslt-1.1.9.tar.gz

2-5-2 libxslt 컴파일 및 설치
[root@ns down]# cd libxslt-1.1.9
[root@ns libxslt-1.1.9]# ./configure --prefix=/usr/local/ \
> --with-libxml-prefix=/usr/local/ \
> --with-libxml-include-prefix=/usr/local/include/ \
> --with-libxml-libs-prefix=/usr/local/lib

[root@ns libxslt-1.1.9]# make
[root@ns libxslt-1.1.9]# make install

2-6. MySQL의 설치
MySQL을 설치하기 위하여 mysql group 의 생성 및 mysql 사용자 계정의 생성이 선행 되어야 하지만, 대부분의 경우 linux를 설치할 때 mysql을 설치하므로 이때 mysql 관련 그룹 및 계정이 생성된다. 이미 계정이 생성되어 있다면 새로 생성할 필요는 없다.
설치할 디렉터리는 /user/local/mysql 이므로 mysql 디렉터리를 미리 생성해 둔다.

[root@ns ~]# mkdir /usr/local/mysql
[root@ns ~]# groupadd mysql
[root@ns ~]# useradd -g mysql mysql


2-6-1 MySQL 압축 해제
[root@ns down]# tar xvfz mysql-5.1.19-beta.tar.gz
[root@ns down]# cd mysql-5.1.19-beta

2-6-2 MySQL 컴파일 및 설치
[root@ns mysql-5.1.19-beta]# ./configure --prefix=/usr/local/mysql/ \
>--with-mysqld-user=mysql \
>--without-debug

[root@ns mysql-5.1.19-beta]# make
[root@ns mysql-5.1.19-beta]# make install

설치가 끝나면, mysql_install_db를 실행하여 mysql 시스템 데이터 베이스와 test 데이터 베이스를 생성한다.
[root@ns mysql-5.1.19-beta]# cd /usr/local/mysql/bin
[root@ns bin]# ./mysql_install_db

/usr/local/mysql 디렉터리의 소유권을 root로 설정하고, MySQL data 디렉터리의 소유권을 mysql 사용자로 변경한다. 보안을 위해 설정하는 부분이다.
[root@ns ~]# chown -R root /usr/local/mysql
[root@ns ~]# chown -R mysql /usr/local/mysql/var
[root@ns ~]# chgrp -R mysql /usr/local/mysql

my.cnf 파일을 생성한다. MySQL 서버에서 환경 설정을 위한 파일이다.
[root@ns ~]#cp /usr/local/mysql/share/my-large.cnf /etc/my.cnf
※ 자신의 환경에 맞게 적당한 파일을 복사하면 된다.
[root@ns ~]# ls /usr/local/mysql/share/mysql/my*.cnf
/usr/local/mysql/share/mysql/my-huge.cnf
/usr/local/mysql/share/mysql/my-innodb-heavy-4G.cnf
/usr/local/mysql/share/mysql/my-large.cnf
/usr/local/mysql/share/mysql/my-medium.cnf
/usr/local/mysql/share/mysql/my-small.cnf


2-6-3 MySQL 서버의 구동 및 정지
[root@ns ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &

※ 이미 mysqld 데몬이 구동 중이면 우선 데몬을 중지 시킨다.
[root@ns ~]# service mysqld stop

mysql을 정지시키고자 한다면 다음 명령어를 입력한다.

[root@ns ~]# /usr/local/mysql/bin/mysqladmin shutdown

다시 시작하려면 위에서 설명한 대로 mysql_safe를 실행한다.

2-6-4 root 패스워드 변경 및 일반 사용자 계정 생성
이제 접속 하여서 root의 패스워드를 바꾸고 사용자 계정을 생성하도록 하자.
(이미 mysql이 설치되어 있다면 기존의 mysql 클라이언트를 이용해도 상관은 없다.)
[root@ns ~]#mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 115 to server version: 5.1.19-beta-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use mysql
Database changed
mysql> select user, host, password
-> from user;
+------+-------------+-------------------- ------------------+
| user | host | password |
+------+--------------+----------------- -------------------+
| root | localhost | +
| root | ns.ifoxrose.com | |
| root | 127.0.0.1 | |
+------+-------------+----------------------------------------+
3 rows in set (0.00 sec)
mysql> update user
-> set password = password('**********')
-> where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> create database database_name;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on database_name to user_name identified by 'user_password';
Query OK, 0 rows affected (0.00 sec)
※일반적으로 mysql에서 데이터베이스 명과 계정명을 동일하게 준다.
mysql> exit
Bye


생성한 계정으로 접속을 시도해 본다.
[root@ns ~]# mysql -utest_user -p
Enter password:*********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 116 to server version: 5.1.19-beta-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


2-7. PHP의 설치
Share Apache 2.0 Handler module을 생성하기 위해 --with-apxs2[=FILE]을 사용한다. [FILE] 은 앞에서 설치한 Apache 디렉터리의 bin 디렉터리의 apxs파일을 이용한다. (--with-apxs2=/usr/local/apache2/bin/apxs)
또한 xml 확장 사용을 명시 하고(--with-xml) 앞서 설치한 libxml, xsl, dom, iconv 등의디렉터리를 설정하고, socket 프로그래밍에 사용할 수 있도록 --enable-sockets 옵션을 설정한다.
우리가 소스로 설치를 한 이유였던 데이터베이스 사용 설정을 추가해야 하는데, DBX를 사용하기 위한 옵션은 --enable-dbx 옵션이다. 물론 사용하고자 하는 데이터베이스에 대한 옵션을 넣어 주어야 하는데, mysql 의 경우 --with-mysql=[DIR] 이며, 오라클의 경우 --with-oracle=[DIR] 이다. mysql ext/mysqli 확장을 사용하고자 한다면 --with-mysqli 옵션을 추가한다. 이 과정을 순서대로 하면 다음과 같다.
2-7-1 libxslt 압축 해제
[root@ns down]# tar xvfz php-5.2.3.tar.tar

2-7-2 PHP 컴파일 및 설치

[root@ns down]# cd php-5.2.3
[root@ns php-5.2.3]#./configure --with-apxs2=/usr/local/apache2/bin/apxs \
>--with-zlib-dir=/usr/local/ \
>--with-xml \
>--with-libxml-dir=/usr/local/ \
>--with-xsl=/usr/local/ \
>--with-dom=/usr/local/ \
>--with-iconv \
>--enable-sockets \
>--enable-dbx \
>--with-mysql=/usr/local/mysql/ \
>--with-mysqli --with-oracle=/app/oracle/

※ 추가적인 설정을 보려면 ./configure --help를 이용한다.

[root@ns php-5.2.3]# make
[root@ns php-5.2.3]# make install

설치를 마치고 나면 Apacehe 와 PHP의 추가적인 설정이 필요 하다. 우선 php의 압축 해제 디렉터리에 있는 php.ini-dist 혹은 php.ini-recommended 파일 중 하나를 선택하여 php.ini 파일을 생성한다. php.ini-recommended 파일은 성능 향상을 낼 수 있도록 값이 조정되어 있는 파일이지만, 자신의 환경에 맞도록 설정해야 한다. 다음 예는 php.ini-dist 파일을 복사한 예이다. 물론 이미 잘 구동되고 있는 /etc/php.ini 파일을 복사해서 사용해도 된다.
[root@ns php-5.2.3]# ls php.ini*
php.ini-dist php.ini-recommended
[root@ns php-5.2.3]# cp php.ini-dist /usr/local/apache2/conf/php.ini

아파치를 구동해 보도록 하자
[root@ns bin]# /usr/local/apache2/bin/apachectl start
만일 일반 접속은 가능한데, 일반 사용자 접속이 불가능 하다면, /usr/local/apache2/conf/httpd.conf 파일에서 다음 내용을 검색해서 주석을 없애 준다.
# User home directories
# Include conf/extra/httpd-userdir.conf ; 주석을 없애서 다음과 같이 만든다.

# User home directories
Include conf/extra/httpd-userdir.conf


일반 사용자 계정의 html 문서가 정상적으로 동작 할 것이다. 이제 간단한 php 프로그램이 동작하는 지 살펴 보고 만일 동작하지 않는다면, httpd.conf 파일에 다음과 같이 AppType application/x-httpd-php .php .php4 .php5 등을 추가해 준다.

<IfModule mime_module>
#
# TypesConfig points to the file containing the list of mappings from
# filename extension to MIME-type.
#
TypesConfig conf/mime.types
…중략 …
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
# 추가된 부분
AddType application/x-httpd-php .php .phtml .php3 .php5

'Linux' 카테고리의 다른 글

전체 세팅  (0) 2009.03.17
[리눅스] 아파치, mysql, php 소스 설치 절차  (0) 2009.03.17
tar  (0) 2008.07.25
명령어2  (0) 2008.07.25
명령어1  (0) 2008.07.25
Posted by 으랏차
,

tar

Linux 2008. 7. 25. 15:32

tar 명령은 파일을 묶는 명령입니다. 원래는 백업을 위해 테이프백업 장치인 DAT  Device 에 백업을
할 때 쓰는 명령이었지만, 요즘은 파일의 압축이나 묶기에 더 많이 쓰이는 것 같습니다.압축명령에는
compress 나 gzip 이 따로 있지만 tar 명령으로 통합해서 쓰면 편리하고 좋습니다. 이해를 돕기 위해 압축이나 묶여지는 파일을 "대상파일" 이라고 하고,  압축해서 생긴 파일을 "생성파일" 이라고
하겠습니다. 우선 파일을 묶는 방법에 대해 알아 봅시다.

묶기    $ tar cvf  생성 파일명.tar  대상 파일명 또는 대상 디렉토리

풀기    $ tar xvf  생성 파일명.tar


tar 명령으로 파일을 묶을 때는 주의해야 할 것이 있는데 바로 디렉토리 단위로 묶는 것입니다.
공개 자료실등에서 tar 파일을 받아서 풀 경우 디렉토리 단위로 묶지 않은 파일이면 수십개의
파일이 풀려 나와 디렉토리가 엉망이 됩니다.  신경을 써야 됩니다.
tar는 아카이브 안의 파일에 대한 소유권과 허가권을 그대로 가지고 있으며, 심볼릭 링크나 하드링크,
디렉토리 구조를 유지합니다. 뒤에 나오지만 tar를 이용해서 시스템내에서의 데이터의 이동이나
복사에 자주 사용됩니다.


$ tar cvf  doc.tar doc/


위 명령은 디렉토리 doc를 모두 묶어서 doc.tar 파일로 만드는 명령입니다. 풀기는

$ tar xvf doc.tar


doc.tar 파일이 풀리면서 /doc 가 생깁니다. tar 파일의 종류는 다음과 같습니다.

*.tar      

   *.tar.Z     <-- compress 로 압축했을 때

   *.tar.z     <-- gzip 으로 압축(gunzip으로 푼다)  

   *.tar.gz              "

   *.tgz                  "


압축은 compress 나 gzip 등의 명령을 쓰면 됩니다.

 $ compress   대상파일명.tar

 -> 대상파일명.tar.Z

 $ gzip           대상파일명.tar

 -> 대상파일명.tar.gz


풀기는

 $ uncompress  대상파일명.tar.Z

-> 대상파일명.tar

 $ gunzip          대상파일명.tar.gz

-> 대상파일명.tar


각각의 경우에서 뒤의 확장자 .Z .gz가 붙고 떨어지는 것을 주의 깊게 보셔야 합니다.
파일을 풀기 전에 tar 파일의 내용을 알고 싶을 때 직접 풀지 않고 내용을 보려면 -t 옵션을 주면
풀기를 test 할 수 있습니다.

$ tar tvf  대상 파일명.tar


위에서 말 했듯이 tar 명령으로 묶기와 압축을 동시에 수행할 수 있습니다.
바로 tar 명령에서 z 옵션을 주면 되지요.

$ tar cvfz

  $ tar xvfz

  $ tar tvfz


그럼  응용을 해볼까요.  다음의 네 가지는 파일을 묶고 압축하는 방법과 풀기입니다.

1. 전통적인 사용방법

 $ tar cvf  생성파일명.tar  대상파일/

-> 생성파일명.tar

 $ gzip     생성파일명.tar

-> 생성파일명.tar.gz

 $ gunzip  생성파일명.tar.gz

-> 생성파일명.tar

 $ tar xvf   생성파일명.tar

-> 대상파일/


2.파이프를 이용한 압축

$ tar cvf - 대상파일/ | gzip > 생성파일명.tgz

->  생성파일명.tgz

$ gunzip -c  생성파일명.tgz | tar xvf -

->  대상파일/


3. 동시수행

 $ tar cvfz  생성파일명.tgz  대상파일/

-> 생성 파일명.tgz

 $ tar xvfz  생성파일명.tgz

-> 대상파일/


4. 묶어서 디렉토리 옮긴 후 풀기

tar cvf - 대상파일명 | ( cd 디렉토리명 ; tar xvf - )

4번은 파일이나 디렉토리를 묶어서 파이프로 넘기고 cd로 목적 디렉토리로 가서 파일을 푸는 과정으로 하위 디렉토리가 복잡한 디렉토리의 이동에 유용하게 사용됩니다.

출처 : Tong - nae tong님의 서버운영체제통

'Linux' 카테고리의 다른 글

[리눅스] 아파치, mysql, php 소스 설치 절차  (0) 2009.03.17
리눅스에서 Apache2.2.4 + PHP 5.2.3 + mysql 5.1.19 설치  (0) 2009.03.17
명령어2  (0) 2008.07.25
명령어1  (0) 2008.07.25
gcc 사용  (0) 2008.07.25
Posted by 으랏차
,

명령어2

Linux 2008. 7. 25. 15:32

1. 개요

이 문서는 임베디드 리눅스를 개발 할때 가장 많이 사용되는 리눅스 명령어의 목록이다.

2. 표기

이 문서에서는 자세한 설명은 달지 않는다. 단지 사용 빈도에 따라 를 표기한다. 가 많을수록 사용빈도가 많은 명령이라는 의미이다.

3. 파일 관련 명령

명령
설명
중요도
bzip 압축을 하거나 푼다.  
cat 텍스트 화일의 내용을 출력한다. ★★★
cd 디렉토리를 이동한다 ★★★
chgrp 화일의 소유 구룹을 바꾼다
chmod 화일 허가권을 바꾼다. ★★★
chown 화일 소유권을 바꾼다
chroot 루트 디렉토리를 변경하여 명령을 수행한다.  
cp 화일을 복사한다 ★★★
file 화일의 종류를 출력한다
find 화일을 찾는다.  
grep 문자열 검색을 한다. ★★
gzip 압축을 하거나 푼다. ★★
ln 단축 디렉토리나 화일 목록을 만든다.
locate 화일의 위치를 출력한다.
ls 디렉토리 및 화일 목록을 보여준다 ★★★
mkdir 디렉토리를 만든다. ★★★
more 출력을 나누어 표출한다. ★★
mv 화일의 위치를 변경하거나 이름을 바꾼다. ★★★
pwd 현재 디렉토리를 출력한다 ★★
rm 화일을 삭제한다. ★★★
rmdir 디렉토리를 삭제한다.
rpm rpm 패케지를 관리한다. ★★
tail 화일의 뒷부분의 내용을 출력한다  
tar 화일 여러개를 하나의 화일로 만들거나 푼다 ★★★
touch 화일의 최종 수정일을 변경한다  

4. 시스템 관리 명령

이 명령은 시스템을 관리하기 위해서 주로 사용하는 명령이다.

명령
설명
중요도
adduser 사용자 계정을 추가 한다
date 시스템의 시간과 날짜를 보여준거나 수정한다  
dd 화일의 특정 부분을 복사한다  
df 현재 마운트 된 장치 목록을 보여준다
diff 두개의 화일을 비교하여 패치화일을 만든다  
echo 화면에 출력한다 ★★
exit 로그 상태에서 빠져 나간다
insmod 모듈을 커널에 삽입한다. ★★★
kill 수행되고 있는 프로세스를 죽인다 ★★★
ldd 실행화일이 참조하는 동적라이브러리 목록을 보여준다
lsmod 현재 커널에 삽입된 모듈 목록을 보여준다
man 도움말을 보여준다 ★★★
mount 저장장치를 디렉토리와 연결한다 ★★★
patch 패치화일을 적용시킨다
passwd 사용자 암호를 변경한다.
ps 현재 동작되고 있는 프로세스 목록을 보여준다 ★★★
reboot 시스템을 재 부팅 시킨다.  
rmmod 커널에 삽입되어 있는 모듈을 삭제한다. ★★★
shutdown 시스템을 정지 시킨다.
su 루트 권한(슈퍼유저) 모드로 변경한다. ★★★
unmount 마운트 된 디렉토리를 해제한다. ★★★

5. 네크워크 관련 명령

명령
설명
중요도
ftp ftp 클라이언트 유틸리티  
ifconfig 네트워크 인터페이스 설정 ★★★
netstat 네트워크 상태 출력
ping 상대 호스트 네트워크 조사 ★★★
route 네트워크 라우팅 설정
telnet 원격 접속 ★★★

6. 기타

명령
설명
중요도
ae 간단한 문자 화일 편집기
minicom 시리얼 통신 에뮬레이터 ★★★
pico 간단한 문자 화일 편집기  
vi 리눅스 문자 화일 편집기 ★★★
     
gcc pc용 컴파일러 ★★★
arm-linx-gcc arm 용 크로스 컴파일러 ★★★
make   ★★★

'Linux' 카테고리의 다른 글

리눅스에서 Apache2.2.4 + PHP 5.2.3 + mysql 5.1.19 설치  (0) 2009.03.17
tar  (0) 2008.07.25
명령어1  (0) 2008.07.25
gcc 사용  (0) 2008.07.25
gcc install  (0) 2008.07.25
Posted by 으랏차
,

명령어1

Linux 2008. 7. 25. 15:31
pwd
현제의 디렉토리를 알려준다.현재 작업하고 있는 디렉토리가 어디인지 알수 없을 때
이용하는 명령어.

기본적인 명령어 사용
list,ls:디렉토리와 파일의 리스트를 보여준다.
ls -l:자세히 보여주기
ls -a:사그리 다보여주기
ls -al:a옵션은 hidden속성의 파일을 표시해주고 1옵션은 파일의 종류,
사용권한등 자세한 정보를 보여준다.
ls -F:일반파일 디렉토리 보여주기
cd명령어
cd~:그전 사용자로 이동
cd -:바로전의 디렉토리로 이동
cd~(사용자명)
cd ../..:상위디렉토리로 이동
cd ../local:상위로 가서 local로 이동한다.
cd:홈디렉토리로 이동
cd~apple/test :apple사용자홈에서 test로 이동
mkdir
새로운 디렉토리를 만든다.
ex)mkdir html
touch
파일 만드는 명령어
cat
파일만들고 파일내용편집 특정함수를 넣을수 있음
rm
파일을 삭제한다.
rm -rf
파일 디렉토리 지울때 사용
mv
명령어 예) mv abc def : abc파일을def로 바꿈
디렉토리 바꾸는 명령어
예)mv testdir ../test:이름을test로 바꿔서testdir을 몽땅옴김

< :표준입력
1>:표준출력
>:표준에러

디렉토리 권한
ls -l test.txt
-rw-r--r-- sw9721107 1997
-rw-:read,user
r--:writing,groub
r--:실행.other

허가를바꾸는 명령어
chmode(파일명,디렉토리명)

editer
vi기능
/:찾기
/n:다음찾기

커서이동
왼쪽:h
위:k
오른쪽:o
아래:j

d: 지우는 명령어
dw:한단어씩지움
3dw:3단어씩지움
d$:뒤쪽으로지움(오른쪽)
d^:앞쪽으로 지움(왼쪽)
dgg:현제커서 위치에서 지움
dd:한줄지우기
3dd:3줄지우기
y:복사
yy:한줄복사
yw:한위드 복사
p:붙이다
c:바꾸다
x(소문자):커서 문자만 지움
X(대문자):빽스페이스
u:복구명령어
esc:command mode
I: insert moad
b : 단어의 시작위치로 이동
e : 단어의 끝 부분으로 이동
0 : 행의 시작부분으로 이동
q : 끝내기
q! : 저장 않고 끝내기

4월26일
표준출력:>
표준입력:<
표준에러:2>
ls 2>aa :에러가 나면 aa로 보내겠다.
ls bb :에러가 나지 않으면aa 에러가나면 bb로 보내겠다.
ls >aa 2&1 :에러도 aa에 다넣겠다.
ls 2>aa 1>&2 :표준출력,표준에러와 같이쓰겠다.
ls >aa 2>del/null :에러 발생시 휴지통에 버리겠다.
ls >/dev/null/2&1 :출력에러를 휴지통에 버리겠다.

#pipeline-->|(기호)
ls -al |
#grep :대표적인 필터 명령어.
행단위로 검색
표준입력 date를 받을수있음.
키보드에서 date를 받을수있음.
ls -al | grep :모든 파일을 행으로 찾겠다.
ls -al | grep ^d :맨 앞이 d로 시작하는 디렉토리를 보여줌.
who | grep sw9721107 :who 에들어돈 file을 찾는다.(출력)

#wc :덩어리 단위로 글자수 출력
예)i love unix
1 3 12
줄 덩어리 글자수
#mesg n:메세지 오는걸 막음.

#awk :특정한 필터를 뽑음.
예)$awk 'unix/{print$0}' test.txt
unix
i love unix
:test.txt file 에서 unix가 들어건 패턴을 출력.
$awk -F: '{print$2{' sort.txt
-F:필터의 구분을 :로 하여라라는 뜻
print {$1 $7} :1번째 7번째를 출력.

# shell programmming
(bash)
입력:read
$read test
hello
출력:echo
-n:맨 앞으로
$echo $test
출력>hello
hell를 test에 입력해서 echo 기능으로 test의 hello를 불러에서 출력한다. 변수를 읽는다

# ln명령어
symbolic -s
hard -inrode번호로 공유
-n:맨앞으로



5월2일
mkdir testdir
ln -s testdir sdir
sdir:가상디렉토리

$ps=process=자기프로세서를 보여줌
예)$ps
PID TIME CHD
7860 pts/20 00:00:00 bash
10893 pts/20 00:00:00 ps
$ps aux:현재수행하고 있는 모든 프로세서를 다보여줌
touch a:a라는 파일을 만듬
vi a :a라는 파일에서 vi작업함
#!/bin/sh
while true : do
echo hello
sleep 1
done
./a :작업한걸 실행 실행하면 hello가 쭉나옴...
ctrl+z:잠시중지
jobs :작업내용을 보여줌
forground:키보드상에 신호를 보낼수있음
background(=&):키보드상에 신호를 보낼수없음
la & :독단적으로 수행,다른 작업실행 못함
kill %1:jobs로 나온 작업내용중1번을 지움
find / *.html > temp 2> /dev /null &
:html로 끝나는 확장자를 모두 찾아서temp라는 곳을로 보내고
에러시에는 휴지통으로 보내라는 뜻

# kill 내용
kill -l:kill의 모든 내용을 보여줌 1~63번까지 있음
kill의 중요한 것들
1)sighup(-hup) :죽였다가 살리는 기능,환경화면을 바꾸는 기능
2)sigint(-int) :ctrl+c,키보드상에 입력가능
3)sigquit(-quit) :ctul+/,키보드상에 입력가능
9)sigkill(-kill) :작업내용을 못지우는것들을 강제로지움
15)sigterm(-term):정상종료

예)kill -1 pid(프로세서 아이디):프로세서를 죽였다살림

5월10일
#! bin/sh
trap 'echo 메롱'2
while true : do
echo hello
sleep
done
실행)./hello.sh
hello
.
.
hello
cltl+c--> 메롱
cltl+z--> 멈춤

expr: 산술식이라는 것을 알려줌
a=1
a=' expr $a + 1'
echo $a

1에서10까지 더한값이 나오는 것
#! /bin/sh
sum=0
a=1
while [$a le 10 ];do
sum='expr $sum + $a'
a='expr $ + 1'
done
echo $ sum

< :입력리다이렉션
> :출력리다이렉션
>>:파일출력추가
cat >test.txt
love
echo like >>test
cat test.txt이걸로 확인하면....
love
like
love뒤에 like가 나옴
<< :here document
cat << e >a.txt
>i love unix
>i love unix
>e
e를 치는 순간 a.txt에 i love unix가 들어감

mail sw9721107 << e
>i love unix
>do you love me?
>e
:9721107이라는 친구에게 i love unix
do you love me?
라고 멜을보냄.
멜 삭제: d1: 1번멜 삭제
d2: 2번멜 삭제
d*: 모든멜 삭제
man.test: test명령어 도움말
help test

if test if abc.txt ; then touch abc.txt :abc라는 파일이 있음true라고 출력
> echo true 없음 false라고 출력함
>else
>echo false
>fi

for i * ; do
>echo $i
>done
:모든걸 가져와서 출력하라
현제 디렉토ㅓ리 파일만 출력

#!/bin/sh
for i in *.hrml
echo $i
done
./hello
insdex.html
:html로 끝나는 모든 파일을 나타냄
5월17,24일
@if 문이용두개의 문자열을 받아 같으면 SAME 아니면 NOT SAME로 나타내는 문
#!/bin/sh
read str1
read str2
if test $str | = $str2; then
echo same
else
echo not same
fi
출력)
./a ./a
a a
a b
same not same

foo=test.c
bar=`vasename $foo.c`
echo $bar

test.c
bash-2.04

aa=hello
echo $aa
:hello
echo ${aa}world
:helloworld

@for문을 이용해 1~10까지의 합을 구하는 문
sum
for i in 1 2 3 4 5 6 7 8 9 10; do
sum=`expr $sum+$i echo $i
done
echo $sum
@*.c를 .cpp로 확장명을 바꾸는 문
#!/bin/sh
for i in *.c; do
foo=`basename $i.c`
mv $i ${foo}.cpp
done

foo=test.cpp
echo ${foo%.cpp} :test %앞의것을 자름
echo ${foo#test} :cpp #뒤의것을 자름

용어
tar :여러개의 파일을 하나 또는 반대 디렉토리 안에서 모음
tar cvf test.tar :test라는 디렉토리에 파일을 하나로 모음
tar xcf test.tar :파일을 풀어버림
gzip test.tar :압축하는 기능
gunzip test.tar.gz:압축을 품
tar xvfz teest.tar.gz:압축도 풀고 tar이른 파일도 품
gzip dc test.tar.gzltar xvf _:안에 있는 파일까지 압축 한방에 압축

5월31일
접속한 사람 확인하는 문
#!/bin/sh
until who | grep mntlee >/dev/null ; do
sleep 2
done
아규먼트가 한줄에 한개씩 출력하는 문
#!/bin/sh
set date`
while[s# -ne 0 ] ; do
echo $1
shift
done
실행)Fri
Jun
1
18:55:21
EDT
2001

gerp -l:파일명
-w:단어단위
-v:포함되지 않는것


who|grep mntlee
if who|grep mntlle>/dev/null ; then
echo yes
else
echo no
fi
실행)yes
if who|grep mntlee ; then
echo yes
else
echo no
fi
실행)mntlee `pts/15 may 3/09:53
yes



#export 명령어#
1.export foo=love
2.foo=love
export foo

foo=love(enter)
[8] exit126 ./a mntlee
echo $foo(enter)
love
bash(enter)자식쉘생성
echo $foo(enter)
exit(enter)자신의 쉘로 돌아옴
exit

mv.bash-profile .bash-pro
vi .vash-profile
#!/bin/sh
echo hello

echo $PS(enter)=for ; do
[
echo $PS2(enter)
>

연습문제
track.sed
/^[0-9].*/d
/^---/d
s/^/logout/


track.cleanup
:뒤에 오는 파일를 비우는 스크립트
echo stop tracking
:멈추는거....
rm -f .track.old.$1 .t문자를 변수 선언
;;
-n*)
loopCount=`expr substr $arg 3 10` :loopCount라는 변수에 저장
;;
*)
user=$arg :user에 arg를 대입
;;
esac :case문 종료
done
if [ ! "$user" ] :user가 없으면
then
error=1 :error의 값은 1로 출력
fi :if문 종료
if [ $error -eq 1 ] :if문 시작 error -ep 1
then
cat << ENDOFERROR :ENDOFERROR로 출력
usage : track [-n#] [-t#] userId :메세지 출력
ENDOFERROR
exit 1 :비정상종료
fi :if문 종료
trap 'track.cleanup $$; exit $exitCode' 0 :
trap ' exitCode=1 ; exit' 2 3 :
> .track.old.$$ :old파일생성
count=0
while [ $count -lt $loopCount ] :count가 $loopCount보다 작은동안에
do
who | grep $user | sort > .track.new.$$ :who를 user에서 추축해서 sort가있음 track.new생성
diff .track.new.$$ .track.old.$$ | :new파일과 old파일을 비교
sed -f track.sed > .track.report.$$ :sed -f track.sed가있음 report파일생성
if [ -s .track.report.$$ ] :track.report라는 파일에 한개의 문자라도 있으면
then
echo track report for ${user}: :user라는 폴더에track,report가 있음
cat .track.report.$$ :track,report출력
fi :if문종료
mv .track.new.$$ .track.old.$$ :mv는 파일 바꾸기track.new--->track.old로 바꿈
sleep $pause :sleep는 멈춤
count=`expr $count + 1` :값이 1씩 증가한다.
done :do문 종료
exitCode=0 :모든프로그램종료 빠져나옴

6/7일
#!/bin/sh
foo=like
./test.sh--->자식쉘생성,자식쉘은 실행하면 끝남
echo $foo
. test.sh--->현재쉘
echo $foo

KEY멥핑
#include
main(){
printf("i can");
printf("do it");
}

커서가...printf("i can.......) f밑에 있을때 멘앞을로 보내서/넣는 방법
:I를 친다음/*치고 esc치고 A*/치고 esc를 치면 끝

map ctrl+v:저장할기능들을 입력
map (ctrl+v F3) I/* (ctrl+v) A*/(ctrl+v esc)
$home/.v

cut 필터명령어
cut:필드의 일부분을 잘라냄
cut -f love unix(enter)
i love unix

apple(tab)pear(tab)grape(tab)bery(tab)bapa(tab)orange-----> cat.txt
cat -f2 cut.txt
실행)apple pear grape
bery bapa orange
cut -c7-10 cut.txt
실행)pear
bapa
cut -c-7 cut.txt
실행)apple p
bery b

vi 작업
%/s/ctrl+v tab/ /g
tab를 스페이스바로 바꾸기
ls -lt > bb$$ $$:임시 파일만들때 사용

보안
which passwd
--->/usr/bin/passwd
ls -l /usr/bin/passwd
--->-r-s--x--x 1 root root 13536 jul 12 2000 /usr/bin/passwd
chmod 6711 fo
ls -l fo
--->-rws--s--x 1 sw9721107 1997
chmod 1777 tdir
ls -ld tdir
--->drwxrwxrwt 2 sw9721107 1997

setuid 2
:권하은 -r-s--x--x setid가 s를 뜻함
setgid 4
:파일을 실행하는 동안은 그룹의 권한을 가지게 되는것
sticky bit 1
:이권한을 주면 주인아니면 지울수 없음

출처 : Tong - nae tong님의 서버운영체제통

'Linux' 카테고리의 다른 글

tar  (0) 2008.07.25
명령어2  (0) 2008.07.25
gcc 사용  (0) 2008.07.25
gcc install  (0) 2008.07.25
chown  (0) 2008.07.25
Posted by 으랏차
,

gcc 사용

Linux 2008. 7. 25. 15:29

2. gcc 강좌

2.1 gcc 에 대한 기본 이해

명령행 상태에서 다음과 같이 입력해봅시다. 여러분이 사용하같고 있는 gcc 버전은 알아두고 시작하셔야겠죠?

 [yong@redyong yong]$ gcc -v
 Reading specs from /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs
 gcc version 2.7.2.1
 [yong@redyong yong]$ 

gcc -v 이라고 입력하니까 ``Reading specs from..'' 이라같고 말하면서 그 결과값을 ``gcc version 2.7.2.1''이라고 말해주고 있습니다. 자, 어디서 gcc 에 대한 정보를 읽어오는지 봅시다.

  /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs

gcc 를 여러분이 소스를 가져다 손수 설치해보신 적은 없을 것입니다. 보통은 바이너리 패키지로 된 것을 가져다 설치하지요. 나중에 정말 휴일에 너무 심심하다 싶으면 gcc 의 소스를 가져와서 컴파일해보십시요. 참, 재미있는 경험이 될 것입니다. 이미 여러분이 갖고 있는 gcc 를 가지고 새로운 gcc 를 컴파일하여 사용합니다. C 컴파일러를 가지고 새 버전의 C 컴파일러를 컴파일하여 사용한다! 이런 재미있는 경험을 또 어디서 해보겠습니까?

gcc 패키지가 어떤 것으로 구성되어 있는지.. gcc 가 제대로 설치되어 있는지 알아보면 좋겠죠?

다음과 같습니다.

 /lib/cpp       -----------> /usr/lib/gcc-lib/i386-linux/2.7.2.1/cpp ( 링크임 )
 /usr/bin/cc    -----------> gcc ( 링크임 )
 /usr/bin/gcc                C 컴파일러 ``front-end''
 /usr/bin/protoize
 /usr/bin/unprotoize
 /usr/info/cpp.info-*.gz     GNU info 시스템을 이용하는 화일들
 /usr/info/gcc.info-*.gz                        
 /usr/lib/gcc-lib

마지막 /usr/lib/gcc-lib 디렉토리에 아래에 gcc 에 관한 모든 내용이 설치됩니다.

보통 다음과 같은 디렉토리 구조를 가집니다.

        /usr/lib/gcc-lib/<플랫폼>/< gcc 버전 >

보통 우리는 리눅스를 i386 ( 인텔 환경 )에서 사용하고 있으므로 다음과 같이 나타날 것입니다.

        /usr/lib/gcc-lib/i386-linux/2.7.2.1

( i386-linux, i486-linux, i586-linux 는 각기 다를 수 있습니다. 하지만 상관없는 내용입니다. 미친 척 하고 다른 이름을 부여할 수도 있습니다. )

그럼 계속 해서 /usr/lib/gcc-lib 밑의 내용을 살펴보죠.

 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cpp
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/include/*.h
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/libgcc.a
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs

cc1이 진짜 C 컴파일러 본체입니다. gcc 는 단지 적절하게 C 인가, C++ 인가 아니면 오브젝티브 C 인가를 검사하고 컴파일 작업만이 아니라 ``링크''라는 작업까지 하여 C 언어로 프로그램 소스를 만든 다음, 프로그램 바이너리가 만들어지기까지의 모든 과정을 관장해주는 ``조정자'' 역할을 할 뿐입니다.

C 컴파일러는 cc1, C++ 컴파일러는 cc1plus, 오브젝티브 C 컴파일러는 cc1obj 입니다. 여러분이 C++/오브젝티브 C 컴파일러를 설치하셨다면 cc1plus, cc1obj 라는 실행화일도 찾아보실 수 있을 겁니다. cpp 는 "프리프로세서"입니다. #include 등의 문장을 본격적인 cc1 컴파일에 들어 가기에 앞서 먼저(pre) 처리(process)해주는 녀석입니다.

참고로 g++ 즉 C++ 컴파일러( 정확히는 C++ 컴파일러 프론트 엔드 )에 대한 패키지는 다음과 같습니다.

 /usr/bin/c++   --------------------------->    g++ 에 대한 링크에 불과함
 /usr/bin/g++
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1plus    ( 진짜 C++ 컴파일러 )

오브젝티브 C 컴파일러 패키지는 다음과 같습니다.

 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1obj
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/include/objc/*.h
 /usr/lib/gcc-lib/i386-linux/2.7.2.1/libobjc.a

구성요소가 어떤 것인지 아셨으니 좀 도움이 되셨을 겁니다.

2.2 gcc 사용하기

hello.c 라는 지긋지긋한 소스 하나를 기준으로 설명합니다 ^^


#include <stdio.h>

int
main ( void )
{
  (void) printf ( "Hello, Linux Girls! =)\n" );
  return 0;
}

참고로 제일 간단한 소스는 다음과 같은 것입니다. ^^


main () {}

컴파일을 해보겠습니다! $ 는 프롬프트이지 입력하는 것이 아닌 것 아시죠?

 $ gcc hello.c
 $

무소식이 희소식이라... gcc <C소스 화일명> 이렇게 실행하고 나서 아무런 메시지도 나오지 않고 다음 줄에 프롬프트만 달랑 떨어지면 그것이 바로 컴파일 성공입니다.

여러분은 무심코 다음과 같이 결과 프로그램을 실행시키려 할 것입니다.

 $ hello
 bash: hello: command not found
 $

예. 땡입니다. ^^

여러분은 다음과 같이 실행시켜야 합니다.

 $ ./a.out

맨 앞의 도트 문자(.)는 현재 디렉토리를 의미합니다. 그 다음 디렉토리 구분 문자 슬래쉬(/)를 쓰고 유닉스 C 에서 ``약속한'' C 컴파일러의 출력 결과 바이너리 화일인 a.out 을 써줍니다.

이러한 습관은 아주 중요합니다. 여러분이 현재 디렉토리에 어떤 실행 화일을 만들고 나서 테스트를 해 보려고 한다면 꼭 ./<실행 화일명> 이라고 적어줍니다.

유닉스는 기본적으로 PATH 라는 환경변수에 있는 디렉토리에서만 실행화일을 찾을 뿐입니다. 만약 PATH 라는 환경변수에 현재 디렉토리를 의미하는 도트 문자(.)가 들어있지 않으면 현재 디렉토리의 실행화일은 절대 실행되지 않습니다. 게다가 현재 디렉토리를 PATH 환경 변수에 넣어준다 할 지라도 도스처렁럼 현재 디렉토리를 먼저 찾는다든지 하는 일은 없습니다. 오로지 PATH 에 지정한 순서대로 수행합니다.

실행 바이너리명이 계속 a.out 으로 나오면 좀 곤란하죠. 뭐 물론 mv 명령으로 a.out 의 이름을 바꾸면 되지만서도...

-o 옵션

-o 옵션( 소문자 o 임! )은 출력(output) 화일명을 정하는 옵션입니다. 위에서 우리는 hello.c 라는 소스를 가지고 일반적으로 hello 라는 이름의 실행화일을 만들고 싶어할 것입니다.

 $ gcc -o hello hello.c
       ^^^^^^^^

또는 다음과 같이 순서를 바꿔도 무방합니다.

 $ gcc hello.c -o hello
               ^^^^^^^^

워낙 유닉스 쪽은 명령행 방식이 전통적으로 주된 방식이라 명령행에서 하는 일은 뛰어납니다.

당연히 실행을 하려면 ./hello 라고 하셔야 합니다. 결과는 다음처럼 나오겠지요?

 $ ./hello
 Hello, Linux Girls! =)
 $

주의

제일 안좋은 습관 중 하나가 바로 테스트용으로 만든 소스라고 다음처럼 하는 것입니다.

 $ gcc -o test test.c
 $ test
 $

문제를 알아내기 위하여 위에서 작성한 hello.c 를 컴파일/링크해봅시다.

 $ gcc -o test hello.c
 $ test
 $

원하는 문자열이 출력되지 않았습니다. -.-

 $ ./test
 Hello, Linux Girls! =)
 $

-c 옵션

어떤 이유로 오로지 컴파일(compile) 작업만 하고 싶은 경우가 있습니다. 그럴 때는 다음과 같이 합니다.

 $ gcc -c hello.c
 $

그 결과 만들어지는 화일은 전통적으로 hello.c 에서 .c 부분을 떼어내고 .o 를 붙인 화일입니다. 오브젝트 화일, 목적 화일이라고 하지요.

hello.o 라는 화일이 만들어집니다.

여러분은 C 언어로 조금이라도 복잡한 프로그램을 만들기 시작하면 여러 개의 소스로 나누어서 전체 프로그램을 짜게 됩니다. 그럴 때는 각 소스가 전체 기능에 기여하는 특정 기능의 함수들을 가지게 되고 오로지 한 녀석만 main 함수를 가집니다.

만약 어떤 프로그램이 foo.c, bar.c 이렇게 두 개의 소스로 이루어져 있다고 합시다. 이럴 때는 다음과 같이 하는 것이 가능합니다.

방법(1)

 $ gcc -o baz foo.c bar.c
 $ ./baz
방법(2)

 $ gcc -c foo.c
 $ gcc -c bar.c

          또는
 
 $ gcc -c foo.c bar.c
 $ gcc -o baz foo.o bar.o
              ^^^^^^^^^^^
 $ ./baz

위에서 보면 "아니! C 컴파일러에 .c 즉 소스 화일이 아닌 오브젝트 화일도 막 써주나?"라는 생각을 하시게 될 겁니다.

그렇습니다! 왜냐? gcc 는 정확히 말해서 C 컴파일러가 아닙니다. gcc 라는 실행 화일 자체는 "C 컴파일러를 돌리는 녀석"입니다.

더욱 더 정확히 말해보겠습니다.

C 언어는 기본적으로 두 가지 과정을 거쳐야만 실행화일을 만들어냅니다.

  1. 컴파일 ( .c -------> .o )
  2. 링크 ( .o -------> 실행화일 a.out )

1. 과정을 실제로 맡는 것은 cc1 이라는 녀석이고 2. 과정을 맡는 것은 ld 라는 링커(linker)입니다.

gcc 는 상당히 편리한 도구로서 .c, .o 등의 화일명 꼬리말을 보고 적절하게 C 컴파일러와 링커를 불러다가 원하는 실행화일을 만들어줍니다. gcc 는 "컴파일러와 링커를 불러주는 대리인"입니다.

hello.c 를 괜히 어렵게 컴파일/링크해봅시다 ^^

 $ gcc -c hello.c
          ^^^^^^^
 $ gcc -o hello hello.o
                ^^^^^^^

gcc 가 얼마나 똑똑피한 놈인지 알아보죠.

 $ gcc -c hello.o

이게 무슨 의미가 있겠습니까? ^^

 gcc: hello.o: linker input file unused since linking not done

위와 같이 불평합니다. 링크 과정을 수행하지 않으므로 링커에 대한 입력 화일인 hello.o 를 사용하지 않았다!

-I 옵션

#include 문장에서 지정한 헤더 화일이 들어있는 곳을 정하는 옵션입니다. 아주 많이 사용되는 옵션 중 하나입니다.


 #include <stdio.h>
 #include "my_header.h"

전자( <> 문자를 쓴 경우 )는 시스템 표준 헤더 디렉토리인 /usr/include를 기준으로 화일을 찾아서 포함시킵니다. 표준 디렉토리이지요.

후자( "" 문자를 쓴 경우 )는 지금 컴파일러가 실행되고 있는 현재 디렉토리를 기준으로 헤더 화일을 찾습니다.

이 두 디렉토리가 아닌 곳에 대해서는 명시적으로 -I<디렉토리> 로 정해줍니다.

 $ gcc -c myprog1.c -I..
 $ gcc -c myprog1.c -Iinclude

첫번째는 헤더 화일이 현재 소스 하위 디렉토리(..)에 있다는 뜻이며 두번째는 현재 디렉토리의 include라는 디렉토리에 들어있다는 뜻입니다.

-I 옵션은 얼마든지 여러번 쓸 수 있으며 주어진 순서대로 헤더 화일을 검색합니다.

주의

디렉토리명은 -I 라는 문자 바로 다음에 붙여서 씁니다. 즉 -I <디렉토리>라는 식이 아니라 -I<디렉토리> 입니다. 또한 유닉스에 있어 표준 헤더 화일 디렉토리는 /usr/include 라는 사실을 기억하시기 바랍니다. 또한 리눅스에 있어서는 커널 소스가 아주 중요한데 리눅스 고유의 기능을 쓰는 리눅스용 프로그램의 경우에는 /usr/include/linux, /usr/include/asm, /usr/include/scsi (최신 커널의 경우) 라는 디렉토리가 꼭 있어야 하며 각각은 커널 소스의 헤더 디렉토리에 대한 링크입니다. 따라서 커널 소스를 꼭 설치해두셔야 합니다.

 /usr/include/linux   -------------->  /usr/src/linux/include/linux
 /usr/include/asm     -------------->  /usr/src/linux/include/asm  
 /usr/include/scsi    -------------->  /usr/src/linux/include/scsi

( 위에서 /usr/src/linux/include/asm은 사실 대부분의 경우 /usr/src/linux/include/asm-i386 이라는 디렉토리에 대한 링크입니다 )

각각 linux는 일반적인 C 헤더 화일, asm은 각 아키텍쳐별 의존적인 어셈블리 헤더 화일, 맨 마지막은 SCSI 장치 프로그래밍에 쓰이는 헤더 화일이 들어있는 곳입니다.

일반적으로 커널 소스( 약 6 메가 이상되는 소스 )는 /usr/src 에서 tar, gzip으로 풀어두는 것이 관례입니다.

맨 처음 프로그래밍을 할 때는 그렇게 많이 쓰지는 않는 옵션이지만 여러분이 다른 소스를 가져다 컴파일할 때 아주 많이 보게 되는 옵션이므로 일단 이해는 할 수 있어야겠죠?

-l 옵션과 -L 옵션

옵션을 제대로 이해하기에 앞서 ``라이브러리''라는 것에 대한 이야기를 먼 저 하지 않으면 안될 듯 하군요.

  • 라이브러리


       ``라이브러리(Library)''라는 것은 개념상 영어 단어 그대로입니다.
      무엇인가 유용한 지식을 한 곳에 모아둔 곳이라는 개념이지요.

       C 프로그래밍을 하다 보면 반복적으로 사용하게 되는 함수들이 있기
      마련이고 그것은 하나의 함수로 떼내어 어디에서든 유용하게 사용할
      수 있도록 합니다.

       이 함수가 극도로 많이 사용되는 경우에는 ``라이브러리''라는 것으
      로 만들어두고 매번 컴파일해둘 필요없이 가져다 사용할 수 있도록
      하지요.

       라이브러리에 대한 얘기는 다음 번에 또 하게 되겠지만 일단 지금
      필요한 지식만 쌓기로 하겠습니다.

       일반적으로 관례상 라이브러리는 화일명 끝이 .a 로 끝납니다.
      여기서 a 는 Archive 라는 의미일 것입니다.

       라이브러리의 예를 들어보도록 하죠. 지금 /usr/lib 디렉토리를 한
      번 구경해보십시요. 정말로 많은 라이브러리들이 있지요.

      libc.a
      libm.a
      libdb.a
      libelf.a
      libfl.a
      libg++.a
      libg.a
      libncurses.a
      libreadline.a
      libvga.a
      등등...

       이러한 라이브러리는 우리가 컴파일 과정을 거쳐서 만든 .o 화일을
      한 곳에 통들어 관리하는 것에 불과합니다. 따라서 archive 를 의미
      하는 .a 라고 이름을 짓게 된 것이죠. 라이브러리는 ``도서관''으로
      서 그냥 .o 를 무작위로 집어넣은 것은 아니고 당연히 도서관에는
      소장하고 있는 책에 대한 목록(index)을 가지듯 포함되어 있는 .o
      에 대한 인덱스(index)를 가지고 있습니다.

       라이브러리는 다음과 같이 구성되어 있다고 할 수 있는 것입니다.

            라이브러리 = 목차(index) + ( a.o + b.o + c.o + ... )
        
       libc.a 를 가지고 한 번 놀아볼까요? 라이브러리 아카이브를 관리하
      는 ar 이라는 GNU 유틸리티를 써보겠습니다.

      $ cd /usr/lib
      $ ar t libc.a
      assert-perr.o
      assert.o
      setenv.o
      ftime.o
      psignal.o
      mkstemp.o
      sigint.o
      realpath.o
      cvt.o
      gcvt.o
      ctype-extn.o
      ctype.o
      <등등... 계속>

      $ ar t libc.a | grep printf
      iofprintf.o
      ioprintf.o
      iosprintf.o
      iovsprintf.o
      iovfprintf.o
      printf_fp.o
      vprintf.o
      snprintf.o
      vsnprintf.o
      asprintf.o
      vasprintf.o
      printf-prs.o
      reg-printf.o
      $

       위에서 볼 수 있다시피 .o 화일들이 그 안에 들어있습니다.

       <주목>
       유닉스에서 라이브러리 이름은 lib 로 시작합니다.

간단하게 라이브러리를 하나 만들어서 사용해보도록 합시다.

이번 예제는 3 개의 화일로 이루어졌습니다.

        myfunc.h
        myfunc.c
        hello.c

첫번째 myfunc.h 헤더 화일의 내용입니다.


extern void say_hello ( void );

두번째 myfunc.c, 실제 함수 정의부입니다.


#include <stdio.h>
#include "myfunc.h"

void 
say_hello ( void )
{
  printf ( "Hello, Linux guys!\n" );
}

마지막으로 메인 함수(main)가 들어있는 hello.c 입니다.


#include "myfunc.h"

int
main ( void )
{
  say_hello ();
  return 0;
}

main 함수에서 say_hello 라는 함수를 사용하게 됩니다. 이 정도야 그냥 이렇게 해버리고 말죠 ^^

 $ gcc -o say_linux hello.c myfunc.c

하지만 라이브러리를 만들어보고 시험해보려고 하는 것이므로 일부러 어렵게 한 번 해보기로 하겠습니다.

 $ gcc -c myfunc.c
 $ ar r libmylib.a myfunc.o
 $ ar s libmylib.a
 $ ar t libmylib.a
 myfunc.o
 $ gcc -o say_linux hello.c -lmylib
                            ^^^^^^^^
 ld: cannot open -lmylib: No such file or directory

흠... 처음부터 만만치 않죠? ^^ 실패하긴 했지만 몇 가지를 일단 알아봅시다.

-l 옵션

링크(link)할 라이브러리를 명시해주는 옵션이 바로 -l ( 소문자 L ) 옵션입니다.

-I 옵션과 마찬가지로 바짝 붙여서 씁니다. 절대 떼면 안됩니다.

우리는 libmylib.a 라는 라이브러리를 만들어두었습니다. 그것을 사용하기 위해서는 -lmylib 라고 적어줍니다. 라이브러리 화일명에서 어떤 글자들을 떼내고 쓰는지 주목하십시요.

 libmylib.a
    ^^^^^  

앞의 lib 를 떼내고 맨 뒤에 붙는 .a 를 떼냅니다.

링크(link)라는 것이 어떤 것이 모르신다면 당장 C 프로그래밍 책을 다시 읽어보시기 바랍니다. 이 글에서 설명할 범위는 아닌 듯 합니다.

-L 옵션

ld 는 유닉스에서 사용되는 링커(Linker)입니다. C 프로그램 컴파일의 맨 마지막 단계를 맡게 되지요.

위에서 우리는 다음과 같은 에러 메세지를 만났습니다.

 ld: cannot open -lmylib: No such file or directory

자, 이제 배워야 할 옵션은 ``라이브러리의 위치를 정해주는'' -L ( 대문자 L ) 옵션입니다. 사용형식은 -L<디렉토리명> 입니다.

리눅스에서 어떤 라이브러리를 찾을 때는 /lib, /usr/lib, /usr/local/lib와 같은 정해진 장소에서만 찾게 되어 있습니다. 그것은 규칙이지요.

중요한 사실은 아무리 여러분 라이브러리를 현재 작업 디렉토리에 놓아두어도 ld 는 그것을 찾지 않는다는 사실입니다. ld 더러 라이브러리가 있는 장소를 알려주려면 다음과 같이 -L 옵션을 붙이십시요.

 $ gcc -o say_linux hello.c -lmylib -L.
                                    ^^^

-L. 은 현재 디렉토리에서 라이브러리를 찾으라는 말입니다. -L 옵션은 여러번 줄 수 있습니다.

성공적으로 컴파일되었을 겁니다.

 $ ./say_linux
 Hello, Linux guys!

지금까지 여러분은 gcc 옵션 중 두번째로 중요한 -I, -l, -L 옵션에 대하여 배우셨습니다. 그리고 또한 라이브러리 만들기에 대하여 맛보기를 하였습니다.

 

'Linux' 카테고리의 다른 글

명령어2  (0) 2008.07.25
명령어1  (0) 2008.07.25
gcc install  (0) 2008.07.25
chown  (0) 2008.07.25
linux java install  (0) 2008.06.04
Posted by 으랏차
,

gcc install

Linux 2008. 7. 25. 15:29
Operating System/Solaris 2007/07/14 16:14

1. Freeware For Solaris에 가세요.

2. 오른쪽 위에 Sparc/Solaris 8 또는 Intel/Solaris 8이라고 되어 있습니다. 자신의 기종에 맞는 것을 Click 합니다. (Intel/Solaris 8기준)

3. 다시 오른쪽 아래를 보시면 Package의 List가 보입니다. 여기서 gcc-2.95.3을 Click 합니다.

4. 가운데 화면이 바뀌었을 것입니다. 파란색으로 gcc-2.95.3-sol8-intel-local.gz 을 Click 한 후 Download 받습니다.

5. Download 받은 File을 Solaris Machine에 전송합니다. (FTP)

6. Directory로 가서 압축을 풉니다.

 

7. Package를 설치합니다.

 

* "/usr/local/ Directory를 생성 하시겠습니까?" 라는 질문엔 y를 치고 Enter를 칩니다

8. vi 편집기를 이용해 PATH와 LD_LIBRARY_PATH를 수정합니다. 아래의 내용을 가장 아래에 추가합니다.

 

9. 설치가 끝났습니다. Logoff 한 후 다시 Login 해서 필요한 Software를 설치하세요.

*주의사항:

1. LD_LIBRARY_PATH에서 Directory 경로의 순서를 바꾸시면 안됩니다! 역시 PATH에서 /usr/local/bin이 앞에 나와야 합니다.

*추가설명:

Solaris 9 (정확히 Solaris 2.9 또는 SUN 0S 5.9 라고도 부름)를 설치하고 COMPANION CD 설치 이전에는 gcc가 기본적으로 설치되어 있지는 않다. 자체적으로 /usr/lib등지에 Library 함수들은 있지만 gcc 자체는 없음으로 추가 설치가 필요하다. 설치는 ftp로 Download 받지 않고 copanion cd에 개발자 관련 Package만 설치하였으며 내가 가지고 있던 cd의 기본 설치 경로는 /opt/sfw에 설치가 되었다. 이러한 설치경로는 sunfreeware와 sun.com에서 나오는 Package에 따라 설치경로가 다르다고 하다 default로 설치 경로는 /usr/local 이라고 한다. 고타마 Server를 확인해도 그러하다.

*설치 후 Error 보정:

위와 같이 path 설정 후 다시 Login하면 /bin 에 있는 모든 응용 Program의 Path가 안 걸려 Console에서는 실행이 되지 않는다. 당황하지 말고..^^ CDE 환경에는 Mouse Click으로 가능하기 때문에 path는 다시 설정 가능하다. path에다가 /bin을 추가해주자. 그럼 Console에서 기본 응용Program (ls, cd, ,find)같은 명령어를 사용할 수 있을 것이다.

 

'Linux' 카테고리의 다른 글

명령어1  (0) 2008.07.25
gcc 사용  (0) 2008.07.25
chown  (0) 2008.07.25
linux java install  (0) 2008.06.04
lighthttpd install  (0) 2008.06.04
Posted by 으랏차
,

chown

Linux 2008. 7. 25. 15:27

chown (파일과 디렉토리의 소유주와 소유그룹 변경)

 

 


제공 : 리눅스 서버관리자 그룹  -수퍼유저코리아-





CHange OWNer의 약어로서 파일이나 디렉토리의 소유주와 소유그룹을 변경할 때에 사용하는 명령어이다.
파일과 디렉토리의 소유주와 소유그룹은 아래 예와 같이 각각 굵은글자로 표시된 부분이다.

 [root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9월 15 20:02 dir1
-rw-r--r--    1 root     root           41  9월 15 20:22 file1
-rw-r--r--    1 root     root           56  9월 15 20:22 file2
[root@host1 commmand]#

위의 예어서 dir1이라는 디렉토리와 file1, file2라는 파일은 소유주와 소유그룹이 모두 root로 되어 있다.

즉 파일이나 디렉토리 모두 3번째 필드에 해당하는 것이 소유주이며, 네번째 필드에 해당하는 것이 소유그룹이다.


사용형식
       chown [-Rcfv] [--recursive] [--changes] [--help] [--version] [--silent] [--quiet] [--verbose]
       [user][:.][group] file...


사용예 #1

위의 file1라는 소유주를 bible로 변경해 보겠다.

[root@host1 commmand]# chown bible file1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9월 15 20:02 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 root     root           56  9월 15 20:22 file2
[root@host1 commmand]#

위에서 보다시피 file1 파일의 소유주가 bible로 변경이 되었다.
물론 이런 명령어가 허용이 되려면 파일에 대한 소유권이 있어야만 가능한 일이다.
아무나 파일또는 디렉토리의 퍼미션을 변경할 수 있는 것은 아니다.

자, 그럼 이번에는 소유주와 소유그룹을 한꺼번에 변경하려면 어떻게 할까?
다음의 예를 보자.


사용예 #2

다음과 같이 :(콜론)으로 구분하여 "소유주:소유그룹"을 지정하면 소유주와 소유그룹이 변경이 된다.

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9월 15 20:02 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 root     root           56  9월 15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown bible:bible2 file2
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9월 15 20:02 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#

위의 예는 file2라는 파일의 소유주를 bible, 그리고 소유그룹을 bible2로 변경한 예이다.


사용예 #3

이번에는 디렉토리의 소유주와 소유그룹을 변경해 보자.
리눅스에서는 디렉토리도 파일로 취급하므로 소유주와 소유그룹을 변경하는 방법은 파일과 동일하다.

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 root     root         4096  9월 15 20:02 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown bible1:bible2 dir1
[root@host1 commmand]#
[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    2 bible1   bible2       4096  9월 15 20:02 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#

위의 예는 dir1이라는 디렉토리의 소유주를 bible1으로 변경하고 소유그룹을 bible2로 변경한 예이다.

사용예 #4

서버작업을 하다보면 특정 디렉토리내의 모든 파일과 디렉토리들을 특정 소유주와 소유그룹으로 변경해야하는 경우가 흔히 발생한다.
예를 들어 웹에서 자료실등의 파일업로드 디렉토리의 소유주와 소유그룹을 nobody와 nobody로 해줘야 할때가 종종 있을 것이다.
즉, Apache에서 특정 디렉토리로 파일을 저장하려면 읽기, 쓰기 권한이 있어야하는데 디렉토리의 소유주와 소유그룹을 nobody로 설정해 버리면 간단히 해결할 수 있으므로 이런 작업이 필요하다.

그렇다면 특정 디렉토리내에 있는 모든 파일과 서브디렉토리의 소유주와 소유그룹을 한꺼번에 변경하려면 어떻게 할까?

이는 다음예와 같이 -R옵션을 사용하면 간단히 해결 할 수 있다.
아래의 예를 보자.

[root@host1 commmand]# ls -l             (현재 디렉토리의 상태)
합계 12
drwxr-xr-x    7 bible1   bible2       4096  9월 15 20:41 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]#
[root@host1 commmand]# cd dir1           (dir1 디렉토리로 들어간다)
[root@host1 dir1]#
[root@host1 dir1]# ls -l                 (dir1의 파일들의 소유주와 소유그룹 확인)
합계 28
drwxr-xr-x    4 root     root         8192  9월 15 20:40 admin
drwxr-xr-x    4 root     root         4096  9월 15 20:40 board
drwxr-xr-x    2 root     root         4096  9월 15 20:40 phplib
drwxr-xr-x    3 root     root         4096  9월 15 20:41 shop
drwxr-xr-x    2 root     root         4096  9월 15 20:39 system_check
-rw-r--r--    1 root     root           17  7월 16  2002 test.php
[root@host1 dir1]#
[root@host1 dir1]# cd ..                 (다시 dir1에서 빠져나온다.)
[root@host1 commmand]#
[root@host1 commmand]# chown -R nobody:nobody dir1    (dir1과 그 안에 있는 파일과 디렉토리들의 소유주를 nobody로 소유그룹을 nobody로 변경한다.)
[root@host1 commmand]#
[root@host1 commmand]# ls -l             (dir1의 소유주와 소유그룹 변경확인)
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9월 15 20:41 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# cd dir1           (dir1으로 들어간다)
[root@host1 dir1]#
[root@host1 dir1]# ls -l                 (dir1내에 있는 파일과 디렉토리들의 소유주와 소유그룹이 변경되었는가를 확인한다.)
합계 28
drwxr-xr-x    4 nobody   nobody       8192  9월 15 20:40 admin
drwxr-xr-x    4 nobody   nobody       4096  9월 15 20:40 board
drwxr-xr-x    2 nobody   nobody       4096  9월 15 20:40 phplib
drwxr-xr-x    3 nobody   nobody       4096  9월 15 20:41 shop
drwxr-xr-x    2 nobody   nobody       4096  9월 15 20:39 system_check
-rw-r--r--    1 nobody   nobody         17  7월 16  2002 test.php
[root@host1 dir1]#


위의 예는 dir1과 그 안에 있는 모든 파일과 디렉토리들의 소유주와 소유그룹을 nobody로 변경한 예이다.
dir1내에 또다른 서브디렉토리가 존재한다면 그 안에 있는 모든 파일과 디렉토리들의 소유주와 소유그룹도 nobody로 변경이 된다.

즉, 지정된 디렉토리와 그 하위의 모든 파일과 디렉토리들을 한꺼번에 특정 소유주와 소유그룹으로 변경하고자 할때에는 위의 예와 같이 -R옵션을 사용하면 된다.


사용예 #5

아래의 예와 같이 -c옵션을 사용하면 변경된 파일들에 대해서 자세한 메세지를 보여준다.
참고로 알아두기 바란다.

[root@host1 commmand]# ls -l
합계 12
drwxr-xr-x    7 nobody   nobody       4096  9월 15 20:41 dir1
-rw-r--r--    1 bible    root           41  9월 15 20:22 file1
-rw-r--r--    1 bible    bible2         56  9월 15 20:22 file2
[root@host1 commmand]#
[root@host1 commmand]# chown -c nobody:bible2 file1
changed ownership of `file1' to nobody:bible2
[root@host1 commmand]#


저작권 :  수퍼유저코리아 (www.superuser.co.kr),   무단 재배포및 복사를 금합니다.


 


출처 : http://www.superuser.co.kr/superuserboard/view.html?id=27&code=linuxcom&start=50&position=

 

'Linux' 카테고리의 다른 글

gcc 사용  (0) 2008.07.25
gcc install  (0) 2008.07.25
linux java install  (0) 2008.06.04
lighthttpd install  (0) 2008.06.04
설치  (0) 2008.06.04
Posted by 으랏차
,

linux java install

Linux 2008. 6. 4. 14:09

step1. 리눅스용 java를 다운받기(j2sdk-1_4_2_10-linux-i586.bin)

 

- http://www.java.sun.com

- https://sdlc3b.sun.com/ECom/EComActionServlet;jsessionid=29D92DF03C96458F27F2A641571ED460

 

- 다운로드 받을때는 self-extracting file을 받도록 함

 

 

step2. FTP를 이용하여 설치할 폴더로 해당 파일을 이동

 

 

step3. 해당 파일의 권한을 변경하여 실행할 수 있는 상태로 변환

 

- chmod 755 j2sdk-1_4_2_10-linux-i586.bin

 

 

step4. 설치를 진행함. 이때 나오는 메시지는 라이센스 관련된 메시지 이므로 엔터키를 반복적으로 눌러 패스

 

- ./j2sdk-1_4_2_10-linux-i586.bin

 

step5. 마지막에 동의 관련 질문이 나오면 yes를 눌러 설치되는것을 확인

zip이 풀리면서 촤르륵~~~ 생성되는 파일들을 볼 수 있음

 

step6. 자바가 정상적으로 설치되었다면 폴더가 생성되었을것임

 

step7. profile에서 JAVA_HOME 을 잡아주던가

           아니면 실행파일에서 Full Path를 입력하여 설치를 종료

 

 

 

PS. profile에서 PATH 잡아주기

 

이하 출처 : 네이버지식

 

# vi /etc/profile 에서 PATH 를 잡아 주셔야 합니다.

 

맨 밑에

 

JAVA_HOME=/usr/local/java   <-- 설치 디렉토리 입니다.
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

export PATH

 

이렇게 추가해 주시면 됩니다.

 

# source /etc/profile

 

*************************************************************************

/etc/profile 수정할때는 매우 조심 스럽게 해야 합니다. 로그인이 되지 못할수도 있습니다.

꼭!! 반드시1!! 터미널 두개 띄워 놓고 하십시오.  source 하고 사용하신후 맛이 가면, 다른걸로 띄워 놓았던 터미널에서 vi /etc/profile 치고 들어가신후 원상 복구 하셔야 합니다.

*************************************************************************

'Linux' 카테고리의 다른 글

gcc install  (0) 2008.07.25
chown  (0) 2008.07.25
lighthttpd install  (0) 2008.06.04
설치  (0) 2008.06.04
BIND,NAMED? DNS설정  (0) 2008.06.04
Posted by 으랏차
,