'Linux'에 해당되는 글 9건

  1. 2012.09.11 CentOS6, Oracle 11g
  2. 2011.04.26 [Linux] 텍스트 처리 명령어
  3. 2011.04.26 리눅스 vi 에디터 편집 명령어
  4. 2010.04.07 Linux 설치시 ip 안잡힐때
  5. 2008.07.25 gcc 사용
  6. 2008.06.04 linux java install
  7. 2008.06.04 BIND,NAMED? DNS설정
  8. 2008.06.04 Command
  9. 2008.06.04 IP Setting

CentOS6, Oracle 11g

DB 2012. 9. 11. 10:57
# OS : CentOS 6.0

# ORACLE Ver : Oracle11g R2 1/2 , 2/2

필수 패키지 설치

http://rpm.pbone.net/index.php3/stat/4/idpl/2398776/com/pdksh-5.2.14-8.i386.rpm.html


[root@localhost ~]# yum install binutils-2* compat-libstdc++-33* elfutils-libelf* gcc-4.* gcc-c++-4.* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh* libaio-0.* libaio-devel-0.* libgomp-4.* libgcc-4.* libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh*

[root@localhost 다운로드]# ls
linux_11gR2_database_1of2.zip pdksh-5.2.14-8.i386.rpm
linux_11gR2_database_2of2.zip
[root@localhost 다운로드]# yum -y install pdksh-5.2.14-8.i386.rpm

 

rpm -Uvh --nodeps pdksh-5.2.14-37.el5_8.1.i386.rpm


Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: centos.tt.co.kr
* extras: centos.tt.co.kr
* updates: centos.tt.co.kr
Setting up Install Process
Examining pdksh-5.2.14-8.i386.rpm: pdksh-5.2.14-8.i386
Marking pdksh-5.2.14-8.i386.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pdksh.i386 0:5.2.14-8 set to be updated
--> Processing Conflict: ksh-20100621-2.el6.i686 conflicts pdksh
--> Finished Dependency Resolution
Error: ksh conflicts with pdksh
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
[root@localhost 다운로드]#

[root@localhost ~]# yum install sysstat sysstat*
[root@localhost ~]# yum install gnome-libs gnome-libs*
[root@localhost ~]# yum install libaio-devel libaio-devel-*
[root@localhost ~]# yum install elfutils-libelf-devel elfutils-libelf-devel-*
[root@localhost ~]# yum install unixODBC unixODBC-*
[root@localhost ~]# yum install compat-libstdc++ compat-libstdc++

[root@localhost ~]# vi /etc/redhat-release

#CentOS Linux release 6.0 (Final)
redhat-4

다음은 오라클 파라미터 설정은 다음 명령으로 한다.

[root@localhost ~]# vi /etc/sysctl.conf 파일을 열어 다음 내용을 추가한다.

kernel.shmmax = 536870912
kernel.shmall = 2097152

fs.aio-max-nr = 1048576
fs.file-max = 6815744

kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

그놈(GNOME) 윈도우는 오라클로 로그인 하고 터미널창에 root로 로그인을 하여 작업을 한다.

오라클 파라미터 설정 적용은 다음 명령으로 수행한다.

[oracle@localhost ~]$ sysctl -a 2> eeror.log | grep shmmax

시스템 오류 메세지는 "errorlog"로 저장하고 출력 결과만 취하는 명령이다.

터미널창에서 실행한 화면을 둘 다 보여주지만 이중 한쪽 만 실행 하면된다.

[oracle@localhost ~]$ sysctl -p

다음은 사용자계정 쉘 권한 설정을 "/etc/security/limits.conf"파일의 마지막 줄 다음에 추가한다.

[root@localhost ~]# vi /etc/security/limits.conf 파일을 열어 아래내용 추가

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

[root@localhost ~]# vi /etc/pam.d/login 파일을 열어 아래내용 추가

session required pam_limits.so

[root@localhost ~]# vi /etc/selinux/config 파일을 열어 SELINUX를 disabled 시켜준다.

셋팅값을 적용하기 위해 OS를 리부팅 시킨다.

oinstall과 dba그룹을 만들고 oracle 계정을 만든다.

[root@localhost ~]# groupadd oinstall

[root@localhost ~]# groupadd dba

[root@localhost ~]# useradd -g oinstall -G dba oracle

[root@localhost ~]# passwd oracle

다음은 오라클 설치를 위한 디렉터리를 만들고 접근모드를 변경한다.

/oracle 디렉토리를 만든다.

오라클 설치할 기본 디렉토리는 /oracle/11g

소유자를 oracle로 변경하고 스기가 가능하도록 퍼미션을 변경한다.

[root@localhost ~]# mkdir /oracle

[root@localhost ~]# mkdir /oracle/11g

[root@localhost ~]# chown -R oracle:oinstall /oracle
[root@localhost ~]# chmod -R 775 /oracle

[root@localhost ~]#

[root@localhost ~]#

oracle 계정을 접속하여

[root@localhost ~]# su - oracle

[oracle@localhost ~] vi .bash_profile

#밑에 내용추가

#1) 2) 둘중하나 택

1)

export ORACLE_OWNER=oracle

export ORACLE_BASE=/oracle

export ORACLE_HOME=/oracle/11g

export ORACLE_SID=orcl

export PATH=$PATH:$ORACLE_HOME/bin

2)

ORACLE_HOSTNAME=localhost.localdomain; export ORACLE_HOSTNAME
ORACLE_BASE=/oracle/11g; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

오라클 사이트에서 11g R2를 다운받아

[root@localhost ~]# unzip linux.x64_11gR2_database_1of2.zip
[root@localhost ~]# unzip linux.x64_11gR2_database_2of2.zip

