'tip'에 해당되는 글 35건

  1. 2014.05.14 crontab 에 등록한 php 파일이 호출은 되지만 실행이 안될 때
  2. 2014.04.30 쉘 스크립트로 죽은 데몬 자동 재실행 하기
  3. 2013.11.08 웹을 지탱하는 기술
  4. 2013.11.08 CSS 절대위치를 상대위치로 잡기(?) position: relative와 absolute의 응용
  5. 2013.10.31 포토샵 없이 포토샵 사용하기
  6. 2013.10.31 중국 프로그램 설치 방법
  7. 2013.10.24 PHP , JSP , PHP , Extension , JNI 소개
  8. 2013.10.24 Version Schema Difinitions 버전정보표기방법
  9. 2013.10.23 윈도우7에서 IE8 설치하기
  10. 2013.09.30 리눅스 관리 기법

crontab 에 등록한 php 파일이 호출은 되지만 실행이 안될 때

tip 2014.05.14 09:52


[출처] http://catcape.tistory.com/2


1. dos2unix "파일명"


저장 한 파일이 Windows 파일 속성인 경우 Unix 파일 속성으로 변경한다.


2. include or "./config.php" 와 같은 상대 경로를 사용하고자 하다면 다음과 같이 cron 을 등록 한다.


* * * * * root cd /home/website/ && /usr/bin/php 실행파일명 > /dev/null 2>&1



Trackback 0 : Comment 0

쉘 스크립트로 죽은 데몬 자동 재실행 하기

tip 2014.04.30 11:19


[출처] http://jhroom.co.kr/bd_server/5114

[출처] https://kldp.org/node/85643

[출처] http://www.freezner.com/archives/506


1. 쉘스크립트 작성


vi check_daemon.sh


#!/bin/sh


while [ 1 ]


do


pid=`ps -ef | grep "./daemon" | grep -v 'grep' | awk '{print $2}'`


if [ -z $pid ]; then

     echo "daemon start"

     cd /usr/local/daemon/bin; ./daemon

else

    echo "daemon running"

fi


sleep 1


done


2. 데몬 등록

nohup check_daemon.sh > /dev/null 


3. 서버 시작 시 데몬 등록


/etc/rc.d/rc.local 명령으로 rc.local 편집

rc.local 마지막줄에 /var/daemon start 입력 후 저장

Trackback 0 : Comment 0

웹을 지탱하는 기술

tip 2013.11.08 17:34


[출처] http://aroundck.tistory.com/2020



"웹을 지탱하는 기술" 이라는 일본 저자가 쓴 책을 본 후에,
핵심이 되는 내용이랑 내가 몰랐던 내용인데 정리해두면 좋을 것 같은 내용을 정리해본다.

설명과 함께 정확한 내용, 빠진 내용을 확인하고 싶은 사람은 책을 직접 볼 수 있도록~




웹의 다양한 용도


1. 웹사이트


2. User Interface

HTML 도움말, 웹 UI for embedded systems


3. API

Web Service 라 부름




웹을 지탱하는 기술


1. HTTP, URI, HTML


2. 하이퍼미디어

비선형적 컨텐츠. 중간에 link 타고 갈 수 있고, 동영상, 다른 사이트 등을 껴 넣을 수 있다. (책은 선형)


3. 분산시스템

자료의 내용이 전세계적으로 퍼져있고, 자료의 처리도 서버와 클라이언트가 분담한다.




REST


* Architecture "Style"로 반드시 지켜야 하는게 아니라, 약간의 타협을 통해 운영 가능하다.

Server / Client

Stateless

Cache

Uniform Interface ( GET, POST, PUT, DELETE 등의 8개의 Method 만 사용 )

Layered System

Code On Demand ( Java Applet, Flash, JavaScript )




URI : Uniform Resource Identifier


ex) http://user:pass@blog.examples.com:8000/search?q=test&debug=true#n10

URI Scheme : http

User : user:pass

Host name : blog.examples.com

Port number : 8000

Path : /search

Query Parameter : q=test&debug=true

URI fragment : #n10


* URI 는 % encoding.

% encoding 에서는 대문자, 소문자 구별이 없다.

%xx 의 16진수를 기반으로 인코딩한다.


* 앞으로의 상황을 고려해서라도 UTF-8 이 가장 좋은 인코딩

UTF-8 은 한 글자가 3바이트로 세상의 모든 언어 표현가능.


* 스펙상 URI 의 길이 제한은 없으나, 대부분의 브라우저가 구현상 제한이 있다.


* URN 은 Uniform Resource Name 으로 도메인명에 종속적이지 않은 주소체계.

URL 이 영구적이라는 특성 때문에 사용하지 않는다.

URL 은 자료의 위치개념이 강하고, URI 는 specific 한 객체 자체 개념이 강하다.




URI 의 설계


* 좋은 URI 는 변하지 않는다.

프로그래밍 언어에 의존적인 확장자와 경로를 포함하지 않는다.

예) cgi-bin, .pl, servlet, .do 등


메서드명과 세션 ID 를 포함하지 않는다.

예) ?action=showPage, jsessionid=12345


URI는 리소스를 표현하는 명사로 한다.

해당 리소스를 취득할지 갱신할지 등은 HTTP 메서드로 결정한다.

리소스는 그 identification 만 표현할 수 있으면 된다.


* URI 를 변경하고 싶을 때는 301 Moved Permanently 와 함께 Location Header 에 redirect 되야 할 주소를 전달해 주어 client 에서 유기적으로 redirect 되도록 해야 한다.


* URI 설계 테크닉

구현에 의존적이지 않은 확장자로 표현을 지정한다.

언어를 지정하는 확장자( .ko, .fr )를 사용하여 불필요한 Content Negotiation 을 지양한다.

참고로 Content Negotiation 은 Accept 관련 Header 를 사용하여 한다.


계층구조를 적용하기 힘든 경우 매트릭스 URI 를 사용한다.

예) http://example.com/map/lat=35.7;lng=139.7 

     http://example.com/map/35.7, 139.75


불투명(Opaque)하게 설계해야 한다.

클라이언트 쪽에서 URI 를 구성하거나, 확장자로 리소스의 내용을 추단하거나 할 수 없게 해야 한다.


* URI 를 강하게 의식하기

URI 는 리소스 이름

URI 는 수명이 길다.

URI 는 브라우저가 어드레스 란에 표시한다.




HTTP


* HTTP 버전

0.9

팀 버너스리가 웹을 처음 발명했을 때 사용하던 녀석. 헤더가 없었고, HTTP Method 는 GET 뿐.

1.0

최초 표준화된 녀석으로, 헤더가 도입되고, HTTP Method 가 추가되었다.

1.1

현재 가장 많이 쓰이는 버전으로 Accept 헤더에 의한 Content Negotiation, Cache Control, 지속적 연결 등의 기능이 추가

이후

WebDAV 등 확장 스펙들이 공개되고, WS-* 규격이 난립. 하지만 REST 아키텍쳐로 1.1을 효과적으로 활용하자는 움직임이 강함.


* Client & Sever

클라이언트에서 일어나는 일

1. 요청 메세지 구축

2. 요청 메세지 송신

3. 응답이 돌아올 때까지 대기

4. 응답 메세지 수신

5. 응답 메세지 해석

6. 클라이언트의 목적 달성을 위한 처리


서버에서 일어나는 일

1. 요청을 대기

2. 요청 메세지 수신

3. 요청 메세지 해석

4. 적절한 애플리케이션으로 처리를 위임

5. 애플리케이션 프로그램으로부터 결과를 취득

6. 응답 메세지 구축

7. 응답 메세지 송신


* 요청 메세지

GET /test?q=test#n10 HTTP/1.1

Host:example.com:8080


POST 의 경우 Header 이후에 한 라인 CRCF 후 Body 내용이 들어갈 수 있다.


* 응답 메세지

HTTP1.1 200 OK

Content-Type:application/xhtml+xml; charset=utf-8


Body...


* Stateless 의 장점과 단점

장점

서버의 구현이 단순해진다.

단점

송신할 데이터 양이 많고, 인증과정 등이 있다면 부하가 걸리는 처리가 늘어나 퍼포먼스의 저하가 초래된다.

통신 에러에 대한 대처가 어렵다.




HTTP Method ( 총 8개 )


GET

POST

PUT

DELETE

HEAD : 헤더(메타 데이터)만 취득

OPTIONS : 서포트하는 메서드의 종류 취득

TRACE : Loop back 시험

CONNECT


* POST

POST는 보통 Resource Create 에 사용된다.

나머지 Method 로 처리불가능한 것은 모두 POST 처리 가능하긴 하다.

201 Created 를 return 할 경우 Header 의 Location 에 생성된 resource URI 를 넣어준다.


* PUT

PUT은 보통 Resource Update 와 Create 에 사용된다.

Create 에 사용되는 경우는 원하는 주소를 지정해야 한다.

Update 의 경우 변환된 내용을 반환하거나, 204 No Content 를 반환하고, Create 의 경우는 201 Created 만 반환한다.


* DELETE

Resource Delete 에 사용되며, 200 OK 나 204 No Content 를 반환한다.


* HEAD

바디부분은 받지 않는데, 네트워크 대역을 절약하면서 리소스의 크기를 비롯한 부가정보를 알기 쉽고, Content Negotiation를 수행할수도 있다.


* OPTIONS

해당 Resource 가 지원하는 메서드 목록을 받는다.

이 값은 Header 의 Allow 값에 Comma Separated 되어 전달되어온다.


* Form 태그와 HTTP Method

Form 태그의 경우 GET 과 POST 만을 지원한다.

하지만, HTTP Method 는 그 나름의 의미가 있기 때문에 Ruby 스타일의 _method 를 사용할 수 있다.

<form target="/item" action="POST">

<input type="hidden" id="_method" value="PUT"/>

...

</form>


또 다른 방법으로 X-HTTP-Method-Override 라는 방법이 있는데, 이는 POST 가 application/x-www-form-urlencoded 를 사용하여 일부 내용 전달에 어려움이 있을 때 사용된다.