database폴더가 생길것이다 이것을 oracle 계정으로 옮겨서 설치한다.

[root@localhost 다운로드]# mv database /home/oracle

[root@localhost ~]# ls -al

[root@localhost ~]# chown -R oracle:oinstall database


[root@localhost 다운로드]# xhost +

[root@localhost 다운로드]# export DISPLAY=:0.0

[root@localhost 다운로드]# su - oracle

글자깨짐을 방지하기 위해서 export LANG=c

[oracle@localhost ~]$ export LANG=c

압축푼 폴더에서 ./runInstaller를 실행

[oracle@localhost ~]$ ./runInstaller

설치 진행 화면이 나오고 이어서 다음과 같은 오류 메시지가 나온다. 이는 파일 시스템의 "/(root)"아래 "oraInventory"라는 디렉터리를 생성할 수 있는 권한이 없다는 것이므로 경로를 "/home/oracle" 아래에 설정하도록 수정하면 된다.

Next 후

화면 처럼 디레토리를 수정해준다.

Specify Operating System group name: dba 로 수정

Next

에러 3개 나도

Next

오라클에 데이터베이스 관리자를 등록하는 화면이다. 활성화 하지 않고 "Next"


Next

지금까지 설정한 값을 확인하는 화면이다.



Install


설치중 에러가 하나 났는데 ignore 하고 Next


ok


Install Product에서

Excute Configuration scripts를

[root@localhost ~]# /oracle/oraInventory/orainstRoot.sh

[root@localhost ~]# /oracle/11g/product/11.2.0/db_1/root.sh

설치 완료 확인 및 데이터베이스 서버 자동 시작

정상적으로 설치되었는 지 확인 하기 위하여 "Firefox 인터넷 브라우저" 를 실행하여 앞에 제시된 URL을 입력한다.

만약에 "FIrefox"가 해당 url을 차단한다는 경고가 나오면 계속하기를 선택하여 이 주소를 저장.

위험 사항 확인 - 예외 추가 - 예외영구저장(체크) - 확인

로그인 페이지가 나오면 "system" 계정과 비밀번호를 입력하고 로그인 버튼을 클릭하거나 엔터를 입력한다.

화면에서 로그인 버큰에 "ㅁㅁㅁ"으로 표시되는 것은 한글 폰트가 맞지 않아서 생기는 문제이다.

"em(Enterprise Manager)"의 첫 실행 화면이다. 데이터베이스 인스턴스 "orcl"이 연결되어 있음을 알 수 있다.

"oracle"이 정상적으로 동작하고 있음을 확인 할 수 있다. "em"는 정상적으로 동작하지만 인스턴스에 대한 에이전트 접속은 실패 하였다.

이 메시지는 아직 인스턴스 에이전트가 완성되지 않았음을 의미한다.

"/etc/oratab"파일을 열어 다음과 같이 수정한다. 만약애 파일이 없다면 스크립트를 실행하지 않았다는 의미이므로 설치과정에 있는

스크립트를 실행하여 준다.

"/etc/init.d/oracle" 을 생성하여 다음과 같이 입력한다.

[root@localhost ~]# vi /etc/init.d/oracle

#!/bin/bash
ORA_HOME="/oracle/11g/"
ORA_OWNER="oracle"

if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle Startup: failed"
exit 1
fi

case "$1" in
start)
echo -n "Oracle Start: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
echo -n "ORACLE Shutdown: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle
echo "OK"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
esac
exit 0

작성 후 스크립트 파일의 모드를 755로 조정한다.

[root@localhost ~]# chmod 755 /etc/init.d/oracle

다음을 수정한다.

[oracle@localhost ~]$ vi $ORACLE_HOME/bin/dbstart

"ORACLE_HOME_LISTNER=$1"으로 되어 있는 내용을 "ORACLE_HOME_LISTNER=$ORACLE_HOME"으로 수정한다.

오라클를 사용하기

[oracle@localhost ~]$ /oracle/11g/bin/dbstart ORACLE_HOME

오라클 데이터베이스를 시작한다.

"리스너 컨트롤"을 시작하고 "sqlplus"를 실행한다.

[oracle@localhost bin]$ lsnrctl start

[oracle@localhost bin]$ sqlplus /nolog

다음으로 시스템을 재시작한 후에 "Enterprise Manager"를 동작하면 다음과 같은 오류가 나온다.

이 오류는 emctl이 시작되지 않아서 발생하는 문제이다.

항상 시스템을 재시작 하였다면 emctl를 시작하여야 브라우저로 데이터베이스를 관리할 수 있다.

그러나 이는 시스템 속도 저하 부담이 크다. 가능하면 필요할 때만 실행하고 일반적으로 sqlplus를 사용하기 바란다.

[oracle@localhost bin]$ emctl start dbconsole

시간이 조금 걸린다. 쉘 프롬프트가 나온 이후에 Firefox를 실행하여 em접속을 하면 다음과 같이 나온다.

로그인을 하면 em을 정상적으로 조작 할 수 있다.

오라클 설치

Prerequisite Checks에

pdksh-5.2.14 에러가 나도 ignored 체크하시고 설치

다 처리하고 나면

Global Database Name : orcl.localdomain

System Identifier(SID) : orcl

https://localhost.localdomain:1158/em

root계정에서 실행한다.

 

'DB' 카테고리의 다른 글

Import  (0) 2012.09.14
Export  (0) 2012.09.14
SELECT 문법  (0) 2012.01.11
유저 테이블 검색  (0) 2012.01.11
[오라클] 패스워드 잊었을때  (0) 2012.01.11
Posted by 으랏차
,