이는 헤더에 내용을 전달하면 된다.


* 조건부 요청

If-Modified-Since 헤더를 이용하여, 내용이 변했을 때 GET 으로 내용을 추가 가져온다.


* 멱등성과 안정성

멱등성은 몇번을 수행해도 결과가 동일한 것을 말한다.

안정성은 리소스의 상태를 변경시키지 않는 것을 말한다.

GET, HEAD 는 멱등이고 안전.

PUT, DELETE 는 멱등이지만 안전하지 않다.

POST 는 멱등이지도 안전하지도 않다.

위의 설명은 원칙적으로 그렇지만, 메서드의 구현을 잘못 했을 경우 지켜지지 않을 수도 있다.



Status Code( 스테이터스 코드 )


* 스테이터스 코드의 분류와 의미

1xx : 처리중

처리가 계속되고 있음을 나타낸다. 클라이언트는 요청을 계속하던지 서버의 지시에 따라 업데이트하여 재전송한다.

2xx : 성공

3xx : 리다이렉트

다른 리소스로의 리다이렉트를 나타낸다. 보통 이 스테이터스 코드는 Location 헤더를 동반하고, 해당 주소로 리다이렉트한다.

4xx : 클라이언트 에러

클라이언트 요청에 에러가 있다. 에러를 해결하지 않으면 몇번을 요청해도 정상적인 결과를 얻을 수 없다.

5xx : 서버 에러

서버에 에러가 있다. 서버 측 원인이 해결되면, 동일한 요청에 정상적 결과를 얻을 수 있다.


코드의 첫글자를 통해 최소한의 처리가 가능하다.


* 자주 사용되는 스테이터스 코드

200 OK

201 Created

POST 의 경우 Location 헤더를 함께 return 한다.

301 Moved Permanently

Location 헤더를 함께 전달하여 리다이렉트를 가능하게 한다.

303 See Other

보통 POST 로 조작한 리소스를 GET 으로 가져올 때 사용

400 Bad Request

적절한 클라이언트 에러를 나타내는 코드가 없거나, 일반적인 클라이언트 에러를 나타낸다.

401 Unauthorized

인증이 실패하거나, 권한이 없는 리소스 접근할 때 발생한다. WWW-Authenticate 헤더를 통해 인증방식을 전달한다.

404 Not Found

리소스를 찾을 수 없을 때 발생

500 Internal Server Error

일반적인 서버 에러나 적절한 서버에러코드가 없을 때 사용된다.

503 Service Unavailable

서비스가 점검 등의 이유로 일시적으로 정지되었을 때 사용되며, Retry-After 헤더를 사용하여 다음 접속 시간을 권유한다.


* 각 프로그램이나 서버의 종류에 따라 스테이터스 코드를 조금씩 다르게 사용하는 경향이 있으니 주의한다.




HTTP Header ( HTTP 헤더 )


* HTTP 기본 헤더

Content-Type

미디어 타입을 지정한다.

예) application/xhtml+xml : / 왼편은 타입이고, 오른쪽은 서브타입이다.

charset 도 함께 정의하는데, 보통 UTF-8 을 사용한다.


Content-Language

예) ko-KR : - 왼편에 ISO 639 지정 언어코드가 들어가고, 오른편에는 ISO 3166 이 정의한 지역코드가 들어간다.


* Content Negotiation

Accept

예) Accept: text/html, application/xhtml+xml, application/xml; q=0.9, */*;q=0.8

q value 는 소수점 이하 세자리 이내의 0~1 사이의 수치가 들어간다.

text/html, application/xhtml+xml 의 경우 default인 1,

application/xml 은 0.9,

나머지는 0.8 의 우선순위를 가진다.


만약 클라이언트의 Aceept 헤더에 지정한 미디어 타입이 서버가 대응하는 내용이 아니면 406 Not Acceptable 을 반환한다.


Accept-Charset

예) Accept-Charset : EUC-KR,utf-8;q=0.7, */*;q=0.7


Accept-Language

예) Accept-Language: ko, en-us;q=0.7, en;q=0.3


* 기타 헤더

Content-Length

바디의 길이를 지정한다.


Transfer-Encoding:chunked

바디를 분할하여 전송한다.


* 인증 헤더

인증이 필요한 리소스를 권한 없이 접근하는 경우 401 Unauthorized 스테이터스 코드와 함께 WWW-Authenticate 헤더가 함께 리턴된다. WWW-Authenticate 에는 서버의 인증정보를 담고 있다.

예) WWW-Authenticate:Basic realm="example.com"


베이직 인증

유저 이름과 패스워드에 의한 인증방싣이다.

Authorization 헤더에 넣어 요청마다 전송해야 한다.

예) Authorization: Basc dXNlcjpwYXNzd29yZA==

Basic 인증 방식은 유저이름과 패스워드를 : 로 연결하고 Base64 로 인코딩한 문자열인데, Base64 방식은 디코딩이 간단히 된다. 따라서 Basic 인증을 사용할 경우에는 SSL, TLS 를 이용해 HTTPS 통신을 하고, 통신선로 상에서 암호화하는 것을 검토해야 한다. 이게 어렵다면 다른 인증방식을 사용해야 한다.


Digest 인증

Basic 인증보다 보안이 강화된 인증 방식이다.

메세지 다이제스트의 줄임말로 이는 어떤 메세지에 대해 해시 함수를 적용한 해시값을 말한다.

예) WWW-Authenticate: DIgest realm="example.com", nonce="1ac421d9e0a4k7q982z966p..", qop="auth", opaque="92eb5ffee5ae.."

WWW-Authenticate 의 값을 Challenge 라고 부르는데, 이 값을 이용하여 요청할 때 다시 authenticate 해서 보내야 한다.

nonce 는 number used once 의 약자로 한번만 사용되는 숫자이다. 모든 요청에 대해 매번 변한다. 이는 서버구현에 의존하는데 기본적으로 타임스탬프와 서버 고유의 어떤 값을 이용해 생성한다.

qop 는 quality of protection 의 줄임말로, auth 나 auth-init 값이 들어간다. auth의 경우 메서드와 URI로부터 다이제스트를 작성하고, auth-init 의 경우 메서드와 URI, 그리고 메세지 바디를 이용해 digest 를 작성한다. auth-init 의 경우는 메세지 전체의 보안도 보증된다.

opaque 는 클라이언트에서 추측할 수 없는 문자열이다.

 


(1)값 : 유저이름, realm, 패스워드는 : 로 연결하고 MD5 해시 값을 구한다.

(2)값 :메서드와 URI 패스를 : 로 연결하고 MD5 해시 값을 구한다.

(1)의 값, nonce, 클라이언트가 nonce를 보낸 횟수, cnonce, qop값, 2의 값을 : 로 연결하고 MD5 해시 값을 구한다.

이 값을 response 필드에 넣고 다시 송신해야 한다.

ex) Authorization:Digest username="user", realm="example.com", nonce="1ac421d9e...", uri="/test", qop="auth", nc=00000001, cnonce="900150983cd24fb...", response="0fde218e...", opaque="92eb5ffee5ae2..."


Digest 인증의 장점과 단점

서버에 패스워드의 해시값만 보관하면 되므로 보안 위험이 줄어든다.

Basic 인증의 경우 같은 URI 공간의 리소스라면 클라이언트는 한번 인증되면 계속 user:password 만 보내면 다시 리소스에 접근할 수 있지만, Digest 의 경우 서버로부터 nonce 를 부조건 다시 받아 계산해야 한다. 따라서 무조건 어떤 리소스든 401 Unauthorize 응답을 한번은 얻어야 한다. 그래서 Digest 인증의 경우 무거워서 보급이 잘 안 되어, 여러 서버에서 옵션으로 사용하곤 한다. https 를 대신 운영하는 곳이 많다.


WSSE 라는 표준 이외의 인증방식도 있다.


요즘은 통합 인증관리, 권한위임 등을 위한 OpenID 와 OAuth 등이 유행하고 있다.


* 캐시 해더

Pragma:no-cache

리소스를 캐시하지 말것을 말한다.


Expires

캐시의 유효기한을 나타낸다.


Cache-Control

상세한 캐시 방법을 지정한다.

예) Cache-Control:max-age:86400

86400 초 동안 캐시가 유효하다.


* 조건부 GET

If-Modified-Since 를 통해 해당 내용이 바뀌었다면 GET 해서 가져올 수 있다.

바뀌지 않았을 경우 304 Not Modified 와 Last-Modified 값이 return 된다.


If-Modified-Since 와 Last-Modified 헤더에 의존한 조건부 GET 은 편리하지만, 시계 표준차이문제나 시계기능 사용이 어려운 서버 등에서 사용하기가 어렵다. 이 때는 If-None-Match 와 ETag( 엔티티 태그) 헤더를 사용한다. ETag 는 어떤 조건에 의해 해당 파일의 변경여부를 문자열로 나타낸 값이다.


* 지속적 접속

HTTP 1.0에서는 응답이 올때마다 TCP 커넥션을 끊었지만, HTTP 1.1 에서는 접속상태를 유지한다.

Connection 헤더에 close 값을 전달했을 때 끊는 방식을 사용한다.

HTTP 1.0에서는 지속적 연결을 위해서 Keep-Alive 헤더를 사용했다.




Microformats 와 RDF(Resource Description Framework)


* 시멘틱 웹을 위한 xml format.


* RDF 는 주어, 술어, 목적어를 이용해 웹의 리소스에 메타 데이터를 부여한다. 복잡하고, 통일성이 없고, 별도의 메타데이터 파일이나 구문에 기록이 필요하다.


* microformats 의 경우는 rel 속성을 이용하여 리소스에 메타 데이터를 부여하며, HTML 태그 안에 삽입 가능하다.


* microformats 에서 가장 많이 쓰이는 것들은 rel-license 와 rel-nofollow 이다.