tail : 파일의 마지막 부분을 표준 출력으로 보여준다(기본적으로 10줄)

     보통은, 시스템 로그 파일의 변경사항을 추적할 때 사용한다.

 

옵션

-n : 출력할 라인의 갯수이며 기본은 10개의 라인이다.

-l : 출력크기를 라인단위로 지정한다.

-b : 출력크기를 블록단위로 지정한다.

-c : 출력크기를 문자단위로 지정한다.

-f : 파일 뒤에 추가되는 라인을 계속적으로 보여준다.

 

 

grep : 정규 표현식을 쓰는 다목적 파일 검색 도구

   예전 라인 에디터인 ed의 명령어나 필터였던 e/re/p에서 따온것

   ( global - regular expression - print )

   대상 파일에서 보통 텍스트이거나 정규 표현식인 pattern을 찾아주고

   대상파일이 주어지지 않는다면 파이프에서 쓰여 다른 명령어의 표준출력에 대한 필터로 동작

 

옵션

-i : 대소문자 구분없이 찾도록 해준다.

-l : 일치하는 줄이 아니라 일치하는 줄이 들어있는 파일만 보여준다.

-n : 일치하는 줄과 그 줄번호를 같이 보여준다.


Posted by 으랏차
,

리눅스 vi 에디터 기본 필수명령어 모음입니다.


[ 명령모드 ]


L - 화면에 마지막으로 이동

G - 파일의 끝으로 이동

u - 이전 상태로 되돌림

n - 다음 단어를 검색함

N - 이전 단어를 검색함

dd - 한 라인을 삭제함

x - 한 문자를 삭제함

i - 입력모드 전환

ctrl+f - 한 페이지 아래로 이동

ctrl+b - 한 페이지 위로 이동

/검색할내용 - 특정 단어 검색

yw - 커서가 있는 단어를 복사함

yy - 커서가 있는 라인을 복사

L - 화면에 마지막으로 이동

G - 파일의 끝으로 이동

u - 이전 상태로 되돌림

n - 다음 단어를 검색함

N - 이전 단어를 검색함

dd - 한 라인을 삭제함

x - 한 문자를 삭제함

i - 입력모드 전환

ctrl+f - 한 페이지 아래로 이동

ctrl+b - 한 페이지 위로 이동

/검색할내용 - 특정 단어 검색

yw - 커서가 있는 단어를 복사함

yy - 커서가 있는 라인을 복사



[ 입력모드 ]

입력모드는 i로 전환할수 있으며 수정하다 esc를 누르면 아래에 위치해있던 - INSERT - 가 사라집니다.





[ 라인모드 ]

:w - 지금까지 수정했던 정보가 저장됩니다.

:q - vi 에디터를 종료합니다.

:wq - 저장하고 바로 vi 에디터를 종료합니다.

:q! - 저장하지 않고 vi 에디터를 강제종료 합니다.




VI 에디터 전체 명령어



# 시작/종료 및 기타

:set number 또는 :set nu 행에 번호 부여

:set nonumber 또는 :set nonu 행에 부여된 번호 제거

:ZZ 또는 :wq 저장하고 vi 에디터 종료

:w [filename] 주어진 파일 이름으로 저장

:w! [filename] 주어진 파일 이름으로 저장/덮어쓰기 후 종료

:w! 저장후 편집종료

:q 저장하지 않고 vi 에디터 종료

:q! 저장하지 않고 vi 에디터 강제종료

:e vi 에디터 종료하지 않고 다른 파일 편집

:e! 편집한 내용 저장하지 않고 최종 저장된 상태로 파일 열기



# 입력 편집 명령어


i 문자 앞에서부터 입력

a 현재 문자 뒤에서부터 입력

I 현재 라인 첫머리에서부터 입력

A 현재 라인 맨뒤에서부터 입력

o 현재라인 아래에 입력

O 행의 위에 입력

r 겹쳐쓰기(커서위치 1문자 변환)

R 현재문자 이후부터 겹쳐쓰기

s 커서가 있는 단어를 지우고 입력하기

ch 커서 바로 앞의 한글자를 여러글자로 수정하기

S 커서가 있는 행을 지우고 입력하기

cw 커서 위치의 한 단어를 수정하기

co 커서 위치부터 줄의 처음까지 수정하기

c 커서 위치부터 줄의 끝까지 수정하기

cc 커서가 있는 줄을 수정하기

cj 커서가 있는 줄과 그 다음 줄을 수정하기

ck 커서가 있는 줄과 그 앞줄을 수정하기



# 삭제 명령어

dw 한 단어 삭제

dd 한 라인 삭제

[number]dd 커서있는 위치에서 숫자만큼 라인 삭제

dj 커서가 있는 줄과 그 다음 줄을 삭제

dk 커서가 있는 줄과 그 앞줄을 삭제

do 커서 위치부터 줄의 처음까지 삭제

x 커서의치의 글자 삭제

D 한줄삭제

d$ 커서 위치부터 줄의 끝까지 삭제

X 커서 바로 앞의 글자 삭제



# 치환 명령어


cw 한 단어 바꾸기(단어의 첫머리에 커서 위치해야함)



# 복사 명령어


y 문자 복사

yy 한라인 복사

yw 커서 위치부터 단어의 끝까지 복사하기

yj 커서가 있는 줄과 그 다음줄을 복사하기

yo 커서 위치부터 줄의 처음까지 복사하기

yk 커서가 있는 줄과 그 앞줄을 복사하기

y$ 커서 위치부터 줄의 끝까지 복사하기

p 현재 줄 다음에 버퍼의 내용을 붙임

P 현재 줄 앞에 버퍼의 내용을 붙임



# 명령어 취소/반복


esc key 입력화면에서 빠져나옴옴

u 또는 :u 되돌리

U 그줄에 행해진 작업 모두 취소하기

. 조금전에 했던 명령 반복하기



# 이동 명령어


:[number] 숫자의 행으로 이동

:0 문서의 맨앞으로 이동

:$ 문서의 맨뒤로 이동

l 오른쪽으로 이동

h 왼쪽으로 이동

j 아래로 이동

k 위로 이동

B 특수문자,기호제외(한단어 뒤로이동)

b 한단어 뒤로 이동

w 한단어 앞으로 이동

W 특수문자, 기호제외(한단어 앞으로 이동)

enter 다음줄의 첫글자로 이동

e 단어의 마지막 글자로 이동

o 라인의 시작으로 이동

E 단어의 마지막 글자로 이동하기

$ 라인의 끝으로 이동

shift키와 함께 사용

gg 파일의 첫 행으로 이동

G 파일의 마지막 행으로 이동

^ 라인의 첫 번째 단어로 이동

shift키와 함께 사용

+ 다음 라인의 처음으로 이동

H 화면의 맨위로 이동

- 이전 라인의 처음으로 이동

M 파일의 중간으로 이동

[ctrl]+F 한 화면 앞으로 이동

L 화면의 끝으로 이동

[ctrl]+D 한 화면의 반만큼 앞으로 이동

/[text] 단어검색

/[filename] 파일검색

[ctrl]+B 한 화면의 뒤로 이동

[ctrl]+U 한 화면의 반만큼 뒤로 이동

저작자 표시비영리변경 금지
Posted by 으랏차
,

ifup eth0 해야만 네트웍이 활성화 된다는 말씀은 현재 네트워크 서비스가 리부팅시에 활성화가 안된다는 뜻입니다.

물론 /etc/sysconfig/network-scripts/ifcfg-eth0 에 onboot=yes로 설정되어 있다고 하더라도 우선적으로 실행되는 부분은 아래와 같습니다.


/etc/rc.d/init.d/network 라는 서비스가 start가 되어야 합니다.


rebooting시에도 적용되게 할려면 아래와 같이 실행을 하십시요


1. # ntsysv 명령을 통해 network 부분을 체크하시고 저장 하시면 됩니다.

2. # chkconfig --level 345 network on 하시면 됩니다.


그리고 나서 리부팅하게 되면 정상적으로 네트웍 서비스가 활성화가 됩니다.


------------------------------------
/etc/sysconfig/network-scripts/ifcfg-eth0

ONBOOT=yes

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 으랏차
,

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 으랏차
,

BIND,NAMED? DNS설정

Linux 2008. 6. 4. 13:57

만일 설치부터 필자를 계속 따라오신 분이라면 현재의 서버엔 BIND 9가 설치되어 있을 것이다.

확인해 보도록 하자.


# rpm -qa | grep bind
bind-libs-9.3.3-10.el5
bind-9.3.3-10.el5
ypbind-1.19-8.el5
bind-utils-9.3.3-10.el5
bind-chroot-9.3.3-10.el5


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

- CentOS 5.1 설치시 패키지선택에서 DNS 이름서버를 선택하면 위의 내용이 모두 설치됨.
=======================================================================================


네임서버도 설치되어 있나 확인해 보자.

# rpm -qa | grep name
없다...젠장.... 설치해야 한다 ㅠㅠ


# yum install caching-nameserver

( 위에 걸로 설치가 안되면 caching-nameserver-9.3.3-10.el5 다 입력해준다. )

이젠 서버에선 DNS를 설정할 준비가 끝났다.


이해를 돕기위해 사용되는 예제에서 test.net 이란 가상의 도메인과 192.168.1.100 이란 공인IP를 사용하것으로 하겠다.

자신의 도메인과 IP 주소로 바꿔 사용하기 바란다.


1.서버에서 도메인을 제일 먼저 찾는 곳

# vi /etc/hosts
=======================================================================================
127.0.0.1        test.net      localhost
192.168.1.100  ns.test.net  ns
=======================================================================================
위와 같이 바꾸도록 하자


2.서버에서 쓸 dns

# vi /etc/resolv.conf
=======================================================================================
domain test.net
search test.net
nameserver 192.168.1.100
nameserver 168.126.63.1
nameserver 168.126.63.2
=======================================================================================


3.도메인에 대하 ip를 찾을 때 참조할 순서
# vi /etc/host.conf
=======================================================================================
order hosts,bind

==> 초기 설치시 이렇게 되어 있으며, 의미는 /etc/hosts파일부터 찾고, bind에서 찾는다는의미
=======================================================================================


4.Zone 파일 및 케시 DNS서버에 대한 설정

# cd /etc

# ls named*
named.caching-nameserver.conf  named.rfc1912.zones


위 파일 내용들은 caching-nameserver에서 기본적으로 생성되는 것들이다.