* microformats 는 간단하지만, class 와 rel 속성에 값을 부여하기 때문에, 이름이 중복될 가능성이 있다.


* RDFa 는 RDF in Attribute 의 약자로 외형은 microformat 과 거의 동일하나, microformats 가 가진 이름충돌 문제를 xml의 이름공간으로 해결하는 방식이다.




ATOM


* RSS 스펙의 난립에 대응하여 확장성 있는 피드 표준 포맷을 책정한 것.


* RSS 는 주로 블로그의 신착정보를 전달하는 피드 목적으로 이용되지만, Atom 은 블로그 뿐 아니라 검색엔진이나 사진관리 등 다양한 웹 서비스의 웹 API 로 이용될 수 있다.




JSON을 이용한 크로스 도메인 통신


* JSONP

JSON with Padding 의 약자이다.

Ajax에서 이용하는 XMLHttpRequest 라는 JS 모듈은 보안상의 제한으로 인해, JS 파일을 가져왔던 동일 서버하고만 통신할 수 있다. JS 가 다른 서버와 통신할 수 있다면, 브라우저에서 입력한 정보를 부정하게 다른 서버에 전송할 수 있기 때문. 크로스 도메인 통신이란 이와는 반대되는, 불특정 다수의 도메인 서버에 접속하는 것을 말한다.

이 문제는 <script> 태그로 해결할 수 있는데, <script src="..."> 를 통해 여러 사이트의 JS 파일을 읽을 수 있다. 이는 보안제한에 해당하지 않는 문제이다. 이 성질을 이용해 callback 함수를 전달하여 다른 서버의 JS 를 통해 데이터를 받아올 수 있는데 이를 JSONP 라고 부른다.

예) <script src="http://example.com/data.json?callback=foo">




웹 서비스의 설계


* 읽기전용 웹 서비스의 설계 ( 리소스 지향 아키텍처 접근방법 )

1. 웹 서비스에서 제공할 데이터를 특정

2. 데이터를 리소스로 나눈다

3. 리소스에 URI 로 이름을 부여한다.

4. 클라이언트에 제공할 리소스의 표현을 설계한다. ( xml, json, xhtml 등 )

5. 링크와 폼을 이용해 리소스와 리소스를 연결한다.

6. 이벤트의 표준적인 코스를 검토한다.

7. 에러에 대해 검토한다. ( 존재하지 않는 URI 지정, 필수 파라미터 미지정, 지원하지 않는 메서드 사용 등 )


* 쓰기 가능한 웹 서비스의 설계

쓰기 가능한 웹 서비스는 트랜잭션, 일괄처리, 베타제어를 고려해야 해서 어렵다.

일괄처리의 경우 일부만 성공한 경우는 207 Multi-Status 와 함께 WebDAV 의 <D:multistatus>요소를 조합하는 방법과 200 OK 와 독자 포맷을 조합하는 방법으로 성공과 실패여부를 전송한다.

트랜잭션은 여러개의 처리를 Atomic 하게 처리해야 한다. 임시 Resource 에 여러차례 시도해서 모두 성공하면, 서버에 Transaction 을 하라는 명령을 내리는 방법과 서버에서 알아서 Transaction 을 구현하는 두 가지 방법이 있다.

DELETE 의 경우에 상위 리소스를 삭제했을 때, 하위리소스도 삭제할지 불가능하게 할지도 정해야 한다.

배타제어는 Mutual Exclusion 이라고 해서 Lock 을 거는 것과 같다. 이 잠금에는 비관적 잠금(Pessimistic Lock)과 낙관적 잠금(Optimistic Lock)이 있다.


Pessimistic Lock 은 경쟁상황이 아예 일어나지 않도록 하는 Lock이다.

잠금을 구현하는 방법은 WebDAV 의 LOCK/UNLOCK 을 이용하는 방법이 있다. HTTP Method로 LOCK 을 사용하는데, 이 방법으로 잠긴 리소스에 다른 user가 접속하면 423 LOCKED 가 return 된다. 잠금을 제대로 지정한 후 If 헤더로 Locktoken 을 지정하여야 해당 락을 제대로 사용할 수 있다. 잠금해제는 UNLOCK Method 를 이용해서 하며, 이 때 Lock-Token header 를 함께 전달한다. 

서버에서 Lock 을 구현하는 방법도 있는데, scope, timeout 과 같은 parameter 를 이용하는 것이 보통이다.

비관적 잠금은 시스템의 스케일이 커질수록 문제가 커진다.


Optimistic Lock 은 여러 사람이 항상 같은 리소스를 계속 편집하는 경우가 거의 없다는 전제하에 경쟁이 일어났을 때 합리적으로 대처하는 방식이다.

낙관적 잠금은 조건부 편집을 사용한다. 서버에서 전달되는 ETag 나 LastModified 값과 클라이언트에서 전달하는 If-Match Header 값을 이용하여 구현한다. If-Match 헤더를 통해 전달된 값이 valid 하지 않을 때는 412 Precondition Failed 를 return 한다. 이 때는 여러가지 처리방법이 있는데, 서버에서 리소스를 따로 저장했다가 merge 하는 방법, 클라이언트에서 reload 후 재시도 등의 방법이 대표적이다.


* 웹 서비스에서 제공하는 데이터를 특정하고 리소스로 나누는 방법.

관계 모델 ER 다이어그램 이용

중심이 되는 table 에서 정보를 추출

탑 레벨 리소스와 URI 계층구조 등을 설정하기가 어렵다.

객체 지향 모델의 클래스 다이어그램 이용

is-a, has-a 를 이용하면 탑 레벨 리소스와 URI 계층구조를 구하기 쉽다.

정보 아키텍처 이용

지식이나 데이터의 조직화를 통해 정보를 알기 쉽게 전달하는 표현기술.


Trackback 0 : Comment 0

CSS 절대위치를 상대위치로 잡기(?) position: relative와 absolute의 응용

tip 2013.11.08 17:30


[출처] http://qnrdlqkrwhdgns.canxan.com/jpboard/post/238


position: absolute를 사용하면 문서전체를 기준으로해서 위치를 잡습니다.
즉, absolute 라는 뜻답게 절대적인 위치입니다!
가령,

position: absolute; top: 100px; left: 80px;

반면에,
position: relative를 사용하면 기존에 자리를 잡던 위치를 기준으로해서 위치를 잡습니다.
즉, relative 라는 뜻답게 상대적인 위치입니다!
가령,

position: relative; top: 100px; left: 80px;

그런데, 가끔 상대적이면서 절대적인(?)것이 필요할때가 있습니다.

한번 아래의 코드를 보세요!
HTML:
<div id="wrap"> <div id="inner"> <!-- .. --> </div> </div>


CSS:
#wrap { position: relative; } 

#inner { position: absolute; top: 100px; left: 80px; }

이런 경우에, #inner가 문서전체를 절대적인 기준으로 해서 위치를 잡을까요?
아닙니다!

문서 전체가 아니라 #wrap를 기준으로 해서 위치를 잡습니다!
즉, 상위 객체가 relative이고 하위 객체가 absolute 라면, 상위객체의 위치를 기준으로 합니다!

[출처] http://area51.lesha.co.kr/?c=2/45&iframe=Y&p=6&recnum=7&type=review&uid=14


우리는 레이어가 떠다니게 하기 위해서 position 이라는 스타일속성을 사용합니다.

주로 absolute라는 값을 통해 절대 좌표로 레이어를 이동시킵니다.

 

종종 우리는 어느 개체 내부에서(표같은거..) absolute를 사용한 레이어를 절대 좌표 값을 설정하는데

개체 내부(표안...)에 띄우는데 어려움을 겪곤 합니다.

 



이 때, 필요한 것은 문서를 기준으로한 절대 좌표가 아니라 상대적인 또는 새로운 좌표계가 필요합니다.

이 새로운 좌표계를 만드는 방법이

레이어를 포함한 개체의 스타일속성 position에 "relative"를 설정해주는 것입니다.

 

비교 예문)

<div style="margin-left:200px; width:200px; height:200px; background-color:gray">

  <div style="position:absolute; left:50px; top:50px">절대좌표</div>

</div>


<br/>

 

<div style="margin-left:200px; position:relative; width:200px; height:200px; background-color:gray">

  <div style="position:absolute; left:50px; top:50px">내부좌표</div>

</div>


Trackback 0 : Comment 0

포토샵 없이 포토샵 사용하기

tip 2013.10.31 18:13


급하게 포토샵 작업을 해야할 때 유용한 사이트 입니다. ui 가 포토샵과 거의 동일하네요


http://pixlr.com/editor/











Trackback 0 : Comment 0

중국 프로그램 설치 방법

tip 2013.10.31 08:30



중국어로 된 프로그램을 설치하고 실행 시 중국어가 깨져서 보이는 경우 pc 의 지역을 중국으로 변경하면 정상적으로 언어가 표시 됩니다. 


1. 프로그램 설치 후 아래와 같이 문구가 깨지는 경우








2. 제어판 -> 국가 및 언어 -> 관리자 옵션 -> 시스템 로컬 변경



3. 중국어 간체 PRC 를 선택 합니다. ( 프로그램에 맞는 중국 위치 선택 ) 




4. 다음과 같이 정상적으로 문구가 표기되는 것을 확인 할 수 있습니다.















Trackback 0 : Comment 0

PHP , JSP , PHP , Extension , JNI 소개

tip 2013.10.24 17:59


[출처] http://seed.kisa.or.kr/iwt/ko/bbs/EgovFaqList.do


 

1. PHP

1994년에 처음 개발되었으며, 처음에는 ‘Personal Home Page Tools’이라 불렸 으나 현재 공식적으로 Personal Hypertext Preprocessor의 약자를 의미한다. 하이퍼텍스트 생성 언어(HTML)에 포함되어 동작하는 스크립팅 언어 중 하나이며 공개된 무료 소스이며 공개된 소스답게 보통 LAPM (Linux- Apache-MySQL-PHP/Perl/Python)환경에서 쓰인다.


비록 PHP HTML의 처리를 위해 탄생했으나 웹 프로그래밍이 아닌 다른 분야에도 사용될 수 있다. 많은 서버 측 오픈 소스 소프트웨어는 PHP로 구현 되었다.


PHP를 바탕으로 하는 프로그램 중 대표적인 예로 phpBB와 위키백과를 구동시키는 미디어위키를 들 수 있다. 대한민국의 PHP로 만든 게시판 중 유명한 것에는 제로보드, 미니보드 등이 있다.


PHP는 별도의 실행 파일을 만들 필요 없이 HTML 문서 안에 직접 포함되어 실행되며, C, 자바, 펄 언어 등에서 많은 문장 형식을 준용하고 있어 동적인 웹 문서를빠르고 쉽게 작성할 수 있다. 마이크로소프트에서 개발한 ASP(Active Server Pages)와 같이 스크립트에 따라 내용이 다양해서 동적 HTML 처리 속도가 빠르며,PHP 스크립트가 포함된 HTML 페이지에는 .php, .php3, .phtml이 확장자로 붙는 파일 이름이 부여된다. PHP는 텍스트, 특히 HTML의 처리에 강점을 가지고 있다.


URL의 파싱이나 폼 처리, 정규 표현식 등이 그 한 예이다. 또한 다양한 데이터베이스를 지원하므로 데이터베이스와 사용자간의 다리 역할도 잘 수행한다. PHP의 기능 확장을 위하여 다양한 모듈들이 기본적으로 제공될 뿐만 아니라 사용자가 직접 작성하여 PHP에 확장 모듈을 생성 및 포함시킬 수도 있다. 현재 가장 최신 버전은 2008 2월에 발표된 5.2.5이다.


2. JSP


Java Server Pages(JSP)
는 웹 클라이언트의 요청에 동적으로 HTML, XML, 또는 다른 형태의 문서를 응답해주는 기능을 제공한다. , JSP HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다.


클라이언트가 서비스를 요청하면, JSP의 실행을 요구하고, 웹 애플리케이션 서버의 JSP 컴파일러는 서블릿 컨테이너에서 JSP 코드를 서블릿 원시코드로 변환된다.


그 후에 JSP 컴파일러는 서블릿 원시코드를 컴파일한 후 바이트 코드로 만들어 실행 결과를 HTML 형태로 클라이언트에 돌려준다. 이러와 같은 프로세스가 한번 진행된 후에, 코드는 컴파일 되어 메모리 로드되어 있으므로 (그림 C-1)과 같이 2번째 요청부터는 응답이 매우 빨라지게 된다.





(그림 C-1) JSP 실행과정

 

3. PHP Extension

PHP 대부분의 함수들은 Extension 모듈에 그룹화 되어 들어 있다. 이 많은 함수들을 표준 Extension이라 불리며 총 400개 이상이며 Extension을 사용하는 경우는 아래와 같다.


o PHP로 직접적인 호출 할 수 있는 라이브러리가 없는 경우

o PHP의 특별한 사용

o PHP 코드의 성능개선

o PHP 코드의 특정 부분을 숨기기 위해


PHP Extension
의 실행과정을 이해하기 위해서는 Core를 이루고 있는Zend Engine(ZE) PHP Core를 이해해야 한다.


PHP
Core는 크게 ZE PHP Core, 두 부분으로 구성되어 있다. 하위 레벨에 자리 잡고 있는 ZE는 사람이 읽을 수 있는 스크립트를 컴퓨터가 읽을 수 있는 토큰으로 분리 하고, 각 토큰들을 프로세스 영역에서 실행하는 것을 담당한다. 또한 메모리 관리, 변수 영역, 함수 호출 등이 모두 ZE의 관리를 받는다. 다른 절반인 PHP Core SAPI(Server Application Programming Interface, also commonly used to refer to the host environment - Apache, IIS, CLI, CGI, etc) 레이어와의 통신과 바인딩을 담당한다. 그리고 safe_mode open_basedir 확인을 위한 일관성 있는 Control Layer뿐만 아니라 파일과 네트워크 I/O관련된 fopen(), fread(), fwrite() Userspace 함수를 제공한다.


PHP Extension
의 실행과정은 다음과 같다. SAPI가 시작 할 때, PHP는 각 Extension의 코드를 로드하고 Module Initialization 루틴(MINIT)을 호출한다. 이 과정에서 각 Extension은 내부 변수 초기화, 자원할당, 리소스 핸들러 등록과 ZE에 함수를 등록을 완료한다. 그래서 만일 스크립트에서 이 함수중 하나를 호출한다면, ZE 는 어떤 함수가 실행되어야 할지 알 수 있다.


PHP
는 페이지 처리 요청을 하기 위해서 SAPI 레이어를 기다린다. 처리 요청 메시지가 발생하면 PHP ZE에게 스크립트를 실행 시킬 수 있는 환경을 만들도록 요청한다. 이 때 PHP는 각 Extension 모듈의 Request Initialization(RINIT) 함수를 호출한다. RINIT는 특정 환경 변수를 셋팅하고, 특정 자원 할당, 또는 검사 같은 다른 작업을 수행하기도 한다.


일단 요청이 초기화 되면, ZE PHP 스크립트를 토큰으로 나누어, 결국 opcode 까지 나누어지면 opcode를 실행시킨다. opcode에서 Extension 함수를 호출하면ZE은 함수에 파라미터를 넘기고, 임시적으로 제어권을 Extension 모듈로 넘긴다.


4. JNI

Java Native Interface(JNI) Native 프로그래밍 인터페이스이다. JNI, Java Virtual Machine(JVM)에서 실행되는 Java 코드가 C, C++, 어셈블리 언어 등 다른 프로그램 언어로 작성된 어플리케이션이나 라이브러리와 상호 운용할 수 있다.


Java로 어플리케이션 전체를 기술할 수 있는 경우도 있겠지만, Java만으로 어플리케이션을 구성할 수 없는 상황도 있다. Java로 어플리케이션 전체를 구성할 수없는 경우, 프로그래머는 JNI를 사용하여 이와 같은 상황을 대처할 수 있다


또한 이미 존재하는 어플리케이션에 Java 어플리케이션이 접근할 수 있도록 하기 위해서도 사용된다. , JNI Java 프로그래밍 언어만으로 구성할 수 없거나 다른 프로그래밍 언어로 작성된 어플리케이션에 접근하기 위해 네이비브 메서드를 작성하는 역할을 수행한다. 그러므로 JNI는 두 가지 인터페이스로서 두 가지의 Native 코드 (Native Libraries, Native Applications)를 지원한다.


o JNI Native Libraries에 구현되어 있는 함수를 Java 어플리케이션이 호출하기 위한 Native 메서드를 작성한다. Java 어플리케이션은 Java로 구현된 메서드를 호출하는 것과 같이 Native 함수를 호출한다. 하지만 그 뒷면에는 Native Libraries에 다른 프로그래밍 언어로 구현된 Native 메서드가 구현되어 있다.


o JNI Native 어플리케이션에 JVM을 끼워 넣을 수 있도록 해주는 Invocation 인터페이스를 지원한다.






(그림 C-2) JNI의 역할




Trackback 0 : Comment 0

Version Schema Difinitions 버전정보표기방법

tip 2013.10.24 17:50


v1.5.0.1


Major Version

Minor Version

Mainternance Version

 - New Feature

 - Bug Fixed


[출처] http://www.mydiamo.com/index.php/download/package-download/current




Trackback 0 : Comment 0

윈도우7에서 IE8 설치하기

tip 2013.10.23 13:53

IE9 -> IE8

C:\> FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*9.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /norestart"


IE10 -> IE8

C:\> FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*10.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /norestart"


관세청 유니패스 ( portal.customs.go.kr ) 는 IE10에서는 아직 지원이 안되므로 IE9나 IE8로 원복 후 사용해야 합니다.



Trackback 0 : Comment 0

리눅스 관리 기법

tip 2013.09.30 11:41


pwd : print working directory

ls : list files

mode

filetype : permission

d   rwx r-x   ---

-   rw-   r--   ---

owner group others


파일접근자 ( root 제외 )

 - 사용자

 - 소유자

 - 기타

d : directory

- : ACSII, EXEC files

l : link

b : block device

c : character device

p : pipe

s : socket

cd : change directory

file command

1.read - cat, more

2.write - cat, tee

* cat file_name : read file

  cat > file : create file

  cat >> file   : add edit file

- 실습 -

 # cat install.log

 # cat > new_file

 Text

 <Ctrl+d>

 # cat new_file

 # cat >> new_file

 Add Text

 <Ctrl+d>

 # cat new_file


 ** cat 명령의 옵션 활용

 

  # cat -n /etc/passwd : -n 출력물 넘버링

  # cat -n /etc/passwd | more

  # cat -n /etc/passwd > user_list_20110918

 

확장자규칙을 만들어 사용

 --


[ 디렉토리 명령 ]

- 디렉토리파일생성

 - mkdir : make directory

  # mkdir dir [dir2 dir3]

  # mkdir -p /root1/dir1/dir2/dir3

 - cp : copy

  # cp source target_dir

  # cp -i source_file targert_dir

    [-f]

 - mv : move

  # move source(file, dir) target_dir

  # move -i source target_dir


[실습]

 # mkdir /root/dir1

 # mkdir -p /root/dir2/subdir

 # alias cp

 # cp install.log dir1

 # cp -r dir2/subdir  /root   or  cp -r dir2/subdir .

 # ls -R dir2

 # alias mv

 # mv subdir dir1

 # mv dir1 backup


- 디렉토리파일삭제

- rmdir

- rm : remove ( file only )

  # rm file_name [ file2 file3 ]

  # rm -r dir_name



[실습]

 # mkdir dir1 dir3 dir4 dir5

 # cp install.log dir1

 # rmdir dir5

 # rmdir dir1 ( error )

 # rm dir1/install.log

 # rmdir dir1

 # rm -r backup