# vi /etc/named.caching-nameserver.conf
=======================================================================================
options {
        listen-on port 53 { 127.0.0.1; };

        listen-on port 53 { 111.222.333.444; }; // local machine IP
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;
        query-source-v6 port 53;
        allow-query     { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        //match-clients            { localhost; };
        //match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};

=======================================================================================
( 더 자세한 것은 책이나 인터넷을 더 검색해 보기 바란다.... ㅡ.ㅡ )

( 동작하면 되지 않는가 ㅜㅜ )


# vi named.rfc1912.zones

=======================================================================================
zone "." IN {
        type hint;
        file "named.ca";
};
// localhost 에 대한 설정
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //다이나믹 하게 업데이트를 허용할것인지 설정한다. 대부분 none
};
// 127.0.0.X 에 대한 역 도메인
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
=======================================================================================


named.rfc1912.zones 파일의 맨 아랫 줄에 아래의 내용을 추가한다.

=======================================================================================
zone "test.net" IN {
type master;
file "test.net.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" { //reverse domain - IP가 역으로 입력되어 있는 것에 주목~!!
type master;
file "test.net.rev";
allow-update { none; };
};
=======================================================================================


zone 파일명은 test.net.zone으로 하였다.

위에서 추가한 도메인에 대한 zone 파일을 만들도록 하자..


# vi /var/named/chroot/var/named/test.net.zone
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2007112101 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
                IN      MX  10   mail.test.net.
                    IN      A       192.168.1.100
www            IN      A       192.168.1.100

mail              IN      A       192.168.1.100
*                  IN      A       192.168.1.100
=======================================================================================
# ln -s /var/named/chroot/var/named/test.net.zone /var/named/test.net.zone

(반드시 심볼릭 링크를 걸어야 한다~~!!! <-- 사실 테스트 안해봤다... )


# vi /var/named/chroot/var/named/test.net.rev
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2007122101 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                 IN      NS      ns.test.net.
100             IN      PTR     ns.test.net.
100             IN      PTR     www.test.net.
100             IN      PTR     test.net.
=======================================================================================
위에서 100이란 숫자는 IP의 제일 마지막에 해당하는 숫자이다.

# ln -s /var/named/chroot/var/named/test.net.rev /var/named/test.net.rev


자.. 이제 모든 설정은 끝났다.. 사실 이제부턴 네임서버를 변경한 후 하루정도가 지나야 확실한 결과를 얻을 수 있다.

네임서버 변경은 도메인 등록 회사 서비스에 접속 후 변경하면 된다.

또한 방화벽을 설치했다면 외부에서 네임서버로 접근할 수 없으니 주의한다.

네임서버의 포트는 42로 방화벽에서 이 포트를 풀어야 한다.


설치와 설정이 끝났다면, DNS 서버를 시작하도록 한다.

(1) 시작
# /etc/rc.d/init.d/named start


(2) 재시작
# /etc/rc.d/init.d/named reload


(3) 정지
# /etc/rc.d/init.d/named stop


(4) 서버시작시 자동으로 실행

/etc/rc.d/rc3.d 와 /etc/rc.d/rc5.d 에 K로 시작하는 것이 있으면 다음과 같이 해준다.

# mv /etc/rc.d/rc3.d/K번호named /etc/rc.d/rc3.d/S번호named

# mv /etc/rc.d/rc5.d/K번호named /etc/rc.d/rc5.d/S번호named


(5) 호스트 네임 검사
# grep named /var/log/messages


(6) 설정한 도메인 확인하기

# nslookup

> server 168.126.63.1

> set type=any

> test.net


[ 다음은 iptables 사용시 추가할 부분이다 ]

------------------------------------------------------------------------------------------

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
# -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --sport 1024:65535 -j ACCEPT     #상황봐서
# -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --sport 1024:65535 -j ACCEPT   #상황봐서

------------------------------------------------------------------------------------------

'Linux' 카테고리의 다른 글

lighthttpd install  (0) 2008.06.04
설치  (0) 2008.06.04
Command2  (0) 2008.06.04
Vi 편집기  (0) 2008.06.04
Command  (0) 2008.06.04
Posted by 으랏차
,

Command

Linux 2008. 6. 4. 13:38

로그인 명령

 

① 로그인


· 리눅스로 부팅하면 언제나 초기 화면에서 로그인과 패스워드를 입력해야 리눅스를 사용할 수 있

  다.
· 로그인하면 '[로그인 명@자신의 컴퓨터 이름 현재의 위치]프롬프트($)' 형식으로 나타난다.

- 사용 예
  login : xfile
  Password : ******
  [xfile@localhost xfile]$


② 로그아웃


 

· 로그인 상태에서 시스템을 종료하는 것이 아니라 자신만 리눅스에서 빠져 나오는 명령이다.
· 같은 기능으로 exit 명령이 있다.


 

- 사용법
  logout


③ 종료


 

· 시스템을 종료하는 명령이다.
· 같은 기능으로 halt 명령이 있다.


 

- 사용법

  shutdown -h now


④ 재부팅


 

· 시스템을 재부팅하는 명령이다.
· 같은 기능으로 reboot 명령이 있다.


 

- 사용법
  shutdown -r now

사용자 계정 명령


리눅스에서 사용하는 사용자 계정 명령으로 'passwd'와 'adduser', 'userdel', 'userdel' 등의 명

령이 있다.


① passwd


· 비밀번호를 변경할 때 사용하는 명령이다.
· 사용자의 비밀번호는 /etc/passwd에 저장된다.


- 사용법
  passwd


- 사용 예


 사용자 정보


· /etc/passwd 파일에는 사용자의 정보가 ':'로 구분되어 저장되어 있다.
· '계정 이름:패스워드:UID:GID:사용자 이름:홈 디렉토리:사용하는 셀'의 순으로 저장되며 문서 편집

  기나 usermod 명령으로 수정할 수 있다.


② adduser


사용자 계정 추가하는 명령이다.


- 사용법
  adduser [옵션] 계정 이름


- 옵션
   -d 홈 디렉토리 : 새 계정에 대한 홈디렉토리 위치를 나타낸다.
   -e 유효 기간 : 지정된 날짜에 사용자 계정이 삭제된다.
   -s shell : 사용자의 로그인 셀을 설정한다.
   -G 그룹1, 그룹2.. : 사용자가 기본 그룹 외에 다른 그룹에 추가할 때 사용한다.


- 사용 예


③ userdel


사용자 계정을 삭제하는 명령이다.


- 사용법
  userdel [옵션] 계정 이름


- 옵션
   -r : 사용자 계정의 홈 디렉토리도 삭제한다.


- 사용 예


④ usermod


사용자의 정보를 변경하는 명령이다.


- 사용법
  usermod [옵션] 계정 이름


- 옵션
   -c : 사용자의 설명을 수정한다.
   -d 홈 디렉토리 : 사용자의 홈 디렉토리를 변경한다.
   -G 그룹 : 사용자의 그룹을 변경한다.
   -s shell : 사용자의 로그인 셀을 변경한다.

파일 및 디렉토리의 권한


· 유닉스는 멀티유저 운영 체제이기 때문에 사용하는 사람이 누구냐에 따라 허가권이 다르게 설정

  된다.
· 'ls -al' 명령을 사용하여 파일과 디렉토리의 권한 정보를 알 수 있다.

· 허가권을 주는 것을 'rwx'이고 허가권을 주지 않는 것은 '-'이다.
· A1이 'd'이면 디렉토리를 뜻하며 'l'이면 링크를 뜻하고 '-'이면 파일을 나타낸다.
· USER는 소유자의 권한이며 GROUP은 소유자가 속한 그룹에 대한 권한이고 OTHER는 제 3자, 즉

  타인의 권한이다.
· r은 읽기(read), w은 쓰기(write), x은 실행(execute)을 뜻하며 숫자 값으로 나타내면 r은 4(2진법

  으로 '100'), w은 2(2진법으로 '010'), x은 1(2진법으로 '001')의 값을 가진다.
· 일반적으로 제 3자가 사용할 수 있게 하려면 OTHER의 허가권이 7(rwx)이나 5(r-x)이어야 하며 소

  유자 자신만이 사용하려면 허가권이 700(rwx------)이여야 한다.



권한 설정 명령


Chmod

· 파일과 디렉토리에 대한 허가권을 변경할 때 사용하는 명령이다.
· 허가권을 변경하는 방식으로 절대 모드 방식과 심볼릭 모드 방식이 있다.


① 절대 모드 방식

- 사용법
   chmod [옵션] mode 파일 이름

- 옵션
   -c : 허가권이 변경된 파일에 대한 정보를 보여 준다.
   -v : 변경된 허가권에 대한 정보를 보여 준다.
   -f : 허가권이 바뀌지 않는 것에 대한 에러 메시지를 보여주지 않는다.


② 심볼릭 모드 방식

- 사용법
   chmod [users] [operator] [permission] 파일 이름

- users
   u : 파일 소유자
   g : 소유자가 속한 그룹
   o : 제 3자
   a : u, g, o 모두를 뜻하며 특정 사용자를 지정하지 않으며 'a'로 인식된다.

- operator
   + : 사용 허가
   - : 사용 불가
   = : 허가 취소

- permission
   r : 읽기 허가
   w : 쓰기 허가
   x : 실행 허가



 chgrp

· 파일 소유자가 속한 그룹에 대한 허가권을 변경하는 명령이다.
· 파일에 접근할 수 없는 그룹이 그 파일에 접근 가능하게 하는 것이다.

 

 chown

· 파일 소유자의 허가권을 변경하는 명령이다.

기본 명령


① ls


· 도스의 Dir 명령과 비슷하며 현재 작업 중인 파일이나 디렉토리의 정보를 볼 수 있다.
· 이름 뒤에 '*' 표시가 있으면 실행 파일이고 '@' 표시가 있으면 다른 파일의 링크(Link)를

  나타내고 '.'으로 시작하는 파일은 히든(Hidden) 파일을 나타낸다.


- 사용법
  ls [옵션]


- 옵션
   -a : 디렉토리 내의 모든 파일 출력한다.
   -l : 파일 허용 여부, 소유자, 그룹, 크기, 날짜 등을 출력한다.
   -m : 파일을 쉼표로 구분하여 가로로 출력한다.
   -s : KB 단위의 파일 크기를 출력한다.
   -t : 최근에 만들어진 파일 순서대로 출력한다.
   -R : 서브 디렉토리의 내용을 포함하여 출력한다.
   -S : 파일 크기가 큰 순서로 출력한다.
   -U : 정렬하여 출력한다.


② cd


·현재 디렉토리에서 다른 디렉토리로 이동하는 명령이다.
·디렉토리를 입력하지 않으면 로그인한 디렉토리로 이동한다.
·'cd .'은 현재 디렉토리를 나타내다.
·'cd ..' 은 상위 디렉토리로 이동한다.


 절대 경로와 상대 경로


· 절대 경로 방식은 현재 작업 디렉토리와는 관계없이 언제나 시스템의 가장 상위 디렉토리인 /

  (root) 디렉토리부터 시작하여 다른 디렉토리를 나타내는 방식이다.
· 상대 경로 방식은 현재 작업 디렉토리를 기준으로 다른 디렉토리를 나타내는 방식이다.
· 예로 현재 작업 디렉토리는 /home/xfile이고 /bin 디렉토리로 이동할 경우 절대 경로 방식은

  cd /bin이고, 상대 경로 방식은 cd ../../bin이 된다.


③ pwd


사용자가 현재 작업 중인 디렉토리의 경로를 절대 경로 방식으로 보여준다.


④ rm


파일이나 디렉토리를 삭제하는 명령으로 리눅스에서는 삭제된 파일을 복구할 수 없다.


- 사용법
  rm [옵션] 파일이나 디렉토리


- 옵션
   -f : 삭제할 것인가의 메시지 없이 강제로 파일을 삭제한다.
   -i : 삭제 시 정말 삭제할 것인지 확인 메시지가 나타나며 y를 입력하면 삭제된다.
   -r : 하위 디렉토리와 파일을 전부 삭제한다.
   -v : 파일을 삭제하기 전에 지울 파일의 이름을 나타난다.


⑤ mkdir


디렉토리를 새로 만드는 명령이다.


- 사용법
  mkdir [옵션] 디렉토리


- 옵션
   -p : 지정된 모든 서브 디렉토리까지 함께 만든다.


⑥ rmdir


·디렉토리를 삭제하는 명령이다.
·삭제할 디렉토리에 파일이 있으면 먼저 rm 명령으로 파일을 삭제하고 rmdir 명령으로 디렉토리를 삭제한다.


- 사용법
  rmdir [옵션] 디렉토리


- 옵션
   -p : 지정된 모든 서브 디렉토리까지 함께 삭제한다.

기본 명령


① cp


도스의 copy와 같은 명령어로 파일을 다른 파일 이름, 디렉토리로 복사하는 명령어이다.

- 사용법
  cp [옵션] {원본 파일} {사본 파일}

- 옵션
   -a : 원본 파일의 구조, 속성, 링크 정보를 그대로 복사한다.
   -b : 복사한 파일을 덮어쓰거나 지울 때 백업 파일을 만들며 파일 이름 뒤에 ~가 붙는다.
   -d : 심볼릭 링크 파일을 그대로 복사한다.
   -f : 같은 파일이름을 갖는 파일이 있을 경우 지운 후 복사한다.
   -i : 같은 파일이름을 갖는 파일이 있을 경우 사용자 확인 후에 복사한다.
   -p : 원본 파일의 소유자, 그룹, 허용 여부, 시간 등을 그대로 복사한다.
   -r : 서브 디렉토리 내에 있는 모든 파일을 복사한다.
   -s : 심볼릭 링크를 만든다.
   -u : 사본보다 원본이 새로운 것일 때 복사한다.
   -v : 복사하기 전에 각각의 파일 이름을 출력한다.


② mv

· 현재 디렉토리 내에 있는 파일을 다른 디렉토리로 이동시키는 명령으로 cp 명령과 같으나 원본이

  지워진다.
· 파일의 이름을 바꿀 때도 사용한다.

- 사용법
  mv [옵션] {원본 파일} {사본 파일}

- 옵션
   -b : 파일이 지워지기 전에 백업 파일을 만들고 이동한다.
   -f : 옮겨질 디렉토리에 파일이 있어도 강제로 덮어쓴다.
   -i : 옮겨질 디렉토리에 파일이 있으면 덮어쓸 것인가를 확인한다.
   -u : 옮겨질 디렉토리에 구 버전의 파일이 있을 경우만 옮긴다.
   -v : 옮기기 전에 파일 이름을 출력한다.


③ more/less

· more는 내용이 한 페이지를 넘을 때 한 페이지 씩 화면에 출력하는 명령이다.
· more 명령이 실행된 상태에서 또는 z 키를 누르면 한 페이지씩 넘어가며 나 l 키를 누르면 한 줄씩

  더 출력되고 빠져나오고 싶으면 q나 Q 키를 누르면 된다.
· less는 more 명령과 같은 기능을 하지만 페이지를 앞으로 이동할 수 있다.


 pipe(파이프)

·'|' 기호를 중심으로 왼쪽 명령의 결과가 오른쪽 명령의 입력으로 사용된다.
·명령어를 한 번에 하나씩 실행하지 않고 한꺼번에 여러 개의 명령을 실행할 수 있다.


④ cat

텍스트 파일의 내용을 화면에 출력하는 명령이다.

- 사용법
  cat 파일이름


⑤ redirection(리디렉션)

· 어떤 명령의 결과 값을 원하는 위치로 출력하거나 어떤 명령의 입력 값을 원하는 위치로 받을 수

  있다.
· '>'기호를 중심으로 앞의 결과 값이 뒤에 나오는 파일이나 하드웨어 장치로 출력되고 '<'기호를

  중심으로 앞에 있는 파일이나 하드웨어 장치로부터 명령어를 입력받는다.
· '>>'기호는 앞의 결과 값이 뒤에 나오는 파일로 출력되었을 경우 기존에 그 파일의 내용을 덮어쓰

  지 않고 파일의 뒷부분에 추가된다.


⑥ grep

파일의 내용 중에 특정한 문자만 출력하는 명령이다.

- 사용법
  grep [옵션] {찾을 문자}

- 옵션
   -C : 일치하는 문장의 상하 두 라인까지 포함하여 출력한다.
   -c : 일치하는 라인의 개수를 출력한다.
   -h : 파일명은 출력하지 않는다.
   -i : 대소문자 구분하지 않는다.
   -s : 에러 메시지만을 출력한다.
   -v : 일치하지 않는 내용을 출력한다. 

기본 명령


① mount/umount


· 리눅스를 포함한 유닉스 계열의 운영 체제는 모든 하드웨어 장치를 파일로 취급하기 때문에 그 하

  드웨어 장치와 특정 디렉토리를 연결하는 마운트(Mount) 작업을 거친 후 사용할 수 있다.
· 결과적으로 CDROM이나 Floppy 등과 같은 장치를 사용하기 위해서는 mount 명령을 실행해야 하

  며 장치를 다 사용한 후 umount 명령으로 연결을 해제해야 한다.
· 반드시 root에서 명령을 실행해야 한다.


- 사용법
  mount [-t 파일 시스템] {하드웨어 장치} {특정 디렉토리}

- 파일 시스템
   CDROM : iso9660
   ms-dos : msdos/umsdos
   win98 : vfat
   linux : ext2
   floppy : msdos


② find

· 원하는 파일을 조건에 맞게 디렉토리에서 찾아주는 명령이다.
· root에서 접근 권한을 제한한 파일이나 디렉토리에 관해서는 '허가 거부됨'이라는 메시지가 뜨고

  찾지 못한다.
· 비슷한 명령으로 locate 명령이 있다.

- 사용법
  find [옵션] 파일 이름

- 옵션
   -name : 파일의 이름을 기준으로 찾는다.
   -perm : 파일의 권한 (permission)이 일치하는 것을 찾는다.
   -user : 사용자의 ID에 따라서 검색한다.
   -newer : 최근에 갱신된 모든 파일을 검색한다.


③ echo

하나의 단어나 하나의 문자열을 입력한 그대로 화면에 출력하는 명령이다.

- 사용법
   echo 문자


④ man

지정한 명령이나 유틸리티의 도움말을 출력하는 명령이다.

- 사용법
  man 명령어


⑤ ps

현재 메모리에서 작동 중인 프로세스를 나타내는 명령이다.

- 사용법
  ps [옵션]

- 옵션
   -a : 모든 프로세스를 나타낸다.
   -u : 프로세스를 실행한 사용자와 실행 시간을 나타낸다.
   -x : 터미널 제어 없이 프로세스 현황을 나타낸다.
   -m : 메모리 정보를 나타낸다.


 프로세스(Process)

리눅스 운영 체제에서는 메모리에 로딩되어 작동하는 프로그램 요소 하나 하나를 프로세스라고 하며 복잡한 프로그램은 여러 프로세스로 나누어져서 동작한다.


⑥ kill

현재 동작 중인 프로세스를 종료하는 명령이다.

- 사용법
  kill [옵션] 프로세스 번호

- 옵션
   -2 : 실행 중인 프로세스에게 인터럽트 키 신호를 보낸다.
   -9 : 실행 중인 프로세스를 바로 종료시키며 비슷한 명령으로 killall이 있다.(수정)

기본 명령


① df


disk free 명령으로 현재 하드디스크의 전체 용량 및 남은 용량을 출력하는 명령이다.


- 사용법
   df [옵션]


- 옵션
   -h : 용량 표시를 바이트(byte) 형태로 나타낸다.
   -T : 파일 시스템 종류와 함께 디스크 정보를 나타낸다.


② du


disk usage로 각각의 디렉토리와 파일들이 차지하고 있는 디스크 용량을 출력하는 명령이다.


- 사용법
   du [옵션] 디렉토리 또는 파일이름


- 옵션
   -a : 사용한 디스크 용량을 나타낸다.
   -k : 용량 표시를 킬로바이트(kbyte) 형태로 나타낸다.
   -m : 용량 표시를 메가바이트(mbyte) 형태로 나타낸다.


③ top


· 실시간으로 현재 작동 중인 프로세스에 대한 정보를 나타내는 명령이다.
· 프로세스 번호(PID)와 CPU 사용률, 프로세스 소유자 등의 정보를 나타낸다.


- 사용법
   top


④ su


· 현재 상태에서 다른 사용자로 다시 login하는 명령이다.
· 사용자 ID를 입력하지 않으면 root로 login 된다.


- 사용법
  su [ID]


⑤ who


시스템을 사용하고 있는 사용자들의 이름과 터미널 번호, 로그인 시간 등을 출력하는 명령이다.


- 사용법
  who [옵션]


- 옵션
   -i : idle time과 함께 사용자를 나타낸다.
   -m : who 명령을 실행한 사용자를 나타낸다.
   -q : 사용자 이름과 사용자 수를 나타낸다.


⑥ w


로그인 되어있는 사람과 현재 실행중인 작업의 종류를 나타내는 명령이다.


- 사용법
  w

 

 

'Linux' 카테고리의 다른 글

lighthttpd install  (0) 2008.06.04
설치  (0) 2008.06.04
BIND,NAMED? DNS설정  (0) 2008.06.04
Command2  (0) 2008.06.04
Vi 편집기  (0) 2008.06.04
Posted by 으랏차
,

IP Setting

linux setup 2008. 6. 4. 13:34

모든 IP 설정 및 변경은 root 권한에서 실행된다.

다음은 두가지 방법으로 IP 변경 및 설정 방법을 소개한다.(내가 아는걸로만..)

1. UI 를 이용해서 변경하는 방법.

 1-1. ifconfig -all 로 현재의 ip 를 확인한다.

 1-2. console 창에서 setup 실행.

 1-3. Network Configration 선택.

 1-4. 해당 IP정보 입력.

 1-5. setup을 빠져나옴.

 1-6. /etc/init.d/network restart

 1-7. ifconfig 로 변경된 아이피를 확인한다.


2. Console 에서 환경파일을 변경하는 방법

 2-1. cd /etc/sysconfig/network-script 폴더로 이동한다.

 2-2. vi ifcfg-eht0 파일을 연다.

 2-3. 다음과 같이 변경한다.

  IPADDR=변경하고자 하는 IP

  NETMASK=변경하고자 하는 NETMASK

  GATEWAY=변경하고자 하는 GATEWAY

   ※ 주의사항 : GATEWAY 가 없다면

  2-3-1. cd /etc/network 폴더로 이동한다.

  2-3-2. vi network 를 열어 GATEWAY 값을 설정한다.

 2-4. 변경후 저장후 파일을 닫고

 2-5. /etc/rc.d/init.d/network restart 실행한다.

 


'linux setup' 카테고리의 다른 글

Apache 설정  (0) 2008.12.11
java install  (0) 2008.12.11
Apache install  (0) 2008.12.10
gcc 설치  (0) 2008.06.04
자바 Path  (0) 2008.06.04
Posted by 으랏차
,