- touch ->        1) 0 kbyte 파일 생성

2) 파일, 디렉토리의 시간의 정보 변경

# touch new_file

# touch exit_file ( 시간정보변경)

# touch -t 월일시간 exit_file ( 사용자지정 시간 변경 )   


[실습]


# cd dir2

# touch file1 file2 file3

# ls -l

# touch file3

# ls -l

# touch -t 09120200 file2

# man touch  

# ls --full



- vi 편집기


[실습]


# LANG=euc

# man man > man.txt

# vi man.txt

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

* 방향이동

h : 커서를 좌측으로

l : 커서를 우측으로

j : 커서를 아래로

k : 커서를 위로

숫자 + G : 숫자에 해당하는 라인으로 커서 이동 ( 숫자 생략시 마지막 줄로 이동 )

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

*편집명령

x : back space

X : delete

숫자+dd : 숫자 만큼의 라인 삭제

숫자+dw : 숫자 만큼의 단어 삭제


R : 라인에 있는 문자열 교체

r : 커서 위치의 한글자 교체

S : 라인의 내용을 교체

s : 커서에 위치한 글자 교체

C : 커서 후반의 내용을 삭제


숫자 + cw : 단어 변경

J : Join 2개의 라인을 병합

라인범위s/검색어/변경어/g

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

1) 라인번호

2) $ : 텍스트 파일의 마지막 라인

3) % : 텍스트 파일 전체 지정


: 1,10s/option/OPTION/g

: 30,$s/option/OPTION/g

: 1,$s/option/OPTION/g

 ==> %s/option/OPTION/g

: %s/the//g ( 삭제 기능 )

: %s/^H//g


: u : last line 에서 동작 된 명령 undo.

*** 특수문자 표현


ctrl+V


: set autoindent - 들여쓰기 기능 설정

: set noautoindent - 들여쓰기 기능 해제



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


확장 명령어


grep 명령


# grep [-option] ‘pattern’ file_name

# command | grep ‘pattern’

[Ex]

# ls -l /etc | grep sysconfig

# ls -l / usr/bin | grep -v z

# ls -l /usr/bin | grep -n in


fgrep - file grep

egrep - extented grep


파일명 중 포함 된 문구 파일 확인

# ls -l /etc | grep xinetd


파일 갯수 확인

# ls -l /etc | tail -n +2 | wc -l  


wc 명령 : word count

-l : line count

-c : file size


[Ex]

# ls -l new_file

# wc -l new_file

# wc -c new_file

# wc -m new_file



file 명령 : file의 자세한 속성 정보 출력

# file file_name


strings 명령 : 텍스트 뷰어 명령으로 접근 불가능한 파일의 내용 정보를 출력,

                      파티션 영역의 침해 내용 확인

# string special_file_name


[실습]

# wc /etc/hosts

# wc -l /etc/hosts

# wc -c /etc/hosts

# wc -m /etc/hosts


# file /bin/ls

# file /etc/passwd


# more /bin/ls

# string /bin/ls


find 명령

- 형식

 find dir_path -option option_arg action


1 block = 512byte

= 1 sector


- 예제

1) find /etc -name hosts

2) find /etc -name ‘host*’

3) find /etc -name ‘*host*’ -type f

4) find /etc -name hosts -ls

5) find /etc -name passwd -exec cp {} /root \;

6) find /etc -name passwd -ok cp {} /root \;


* Meta-character

1. * : 글자 수 상관없이 파일 명 대치

2. ? : 모든 글자 중 한글자 대치

3. [aA] : 두개 이상 글자 중 한개



- permission


* Device ( HDD -> buffer / MEM -> frame buffer -> user )


- Block file : Memory Data block ( 버퍼링 )

- Character file : 디스크 접근 시 바로 데이터 추출 가능 한 형태

Access -> 1 sector = 1 Block = 512 byte = row



 \  rw- r-- rw- : 보안 위험성 - 그룹, 소유자의 허가 없이 파일 변조 가능.



1) 퍼미션의 변경


 chmod [권한] file_name


 i] Symbolic


   chmod u + w newfile

   g - w

   o - r

+ ( 권한추가 ) , - ( 권한삭제 ) 어떠자리에 작업할 것인지 u, g, o를 통해서 표시


 ii] numeric


   chmod [숫자|숫자|숫자] newfile


chmod 777 newfile

-- 각 사용자 자리별로 권한 숫자를 적고, 그 숫자는 0 ~ 7 까지 사용할 수 있다.


[EX]

# mkdir /root/perm

# cd perm

# touch file1 file2 file3

# mkdir dir1 dir2 dir3

# ls -l

# chmod u-w,g-r file1

# chmod 000 dir1

# chmod 4750 file1

# chmod 2750 file2

# chmod 1777 dir2

# history

# su iser01

# id

# ls -l

# cat file1

# exit

# cd dir1

* Sticky Bit directory permission

- 디렉토리에만 설정하는 기능

- 사용자에게 모든 권한을 부여하되 지우는 기능을 제한

 => root 는 모든 파일을 지울 수 있음

 => dir 소유자는 모든 파일을 지울 수 있음

 => 파일 소유자는 자신이 만든 파일을 지울 수 있음

 => 일반 사용자는 다른 사용자의 파일을 지울 수 없음

 ** Web 서버의 자유게시판, 공용 ftp

 ** 퍼미션 변경 시 앞에 한자리 확장하고, ‘1’


# chmod 777 dir1

# cd dir1

# touch file4

# su [UserID]

$ touch file5

$ rm file4

$ exit

# cd ..

# chmod 1777 dir1

# cd dir1

# touch file6

# su [UserID]

$ rm file6

$ rm file5


passwd

# ls -l /etc/shadow

# ls -l /usr/bin/passwd

# su - [userID]

$ passwd ( change password )

Enter password : [현재 사용중인 패스워드]

NEW password : [신규 패스워드 -> shadow 파일 권한 획득]

$ exit

# chmod 755 /usr/bin/passwd

# su - [userID]

$ passwd

Enter password :

<인증오류발생후종료>



# chmod 4755 /usr/bin/passwd

# chmod 2755 file_name

# chmod 6755 file_name


* setID 검출 방법


find / -perm -4000 -type f > setID_v1.0

find / -perm -6000 -type f >> setID_v1.0


cmp setID_V1.0 setID_v1.1




프로세스 및 스케줄


- kernel , process, page, paging ( page in, page out ), physical, logical ( Swap )


# 관찰관련

[ PS ]

[ TOP ]

  PR ( 우선순위 ) , NI ( 우선순위조정 ), VIRT ( 메모리에 올라갈 크기 )


umask


* Process

- 종류 : 프로세스, Zombie, defunct

- 특징 : 작업이 완료되면 자동으로 종료되고 메모리에서 퇴출 됨.


* kill


[EX]

1. 두 개의 명령 터미널

 1) 번 터미널에서 작업 진행

  # sleep 100000

 2) 번 터미널에서 작업 진행

  # ps -ef | grep sleep

  # kill -15 PID

 1) 번 터미널 작업 종료 확인

 

 1) 번 터미널 검색 명령 실행

  # find /

  <ctrl+z>

 2) 번 터미널 프로세스 및 1) 번 터미널 작업 확인

  # ps -ef | grep find

  # kill -l CONT

  # kill -CONT PID


□ Background Process


▶  의미 : 백그라운드 프로세스는 명령줄 사용권한을 사용자에게 넘겨주고 명령줄 후면에서 실행 되는 프로세스


 ▶  관리 : 백그라운드 프로세스 실행 후 관리는 ps 명령 또는 Jobs 명령을 통해 확인하고 kill 명령을 통해 제어한다. 백그라운드 프로세스는 전면으로 변경이 가능하고 현재 진행 중인 전면 프로세스 또한 백그라운드로 이동 시킬 수 있다.


 ▶  예제

# sleep 100000 & : 백그라운드로 프로세스 시작

# jobs [-1] : 진행중인 백그라운드 프로세스 리스트

# kill %2 : 백그라운드 프로세스 제거

# fg %1 : 백그라운드 프로세스 전면으로 이동

# < ctrl + z > : 전면 실행 프로세스 일시 정지

# bg %1 : 정지된 전면 프로세스 백그라운드 이동


▶  실습

# sleep 100000 &

# sleep 10000 &

# jobs

# kill %1

# fg %2

# < ctrl + z >

# bg %2


* 서버용 프로그램 시작 시 전면에 위치할 경우 명령줄 사용 권한을 반납하지 않으므로 다른 작업이 불가능. 따라서 서버 프로세스 구동 시 백그라운드 작업으로 전환시켜 실행 시킨다.


□ 프로세스 스케줄링


▶ 의미 : 프로세스가 동작할 시간을 정하고 해당 시간에 실행 되도록 프로세스 관련 정보를 저장하여 관리하는 것


▶ 관리 : 1회성 관리 ‘at’ 을 이용하고, 반복성 작업인 경우 ‘crontab’ 을 사용한다. 스케줄링 업무에 대한 제한을 위해 con.allow , cron.deny 파일에 사용자 정보 입력을 하면 해당 사용자의 스케줄링 가부를 결정할 수 있다.


▶ 예제

# crontab -l -u [userID] : 현재 설정 된 스케줄링 확인

# crontab -e : 스케줄링 작업 설정

# crontab -r : 스케줄 된 작업들 모두 삭제


▶ 실습


# tty

# crontab -e

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

10 12 25 * * echo  “Sentence” > /dev/pts/1

0,30 13 * * * echo “Sentence” > /dev/pts/1

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

# crontab -l

# crontab -r

# crontab -l ( crontab 삭제확인 )

* “/etc/cron.deny: 파일은 default. ‘cron.allow’ 파일은 스케줄링 금지할 때 사용자가 만들어 사용하는 파일로 ‘cron.deny’ 파일보다 우선 순위가 높다.


□ 네트워크 관리


▶ 의미 : IP, netmask, router, DNS 등 사용자가 서비스를 받기 위한 주소 및 접근 경로를 관리하고 서비스의 정상적인 상태를 유지하는 행동


▶ 관리 :

1) 주소 및 주소 부대 기능에 대한 관리 : ifconfig

2) 서비스 및 유지관리 : service, daemon, chkconfig

* config 파일을 통한 관리 필수




예제


 1) Network Interface Card ( NIC ) 관리 명령

             # ifconfig [-a] [NIC#] : NIC 설정 보기

             # ifconfig NIC# New_IP : 네트워크 주소 변경

             # ifconfig NIC# down : 네트워크 카드 일시 정지 ( type ifup )

             # ifconfig NIC# up : 네트워크 통신 가능 상태로 변경 ( type ifdown )

             # ifconfig NIC# unplumb : NIC 드라이버 언로드

                                        plumb : NIC 드라이버 로드

 

 ▶ 실습

 # ifconfig eth0

 # ping 192.168.xxx.2

 # ctrl+c

 # ifconfig eth0 down

 # ifconfig eth0

 # ping 192.168.xxx.2

 # ifconfig eth0 up

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

 # ifconfig eth0 down

 # ifconfig eth0 172.16.0.100

 # ifconfig eth0 up

 # ifconfig eth0

 # ifconfig eth0 192.168.xxx.10

 # ifconfig eth0

 # netstat -rn     ( Gateway 설정확인 : default 항목 )

 # route add default gw 192.168.xxx.2

 # ping 192.168.xxx.2

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


 ▶ 설정 파일

  1) IP, netmask, Broadcast, HWaddr 등 변경할 때

             /etc/sysconfig/network-scripts/ifcfg-eth#



  2) hostname ( DNS ), Gateway 변경할 때

             /etc/sysconfig/network


 



3) 파일 변경 사항을 적용 할 때

             # service network restart

 

* 구성 정보 파일에 변경 된 내용을 저장할 경우 리부팅 이후에도 구성 내용을 그대로 적용할 수 있음. ( 영구적 변경 설정 )

 ▶ 인터넷 구간 설정

 

   1) DNS 서버 설정 : /etc/resolv.conf

   2) target 시스템이 결정 된 경우 설정 : /etc/hosts

 

서비스 활성화

 

 ▶ telnet 서비스 : 원격에서 서버로 login 하여 명령 권한을 행사할 수 있는 서비스

 

 ▶ 활성화 : “/etc/xinetd.d/*telnet” 파일을 통해 서비스 활성화 가능.

 

  * telnet 서비스가 활성화 가 되었다 하더라도 “root” 사용자에 대한 login 은 허용되지 않음

  * “root” 사용자 login 허용 - /etc/securetty 파일 삭제

 

# mv /etc/securetty /etc/securetty.old

 

 ▶ 예제

 

             # chkconfig --list | grep telnet

             # vi /etc/xinetd.d/kr5-telnet

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

             <생략>

             disable = yes

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

             # service xinetd restart

             # chkconfig -- list | grep telnet

             # telnet localhost

 

 

사용자 관리

 

 ▶ 유형 :

  1) 신규 사용자 추가

  2) 기존 사용자 변경

  3) 사용자 삭제

  4) 그룹 생성

  5) 그룹 삭제

 

 ▶ 사용자 추가 관리

  # useradd [-options args] new_account

     ( adduser )

   * 사용자 추가 명령을 사용할 경우 “/etc/passwd” 파일에 등록

   * 사용자 패스워드를 저장하기 위해 “/etc/shadow” 파일에 등록

   * 관리자가 ‘passwd’ 명령으르 사용하여 패스워드 사용 가능.

             # passwd [-option] userID

 

 ▶ 사용자 변경 관리

  # usermod [-options args] exit_account

   * 존재하는 사용자의 login ID  등을 변경해야 할 경우

   * 명령의 옵션이 useradd 와 동일

 

[passwd]

# etc/shadow

!! -> 계정잠김 :

# passwd -d [userID] : 해제 ( 패스워드 삭제 )

 

* -> 패스워드 사용 금지

 

 ▶ 예제

 

   # more /etc/passwd /etc/shadow

   # ls /home

   # useradd test01

   # more /etc/passwd /etc/shadow

   # ls /home

   # grep test01 /etc/passwd

 

   # usermod -d /home/user02 -m -l user02 test01

 

 

 

 

 ▶ 사용자 그룹 관리

 

   시스템 사용자 관리를 위해 논리적으로 나누는 단위를 사용자 그룹

   주로 부서명을 사용한다.

 

   # groupadd group_name : /etc/group

 

 ▶ 예제 그룹 추가

 

   # groupadd -g 10000 sales

   # useradd -g 10000 sales01

   # passwd sales01

   # grep sales /etc/group /etc/passwd /etc/shadow

   # groupmod -n market sales

   # grep market /etc/group

   # tail -n -5 /etc/group

  

 

□ Disk Device

 

             E-IDE

             SCSI 1,2,3

             FC-AL ( 광모듈 )


 






디스크 관리

 



 ▶ 디스크 파티션 나누기

  - 장착되어 있는 디스크 확인

  - 파티션 나눌 디스크 선택

  - 파티셔닝 정보


 ▶ 예제


  # fdisk -l

  # fdisk /dev/sdb

  # cd /sbin

  # ls mk*

  # mkfs.ext3 /dev/sdb1


  # fdisk -l [disk_name]

  # fdisk disk_name


 ▶ 파일 저장을 위한 구조체 생성 : filesystem


   - 리눅스에서 파일을 저장하기 위한 저장 구조체를 생성

   - mkfs 계열의 명령을 사용하여 다양한 타입의 저장소 생성 가능

    ( 윈도우용, 유닉스 계열 용, 리눅스 )

    * ntfs 경우 커널 드라이버를 별도로 설치


 ▶ 예제 파일 시스템 생성


   # mkfs.ext3 /dev/sda3

  * mkfs 계열 명령은 “/sbin” 디렉토리 안에 위치 .


디스크 관리


1. 신규 디스크 추가

2. 파티션 나누기 : fdisk

3. 파일시스템 생성 : mkfs, mke2fs, mkfs.ext2, mkfs.ext3

4. mount / umount

5. 모니터링 : df, mount




 

  

디스크 작업 예제

 

# dmsg | grep -i scsi

# fdisk -l /dev/sdb

# fdisk /dev/sdb ( 파티션 나누기 )

# mkfs.extN /dev/sdbX

   mkfs -t ext3 /dev/sdbX

 

파일시스템 mount / umount

 

 mount [옵션] [연결할 장치명] [연결할 지점]

 

 의미 : 파일시스템이 구축 된 파티션을 사용하기 위해서 “/” 이하 디렉토리에 연결하는 작업.

 




 [예제]

  # fdisk -l /dev/sdb

  # mkdir /p1 /p2

  # mount /dev/sdb1 /p1

  # mount -t ext2  /dev/sdb2 / p2

  # df -h

  # mount

  * 파티션 연결 후 확인 할 때 : df -h

   1) 1번 필드의 파티션 명, 6번 필드 연결 지점 확인

   2) 파티션의 사이즈 정보

   3) 파티션의 사용량 정보

# df -h  ( 연결되어 있는 경우만 )  

# umount /p2

# df -h

[설정 파일]


“/etc/fstab” 파일에 마운트 할 파티션 정보를 입력하면 부팅 시 자동으로 마운트 할 수 있다.

<형식>

파티션               포인트               FStype               option                 dump                 fsck

/dev/sdb2           /p2                      ext2                    defaults 1                         2

/dev/sdb2           /p2                      ext2                    ro,noexec          1                         2

* option : mount 명령에 사용 될 옵션을 명시

* dump : 백업 가능 여부 ( 0: 백업 안함, 1: 백업 함 )

* fsck : 부팅 중 fsck 검사 여부 ( 0: 검사 안함, 1, 2 : 우선 순위 )

** mount option

 default ( rw, nouser, auto, exec, suid 속성을 모두 가지는 옵션 )

 auto : 부팅 시 자동 마운트

 noauto : 부팅 시 자동 마운트 안함

 exec : 실행 파일이 실행되는 것을 허용

 no exec : 실행 파일이 실행되는 것을 허용 안함

 suid : setuid, setgid 의 사용을 허용하는 옵션

 nosuid : setuid, setgid 의 사용을 거부

 ro ( read only ) : 읽기 전용

 rw ( read write ) : 읽고 쓰기 가능

 nser : 일반 계정 사용자들도 마운트 할 수 있는 옵션

 nouser : root mount 가능

[실습]

 # df -h

 # umount /

 # umount /p1

 # umount /p2

 # mount -r /dev/sdb2 /p2

 # mount -o ro,noexec,nosuid /dev/sdb1 /p1

 # mount

 # df -h

 # vi /etc/fstab

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

/dev/sdb1           /p1        ext3      nosuid,noauto    1           2

/dev/sdb2           /p2        ext3      ro,noexec          1           2

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

# init 6

# df -h

# mount | grep sdb

디스크 공간 점검 및 관리

 # df -h -> 파티션 별 사용 된 용량

 # du -k dir_name

 # du -sk dir_name

파일시스템의 무결성 점검(fsck)

- 검사는 총 5(또는 6) 단계로 진행

- 검사 시 중요한 요소는 inode

- 점검 시 사용자의 접근이 없어야 함파티션은 umount

   * 사용자의 동작을 오류로 간주할 수 있음

 # fsck [-option] [partition]

 [예제]


 # fsck

 # fsck /dev/sdb1

 # umount p2

 # df -h

 # fsck /dev/sdb2

*** 점검 대상 파티션은 반드시 umount 후 점검

*** ‘/’ 파티션은 싱글모드에서 fsck 사용 할 것 ( 유지보수, 긴급점검 )


  

부팅 중 싱글모드 진입

 

 - 로그인 불가능 한 경우

 - 시스템 유지 보수

 

1) Grub 진입 ->

2) Grub 에서 ‘e’ 버튼을 눌러 edit 대상 창으로 ->

3) Booting Module 선택 후 ‘e’ edit : “single” -> ‘b’ 부팅 시작

 

* 작업완료 <ctrl+d>를 입력하면 부팅 단계를 계속 진행.

 

- Grub 패스워드 설정

 

 * grub 명령 실행 -> md5crypt -> 패스워드 복사

 * /etc/grub.conf

  password --md5 <붙여넣기>

 

 ** 적용은 리부팅 후에 적용 됨.


 









□ Linux LVM

 ▶ 배경 : 물리적 디스크의 한계성을 극복

 ▶ 목적

   1) 관리 용이

   2) 디바이스의 여러 조합(크기)을 사용할 수 있음

   3) 확장성이 뛰어남 ( size )

   4) 안전성

   5) 백업 용이

 ▶ LVM 용어

   - PV : Physical Volume ( 디스크 또는 파티션 )

   - VG : Volume Group ( 사용자 관점의 디스크 관리 폴더 )   

   - LV : Logical Volume ( PV를 이용해 만들어진 가상 디스크 )


 ▶ LVM 사용을 준비

   - fdisk 명령을 사용하여 disk 의 파티션을 2G로 분할

   # fdisk /dev/sdb


   n -> p -> 번호 -> cylinder -> Size 입력 -> w

 

   - 파티션 타입 변경

   # fdisk /dev/sdb

   t -> 번호 ( 파티션 번호 ) -> Hex code: 8e -> w

 ▶ LVM 구성

  1. PV 구성

           - pvcreate : PV 구성 명령

           - pvdisplay : PV 구성 확인

           - pvremove : 구성 된 PV 삭제

             # pvcreate /dev/sdb1

             # pvdisplay

             # pvremove /dev/sdb1

  2. VG 구성

             - vgcreate : Volume Group 생성

             - vgdisplay : Volume Group 정보

             - vgremove : Volume Group 삭제

             # vgcreate -s 4m Group_name /dev/sdb1

             # vgdisplay

             # vgremove Group_name

[실습]

 # pvcreate /dev/sdb1

 # pvcreate /dev/sdc1

 # pvdisplay

 # vgcreate -s 8m class /dev/sdb1

 # vgdisplay

  3. LV 구성

             - lvcreate : Logical Volume 생성

             - lvdisplay : Logical Volume 정보

             - lvremove : Logical Volume 삭제

             # lvcreate -L size ( 단위 ) -n lv_name VG_name

             # lvdisplay

             # lvremove /dev/VG_name

 [실습]

   # lvcreate -L 500m -n weekend class

   # lvdisplay

   # lvremove

   # lvdisplay

 ▶ LVM 확장 명령어

   - vgextend : VG 에 디스크 추가

   - lvextend : LV 용량 확장

   - resize2fs : 추가 된 용량 적용

   # vgexted VG_name /dev/sdcX

   # lvextend -L +500m /dev/class/weekend

   # resize2fs -f /dev/class/weekend


  - lvcreate stripe 모드 설정

  # lvcreae -i <disk_개수> -l <PE개수> -n vol_name VG

[실습]

 # pvcreate /dev/sdb1

 # pvcreate /dev/sdc1

 # pvdisplay

 # vgcreate class01 /dev/sdb1

 # lvcreate -L 300m -n week class01

 # lvdisplay

 # mkdir /lv1

 # mkfs.ext3 /dev/class01/week

 # mount /dev/class01/week /lv1

 # df -h

 # vgextend class01 /dev/sdc1

 # lvextend -L +200m /dev/class01/week

 # df -h ( 사용 공간 늘어나지 않음 )

 # resize2fs -f /dev/class01/week

 # df -h

 # umount /lv1

 # lvremove /dev/class01/week

 # lvcreate -i 2 -L 1g -n week2 class01

 # mkfs.ext3 /dev/class01/week2

 # mount /dev/class01/week2 /lv1

 # df -h

 # lvextend -L +500m /dev/class01/week2

 # resize2fs -f /dev/class01/week2

 # df -h

* lv 사용 시 용량을 늘리는 방법

 1) linear mode

  - lvcreate ‘-i’ 옵션을 사용하지 않고 구성할 때

  - 크기를 확장 할 경우 볼륨 디스크의 데이터가 100%가 되기 전에 확장 된 디스크를

    사용하지 않음

  - Concatenation 방식

 2) stripe mode

  - lvcreate ‘-i’ 옵션이 사용 됨

  - 저장 될 데이터가 디스크에 분산적으로 저장 됨

  - 디스크의 I/O 가 좋아 짐

  - Striping 방식

* VG 는 한 시스템에서 99개까지 생성 가능

* PV, LV VG 안에서 최대 255개까지 생성 가능  

시스템 패키지 관리

  ▶ 패키지 유형

     1) 패키지 관리 명령으로 설치하는 패키지

     2) 소스형 패키지

     3) 바법사를 이용한 설치 패키지

     4) 복사형 패키지

  ▶ 관리 유형

    1) 패키지 정보 확인

    2) 신규 설치

    3) 업그레이드

    4) 패키지 삭제   

 # rpm -1 패키지_이름 : 패키지 정보 확인

 # rpm -qa

 # rpm -qdf 파일_이름 : 파일이름을 가지고 패키지 정보 확인

[설치 단계]

 - 설치 할 패키지 존재 여부 확인

 - 설치 할 패키지 매체 확인 : CD-ROM, download

 - 다운로드 할 경우 대표 사이트

    http://rpmfind.et

 - 패키지 이름 정보를 통해 버전 등을 파악한 후 다운로드

    package_name-Program_version-CPU.rpm

 # rpm -ivh Package.rpm --nodeps

 # rpm -Uvh Package.rpm

[제거]

 - 패키지 정보 확인

 - 다른 패키지와 함께 사용되는 영역들 확인

 # rpm -e Package_name

* Sourcer 패키지

  - 사용자 정의형으로 패키지를 조작할 수 있음

  - 명령을 만들기 위한 소스 코드

  - 소스타입 패키지는 gcc 컴파일러를 이용해 명령을 생성

 # gunzip 패키지명

 # tar xvf 패키지명

 # cd dir_pkg

 # ls Makefile ( 없을 경우 )

 # ls configure

 # ./configue

 # make            ( gcc 컴파일러를 이용한 파일 생성 )

 # make install ( 경우에 따라 필요 없음 )

[실습]

 - www.apache.org -> download

 - 다운로드 : 파일 링크 정보

 # wget http://파일링크정보/httpd-2.1.1.tar.gz

 # ls httpd *

 # tar zxvf httpd-2.1.1.tar.gz

 # cd httpd-2.1.1

 # ls Makefile ---> # ls configure

 # ./configure

 # make

 # make install  ->  /usr/local 이하에 디렉토리 생성

 # cd /usr/local/apache2/bin

 # ./apachectl start

 # ps -ef | grep httpd

<윈도우즈 브라우저를 이용해 접속>

 # ./apachectl stop ( web 서비스 종료 )

* 인터넷을 이용한 패키지 설치

 [업데이트 목록 보기]

  # yum list update

 [설치 된 목록 보기]

  # rpm -qa

  # yum list installed

 [gcc 패키지가 설치 확인]

  # rpm -qa | grep gcc

  # yum list installed gcc

 [gcc 패키지 신규 설치]

  # yum install gcc [gcc-c++]

 [gcc 패키지 업데이트]

  # yum update gcc gcc-c++

 [기타 패키지 검색 방법]

  # yum list 패키지명

  # yum list gcc

  # yum list gcc*

 [패키지 삭제]

  # yum remove gcc gcc-c++

압축 및 백업

 ▶ 백업 명령

   아카이브 - 독립 된 여러 개를 하나로

   # tar [option] backup_device backup_contents

    c : create backup

    x : extract backup -> restore

    f : device 지정 ( /dev/stN )

    v : verbose

    z : gz 로 압축 된 파일 압축 해제 ( GNU tar 명령에서만 사용 가능 )

[예제]

 # cd /root

 # mkdir backup work

 # cd work

 # man ls > man.ls

 # man ps > man.ps

 # man mount > man.mount

 # tar cvf /root/backup/work.tar /root/work

 # ls -l backup

 # rm -rf work

 # tar xvf backup/work.tar

 # gzip backup/work.tar

Shell script

  ▶ Script?

   script 는 사용자에게 제공되는 shell 인터페이스를 이용하여 프로그램 기능을 활용한 것

  - 작업의 효율성이 높다.

  - 관리자의 관리 업무 부담을 낮춘다.

  - 타 시스템으로의 이식성이 높다.

  ▶ 기초 스크립트 작성법

   #!/bin/sh       ->          명령 인터페이스

   # time stamp             ->          주석문

   date

  # Number of files

  ls -l /root/work | tail -n +2 | wc -l

  ls -l | tail -n + 2 | wc -l

  echo “End of program”

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


#!/bin/sh


date +%T

echo -n “File counter : “

ls -l /etc | tail -n +2 | wc -l

# Disk usage

echo “Now Disk Usage list“

df -h | grep dev

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

# chmod 755 check.sh

# ./check.sh

Shell

script = batch

- C   vs Bourne vs Korn

 * 변수 : 작업이 수행 될 때 그 값이 자주 변경되는 경우 값을 저장하는 장치

 * 선언 : 변수=

   ** script에 사용되는 변수는 형이 없음. unsigned , 사용 시 모두 char 탑으로 인식.

 * 확인 : echo $변수

 * 빈 공간이 들어가는 형태의 값을 변수에 선언할 때는 따옴표 기호를 사용

    따옴표의 기능은 스페이스의 구별 기능을 문자화 시킨다.

     1) “ “ : 공백 문자를 일반 문자화

     2) ‘ ‘ : 공백 문자, 특수 기능성 문자의 기능을 비활성화

     3) `command` : 다른 명령 속에서 또 다른 명령을 실행시켜 그 결과를 이용함.


[실습]

 # num1=3

 # num2=5

 # num3=7

 # echo $num1 $num2 $num3

 # string1=Linux is more fun (Error!)

 # string2=”Linux is more fun”

 # echo $string1 $string2

 # string3=”Linux is best $num1”

 # string4=’Linux is best $num1’

 # file1=`ls`

* 특수한 변수

$? : Exit status code ( 0 : 성공, 0 이외의 값 : 실패 )

$1~$9 : Postitional parameter ( argument 받기 )

$# : argument 개수

$* : 명령줄에 사용되는 모든 내용 받기

[예제]

# grep ‘root’ /etc/passwd

# echo $?

# grep ‘root’ /etc/password

# echo $?

# grep ‘ROOT’ /etc/passwd

# echo $?

* Interractive Script

 - 선언 : read 변수

 - Script 에서 사용 될 경우 사용자에게 정보를 주기 위한 프롬프트를 제작해야 함.

[예제]

# vi filecounter.sh

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

#!/bin/sh

echo “*****Number of files check script*****”

echo “Enter directory name : “

read dir

ls -l $dir | tail -n +2 | wc -l

echo “End of script”

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

#chmod 755 filecounter.sh

#./filecounter.sh

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

#!/bin/sh

# script name : filecount.sh

# version : 0.5A

echo -n “Enter directory name[ex:/usrbin] : “

read dir

count=’ls -l $dir | tail -n +2 | wc -l’

echo “---------------------------------------------------------------”

echo “Number of files in $dir : $count”

echo “---------------------------------------------------------------”

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


#chmod 755 filecounter.sh

#./filecounter.sh

* 숫자값 변수의 계산

 - Shell 에서 사용되는 변수는 문자 값으로 저장 되므로 연산이 불가능.

 - ‘expr’ 명령을 차용하여 강제로 계산함.

 - 정수형 계산만 가능

[예제]

 # num1=5

 # num2=2

 # num3=$num1+$num2

 # echo $num3

 # num3=”$num1 + $num2”

 # echo $num3

 # num3=`expr $num1 + $num2`

 # echo $num3

* Script 에 자주 사용되는 명령

 - sed 명령 : Editor 형태의 포맷을 지원

 - awk 명령 : Field 로 데이터 처리를 지원

 ** sed 명령 사용법

   1) sed [option] ‘/search word/cmd’ file_name

   2) sed [option] ‘line_num/search word/cmd’ file_name

   3) sed [option] ‘cmd/search/change/’ file_name

 *** 출력되는 명령의 일부분을 제거하고 출력할 때 주로 사용 됨.

[예제]

 # df -h | sed ‘s/%//’

 ** awk 명령

  - 사용방법

   1) awk ‘pattern’ file_name ( grep 명령 )

   2) awk ‘{ action }’ file_name

   3) awk ‘/pattern/{action}’ file_name

   ☆ 조건문, 순환문 등의 C언어 문법 적용이 가능 -> Action 처리

  <action>

   1> ‘{ }’ 안에 정의한다.

   2> action 으로 사용할 수 있는 것 : C 문법, print

   3> Field 구별 : $1, $2, $3, …

   4> Field 구별 기호 판독 : space , tap , Enter

  [예제]

  # df -h | awk ‘{ print $1 }’

  # df -h | awk ‘/dev/{ print $5 }’

  # df -h | awk ‘{ if ( $5 > 40 ) print $5 }’

[파티션 사용률 감시]


 # vi partition.sh

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

#!/bin/sh

echo “Partition Usage Monitor”

echo

df -h | sed ‘s/%//’ | awk ‘/sda/{ if ( $5 > 30 ) print ”disk full”, $5”%” }’

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

df -h | tail -n +2 | sed ‘s/%//’ > /temp/partition.info.tmp

warn=`awk ‘/sda/{ if ($5 > 30) print “warning”, $1, “:”, $5”%”}’ /tmp/partition.info.tmp`

echo “ [5;33m $warn [0m”

rm /tmp/partition.info.tmp

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

 # chmod 755 partition.sh

 # ./partition.sh

* 조건문

 1) if [ 조건문 ]

     then


             statement

     fi

 2) if [ 조건문 ]

     then

statement

     else

statement

     fi

3) if [ 조건문 ]                             case $변수 in

    then                                       case1) statement ;;

             statement                          case2) statement ;;

    elif [ 조건문 ]                       *) satement ;;

    then                                                   esac

             statement

    fi

[예제]

 # vi condition.sh

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

#!/bin/sh

echo -n “Enter partition name[ex: sda]: “

read partition

if [ “$partition” != “” ]

then

   df -h | grep $partition

else

 echo “Please input some partition name”

fi

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

# chmod 755 condition.sh

# ./condition.sh

# vi usercheck.sh

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

#!/bin/sh

echo -n “Enter new user name: “

read user

grep “$user” /etc/passwd

if [ $? -ne 0 ]

then

  useradd $user

  check=`grep $user /etc/passwd`

  echo “$check - check complete”

else

  echo “$user already exist. Please another name.”

fi

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

# chmod 755 usercheck.sh

# ./usercheck.sh

# file xinetd

# vi case.sh

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

#!/bin/sh

if [ $# -ne 1 ]

then

  echo “usage : case.sh [start|stop]”

  exit 1

fi

action=$1

case “$action” in

  “start”) echo “Program start”

  ;;

  “stop”) echo “Now program stop”

  ;;

  *) echo “Only use start or stop. try again”

  ;;

esac

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

# chmod 755 case.sh

# ./case.sh

  APM setting

  - 다운로드 프로그램

   WEB server : httpd-2.0.54.tar.gz

   MySQL server : mysql-4.1.14.tar.gz

   PHP module : php-5.5.x.tar.gz

  - 사이트

   www.apache.org   www.mysql.org   www.php.net

   -> ftp.superuser.co.kr

  - 설치 순서

   MySQL 설치 -> DB active -> Apache 설치 -> PHP 설치

  - MySQL 설치

# wget ftp://ftp.superuser.co.kr/mysql/mysql-4.1.12.tar.gz

# rpm -qa | grep mysql

# rpm -e mysql-server-xxxx --nodeps

# tar zxvf mysql-4.1.14.tar.gz

# cd mysql-4.1.14

# ./configure --with-charset=euckr

# make

# make install

# grep mysql /etc/passwd

# cd /usr/local/bin

# ./mysql_install_db --user=mysql

# chown mysql.mysql -R /usr/local/var

# ./mysqld_safe --user=mysql&

# ./mysqladmin -u root password ‘새로운 패스워드'

-> 소켓 에러 시 참고

:http://web.dicnote.com/bbs/board.php?bo_table=web_tip&wr_id=66&page=3

  - Apache WEB 서버 설치

# wget ftp://ftp.superuser.co.kr/apache/httpd-2.0.54.tar.gz

# tar zxvf httpd-2.0.54.tar.gz

# cd httpd-2.0.54

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-module=most

# make

# make install

http://kr2.php.net/get/php-5.3.8.tar.gz/from/kr.php.net/mirror

  - PHP 설치

    # tar zxvf php-5.3.x.tar.gz

    # cd php-5.3.x

    # ./configure --prefix=/usr/local/php --with-mysql --with-config-file-path=/usr/local/apache/conf --with-apxs2=/usr/local/apache/bin/apxs --with-zlib-dir --with-gd --enable-gd-native-ttf

    # make

    # make test

    # make install

  - httpd.conf 설정

    LoadModule  php5_module  modules/libphp5.so

    AddType application/x-httpd-php  .html  .htm  .php  .inc

    AddType application/x-httpd-php-source  .phps

  - test 페이지

    #  cd  /usr/local/apache/htdocs ; vi  test.php

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

     <?

             phpinfo();

     ?>

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

    # cd /usr/local/apache/bin

    # ./apachectl start

- httpd 를 이용한 정보 확인

  # /usr/local/apache/bin/httpd -l : 모듈정보

  # /usr/local/apache/bin/httpd -L : 모듈정보자세히보기

- WEB 서버 상태 정보 보기

  # httpd.conf 파일의 server-status 영역의 주석문 제거

  # WEB 페이지의 URL : http://server주소/server-status


 

** 네트워크 트러블 슈팅

 

 - 네트워크 케이블 체크

 

 - 네트워크 체크

 # ifconfig  eth# : up 키워드 유무, 올바른 IP 주소 사용 여부

 

 - 외부망 접속 체크

 # netstat -rn : UG 키워드 및 Gateway IP 확인

 

 - 재부팅 후 네트워크 장애: off -> on 네트워크 세팅 사라짐

  # cd /etc/sysconfig/network-scripts

  # more ifcfg-eth# 파일 확인

 

 - 네트워크 특정 서비스 안될 때 : iptables 확인

  # chkconfig iptables --list

  # service iptables stop

 

** chkconfig 명령의 활용

 

  - 서비스 리스트 확인

   #  chkconfig --list

   # chkconfig service_name --list

 

  - 서비스 레벨 별 on/off

   # chkconfig --level [레벨] service_name [on/off]

   # service service_name restart

 

[예제]

  # chkconfig iptable --list

  # chkconfig -h

  # chkconfig --level 2 iptables off

  # chkconfig iptables --list

 

 

- httpd.conf


 



 

+ ServerRoot

+ mpm_netware

- Timeout

- KeepAliveRequests

- KeepAliveTimeout

+ prefork

- StartServers

- StartServers

- MinSpareServers : 접속자가 많은 경우 수치 높게

- MaxSpareServers : 접속자가 많은 경우 수치 높게

- MaxClients

+ worker

- ThreadsPerChild

- MaxRequestsPerChild ( 0 : 무제한 )

+ Listen

+ User

+ Group

+ ServerAdmin

+ DocumentRoot

+ DirectoryIndex

+ AccessFileName

+ AddIcon

+ AddLangage

+ AddCharset

+ Location / server-staus

+ LoadModule

 

 

 






Trackback 1 : Comment 0