블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

SSL 통신 구조

* SSL의 구조
SSL은 가장 다양한 분야에서 적용하고 있는  프로토콜 중 하나다. TCP/IP는 기본적으로 보안을 고려하지 않으므로 전자상거래를 비롯한  온라인 서비스를 활성화하려면 서비스 상호간의 인증, 암호와 통신을 비롯한 문제점을  한다.
* SSL의 개념
SSL은 'Secure Socket Layer'의  넷스케이프(Netscape)에서 처음 개발하여 넷스케이프 네이게이터(Netscape Navigator)에 처음 적용한 보안 프로토콜이다.  아이디어는 기본의 TCP/IP에서 고려하지 않은 보안 세션을 추가하여 통신 상호  전송 메시지에 대한 암호화와 상호 인증을 수행하는 프로토콜이다.

사용자 삽입 이미지

그림과 같이 SSL은 기존의 TCP/IP에서 응용 계층과 TCP 계층 사이에  보안 계층으로 동작한다. TCP 계층은 응용 계층의 프로톨 간의 인터페이스를  소켓을 이용하며, SSL은 각 소켓으로 연결된 상호 간의 통신 채널을  관리하는 기능을 한다. 클라이언트와 서버 간의 안전한 통신을 위하여 SSL은 같은 기능을 제공한다.
==================================================================================================
기능          | 설명
==================================================================================================
상호인증       | 클라이언트/서버 간의  위한 세션 키를 생성하고 "Hello"라는 메시지를 교환함으로써
         | 상호 인증을 한다.
--------------------------------------------------------------------------------------------------
기밀성        | 전송되는 메시지에 대한 다양한 형식의 암호화를  타인에게 메시지의 내용을 노출하
   | 지 않도록 한다.
--------------------------------------------------------------------------------------------------
무결성        | 전송 메시지의 변조를 방지할 수 있도록 MD5를 비롯한 알고리즘을  전자 서명을 한다.
==================================================================================================
기밀성이나 무결성 등의 암호학적 기능을  위해서는 국제적으로 표준화되고 있는 암호 알고리즘의 지원이 따라야 한다. SSL은  있는 주요 암호 알고리즘을 비롯하여 현재 주로 이용하는 다양한 암호  지원하고 있다.
==================================================================================================
기능          |  알고리즘
==================================================================================================
기밀성        | DES, 3DES, IDEA,  RC4
--------------------------------------------------------------------------------------------------
무결성        | MD5
--------------------------------------------------------------------------------------------------
서버      | RSA, X509
--------------------------------------------------------------------------------------------------
클라이언트 인증 | 현재  웹 브라우저에서 클라이언트 인증을 제공함
==================================================================================================
* SSL의  및 통신 절차
SSL은 다수의 프로토콜로 구성되어 있는 프로토콜 집합이라고  수 있으며, 패킷 분할, 세션 관리 등의 기본적인 통신과 관련된  수행하는 부분과 데이터의 암호화, 복호화, 메시지 인증 같은 보안 서비스를  있는 부분으로 구분할 수 있다.

사용자 삽입 이미지

그림에서 SSL  프로토콜, SSL 변겸 암호 스펙, SSL 경고 프로토콜이 SSL의 세션  및 동작을 처리하는 부분이며, 메시지의 암호화 및 무결성 등의 보안  SSL 레코드 프로토콜에서 담당한다.
* SSL 핸드쉐이크 프로토콜
서버 간의 통신을 수행하기 위한 첫번째 단계는 상호 간의 통신을  세션(Session)을 설정하는 과정이다. 세션은 데이터 전송을 위한 논리적인 경로로, 실제로는  개의 커넥션(Connection)이 포함이 되어 클라이언트와 서버 간의 논리적인 관계를 표시하는  포함하고 있다. SSL에서 세션 상태 연결을 수행하는 것이 SSL 핸드쉐이크  Handshake Protocol)이며 한 세션 동안 이용되는 암호 매개 변수를 생성하여  서버 간에 공유하기 위해서 사용한다.
SSL 핸드쉐이크 프로토콜은 SSL  프로토콜(Record Protocol)에 의해서 메시지의 송수신을 위한 작업보다 먼저 수행이 되어  같은 세션 정보들을 생성하게 된다.
세션 식별자(Session Identifier) :  또는 보류 중인 세션을 식별하기 위해서 서버가 임의로 설정한 식별자
certification) : 서버와 클라이언트 주체의 X.509 인증서
Cipher Spec :  데이터에 대해 수행되는 압축 알고리즘과 MAC 알고리즘에 대한 규격
압축  method) : 암호화 이전에 데이터 압축을 위해 사용하는 알고리즘
Master  : 클라이언트와 서버 간에 공유하는 48비트 길이의 비밀 값
재사용  : 세션이 새로운 연결에 사용 가능한지 여부를 나타내는 플래그
세션이 설정된 후 해당 세션 내에 수행되는 각 커넥션에서 메시지는 세션 정보의 Master secret과 클라이언트의 난수를 통해서 각 커넥션마다 다르게 생성된 비밀 키에 의해서 암호화된다. 따라서 공격자는 스니핑을 통해서 전송 내용을 도청하더라도 전송되는 메시지를 복호화하기 위한 정보를 얻어내기 어렵게 된다.

사용자 삽입 이미지

  세션을 설정하는 첫번째 단계로 클라이언트와 서버는 Hello  교환하며, 이 과정을 통해서 SSL 프로토콜 보존, 세션 ID, 암호  압축 방법을 설정하고 ClientHello.random과 ServerHello.random을 생성, 교환하게 된다. ClientHello 메시지를  서버는 클라이언트의 인증서를 요구할 수 있으며, 이 경우 서버 자신의  보내며 그렇지 않을 경우 ServerKeyExchange를 응답에 포함하여, CertificateRequest를 보내고, Hello  완료됨을 알리는 ServerHelloDone 메시지를 클라이언트로 보내어 응답한다.
클라이언트는 Hello에  응답을 받아서 클라이언트의 인증서 또는 ClientKeyExchange와 클라이언트가 사용할 ChangeCipherSpec 메시지를  뒤이어 CipherSpec에 맞추어 작성된 finished 메시지를 서버로 보낸다.
서버는  메시지와 이를 이용해서 만들어진 Finished 메시지를 받은 후 서버가 사용할 ChangeCipherSpec 메시지와 Finished 메시지를 보내고 이후에는 합의된 내용으로 Application Data의  이루어지게 된다.
* 세션(Session)과 커넥션(Connection)
커넥션은 실제로 데이터이  수신이 이루어지는 단위를 말하며, Peer-to-Peer 관계가 성립하는 개념이다. 이에 비해서 논리적인 개념에 가까우며 컴퓨터 사용 시부터 종료 시까지의 개념을 포함한다. 한 세션은 여러 커넥션을 포함할 수 있다.
*  레코드 프로토콜
SSL 레코드 프로토콜은 상호 송수신을 위한 암호화 스펙이  핸드쉐이크 프로토콜에 의해 공유된 후 이러한 스펙에 따라 실제로 전송하는  TCP 패킷으로 변환하기 위한 기능을 수행한다. SSL 레코드 프로토콜은 이를  먼저 전송하는 메시지를 일정한 단위의 조각으로 분리하는 Fragmentation, 레코드 압축과  메시지 인증 및 암호화, 복호화 기능을 수행한다.

사용자 삽입 이미지

레코드 프로토콜은 각 메시지에 대해 다음과 같은 절차를 통해서 전송을  먼저 전송할 메시지를 일정한 크기의 레코드 프로토콜 유닛(Record Protocol Unit)으로  각 유닛을 SSL 핸드쉐이크 프로토콜로 사전에 협의한 규칙에 맞게 압축한다.  압축된 유닛마다 해시를 이용한 MAC을 생성한 후 이것을 포함하여 암호화한  전송한다.
이 과정에서 사전에 클라이언트와 서버 간에 협의한 스펙에  암호화, MAC 생성, 압축 방식 등을 수행하므로, 메시지를 수신한 측에서도  해독할 수 있다.
* 변경 암호 스펙 프로토콜
변경 암호 스펙(Change Cipher Spec) 메시지는 이후에 전송되는 레코드에 대해서  스켁(Cipher Spec)에 정의된 알고리즘과 키를 이용해서 보호할 수 있도록 수신측에  용도로 사용한다. 간단히 요약하면 송수신하는 데 사용하는 암호화 알고리즘, MAC,  방식 등을 요약하고 있는 암호 스펙을 변경하는 데 이용한다.
키 교환 메시지와 인증서 확인 메시지를 전송한 후 보내며, 서버는  받은 키 교환 메시지를 성공적으로 처리한 후 보내게 된다.
* SSL 경고 프로토콜
SSL 경고 프로토콜(SSL Alert Protocol)은 SSL의  과정에서 발생할 수 있는 문제 상황에 대해 경고를 전달하기 위해서  전송하는 경고 정보는 SSL 스펙에 정의되어 있는 치명적은 경고 목록과  심각성을 나타내는 2바이트 데이터로 구성된다.

Posted by redkite
, |

아파치 2 최적화

웹 서비스의 성능 최적화는 웹서버에서의 튜닝과 웹 브라우져, 웹 콘텐츠 그리고 다른 시스템과의 관계 등을 동시에 다루어야 하지만 자바스크립트, 웹 그래픽, HTML, CSS 등의 최적화에 대한 것은 이 글에서 취급하지 않는다. 필자는 http://www.websiteoptimization.com/ 에서 그런 정보들을 얻을수 있었다.

이 글은 아파치 웹 서버의 최적화에 대해서만 다루고 있으므로, 그 외의 다른것들과 통합해서 웹 서비스 성능 개선 방안을 마련하는 것은 여러분의 몫이다.


<필자소개>

성명 : 박성수

“리눅스포털” www.superuser.co.kr 대표

중소기업연수원 객원교수

한국정보통신인력개발센터 전문위원

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

1회|2005. 7|아파치 2 최적화

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

필자소개

필 자는 현재까지 “리눅스포털” www.superuser.co.kr의 대표 운영자로서 활동하고 있고 약 10년간 서버관리를 해왔으며, 그리고 리눅스 서버관련 전문서 집필 및 리눅스 강의를 주로 하고있다. 필자의 가장 큰 꿈이자 희망이라고 한다면 대한민국에서 리눅스가 아무런 제약없이 사용되어지는 것이다. 현재는 이런 문제에 관심을 가지고 나름대로 활동하고 있다.


발문

서 버관리 업무에서 가장 큰 관심거리 두가지를 들라고 한다면 안전한 시스템구현을 위한 보안문제와 성능 최적화 및 향상을 위한 튜닝문제일 것이다. 이번강좌에서 필자는 현재 웹서버로써 가장 많이 사용되고 있는 아파치의 성능향상을 위한 튜닝방법에 대하여 실무적인 접근을 해보고자 한다. 이번 강좌에서 언급하지 아니한 많은 부분의 튜닝방법(예: H/W튜닝, 운영체제튜닝등)들이 있기는 하지만 이번 강좌는 순수하게 아파치웹서버 자체에 대한 튜닝임을 밝혀둔다.


필자는 리눅스 시스템 관리자이다.

시 스템 관리자란 어떤일을 하는가? 서버가 언제 어떻게 될지 모르는 상황에서 자기시간 이라는 개념이 없으며, 끊임없이 발생하는 취약성들에 대한 점검과 패치, 고객의 각종 문제들, 손실된 데이터 복구 문제 등 늘 긴장속에서 살아가야한다.

시스템 관리자라는 직업이 의미하는 바는 여기서 그치지 않는다.

시스템 유지보수, 성능 관리, 가용성 관리, 용량 관리, 장애 복구 등 시스템 관리자라면 대게 이 정도의 항목들을 관리하게 된다. 다른 분야 역시 마찬가지 이겠지만 시스템 관리자라는 업무는 끊임없는 자기 개발과 노력을 요구한다.

이 글에서는 시스템 관리자의 이런 개발과 노력에 도움이 되고자 리눅스로 운영하는 아파치 웹서버의 최적화에 관해서 다루기로 한다.


아파치 성능 테스트 계획


테스트 환경

OS : Red Hat Enterprise Linux AS release 4 (Nahant)

Kernel Version : 2.6.9-5.ELsmp

CPU & Cache : 2 Xeon(TM) CPU 3.06GHz 3057MHz, 512 KB Cache

Memory :  2G

Swap : 4G

Web server : Apache Http Server 2.0.52

Web test tool : ab, Httperf, flood


테스트 계획

rpm 설치후 기본 상태에서 설치된 웹서버에 동시 접속자 1000 명이 1000 번의 요청을 하는 경우를 테스트하여 웹서버의 성능을 측정한다.

다양한 환경설정을 변경해서 웹서버를 튜닝한 이후 다시 동일한 환경으로 테스트해서 실제적인 성능향상이 있는지를 점검한다.


테스트 케이스

1) ab -n 1000 -c 1000 -t 10 http://210.183.235.95/

2) httperf --server 210.183.235.95 --port 80 --rate 1000 --num-conns 20000 --hog

3) flood floodconf..xml > result.out (floodconf.xml 파일에 환경설정)

기본설치후 아파치 성능 테스트


웹사이트가 느리면 고객은 바로 다른 사이트로 이동하기 마련이다.

따 라서 기업은 고객을 확보, 유지하기 위해 웹사이트의 성능을 최상의 상태로 유지해야하며 이로 인해 웹사이트의 성능을 진단하고 분석하는 도구들에 대해서 많은 관심을 가지고 있으며 현재 기업들마다 다양한 방법들로 성능을 관리하고 있다.

상용 SW

공개 SW

WEBest

SiteAngel

sitemonitor

WatchPro/TestPro

WEBest

ab

Flood

Httperf

Hammerhead

Web Performance Tool (WPT)

표 1. <웹서버 성능테스트 프로그램 비교>


웹서버의 성능을 측정하기 위해서 먼저 공개SW 벤치마크 프로그램 ab, Flood, Httperf 에 대해서 알아보기로 하자.


ab

ab 는 "Apache HTTP server Benchmarking tool" 의 약어로서 아파치서버의 응답속도를 측정하는 밴치마킹툴이다. 이 툴은 현재 설치된 아파치서버의 실행속도 및 성능테스트를 위해서 제우스테크널리지(Zeus Technology Ltd, http://www.zeustech.net/)의 Adam Twiss가 개발한 툴이며. 아파치를 설치하고 나면 기본적으로 설치되므로 별도의 설치 과정 없이 바로 사용할 수 있다.

명령어위치: /usr/local/apache/bin/ab

(RPM설치시 : /usr/bin/ab)


아래는 ab를 이용해서 -c(한번에수행할 다중요구수) 값을 1000으로하고, -n(페이지요청수) 값을 1000 으로 하였으며 -t(테스트허용 최대시간)값을 10으로 주는 예이다.


[root@www ~]# ab -c 1000 -n 1000 -t 10 http://210.183.235.95/

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/


Server Software: Apache/2.0.52

Server Hostname: 210.183.235.95

Server Port: 80


Document Path: /

Document Length: 440 bytes


Concurrency Level: 1000

Time taken for tests: 10.6038 seconds

Complete requests: 13416

Failed requests: 0

Write errors: 0

Total transferred: 8176434 bytes

HTML transferred: 5907440 bytes

Requests per second: 1340.79 [#/sec] (mean)

Time per request: 745.829 [ms] (mean)

Time per request: 0.746 [ms] (mean, across all concurrent requests)

Transfer rate: 797.92 [Kbytes/sec] received


Connection Times (ms)

min mean[+/-sd] median max

Connect: 1 286 1301.0 4 9005

Processing: 21 148 467.1 95 6437

Waiting: 17 135 424.3 87 6434

Total: 57 434 1457.6 108 9703


Percentage of the requests served within a certain time (ms)

50% 108

66% 120

75% 127

80% 135

90% 179

95% 3076

98% 9068

99% 9076

100% 9703 (longest request)


ab 의 측정결과에서 다음과 같은 내용을 분석할수 있다.

Server Software

아파치버전을 표시

Server Hostname

특정사이트의 이름(도메인명)

Server Port

웹서비스 사용포트번호

Document Path

초기 문서가 준재하는 웹문서 root위치

Time take for tests

응답시간(매우 중요한 결과 값임)

Document Length

초기문서(대부분 index.html, index.htm)의 용량크기

Complete requests

요구에 응답완료한 세션수

Failed requests

요구에 응답실패한 세션수

Broken pipe errors

실패한 에러수

Total transferred

총 전송바이트수

HTTP transferred

총 전송한 HTML바이트수

Requests per second

초당응답요구수

Time per request

요구에 응답한 시간(단위 micro second, 중요한 결과값)

Time per request

요구에 응답한 시간

Transfer rate

초당전송가능한 용량

표 2. <ab 의 결과분석>



Httperf


Httperf 툴은 요청이 발생하는 비율, 총 연결 수, 타임아웃 한계 등을 제어할 수 있다.

다운로드는 http://www.hpl.hp.com/research/linux/httperf/ 에서 가능하며 설치는 일반적인 소스설치법과 동일하게 ./configure ; make; make install 로 진행할수 있다.

사용할 수 있는 옵션은 아래와 같다

--server 서버주소

여기에 적어 준 서버로 접속을 시도한다

--port 숫자

여기에 적어 준 포트로 접속을 시도한다

--num-conns 숫자

총 몇개의 접속을 만들 것인지를 결정한다.

--rate 숫자

초당 몇개의 접속을 만들 것인지를 결정한다.

--timeout 숫자

숫자만큼의 초 이후 응답이 없는 연결은 timeout 에러로 처리한다.

--think-timeout 숫자

CGI등 서버쪽에서 처리해야 하는 일들이 있는 페이지의 경우 서버측에 이를 처리할 시간을 준다. timeout에서 이곳에 주어진 숫자만큼을 더한 값이 진짜 timeout값이 된다.

--hog

가능한 모든 포트를 사용한다. 이 옵션을 주지 않으면 기본적으로 1024부터 5000까지의 포트만 사용한다.

표 3.<httperf 의 주요옵션>


아래 예제는 210.183.235.95 웹서버의 80번 포트로 1초에 1000개씩 총 20000개의 접속을 만들게 된다.

[root@www ~]# httperf --server 210.183.235.95 --port 80 --rate 1000 --num-conns 20000 --hog

httperf --hog --client=0/1 --server=210.183.235.95 --port=80 --uri=/ --rate=1000 --send-buffer=4096 --recv-buffer=16384 --num-conns=20000 --num-calls=1

Maximum connect burst length: 8


Total: connections 20000 requests 20000 replies 20000 test-duration 20.000 s


Connection rate: 1000.0 conn/s (1.0 ms/conn, <=540 concurrent connections)

Connection time [ms]: min 0.3 avg 70.5 max 3006.4 median 1.5 stddev 422.3

Connection time [ms]: connect 60.8

Connection length [replies/conn]: 1.000


Request rate: 1000.0 req/s (1.0 ms/req)

Request size [B]: 65.0


Reply rate [replies/s]: min 978.7 avg 1000.0 max 1021.5 stddev 17.5 (4 samples)

Reply time [ms]: response 9.6 transfer 0.0

Reply size [B]: header 169.0 content 440.0 footer 0.0 (total 609.0)

Reply status: 1xx=0 2xx=20000 3xx=0 4xx=0 5xx=0


CPU time [s]: user 3.83 system 14.57 (user 19.2% system 72.9% total 92.0%)

Net I/O: 658.2 KB/s (5.4*10^6 bps)


Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0

Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0


Flood - a profile-driven HTTP load tester

Flood 는 아파치 프로젝트 하위의 프로젝트이다

XML 설정파일을 필요로 하며, URL 과 POST data 를 여러 서버들에 테스트할수 있다.


현재 Flood 는 Subversion 으로 관리되고 있으며 설치시에 자동으로 소스 디렉토리 하위에서 apr 과 apr-util 패키지를 찾으므로 아래처럼 체크아웃해서 설치하면 된다.

만일 apr 과 apr-util을 이미 받아온 상태라면 configure 할때 --with-apr and --with-apr-util 옵션을 사용해서 경로를 지정해주면 된다


% svn co http://svn.apache.org/repos/asf/httpd/test/trunk/flood

% cd flood

% svn co http://svn.apache.org/repos/asf/apr/apr/trunk apr

% svn co http://svn.apache.org/repos/asf/apr/apr-util/trunk apr-util


% ./buildconf

% ./configure --disable-shared

% make all

설치가 정상적으로 진행되었으면 설치한 디렉토리에서 아래처럼 확인할수 있다

% ./flood examples/round-robin.xml > foo.out


결과 파일을 다른프로그램에서 활용하고 싶은 경우는

% ./examples/analyze-relative foo.out 를 실행해보면 참고할수 있다.

analyze-relative 파일은 테스트 결과값을 가공하는 간단한 스크립트이다.


Flood 에 대해서 보다 상세한 정보를 원한다면 http://httpd.apache.org/test/flood/faq.html 를 방문하자.

아래는 floodconf.xml 파일을 이용해서 테스트 하는 부분이다. xml형식의 환경설정 파일을 설정하는 방법은 http://httpd.apache.org/test/flood/ 를 방문해서 참고하기 바란다.


[root@www ~]# flood floodconf.xml > result.out

[root@www ~]# ./analyze-relative result.out

Slowest pages on average (worst 5):

Average times (sec)

connect write read close hits URL

0.0018 0.0019 0.0081 0.0082 29126 http://210.183.235.95/

Requests: 29127 Time: 0.80 Req/Sec: 41776.74




설정변경을 통한 아파치 성능 최적화

아파치는 httpd.conf 파일을 이용해서 성능과 안정성 그리고 보안을 각각 구현할수 있다. 이제부터 리눅스에서 아파치 웹서버를 최상의 상태로 운용하기 위하여 성능을 향상시킬수 있는 아파치의 설정 지시자들을 살펴보기로 하자.


Timeout

접속된 클라이언트가 서버에 아무런 요청이 없을 때 어느정도 시간이 지나면 연결을 끊을지를 초단위로 설정한다. 네트웍의 성능이 낮을수록 이 수치를 높게 설정하는 것이 좋다.


MaxClients

웹서버 성능에 가장 큰 영향을 주는 것은 메모리다. 방문자의 요청에 응답하기 위해서 프로세스가 생성되는되 이 지시자의 개수만큼만 생성가능하다. 여기서 지정한 개수 이상의 요청이 들어오면 아파치는 요청을 무시한다.

MaxClients 지시어를 조절하여 웹서버가 스왑을 할 정도로 많은 프로세스를 만들지 않도록 해야 한다. 스왑은 요청당 지연시간을 늘리기 때문에 웹서버는 스왑을 하면 안된다. top으로 프로세스 목록을 보고 아파치 프로세스의 평균 메모리 사용량을 알아낸후, 사용가능한 메모리의 양만큼 조절해준다


KeepAlive

아 파치의 한 프로세스가 접속한 클라이언트의 지속적인 요청작업을 계속해서 처리하게 할 것인지를 결정하는 지시자. 이 지시자의 값을 On으로 되어 있어야 MaxKeepAliveRequests , KeepAliveTimeout 지시자가 유효하게 된다


MaxKeepAliveRequests

이 전의 KeepAlive 지시어가 On 일때만 유효하다. KeepAlive 를 이용해서 한 프로세스가 접속한 클라인언트의 이어지는 요청을 모두 처리하도록 설정했는데, 이때 무한정 계속 처리하는것이 아니라 이 지시자를 이용해서 처리할 횟수를 지정해준다. MaxKeepAliveRequests 100 처럼 설정해두면 프로세스가 100번의 요청을 처리한후 자신은 죽고 그다음 프로세스가 다시 클라인언트의 요청을 이어서 처리하도록 하는것이다. 방문자가 많은 홈페이지라면 이 값을 좀 올려두는것이 좋다


KeepAliveTimeout

이전의 KeepAlive 지시어가 On 일때만 유효하다. KeepAlive 를 사용한다면 프로세스들은 이미 열린 연결에서 추가 요청을 기다리며 대기중이다.

KeepAliveTimeout 15 처럼 설정해두면 클라이언트가 15초동안 아무요청이 없으면 프로세스의 연결을 끊는다. 이 값을 60 초 이상으로 올리면 사용자의 요청을 기다리며 아무일을 하지않는 프로세스가 60초동안 떠있게 되는것이다. 자신의 네트웍대역과 부하에 따라 적절히 조절하자. 기본값 15 로도 무방하다


StartServers

아파치 시작시에 실행시킬 프로세스의 개수. 뒤에나오는 MinSpareServers, MaxSpareServers 등의 지시자에 의해서 프로세스는 생성되기도 하고 죽기도 하므로 큰 의미를 가지는것은 아니다.


MinSpareServers

항상 대기하고 있을 프로세스의 최소개수. 여기서 지정한 숫자보다 적은 프로세스가 대기되어 있다면 아파치는 가능한 이 숫자를 유지하기위해 노력한다.


MaxSpareServers

항상 대기하고 있을 프로세스의 최대개수. 여기서 지정한 숫자보다 많은 프로세스가 대기되어 있다면 아파치는 가능한 이 숫자를 유지하기위해 노력한다.


MaxRequestsPerChild

하나의 프로세스당 최대 처리할 수 있는 방문자의 요청횟수

서버사양이 좋다면 이 값을 높여 두는것이 시스템의 부하조절과 자원낭비를 방지하는데 좋다.


HostnameLookups

웹서버의 로그(access_log)에 보면 클라이언트의 IP가 기록되어있는데 이 지시자를 On으로 설정하면 IP주소를 도메인명으로 기록하기위해서 노력을 하게된다.

아파치 1.3 이전에 HostnameLookups의 기본값은 On이였다.

이말은 접속을 요청하면 DNS를 검색해서 접속자의 호스트명을 알아내어야 한다는것이다,. 아파치 1.3에서 이 설정의 기본값이 Off로 변경되었다.

아파치의 성능을 생각한다면 반드시 Off 로 설정하기 바란다.

만일 로그파일의 주소를 호스트명으로 변환할 필요가 있다면 아파치에 포함된 logresolve 프로그램을 사용해서 나중에 할수있으니 실제 사용하는 웹서버가 아닌 다른 컴퓨터에서 로그파일을 후처리하길 바란다.


다른 설정에서 DNS 질의 고려

Allow from domain이나 Deny from domain 지시어를 사용한다면 (즉, IP 주소가 아닌 호스트명이나 도메인명을 사용한다면) 부득이 중복-역 DNS 검색을 (역검색을 한후 악의로 변경되었는지 확인하기위해 다시 검색) 해야 한다. 그러므로 성능을 높이기 위해 이런 지시어에는 가능하면 이름대신 IP 주소를 사용하자


FollowSymLinks와 SymLinksIfOwnerMatch

가능하면 심볼릭링크를 허용하지 않는것이 보안상 좋다. 하지만 꼭 써야한다면 Options SymLinksIfOwnerMatch 보다는 Options FollowSymLinks를 사용하라

Options SymLinksIfOwnerMatch 일 경우 아파치는 심볼릭 링크를 검사하기위해 시스템호출을 한번 더 해야 한다. 좋은 성능을 얻으려면 SymLinksIfOwnerMatch는 피하자


AllowOverride

AllowOverride 는 이전에 설정된 아파치 환경설정을 무시하고 새로운 설정을 적용하는 방법에 대한 설정이다. AccessFileName 을 별도로 설정하지 않았다면 아파치는 .htaccess 파일을 디렉토리 접근인증에 사용한다.

설정할수 있는 지시자는 다음과 같다.


AuthConfig

AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트 인증지시자의 사용을 허용.

FileInfo

AccessFileName 으로 지정한 파일에 대하여 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority 등과같은 문서유형을 제어하는 지시자 사용을 허용

Indexes

AccessFileName 으로 지정한 파일에 대하여 AddDescription, AddIcon, AddIconByEncoding, DirectoryIndex, FancyIndexing 등과같은 디렉토리 인덱싱을 제어하는 지시자 사용을 허용

Limit

AccessFileName 으로 지정한 파일에 대하여 allow, deny, order 같은 호스트접근을 제어하는 지시자사용을 허용

Options

AccessFileName 으로 지정한 파일에 대하여 Options 지시자를 이용한 재설정을 허용

All

위에서 이야기한 모든 것을 허용

None

AccessFileName 으로 지정한 파일을 무시. 어떠한 설정도 재설정 할수 없다.


만일 overrides를 허용한다면 아파치는 파일명의 각 부분마다 AccessFileName 으로 지정한 파일(대부분 .htaccess)을 열길 시도한다. 예를 들어 설정은 아래와 같고,


DocumentRoot /www/htdocs

<Directory />

AllowOverride all

</Directory>


/index.html URI에 대한 요청이 있다고 가정하자.

아파치는 /.htaccess, /www/.htaccess, /www/htdocs/.htaccess를 매번 열려고 시도한다. 최고의 성능을 얻으려면 항상 AllowOverride None을 사용하자.


EnableMMAP

커널에서 메모리매핑(mmap)을 지원한다면 아파치가 웹문서를 로딩하기 위하여 내부문서를 읽을때에 파일을 메모리 매핑하여 처리한다. 따라서 아파치의 성능이 크게 향상될수 있다.

그 러나 메모리대응이 서버의 성능을 떨어트리고 심지어 안정성을 해치는 경우가 있고 smp Solaris 서버에서 아파치 2.0은 종종 mmap을 사용하지 않을때가 더 빠르다. 또한 NFS 마운트한 파일시스템에 있는 파일을 메모리 대응하는 도중에 다른 NFS 클라이언트에 있는 프로세스가 파일을 지우거나 파일크기를 줄이면, 웹서버 프로세스가 다음 번에 메모리대응한 파일내용을 읽을때 bus error가 발생할 수 있다.

위의 조건에 해당하면 전송하는 파일을 메모리대응하지 않도록 EnableMMAP off를 사용해야 한다.


EnableSendfile

아 파치는 운영체제가 sendfile을 지원하면 커널 sendfile을 사용하여 정적 파일을 서비스하는 경우 전송할 파일을 직접 읽지않을 수 있다. sendfile을 사용하면 read와 send를 따로 할 필요가 없어서 매우 빨라진다.

그러나 sendfile을 사용하면 웹서버의 안정성을 해치게되는 경우가 있고, 커널은 자신의 캐쉬를 사용하여 NFS로 마운트한 파일을 안정적으로 서비스할 수 없는 경우가 있으므로

EnableSendfile off를 사용해서 파일을 sendfile 전송하지 않도록 할수 있다.



설정변경후 아파치 성능 테스트


이제까지 설명한 부분들을 자신의 환경에 맞게 각각 수정한 후 아파치 웹서버를 재시작하고 실제로 성능이 향상되었는지를 다시 테스트하기로 하자. 필자는 아래의 부분들을 수정해서 테스트했다.

변경이전

변경이후

Timeout 120

KeepAlive Off

MaxKeepAliveRequests 100

KeepAliveTimeout 15

HostnameLookups On

#EnableMMAP off

#EnableSendfile off

StartServers 8

MinSpareServers 5

MaxSpareServers 20

ServerLimit 256

MaxClients 256

Timeout 300

KeepAlive On

MaxKeepAliveRequests 10000

KeepAliveTimeout 25

HostnameLookups Off

EnableMMAP On

EnableSendfile On

StartServers 20

MinSpareServers 15

MaxSpareServers 45

ServerLimit 512

MaxClients 512

표 4. <httpd.conf 변경부분>


ab

[root@www ~]# ab -c 1000 -n 1000 -t 10 http://210.183.235.95/

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/


Benchmarking 210.183.235.95 (be patient)

Completed 5000 requests

Completed 10000 requests

Finished 14033 requests


Server Software: Apache/2.0.52

Server Hostname: 210.183.235.95

Server Port: 80


Document Path: /

Document Length: 440 bytes


Concurrency Level: 1000

Time taken for tests: 10.61616 seconds

Complete requests: 14033

Failed requests: 0

Write errors: 0

Total transferred: 8608215 bytes

HTML transferred: 6219400 bytes

Requests per second: 1394.71 [#/sec] (mean)

Time per request: 716.997 [ms] (mean)

Time per request: 0.717 [ms] (mean, across all concurrent requests)

Transfer rate: 835.45 [Kbytes/sec] received


Connection Times (ms)

min mean[+/-sd] median max

Connect: 2 162 961.7 18 9049

Processing: 16 126 385.1 94 6459

Waiting: 13 114 383.5 81 6439

Total: 52 288 1147.4 118 9890


Percentage of the requests served within a certain time (ms)

50% 118

66% 123

75% 128

80% 132

90% 153

95% 175

98% 3139

99% 9188

100% 9890 (longest request)


httperf

[root@www ~]# httperf --server 210.183.235.95 --port 80 --rate 1000 --num-conns 20000 --hog

httperf --hog --client=0/1 --server=210.183.235.95 --port=80 --uri=/ --rate=1000 --send-buffer=4096 --recv-buffer=16384 --num-conns=20000 --num-calls=1

Maximum connect burst length: 14


Total: connections 20000 requests 20000 replies 20000 test-duration 19.999 s


Connection rate: 1000.0 conn/s (1.0 ms/conn, <=37 concurrent connections)

Connection time [ms]: min 0.5 avg 3.1 max 47.3 median 1.5 stddev 4.6

Connection time [ms]: connect 1.0

Connection length [replies/conn]: 1.000


Request rate: 1000.0 req/s (1.0 ms/req)

Request size [B]: 65.0


Reply rate [replies/s]: min 996.2 avg 1000.0 max 1004.0 stddev 3.4 (4 samples)

Reply time [ms]: response 2.1 transfer 0.0

Reply size [B]: header 150.0 content 440.0 footer 0.0 (total 590.0)

Reply status: 1xx=0 2xx=20000 3xx=0 4xx=0 5xx=0


CPU time [s]: user 2.95 system 10.76 (user 14.8% system 53.8% total 68.6%)

Net I/O: 639.7 KB/s (5.2*10^6 bps)


Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0

Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0


flood

[root@www ~]# flood floodconf.xml > result.out

[root@www ~]# ./analyze-relative result.out

Slowest pages on average (worst 5):

Average times (sec)

connect write read close hits URL

0.0019 0.0020 0.0045 0.0046 28999 http://210.183.235.95/

Requests: 28999 Time: 0.45 Req/Sec: 65931.82


최종 테스트 결과

벤치마크라는 것이 다양한 환경요인에 영향을 받으므로 항상 동일한 값을 기대하기는 어려운 관계로 3가지 벤치마크 프로그램들의 결과값이 모두 동일하게 나타나지는 않지만 설정을 변경하기 이전보다 전부 향상된 것을 확인할 수 있다.

ab

httperf

flood

기본상태

Time per request: 745.829 [ms]

Reply time [ms]: response 9.6

Time: 0.80 sec

튜닝이후

Time per request: 716.997 [ms]

Reply time [ms]: response 2.1

Time: 0.45 sec




마치며

몇 몇 웹디자이너들은 사용자들이 빠른 사이트를 원하는 사실을 간혹 잊기도 한다. 때문에 화려한 화면구성을 위해서 속도를 무시하는 경우가 가끔 있고, 그렇게 만들어지는 웹서버의 콘텐츠들이 웹서버를 느리게 만들기도 하고, 네트워크의 병목현상과 서버의 로드로 인해 느려질수도 있다.

웹 서버의 최적화는 아파치의 설정이외에도 이런 다양한 요소에 의해 영향을 받는다.


필 자는 여러분이 리눅스 서버 관리자로서 적어도 아파치를 설정해서 공짜로 얻을수 있는 성능향상을 놓치지 않기를 바란다. 이 외에도 여러분은 아파치 성능향상을 위해서 mod_rewrite 를 이용한 URL생략법, mod_gzip 을 사용한 콘텐츠 압축, mod_expires 모듈을 이용한 이미지캐싱 등을 이용할 수 있다.


처음에 이야기한 것처럼 다른 시스템들과 통합된 환경에서 웹 서비스의 최적화된 성능 개선방안을 마련하는 것은 글을 읽는 여러분의 몫이다.

 

Posted by redkite
, |

레이드 ( RAID ) 의 레벨과 구성 ( 1부 : Raid Level 0,1,2,3,4 )

간단하게 정리하자면
Raid Level 0 인 Striping(스트라이핑)은 
데이터를 쪼개서 저장하는 
즉, 분산 저장 해서 속도향상을 위한 레벨이고


Raid Level 1 의 
Mirroring ( 미러링 )은 
안전성을 좋지만 드라이브 용량 이용의 비효율성이 있습니다

Raid Level 3,4 는 
Parity ( 패리티 : 
데이터 오류 체크 기술)로 레벨0의 불안전성을 보완한것입니다.


                                               이제 가장 많이 사용하는 
             Raid Level 5 
와 Level 6 복합구성인 01, 50, 60 등에 관해서 말하겠습니다.



RAID Level 5 ( 레이드 5 ) : 필요 드라이브 최소 3개이상



  레벨 5는 레벨 3과 레벨 4의 단점을 보완한 방식으로, 패리티 정보의 저장을 전담하는 하드디스크 대신 모든 하드디스크에 패리티 정보를 분산 저장합니다. 이 방식은 쓰기(Write)에는 패리티 정보가 분산되어 
저장되기 때문에 Level 3, 4의 단점이었던 병목을 줄여주지만, 읽기(Read)에서는 사방에 흩어져 있는 
패리티 정보를 갱신하며 읽게 되기 때문에 성능 저하가 생길 수밖에 없습니다. 
이러한 단점 역시 컨트롤러에 지능형 캐쉬를 내장하여 속도저하를 최소화시키는 역할을 하고 있습니다.
 
성능면에서 
Raid 0 보다 떨어지지만 성능, 안정성, 용량 3 부분을 고려한 형태입니다.



하나의 드라이브가 고장날 경우 다른 드라이브에 별도로 저장된 패리티( Parity ) 정보를 정보를 통해서 
복구하고 손상된 드라이브의 패리티 ( Parity ) 정보는 나머지 하드에 있는덷 테이터를 토대로 다시 작성할 수 있습니다. 그러나 별도의 패리티 정보를 저장하는 작업을 해야 하기 때문에 RAID Level 1 보다는 
쓰기 성능이 떨어집니다.


   가끔 전화와서  
    " 고객님~!" " 계란을 한바구니에 담지마라~!! 그러면서~ 좋은 상품이 있어서~~.

      요러 면서 광고 시작하죠? 
      이 멘트가 
적용된 레이드 구성입니다. 각각의 하드에 패리티 정보를 분산 시킨거죠 ^^


RAID 3, 4와 달리 패리티 정보가 저장된 디스크가 따로 없어 패리티 디스크 고장과 같은 문제에서 
자유롭고 
실제 서버/워크스테이션에서 가장 많이 사용되는 방식입니다.




RAID Level 6 ( 레이드 6 ) : 필요 드라이브 최소 4개이상


레벨 6
은 RAID 5와 같은 개념이지만 다른 드라이브들 간에 분포되어 있는 2차 패리티 정보를 넣어 2개의 하드에 문제가 생겨도 데이터를 복구할 수 있습니다. RAID 5보다 더욱 데이터 안정성을 고려하는 시스템에서 사용합니다.


 하드를 스트라이핑으로 묶었기 때문에 RAID 0+1이나 RAID 10(1+0)보다 성능은 더 높고 신뢰성도 우수 하지만 패리티 정보를 2중으로 저장하면서 읽기 성능은 RAID 5와 비슷하지만 쓰기 작업 구현이 아주 복잡해서 일반적으로 잘 사용하지 않습니다.





RAID Level  0+1 / 1+0 (레이드 01 / 10 ) : 필요 드라이브 최소 4개


간단히 말하자면 레이드 레벨 0과 레벨 1의 복합 구성입니다. 

레벨 0의 Striping과 레벨 1의 Mirroring의 기능이 합쳐진 것으로, 분산 저장을 통한 성능 향상을꾀할 수 있으면서 데이터의 안정성 또한 보장받을 수 있습니다. 때문에 속도 및 안정성 두 마리의 토끼를 다 잡은 듯 보이지만, 여전히 전체 용량의 50%만 사용할 수 있는 것은 변함이 없으며, 비용이 많이 든다는 문제점이 있습니다.


 01과 10의 차이는 어느 쪽을 먼저 구성하느냐의 차이입니다. 
4개의 드라이브로 구성한다면 위의 이미지 처럼 그 차이는 없습니다. 
그러나 6개의 드라이브로 구성한다면 달라지게 됩니다.(아래 이미지 참고)
드라이브가 6개일때 01의 구성은 3:3 으로 구성되지만
                           10의 구성은 2:2:2 로 구성되게 됩니다.



드라이브가 6개일때...
    RAID 0+1은 RAID 0으로 구성된 드라이브들을 
                    최종적으로 RAID 1로 묶는 것이라 각각 3개씩 하드 가 나눠지며, 

    RAID 1+0은 2개씩 RAID 1으로 묶여있는 하드들이 RAID 0으로 구성됩니다. 
  
RAID 0+1의 경우 1개의 하드만 고장나서 
복구해도 다른 RAID 0 구성에서 나머지 하드까지 데이터 전체를 복구해야 하지만, 

RAID 1+0으로 만든 시스템은 
고장난 하드가 하드 1개라고 하면 미러링으로 묶인 하드를 통해 데이터만 복구하면 되므로 

실제로 운용하는데는 RAID 1+0 이 훨씬 유리합니다. 

이외에 Raid 51 / 15 ,  Raid 05 / 50 , Raid 60 이나 Raid100 등 역시 기존의 레벨의 복합적 구성입니다. 


레벨 0 이 들어가면 성능의 향상을 기대할수 있으나 안정성은 불안하게 됩니다. 
레벨 1 이 들어 가면 안전성을 확복할수 있으나 용량의 감소 또한 감수 해야 됩니다.
레벨 5나 6의 구성에 최소 3~4개의 드라이이브가 소모되기 때문에 
이들의 복합적인 구성은 최소 6개 이상의 드라이가 있어야 가능한 구성입니다. 
한마디로 돈 많이 들어간다는 거죠. ^^ 


          마지막으로 나름대로 정리해본 레이드 레벨(RAID Level)에 따른 정리 표 입니다.

                                   < 이미지를 클릭하시면 크게 보실수 있습니다. Image Click~!! >

랜덤 읽기/ 쓰기의 성능의 향상은 체감속도의 향상과 같습니다. 프로그램을 런칭하는 속도가 랜덤 엑세스의 성능과 비례한다고 보시면 됩니다. 그리고 순차 읽기 / 쓰기는 영화파일과 같은 대용량의 파일을 이동할때의 성능 이라고 생각하시면 됩니다. ~ ^

Posted by redkite
, |

시스템 구축을 검토하다 RAID 도입에 대해 다시 정리해 보았습니다.

RAID0

스트라이프를 가지고는 있지만 데이터를 중복해서 기록하지 않는다. 동시에 여러 디스크에 나뉘어 기록하기 때문에 데이터입출력의 효율이 좋다. 따라서, 가장 높은 성능을 기대할 수 있지만, 하나의 드라이브가 깨지면 그 어레이에 있는 모든 데이타는 잃게 되어 고장대비 능력이 전혀 없으므로 이 방식은 진정한 RAID라고 하기 어렵다.
* 최소 드라이브 개수 : 2
* 최대 용량 : 디스크의 수 x 디스크의 용량
* 특징 : 빠른 입출력 속도가 요구되나 장애 복구 능력은 필요없는 경우에 적합하다.

RAID1

흔히 디스크 미러링이라고도 하는데, 중복 저장된 데이터를 가진 적어도 두 개의 드라이브로 구성된다. 스트라이프는 없으며, 각 드라이브를 동시에 읽을 수 있으므로 읽기 성능은 향상된다. 쓰기 성능은 단일 디스크 드라이브의 경우와 정확히 같다. RAID-1은 다중 사용자 시스템에서 최고의 성능과 최고의 고장대비 능력을 발휘한다. 모든 레벨에서 가장 높은 비용이 발생한다.
* 최소 드라이브 개수 : 2
* 최대 용량 : (디스크의 수/2) x 디스크의 용량
* 특징 : 빠른 기록 속도와 함께 장애 복구 능력이 요구되는 경우에 사용된다. 2대의 드라이브만으로 구성할 수 있기 때문에 작은 시스템에 적합하다.

RAID0+1

레이드0과 1을 함께 적용한다. 스트라이프를 사용해 만들어진 디스크를 다시 미러링한다.

RAID2

이 형식은 디스크들간에 스트라이프를 사용하며, 몇몇 디스크들은 에러를 감지하고 수정하는데 사용되는 ECC 정보가 저장되어 있다. 이 방식은 RAID-3에 비해 장점이 없다. 에러검출능력이 없는 드라이브를 위해 hamming 오류정정코드를 사용한다. 모든 SCSI 드라이브는 에러검출능력을 갖고 있기 때문에 SCSI 드라이브를 사용할 경우 이 레벨은 별로 쓰이지 않는다.
* 모든 현행 드라이브들이 ECC를 탑재하고 있기 때문에 거의 사용되지 않는다.

RAID3

이 형식은 스트라이프를 사용하며, 패리티 정보를 저장하기 위해 별도의 드라이브 한 개를 쓴다. 내장된 ECC 정보가 에러를 감지하는데 사용된다. 데이터 복구는 다른 드라이브에 기록된 정보의 XOR를 계산하여 수행된다. 입출력 작업이 동시에 모든 드라이브에 대해 이루어지므로, RAID-3은 입출력을 겹치게 할 수 없다. 이런 이유로 RAID-3는 대형 레코드가 많이 사용되는 업무에서 단일 사용자시스템에 적합하다.
* 최소 드라이브 개수 : 3
* 최대 용량 : (디스크의 수 - 1) x 각 디스크의 용량
* 특징 : level 4와 유사하나 효율적인 동작을 위해 동기가능한(synchronized-spindle) 드라이브를 필요로 한다.

RAID4

이 형식은 대형 스트라이프를 사용하며, 이는 사용자가 어떤 단일 드라이브로부터라도 레코드를 읽을 수 있다는 것을 의미한다. 이것은 데이터를 읽을 때 중첩 입출력의 장점을 취할 수 있도록 한다. 모든 쓰기 작업은 패리티 드라이브를 갱신해야하므로, 입출력의 중첩은 불가능하다. RAID-4는 RAID-5에 비해 장점이 없다.
* 최소 드라이브 개수 : 3
* 최대 용량 : (디스크의 수 - 1) x 디스크의 용량
* 특징 : 저렴한 가격으로 장애 복구 능력이 요구되거나 빠른 판독 속도가 필요한 경우에 사용된다. 다량의 데이터 전송이 요하는 CAD나 이미지 작업에 적합하다.

RAID5

데이터에 패리티 정보를 추가해 실패에 대한 내구성을 높였다. 같은 수준에 있는 블럭에 대한 패리티는 쓸 때 저장하고, 읽을 때 검사한다. 이 형식은 회전식 패리티 어레이를 포함한다. 그러므로 RAID-4에서의 쓰기 제한을 주소 지정한다. 그러므로 모든 읽기/쓰기 동작은 중첩될 수 있다. RAID-5는 패리티 정보를 저장하지만 데이터를 중복저장하지는 않는다 (그러나 패리티 정보는 데이터를 재구성하는데 사용될 수 있다). RAID-5는 보통 3 ~ 5개의 디스크를 어레이로 요구한다. RAID-5는 성능이 그리 중요하지 않고 쓰기 작업이 많지 않은 다중 사용자시스템에 적합하다.
* 최소 드라이브 개수 : 3
* 최대 용량 : (디스크의 수 - 1) x 디스크의 용량
* 특징 : 작고 랜덤한 입출력이 많은 경우 더 나은 성능을 제공한다. 빠른 기록속도가 필수적이지 않다면, 일반적인 다중사용자 환경을 위해 가장 좋은 선택이다. 그러나 최소한 3대, 일반적으로는 5대 이상의 드라이브가 필요하다

RAID6

이 형식은 RAID-5와 비슷하지만, 다른 드라이브들 간에 분포되어 있는 2차 패리티 구성을 포함함으로써 매우 높은 고장대비 능력을 제공한다. 현재로서는 RAID-6의 상용 모델은 거의 없다.
* 최소 드라이브 개수 : 3
* 최대 용량 : (디스크의 수 - 2) x 디스크의 용량

RAID7

이 형식은 컨트롤러로서 내장되어 있는 실시간 운영체계를 사용하며, 속도가 빠른 버스를 통한 캐시, 독자적인 컴퓨터의 여러 가지 특성들을 포함하고 있다. 현재 단 하나의 업체만이 이 시스템을 제공한다.

RAID-10

이 형식은 각 스트라이프는 RAID-1 드라이브 어레이인 스트라이프 어레이를 제공한다. 이 방식은 RAID-1보다 높은 성능을 제공하지만, 값이 더 비싸다.

RAID-53

이 형식은 각 스트라이프는 RAID-3 디스크 에레이인 스트라이프 어레이를 제공한다. 이 방식은 RAID-3보다 높은 성능을 제공하지만, 값이 더 비싸다.

JBOD

SPAN. 하나의 커다란 논리 볼륨을 만들기 위해 여러 디스크를 하나의 파티션으로 사용하는 것이다. 성능이나 비용에 차이는 없다.

  • 스트라이프
    여러 개의 디스크에 각 파일의 블럭을 나누어서 저장하는 것.
Posted by redkite
, |

0024. [유닉스] 고급사용자들의 비밀

Speaking UNIX

UNIX 고급 사용자들이 철저히 지키는 일급 비밀

UNIX? 고급 사용자들의 비밀을 파헤치기 위해 워터게이트 사무실에 침입하는 것과 같은 모험을 할 필요가 없습니다. 고급 정보를 제공하는 사람이 있는데, 이번 달에는 Martin Streicher가 비밀 이야기를 털어놓는다.

내가 검은 선글라스를 끼고 가짜 콧수염을 달고 프로 컬링 팀 The Floating Stones의 로고가 부착된 야구 모자를 쓰고 있는 이유가 궁금할 텐데, 나는 지금 체포망을 뚫고 도망 중이기 때문이다. 나는 지금 독자들에게 UNIX? 고급 사용자들이 철저히 지키고 있는 비밀 중 몇 가지를 알려 주기 위해 리모컨으로 조종되는 검은 헬리콥터 편대와 인정 따위는 없어 보이는 창백하게 흰 얼굴의 시스템 관리자들, 귀신같은 솜씨를 지닌 수많은 추적자들의 눈을 피해 이리저리 도망 다니는 중이다. 텔레파시나 세뇌 전파를 막을 수 있는 알루미늄 호일 모자를 쓰고 이 글을 계속 읽기 바란다.

환경 변수 저장

대부분의 UNIX 사용자들은 선호하는 쉘 환경 시간을 계속 다시 작성하기 위해 .bashrc(Bash 쉘용) 및 .zshrc(Z 쉘용)와 같은 쉘 시작 파일에 수많은 설정을 계속 쌓고 있다. 시작 파일을 통해 별명을 작성하고 쉘 옵션을 설정하고 함수를 작성하고 환경 변수를 설정할 수 있다. 필수적인 환경 변수로는 HOME(홈 디렉토리를 지시함), PATH(애플리케이션을 검색할 디렉토리를 열거함) 및 MANPATH(매뉴얼 페이지를 검색하는 디렉토리를 나열함)가 포함된다. 쉘에 어떤 환경 변수가 설정되어 있는지 보려면 printenv를 입력한다. 사용 가능한 환경 변수의 전체 목록은 쉘의 매뉴얼 페이지를 참조한다.

쉘과 마찬가지로, 환경 변수를 통해 다른 많은 UNIX 애플리케이션을 사용자 정의할 수 있다. 예를 들어, Java™ 서브시스템에서 Java 런타임의 루트를 가리키려면 JAVA_HOME을 정의해야 한다. 이와 유사하게, AWS(Amazon Web Services) 유틸리티 패키지에서 유효한 개인용 키 신임 정보를 가진 파일을 가리키려면 AWS_CREDENTIAL_FILE을 사용해야 한다. 개별 애플리케이션에서는 환경 변수도 제공한다. 트릭은 변수를 검색하는 것이다. 다행히도, 이 작업에는 중단 및 입력 과정이 필요하지 않다. 그 대신, 유틸리티 매뉴얼 페이지를 참조하여 "환경 변수"라는 제목으로 따로 나와 있는 섹션을 살펴본다.

예를 들어, 호출기 유틸리티 less에서는 다음과 같이 유용한 환경 변수를 많이 정의한다.

?환경 변수 LESS는 명령행 옵션을 저장하여 호출기를 호출할 때마다 입력 작업량을 줄여준다. 예를 들어, 로그 파일을 많이 읽는 경우 쉘 시작 파일에 다음을 입력한다.

 

 

double square-root (export LESS='--RAW-CONTROL-CHARACTERS --squeeze-lines --ignore-case'const double);

 

이 옵션을 사용하면 각각 제어 문자(보통 구문 색상)를 해석하고 단일 행에 대한 공백 행의 실행 횟수를 줄이고 문자열이 일치하는 경우 대/소문자 구분을 무시할 수 있다. 코드 작업을 하는 경우 다음 옵션을 사용해보자.

 

 

export LESS='--LINE-NUMBERS --quit-if-one-screen --quit-on-intr'

 

?LESSKEY라는 이름의 환경 설정은 키 바인딩 파일을 가리킨다. 키 바인딩을 사용하여 다른 호출기 또는 편집기의 동작에 맞도록 less의 동작을 사용자 정의할 수 있다.
?쉘과 마찬가지로, less를 사용하여 호출 간의 히스토리를 유지 관리할 수 있다. persist 명령 파일을 가리키고 레코드에 대한 최대 명령 개수를 설정하려면 각각 LESSHISTFILE과 LESSHISTSIZE를 설정한다.

환경 변수를 사용하는 또 하나의 좋은 예는 GCC(GNU Compiler Collection)에서 찾아볼 수 있다. GCC는 다양한 환경 변수를 정의하여 작동을 사용자 정의한다. LIBRARY_PATH는 이름에서 알 수 있듯이 링크 대상 라이브러리를 검색하기 위한 디렉토리 목록이다. COMPILER_PATH는 쉘의 PATH와 비슷하지만, 이 환경 변수는 컴파일 프로세스 중에 사용되는 서브프로그램을 찾기 위해 GCC에서 내부적으로 사용된다.

단일 플랫폼에 대한 코드를 쓰고 2진 파일을 빌드하는 경우에는 이런 환경 변수를 절대 사용할 수 없다. 하지만, 많은 수의 플랫폼에 대해 같은 코드를 교차 컴파일하는 경우 그런 변수들은 각 플랫폼에 대해 다양한 헤더와 라이브러리에 액세스하는 데 필수적이다. 한 종류의 시스템에 대해 하나의 값 콜렉션으로 변수를 설정하고 다른 시스템에 대해 다른 콜렉션으로 값을 설정할 수 있다.

사실, GCC에서 큐를 받을 수 있다. 애플리케이션당 많은 환경 변수 세트를 유지 관리하고 수행해야 할 작업에 따라 한 풀에서 다른 풀로 전환한다. 한 가지 접근 방식은 각 프로젝트 디렉토리에 환경 초기화 파일을 보관하고 필요에 따라 source하는 것이다. 예를 들어, 수많은 Ruby 개발자가 이런 해결책을 통해 Ruby 버전 간에 전환함으로써, PATH, GEM_HOME 및 GEM_PATH 환경 변수를 필요에 따라 변경하여 한 버전에서 다른 버전으로 바꾼다.

dot 파일 개요

환경 변수와 마찬가지로, 많은 Linux? 및 UNIX 애플리케이션에서는 사용자 정의를 위해 dot 파일―이름이 마침표로 시작하는 작은 파일―을 제공한다. 하지만, 소수의 플래그나 상대적으로 소량의 정보를 캡처하는 환경 변수와는 달리, dot 파일은 자체의 고유한 구문 규칙과 경우에 따라서는 자체 프로그래밍 언어까지 가지고 있어, 훨씬 더 광범위하고 복잡하게 구성될 수 있다. (UNIX의 전통에 따라) 점(.)으로 시작하는 파일 이름은 표준 디렉토리 목록에 나타나지 않기 때문에, dot 파일은 옵션과 설정을 보관하기에 편리한 곳이다. (소위 이런 숨겨진 파일을 보려면 ls -a를 사용한다.) dot 파일은 특별한 이름을 제외하면 일반 텍스트 파일이다.

dot 파일은 보통 홈 디렉토리에 있지만, 일부 유틸리티에서는 현재 작업 디렉토리에서도 dot 파일을 찾는다. 애플리케이션에서 둘 이상의 dot 파일을 지원하는 경우, 프로그램에서는 일반적으로 우선 순위 규칙을 적용하여 파일 간의 우선 순위를 정한다. 일반적으로, "로컬" dot 파일― 현재 작업 디렉토리에 있는 dot 파일―의 우선 순위가 가장 높고, 그 다음으로 홈 디렉토리에 있는 dot 파일이 높으며, 나머지는 시스템 전체에 적용되는 구성에 따라 결정된다. 이런 파일들이 없거나 하나 있거나 모두 있을 수 있고, 애플리케이션에 따라 파일을 상호 독점적 또는 점진적인 것으로 다룬다. 앞의 사례에서는 앞선 체인에서 찾은 첫 번째 dot 파일로 결정된다. 그 다음 사례에서는 구성이 계단식으로 이루어지거나 최종 결과로 조정될 수 있다.

간단한 dot 파일의 한 예는 $HOME/.lesskey에 있는 less의 키 바인딩 파일이다. 파일에 있는 각각의 행은 아래의 스니펫과 닮은 형태의 쌍(키 입력과 명령의 쌍)이다.

 

 

\r forw-line

\n forw-line

e forw-line

j forw-line

^E forw-line

^N forw-line

k back-line

y back-line

^Y back-line

 

다른 극단적인 예로서 fetchmail을 생각해보자. 이 유틸리티는 여러 개의 원격 소스에서 이메일을 선택하여 로컬 위치로 메시지를 전달한다. 이 유틸리티의 작동은 $HOME/.fetchmailrc를 통해서만 제어된다. (이 유틸리티의 다양한 옵션에 관해서는 매뉴얼 페이지를 참조한다.) cron, git, vi 및 기타 많은 명령에서도 dot 파일을 인식한다. dot 파일에서 구성하는 항목에 대한 자세한 내용 역시 해당 애플리케이션의 매뉴얼 페이지를 참조한다. 어떤 dot 파일들은 crontab와 같은 별개의 매뉴얼 페이지가 있을 만큼 그 기능이 풍부하고 다양하다.

쉬 . . . SSH에 관한 비밀은...

SSH(Secure Shell)는 ―안전하게 원격 시스템에 로그인하고 파일을 복사하고 방화벽을 통해 터널링하는 데 사용하기 위해 다양한 기능을 갖춘 서브시스템이다. SSH는 서브시스템이므로, 작동을 사용자 정의하고 효율적으로 수행하기 위한 수많은 옵션을 제공한다. 사실, SSH에서는 모든 데이터를 포함하기 위해 $HOME/.ssh라는 이름의 전체 "dot 디렉토리"가 제공된다. (다른 사용자의 액세스를 방지하려면 .ssh 디렉토리가 600 모드여야 한다. 600 이외의 모드는 올바른 작동에 방해가 된다.) 특히, $HOME/.ssh/config 파일을 통해 시스템 이름, 호스트별 액세스 제어 등을 포함한 수많은 바로 가기를 정의할 수 있다.

다음은 특정 호스트에 대한 SSH를 사용자 정의하기 위해 $HOME/.ssh/config에서 찾을 수 있는 전형적인 블록이다.

 

 

Host worker

HostName worker.example.com

IdentityFile ~/.ssh/id_rsa_worker

User joeuser

 

~/.ssh/config에 있는 각각의 블록에서는 하나 이상의 호스트를 구성한다. 개별 블록은 공백 행으로 구분한다. 이 블록에서는 Host, HostName, IdentityFile 및 User의 네 가지 옵션을 사용한다. Host 옵션을 사용하면 HostName으로 지정되는 시스템의 별명을 설정할 수 있다. 예를 들어, 별명을 사용하면 ssh worker.example.com 대신 ssh worker로 입력할 수 있다. 또한, IdentityFile 및 User 옵션을 사용하면 worker에 로그인하는 방법을 정할 수 있다. IdentityFile 옵션은 호스트와 함께 사용하기 위한 개인용 키를 가리키고, User 옵션을 사용하면 로그인 ID가 제공된다. 따라서 이 블록은 다음 명령과 같은 것이다.

 

 

ssh joeuser@worker.example.com -i ~/.ssh/id_rsa_worker

 

강력하지만 잘 알려져 있지 않은 옵션이 바로 ControlMaster이다. 이 옵션을 설정하면 같은 호스트에 대해 여러 개의 SSH 세션이 단 하나의 연결을 공유한다. 첫 번째 연결이 설정된 후에는 후속 연결에 신임 정보가 필요하지 않으므로, 같은 시스템에 연결할 때마다 비밀번호를 입력해야 하는 번거로움이 없다. ControlMaster는 매우 편리한 옵션이므로, 모든 시스템에서 이 옵션을 사용하고 싶을 것이다. 다음과 같이 호스트 와일드카드 *로 손쉽게 설정할 수 있다.

 

 

Host *

ControlMaster auto

ControlPath ~/.ssh/master-%r@%h:%p

 

짐작할 수 있겠지만, Host * 태그로 표시된 블록은 구성 파일에서 명시적으로 이름이 지정되어 있지 않더라도 모든 호스트에 적용된다. ControlMaster auto는 기존 연결을 다시 사용하려고 시도하지만, 공유 연결을 찾을 수 없는 경우 새로 연결할 것이다. ControlPath는 공유를 위한 제어 소켓을 지속하는 파일을 가리킨다. %r은 원격 로그인 사용자 이름으로 바뀌고, %h는 대상 호스트 이름으로 바뀌고, %p는 연결에 사용되는 포트를 대신한다. (%l을 사용하여 로컬 호스트 이름으로 바꿀 수도 있다.) 위 스펙에서는 파일 이름이 다음과 유사한 제어 소켓이 생성된다.

 

 

master-joeuser@worker.example.com:22

 

원격 호스트에 대한 모든 연결이 이루어지면 각각의 제어 소켓이 제거된다. 언제든지 어떤 시스템에 연결되어 있는지 알고 싶으면 ls ~/.ssh를 입력하고 제어 소켓의 호스트 이름 부분(%h)을 보면 된다.

SSH 구성 파일은 매우 방대하여 자체 매뉴얼 페이지도 있다. 가능한 옵션을 모두 보려면 man ssh_config를 입력한다. 그리고 여기서는 영리하게 활용할 수 있는 SSH 트릭이 있다. 즉, SSH를 통해 로컬 시스템에서 원격 시스템으로 터널링할 수 있다. 사용할 명령행은 다음과 같다.

 

 

$ ssh example.com -L 5000:localhost:3306

 

이 명령은 "example.com을 통해 연결하고 로컬 시스템의 포트 5000과 'localhost'라는 이름의 시스템에 있는 포트 3306[MySQL 서버 포트] 사이에 터널을 설정하라"는 의미이다. localhost는 터널이 설정되면서 example.com에서 해석되기 때문에, localhost가 example.com이다. 아웃바운드 터널 ―정식 명칭은 로컬 전달(local forward)―이 설정된 상태에서, 로컬 클라이언트는 포트 5000에 연결하여 example.com에서 작동 중인 MySQL 서버와 통신할 수 있다.

터널링의 일반적인 양식은 다음과 같다.

 

 

$ ssh proxyhost localport:targethost:targetport

 

여기서 proxyhost는 SSH를 통해 액세스할 수 있고 targethost에 (SSH를 통해서가 아니라) 네트워크로 연결되는 시스템이다. localport는 로컬 시스템에 대한 권한이 없는 포트(1024를 초과하여 사용되지 않는 모든 포트)이고, targetport는 사용자가 연결하려는 서비스의 포트이다.

이전 명령을 실행하면 시스템에서 외부 세계로 터널링할 수 있다. SSH를 사용하여 내부로 터널링하거나 외부 세계에서 로컬 시스템에 연결할 수도 있다. 다음은 인바운드 터널의 일반적인 양식이다.

 

 

$ ssh user@proxyhost -R proxyport:targethosttargetport

 

인바운드 터널―정식 명칭은 원격 전달(remote forward)―을 설정하면 proxyhost 및 targethost의 역할이 뒤바뀌어, 로컬 시스템이 대상이 되고 원격 시스템이 프록시가 된다. user는 프록시에서의 로그인 ID다. 이 명령의 구체적인 예제는 다음과 같다.

 

 

$ ssh joe@example.com -R 8080:localhost:80

 

이 명령은 "example.com에 joe로 연결하고 원격 포트 8080을 로컬 포트 80에 연결하라"는 의미이다. example.com에서 사용자가 이 명령을 실행하면 Joe의 시스템에 터널이 제공된다. 원격 사용자는 8080에 연결하여 Joe의 시스템에 있는 웹 서버에 도달할 수 있다.

각각 로컬 및 원격 전달을 위한 -L 및 -R 외에도, SSH는 원격 시스템에서 HTTP 프록시를 만들기 위한 -D를 제공한다. 알맞은 구문은 SSH 매뉴얼 페이지를 참조한다.

히스토리를 이용해 다시 쓰기

쉘 프롬프트에서 많은 시간을 작업하는 경우 쉘 히스토리를 기록하면 시간을 절약하고 입력 작업량을 줄일 수 있다. 그러나 히스토리를 수정하지 않은 상태로 두면 히스토리를 사용할 때 약간 성가신 부분이 있다. 히스토리에서는 중복 명령이 기록되고 여러 쉘 인스턴스에서 서로의 히스토리에 나쁜 영향을 줄 수 있다. 두 가지 복잡한 문제 모두 쉽게 극복된다. 다음과 같이 .bashrc에 두 행을 추가한다.

 

 

export HISTCONTROL=ignoreboth

shopt -s histappend

 

첫 행은 쉘 히스토리에서 연속적으로 중복된 명령을 제거하는 역할을 한다. 순서에 상관없이 중복된 명령을 모두 제거하려면 ignoreboth를 erasedups로 변경한다. 둘째 행은 쉘 종료 시 히스토리 파일에 쉘의 히스토리를 추가하는 역할을 한다. 기본적으로, Bash 히스토리 파일은 ~/~/.bash_history(dot 파일임)로 이름이 지정된다. HISTFILE(환경 변수)을 설정하여 위치를 변경할 수 있다. 100,000개의 항목이 있는 히스토리 파일에 셀의 최근 10,000개 명령을 저장하려면 쉘 시작 파일에 export HISTSIZE=10000 HISTFILESIZE=100000을 추가한다. 쉘의 히스토리를 보려면 어떤 프롬프트에든 history를 입력하면 된다.

명령 히스토리를 저장하더라도 다시 불러올 수 없다면 거의 쓸모가 없다. ! 쉘 또는 bang 연산자의 목적이 바로 그것이다.

?!! ("bang bang")으로 마지막 명령을 완전히 반복할 수 있다.
?!:0은 이전 명령의 이름이다.
?!^은 이전 명령의 첫 인수이다. !$로 끝나는 !:2, !:3 등은 이전 명령의 두 번째, 세 번째 등의 인수이며, 결국 마지막 인수까지 표시할 수 있다. ?!*는 명령 이름을 제외한 마지막 명령의 모든 인수를 의미한다.
?!n은 히스토리에서 n이라는 번호가 매겨진 명령을 반복하는 역할을 한다.
?!handle로 handle에서 문자열로 시작하는 마지막 명령을 반복할 수 있다. 예를 들어, !ca를 사용하여 cat README와 같이 ca 문자로 시작한 마지막 명령을 반복할 수 있다.
?!?handle로 handle에서 문자열을 포함한 마지막 명령을 반복할 수 있다. 예를 들어, !?READ는 cat README와도 일치한다.
?^original^substitution을 사용하여 original의 첫 번째 항목을 substitution으로 바꿀 수 있다. 예를 들어, 이전의 명령이 cat README였다면 ^README^license.txt 명령을 실행하는 경우 cat license.txt라는 새 명령이 생성된다.
?!:gs/original/substitution을 사용하면 original이 나타날 때마다 모두 substitution으로 바뀐다. (!:gs는 "global substitution"을 의미한다.)
?!-2는 두 번째 명령이고, !-3은 최근 명령 중 세 번째 명령이라는 식이다.
히스토리 표현식을 결합하여 두 번째 명령의 명령 이름 뒤에 -R, 이전 명령의 첫 번째 인수, 세 번째 최근 명령의 두 번째 인수를 붙여 확장되는 !-2:0 -R !^ !-3:2와 같은 조합을 만들 수도 있다. 이처럼 비밀스러운 명령을 더 쉽게 읽을 수 있도록, 입력할 때 히스토리 참조를 확장할 수 있다. 어떤 프롬프트에서나 bind Space:magic-space 명령을 입력하거나 시작 파일에 이 명령을 추가하여 히스토리 대체를 인라인 상태로 확장하는 magic-space 함수에 스페이스 키를 바인딩한다.

Expand-o-Matic

이처럼 많은 코드를 인터넷에서 구할 수 있으므로, 매일 수십 개의 파일을 다운로드할 수도 있을 것이다. 그리고 그런 모든 파일들은 아마 다르게 패키징될 것이다.―각각 다른 유틸리티로 압축되지만, 경우에 따라 ZIP 파일, RAR 파일 및 수많은 TAR 파일로 패키징된다. 각각의 패키지 형식을 압축 해제하고 확장하는 방법을 일일이 기억하기 어려울 수 있다. 그렇다면, 그 모든 작업을 단일 명령에 캡처하지 못할 이유도 없다. 이 함수는 많은 샘플 dot 파일에서 널리 사용할 수 있다.

 

 

ex () {

if [ -f $1 ] ; then

case $1 in

*.tar.bz2) tar xjf $1 ;;

*.tar.gz) tar xzf $1 ;;

*.bz2) bunzip2 $1 ;;

*.rar) rar x $1 ;;

*.gz) gunzip $1 ;;

*.tar) tar xf $1 ;;

*.tbz2) tar xjf $1 ;;

*.tgz) tar xzf $1 ;;

*.zip) unzip $1 ;;

*.Z) uncompress $1 ;;

*.7z) 7z x $1 ;;

*) echo "'$1' cannot be extracted via extract()" ;;

esac

else

echo "'$1' is not a valid file"

fi

}

 

이 ex 함수는 11가지 파일 형식으로 확장되고 다른 패키지 유형을 다루는 경우 확장 가능하다. 이 함수가 정의된 후에는,―예컨대 쉘 시작 파일에서―간단히 ex somefile을 입력하면 되며, 여기서 somefile은 명명된 확장자 중 하나로 끝난다.

 

 

$ ls

source

$ tar czf source.tgz source

$ ls -1

source

source.tgz

$ rm -rf source

$ ex source.tgz

$ ls -1

source

source.tgz

 

그런데 오늘 다운로드한 것을 잘못된 위치에 둔 경우에도 find를 실행하여 검색할 수 있다.

 

 

$ find ~ -type f -mtime 0

 

-type f 명령으로는 일반 파일을 찾을 수 있고, 당일 자정 이후로 작성된 파일을 찾으려면 -mtime 0 명령을 사용한다.

훨씬 더 많은 비밀

아직도 전문가들만이 간직한 비밀이 많이 남아 있다. 웹에서 "shell auto-complete"를 검색하면 명령을 입력할 때 상황에 맞게 명령을 확장해주는 기능인 자동 완성 기능에 대해 더 자세히 살펴볼 수 있다. 또한, "shell prompts"를 검색하면 쉘 프롬프트를 사용자 정의하는 방법을 확인할 수 있다. 이것을 다채롭게 만들 수 있다. 즉, 현재 작업 디렉토리나 Git 분기를 표시하거나―다량의 히스토리를 불러오는 경우 편리하게 참조할 수 있는 히스토리 번호를 표시할 수도 있다. 작업 예를 보려면 Github에서 "dot files"를 검색한다. 많은 전문가들이 Github에 자신의 쉘 구성을 공개하고 있다.

실례지만, 이제 내 가발과 브론저 크림을 찾으러 가야겠다. 그루초 막스(미국의 희극 배우, 1890-1977)와 닮게/P>

Posted by redkite
, |

0023. 벤더별 명령어

A Sysadmin's Unixersal Translator (ROSETTA STONE) OR What do they call that in this world?

Contributions and corrections gratefully accepted. Please help us fill in the blanks. New "tasks" are welcome, too!
PDF version (for best results print US legal size, landscape orientation. If your browser plug-in has trouble with the PDF, then download it and load it in stand-alone acroread).
Framed version.
OS versions in parentheses; e.g. 10+ means version 10 and greater; 9- means version 9 and previous. $=extra cost
If not specified, commands are in one of the following directories: /usr/bin, /usr/sbin, /sbin, /bin
Files referenced may be either commands, configuration files, or directly-referenced text files. Use the man command to read the man pages for details such as command options.
Categories:

hardware, firmware, devices disks kernel, boot, swap files, volumes
networking security, backup software, patching, tracing, logging references
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
OS notes By IBM, with input from System V, BSD, etc. etc. Runs mainly on IBM RS/6000 and related hardware. The Open Source foundation for Mac OS X, descended from NeXTStep Data General was aquired by EMC in 1999. Derived from 4.4BSD-Lite and 386BSD. This table does not include external packages from /usr/ports. Hewlett-Packard. SGI. SVR4-based (rh) = Red Hat,
Mandrake, Suse,...
(deb) = Debian, Libranet,...
(mand) = Mandrake
(SuSE) = SuSE
aka MP-RAS Derived from 4.4BSD-Lite and 386BSD. This table does not include external packages from /usr/pkg. Forked from NetBSD in 1995. Security emphasis. This table does not include external packages from /usr/ports. Fujitsu Siemens. Based on DC/OSX from Pyramid, SINIX
from Siemens, and SVR4. To be replaced with Solaris by 2008.
SCO UnixWare 7.0.1& SCO UnixWare 7.1.1 became Caldera Open Unix and later became SCO again. Solaris 2.0-2.6, 7, 8, 9
(SunOS 5.*)
SVR4-based
Solaris 1.*
BSD-based
(Digital Unix, OSF/1)
(4)= 4.0F/G
(5)= 5.0A
An early DEC Unix, superceded by Digital Unix (now Tru64). Cray Inc., formed from the March 2000 merger of Tera Computer Company and Cray Research OS notes
administrative GUI smit
smitty
wsm
Aqua: System Preferences, NetInfo Manager sysadm /stand/sysinstall
pw
adduser rmuser
vipw
chpass
sam /usr/sysadm/bin/sysmgr (6.3+)
toolchest
/usr/Cadmin/bin/*
(rh, FC2+, RHEL4+) system-config*
(rh) redhat-config*
linuxconf (obsolete)
(SuSE) yast2
(deb)
dpkg-reconfigure
(mand)
drakconf
sysadm sushi ?

sysadm
WebSysAdmin

scoadmin

solstice
admintool
smc (8 01/01+)

? checklist
(5) sysman
? checklist
/etc/install/install
xmenu
administrative GUI
managing users lsuser
mkuser
chuser
rmuser
Aqua: System
Preferences / Accounts
niutil
useradd
userdel
adduser
rmuser
pw
vipw
useradd
userdel
usermod

/usr/sysadm/privbin/
addUserAccount

passmgmt

/usr/Cadmin/bin/cpeople

useradd
userdel
adduser

useradd
userdel
usermod
sysadm
useradd
userdel
userinfo
usermod
user
useradd
userdel
adduser (interactive)
sysadm
useradd
userdel
scoadmin
useradd
userdel
useradd
userdel
usermod
/usr/sadm/bin/smuser (9+)
groupadd
edit /etc/passwd and create home directory

useradd
adduser
userdel
removeuser

adduser
removeuser
xadmin
udbgen
udbrstrict
nu scripts
managing users
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
list hardware configuration
prtconf
lscfg
lsattr
lsdev
hostinfo
ioreg -bls
system_profiler
dg_sysreport -g hardware dmesg
cat /var/run/dmesg.boot
pciconf -l
eeprom (SPARC only)

ioscan
dmesg (if you're lucky)
adb
model
stm (from the SupportPlus CDROM)
bdf (like most vendors' df)
getconf
machinfo

hinv

dmesg (if you're lucky)
/proc/*
lshw
dmidecode
lspci
lspnp
lsusb
lsmod
(SuSE) hwinfo

prtconf
devstat
machinetype
more /etc/.osm
dmesg
more
/var/run/dmesg.boot
cat /kern/msgbuf
dmesg
cat /var/run/dmesg.boot

autoconf -l
showconf
uname -p
uname -M
mpcntl -I

hwconfig
hw
scoadmin/DCU

/usr/lib/X11/testtools/
z35SysInfo

prtconf -v
/usr/platform/`uname -i`/
sbin/prtdiag -v (sun4u and sun4d only)
arch -k
psrinfo -v
isainfo -v
dmesg
iostat -En
prtfru
cfgadm -l
/etc/path_to_inst

dmesg (if you're lucky)

dia -R full
vmstat -P
hwmgr -get category
(5) hwmgr -show
devices
psrinfo
pset_info
sys_check
/usr/bin/X11/dxsysinfo

?

machid
getconf
uname -a

list hardware configuration
show/set
EEPROM/NVRAM
values
bootlist -o -m normal
nvram dg_sysctl |
grep BOOTPATH
? setboot
stm
nvram
printenv/setenv (at command monitor)
/dev/nvram (if you have it)
hwclock
nvsetenv
eeprom openprom (on
OpenFirmware
architectures)
in bdm
(at boot stop
or ctrl-a)
? eeprom eeprom (4.0D+) consvar ? ? show/set
EEPROM/NVRAM
values
add device without reboot cfgmgr -v (automatic — autdodiskmounter) N/A camcontrol
atacontrol
kldload

ioscan -fnCdevtype;
insf -Cdevtype

scsiha -pr
ioconfig -f /hw
scsiadminswap
-b bus -p
modprobe
kerneld
insmod
hotplug
cardctl
devmgmt
mktable
scsictl
atactl
? reinitdev
changedev
mkdev devfsadm. pre-Solaris 7 HW 11/99, use:
drvconfig; devlinks; {disks, tapes, ports}
MKDEV

(3.2.*) scu scan edt
(4.0) scu scan edt; disklabel -rw rzXX label (for disks)
(5.x) dsfmgr -k; disklabel -rw dskn auto
hwmgr -scan scsi

? ? add device without reboot
tape device /dev/rmt0 ? /dev/rmt/0 /dev/rsa0 /dev/rmt/0m /dev/tape
/dev/nrtape
/dev/st0 /dev/rmt/c* /dev/st0 /dev/st0 /dev/ios0/rstape001
autoconf -1 |
grep TAPE
/dev/rct0 /dev/rmt/0 /dev/rst0 (5.x) /dev/ntape /dev/tape /dev/nrmtXh where n=non-rewinding, X a number, h=density tpmnt tape device
stdin/ stdout/ stderr ? /dev/fd/[012] ? /dev/fd/[012] ? /dev/fd/[012] /dev/fd/[012] ? ? ? ? ? /dev/fd/[012] ? ?
X kvm config ? ? ? xf86config itemap ? xf86config
XFree86 -configure
redhat-config-xfree86
/etc/X11/?dm
xf86config
xf86cfg
XFree86 -configure
? ? hwconfig kdmconfig (x86)
fbconfig; m64config; (etc.)
? ? ? ? X kvm config
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
read a disk label lspv -l pdisk rawDev -dump
Disk Utility
admpdisk -o list
admvdisk -o list
disklabel -r diskinfo
pvdisplay
prtvtoc fdisk -l prtvtoc disklabel -r
disk
mbrlabel
fdisk
fdisk -r OR disklabel -rl dkpart -l fsname prtvtoc dkinfo disklabel -r chpt -q ? read a disk label
whole disk in partition N/A (non-root partitions are mounted under /Volumes) ? c ? 10 /dev/hda (e.g. if /dev/hda1
is a partition)
s0 c or d
sysctl kern.rawpartition
c /dev/ios0/rsdisk???s7
(???=000-999)
/dev/1s# (#=0,1,...) 2 c c c ? whole disk in partition
label a disk mkvg (labels unused) admpdisk fdisk
disklabel -wr
sysinstall
pvcreate

dvhtool
fx -x

cfdisk
fdisk
e2label

sysadm
fdisk
edvtoc
prtvtoc
mkpart
updatescsi
labelit

disklabel -wr
mbrlabel
disklabel -wr dksetup divvy format
prtvtoc
format disklabel -rw chpt -a /etc/labelit label a disk
partition a disk mklv pdisk admpdisk fdisk
sysinstall
lvcreate
sam
fx parted (if you have it)
fdisk
pdisk (on a MAC)
(deb)
mac-fdisk (on a MAC)
(mand)
diskdrake
fdisk disklabel -i fdisk -e OR disklabel -E dkpart -e divvy format
fmthard
format disklabel -e chpt -p /etc/install/install partition a disk
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
kernel /unix /mach_kernel /dgux /kernel
/boot/kernel/kernel
/hpux (9)
/stand/vmunix (10+)
/unix

/boot/vmlinuz*
/boot/bootlx

(see /etc/lilo.conf or /boot/grub/menu.lst)

/unix
/stand/unix
/netbsd /bsd

/unix

/stand/unix

/unix /kernel/genunix
/platform/`uname -m`/
kernel/unix
/platform/`uname -m`/
kernel/sparcv9/unix (7+)
/vmunix /vmunix /vmunix /unicos kernel
show/set kernel parameters /usr/samples/kernel/vmtune
(installed with the bos
adt.samples fileset)

/usr/sbin/no (network-related)
/usr/sbin/sysctl vi /var/Build/
system.hostname;;
reboot

/boot/kernel.conf
/boot/loader.conf
sysctl
/etc/sysctl.conf

sam
sysdef
kmtune (11+)
getconf
systune /proc/*
/proc/sys/*
sysctl
/etc/sysctl.conf
sysdef
getconf
/etc/conf/cf.d/
quicktune.cfg
sysctl
/etc/sysctl.conf
sysctl
/etc/sysctl.conf
idtune
cat /etc/opt/cf.d/stune
cat /etc/opt/cf.d/mtune
sysdef -i
/etc/conf/cf.d/configure -x

sysdef
getconf
cat /etc/system
ndd
adb -k

adb

/usr/kvm/sys/
`arch -k`/conf

dxkerneltuner
sysconfig
adb
kdb
? show/set kernel parameters
make disk bootable bosboot -a bless dg_sysctl boot0cfg
disklabel
mkboot dvhtool

(rh) mkbootdisk
(deb) fdisk -A
(and lilo to manipulate mbr)

dklayout fdisk -i
installboot
? dksetup ? installboot /usr/platform/
`uname -m`
/lib/fs/ufs/bootblk raw_device_file
/usr/kvm/mdec
installboot [-hltv]
protobootblk
bootdevice
(4.x+) disklabel -rw -t [ufs|advfs] ? ? make disk bootable
startup scripts /etc/rc* /System/Library/
StartupItems/*,
/Library/StartupItems/,
/etc/rc*
/etc/rc* /etc/rc* (4-)
/etc/rc.d/* (5+)
/usr/local/etc/rc.d/*

/etc/rc* (9)

/etc/rc.config.d (preferred)
/sbin/rc* (10+)
/sbin/init.d/

/etc/rc*
/etc/init.d/
/etc/rc* (but may vary)
/etc/init.d/

/etc/rc*
/etc/init.d


/etc/rc
/etc/rc.*
/etc/rc.d/*

/etc/rc*
/etc/rc* /etc/rc* /etc/rc*
/etc/init.d/
/etc/rc* /sbin/init.d; links in /sbin/rc?.d /etc/rc* ? startup scripts
run levels 1
*=normal states
for more detail
see

www.phildev.net/runlevels.html
2: multiuser
6: reboot
? ? -1*: permanently insecure
0: insecure
1: secure
2: highly secure
3: network secure
0: shut down
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: start GUI
5: user-defined
6: user-defined
0: power-down
s,S: single-user
1: sys admin
2: multiuser (no NFS)
3*: multiuser
4: user-defined
5: firmware monitor
(set in /etc/inittab)
0: halt
s,S,1: vendor-dependent
1: single-user
2-5*: multiuser
6: reboot
(set in /etc/inittab)
0: shutdown
s,S: single-user
1: sys admin
2*: multi-user
3: share NFS
4: user-defined
5: firmware
6: reboot
-1: permanently insecure
0*: insecure
1*: secure
2: highly secure
-1: permanently
insecure
0*: insecure
1*: secure
2: highly secure
0: power-down
s,S: single-user
1: sys admin
2*: multiuser
3+4*: user-defined
5: firmware update
6: reboot
?

0: firmware monitor
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: user-defined
5: power-down if possible
6: reboot

? 0: shut down
1: single user
2: multi-user, no NFS
3: multi-user
6: reboot
0: shut down
1: single user
2: multi-user, no NFS
3: multi-user
6: reboot
?

run levels 1
*=normal states
for more detail
see

www.phildev.net/runlevels.html

show runlevel 1 who -r (runlevels unused) who -r sysctl kern.securelevel who -r who -r /sbin/runlevel who -r sysctl kern.securelevel sysctl kern.securelevel who -r who -r who -r ? who -r ? who -r show runlevel 1
time zone info /etc/environment ($TZ) /usr/share/zoneinfo/ ? /etc/localtime
/usr/share/zoneinfo
/usr/lib/tztab /usr/lib/locale/TZ/ /usr/share/zoneinfo/ /usr/lib/locale/TZ /usr/share/zoneinfo/ /usr/share/zoneinfo/
/etc/localtime
? ? /usr/share/lib/zoneinfo/ ? /etc/zoneinfo ? ? time zone info
check swap space lsps -a ls -l /var/vm
vm_stat
admswap -o list -buv
dg_sysreport -p freeswap
systat -swap
swapinfo
pstat -s
swapinfo swap -s
swap -l
swapon -s
cat /proc/meminfo
cat /proc/swaps
free
swap -s
swap -l
sar -r
swapctl -l swapctl swap -s
swap -l
swap -l swap -s
swap -l
pstat -s swapon -s ? /etc/swapper check swap space
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
"normal" filesystem jfs ufs
hfs+
dg/ux ufs/ffs/ufs2 (5+)
ext2

hfs
vxfs (11.0+)

efs, xfs ext2
ext3
ReiserFS
vxfs ffs (was ufs) ffs (was ufs) vxfs
ufs (root)
htfs ufs 4.2

(4) ufs
(5) AdvFS

ufs NC1FS
C2FS
"normal" filesystem
volume-based filesystem jfs ? ?

ccd
vinum
geom (5+)

jfs (vxfs)
LVM
VxVM ($)
xlv, xvm, xfs LVM, LVM2
EVMS
VxVM ($)
vdisk
VxVM

ccd, raidframe

ccd
raid
vdisk vdisk Solstice DiskSuite
VxVM ($)
? Advfs
LSM
N/A ? volume-based filesystem
file system
description
/etc/filesystems NetInfo /etc/fstab /etc/fstab /etc/checklist
(9)
/etc/fstab
(10+)
/etc/fstab /etc/fstab /etc/vfstab /etc/fstab /etc/fstab /etc/vfstab
/etc/dktab

/etc/mnttab
/etc/default/filesys
/etc/vfstab (local)
/etc/rmtab (remote)

/etc/vfstab (local) /etc/fstab /etc/fstab
AdvFS: /etc/fdmns
/etc/fstab /etc/fstab file system
description
volume manipulation

smitty vg
smitty lvm
smitty jfs
mkvg; chvg; rmvg
mklv; chlv; rmlv
mkfs; crfs; rmfs

Disk Utility / pdisk sysadm

vinum
ccdconfig
geom (5.3+)
gstripe (5.3+)
gmirror (5.3+)
graid3 (5.3+)

vg*; lv*; pv*
extendfs
fsadm

xlv_mgr
xvm

e2fsadm
lvcreate
lvremove
lvextend
vxva ccdconfig
raidctl
ccdconfig
raidctl
dkconfig
dkmirror
dkmap
?

meta*
(Solstice DiskSuite;
Solaris Volume Mgr (9+))
(7-, found in
/usr/opt/SUNWmd/
sbin/)

/opt/VRTSvxva/bin/vxva
(Veritas Volume Mgr) ($)

? AdvFS: mkfdmn, mkfset, addvol, showfdmn
LSM: volassist or volmake, volume, volplex and volsd, volprint
? /etc/install/install volume manipulation
create filesystem crfs newfs
newfs_hfs
newfs_mdos
admfilesystem newfs mkfs
newfs
mkfs mke2fs
mkreiserfs
mkdosfs
mkfs newfs
makefs
newfs mkfs
newfs
divvy newfs
mkfs
newfs
mkfs
AdvFS: mkfdmn
UFS: newfs
MFS: mfs
newfs
mkfs
bb
mkfs
labelit
create filesystem
file system debugging and recovery dfsck
fsck
fsdb
fsck
fsdb
clri
? fsck
fsdb
clri
fsck
fsdb
fsck
fsdb
clri
fsck
debugfs
e2undel
? fsck
fsdb
clri
fsck
fsdb
clri
? fsck
fsdb
fsck
fsdb
clri
? ? ? ? file system debugging and recovery
create non-0-length empty file lmktemp mkfile
dd if=/dev/zero of=filename bs=1024 count=desired
? truncate -s size[K|M|G] filename
dd if=/dev/zero of=filename bs=size[b|k|m|g] \
count=desired
prealloc mkfile dd if=/dev/zero of=filename
bs=1024k count=desired
dd if=/dev/zero
of=filename bs=1024
count=desired
dd if=/dev/zero of=filename bs=1m count=desired dd if=/dev/zero of=filename bs=1024k count=desired mkfile
dd if=/dev/zero of=filename bs=1k
dd if=/dev/zero of=filenmae bs=1024 count=desired mkfile mkfile dd if=/dev/zero of=filename bs=1024k count=desired ? ? create non-0-length empty file
mount CDROM

mount -v cdrfs -o ro
/dev/cd0 /cdrom

smitty cdrom

(automatic — autdodiskmounter) mount -t cdrom
/dev/pdsk/disk/cdrom
mount /cdrom
mount_cd9660
pfs_mountd
pfsd
pfs_mount
mount /dev/dsk/cxtydz
/SD_CDROM
(mounts automatically when CD inserted) mount /mnt/cdrom
(deb) mount /cdrom
mount -F cdfs
/dev/cdrom/cdromX
/cdrom
mount -t cd9660 -o ro /dev/cd0a path mount -t cd9660 -r /dev/cd0a path mount -F hs ...
sysadm
mount /dev/cd0 path /etc/init.d/vold start; volcheck or
mount -F hsfs -o ro /dev/dsk/c0t6d0s2 /cdrom
mount -t hsfs -r
/dev/sr0 /cdrom

mount /dev/disk/cdromXa
/mnt
mount -t cdfs -o noversion /dev/disk/cdrom3c /cdrom

? ? mount CDROM
create/mount ISO image ? hdiutil ? mdconfig; mount ? ?

mkisofs

mount -o loop pathToIso
mountPoint

? ? ? ? ? mkisofs;cdrecord;mount ? ? ? ? create/mount ISO image
ACL management aclget
aclput
acledit
ls -e
? ? ? lsacl
chacl
getacl
setacl
? getfacl
setfacl
? ? ? ? ? getfacl
setfacl
? ? ? ? ACL management
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
NFS share definitions /etc/exports
/etc/xtab
NetInfo: /exports
Netinfo: /config/SharePoints
/etc/exports /etc/exports /etc/exports /etc/exports /etc/exports /etc/dfs/dfstab
dfshares
/etc/exports /etc/exports /etc/dfs/dfstab
/etc/dfs/sharetab
/etc/exports /etc/dfs/dfstab
dfshares
/etc/exports /etc/exports ? /etc/exports NFS share definitions
NFS share command exportfs -a kill -s HUP `cat /var/run/mountd.pid` exportfs -a kill -s HUP `cat /var/run/mountd.pid` exportfs -a exportfs -a /etc/init.d/nfs-server reload
(rh)
exportfs -a
share
shareall
kill -s HUP `cat /var/run/mountd.pid`
/etc/rc.d/mountd reload
kill -HUP `cat /var/run/mountd.pid` share
shareall
exportfs -a
/etc/nfs start
share
shareall
exportfs -a /sbin/init.d/nfs start; /sbin/init.d/nfsmount start ? exportfs -a NFS share command
NFS information ? ? ? nfsstat nfsstat ? cat /proc/mounts ? ? ? ? ?

showmount
nfsstat

? ? ? ? NFS information
name resolution order /etc/netsvc.conf NetInfo /etc/netsvc.conf /etc/host.conf (4-)
/etc/nsswitch.conf (5+)
/etc/nsswitch.conf 6+: /etc/nsswitch.conf
5.3: /etc/resolv.conf
/etc/nsswitch.conf
/etc/resolv.conf
tcpconfig
/etc/netconfig
/etc/nsswitch.conf
/etc/resolv.conf (obsolete)
/etc/resolv.conf /etc/netconfig ? /etc/nsswitch.conf
getent
(hardcoded
into libc)

/etc/nsswitch.conf
/etc/svc.conf (obsolete)

? /etc/hosts.usenamed name resolution order
show network interface info ifconfig -a
no -a
netstat -i
lsattr -E -l entX
ifconfig -a netstat -i
ifconfig
ifconfig -a lanadmin
landiag
lanscan
netstat -in
ifconfig lanx
ifconfig -a
netstat -ia
ifconfig
ethtool
ifconfig -a
ildconfig
netstat -in
ifconfig -a
netstat -in
ifconfig -A ifconfig -a
inetstat -in
etherstat
cmxinfo

ifconfig -a
netstat -in
Network Config. Mgr. (GUI)

ndd
ifconfig -a
netstat -in
(8+) kstat -n hme0 | egrep 'ifspeed|duplex'
ifconfig -a

ifconfig -a
netstat -in

ifconfig ifconfig -a
netstat -in
show network interface info
change IP

smitty chinet

chdev -a netaddr=
newIP -I en#

System Preferences: Network
NetInfo
sysadm edit /etc/rc.conf (option ifconfig_interfacename)

ifconfig
/sbin/set_parms initial
ifconfig
edit: /etc/{hosts,
sys_id,
resolv.conf,
TIMEZONE},
/etc/config/
{static-route.options,
ifconfig-1.options};
reboot

(rh) edit: /etc/hosts,
/etc/sysconfig/network,
/etc/sysconfig/
network-scripts/
ifcfg-eth0
(deb) edit
/etc/network/interfaces;
/etc/init.d/networking
restart

ifconfig
tcpconfig

edit /etc/ifconfig.interface

edit /etc/rc.conf (ifconfig*)

edit /etc/hostname.driver sysadm
ifconfig (temp.)
vi /etc/default/inet

ifconfig

netconfig

edit: /etc/{resolv.conf, hosts, hostname.*, netmasks, nodename,
dumpadm.conf, net/*/hosts}

sys-unconfig; reboot

edit /etc/hosts
/etc/hostname.*
(4.x) netsetup
(5.x) sysman net_wizard or
netconfig
?

netconfig
ifconfig
initif

/etc/install/install

change IP
start DHCP client ? ? ? dhclient ? ? dhcpcd ? dhclient ? ? ? ifconfig interface dhcp ? ? ? ? start DHCP client
ping one packet ping -c 1 hostname ping -c 1 hostname ping -s -c 1 hostname ping -c 1 hostname ping hostname 10 1 (9)
ping hostname -n 1 (10+)
ping -c 1 hostname ping -c 1 hostname ping -c 1 hostname ping -c 1 hostname ping -c 1 hostname ping -c 1 hostname ping -c 1 hostname ping hostname packetsize 1 ping hostname
packetsize 1
ping -c 1
? ping hostname ping one packet
sniff network iptrace
ipreport
tcpdump ? tcpdump

nettl
netfmt

snoop
tcpdump
etherfind
tcpdump
ethereal
etherape
tcpdump
tcpdump tcpdump tcpdump ? snoop etherfind tcpdump ? ? sniff network
route definitions netstat -r
smitty route
netstat -r sysadm edit /etc/rc.conf (option defaultrouter)
netstat -r
route
/etc/rc.config.d/netconf
netstat -r
/etc/config/
static-route.options
route
(rh)
/etc/sysconfig/network
(rh) /etc/sysconfig/static-routes
(deb) /etc/init.d/network
(deb) /etc/network
tcpconfig
/etc/inet/defaultrouter
/etc/inet/gate*
netstat -r

netstat -r
route show
/etc/rc.conf
/etc/mygate

netstat -r

route show

netstat -r netstat -r

/etc/defaultrouter
/etc/notrouter
/etc/gateways
in.routed
netstat -r
route add

/etc/defaultrouter
(kernel tweak or
adb to diable
forwarding)
/etc/routes ? netstat -r route definitions
telnetd, ftpd banner /etc/security/login.cfg /etc/ftpwelcome ? /etc/ftpwelcome /etc/inetd.conf (telnet) /etc/issue /etc/issue.net (telnet)
(ftp varies; can use tcp wrappers)
/etc/issue
~ftp/etc/issue
~ftp/etc/msgs/welcome
/etc/motd
/etc/ftpwelcome
/etc/issue if enabled via if= in /etc/gettytab
/etc/issue.net
/etc/ftpwelcome
/etc/issue ? /etc/default/telnetd
/etc/default/ftpd
n/a /etc/issue ? /etc/issue
/etc/motd
telnetd, ftpd banner
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
encrypted passwords in /etc/security/passwd NetInfo /etc/shadow /etc/master.passwd /etc/passwd (not Trusted)
/.secure/etc/passwd (Trusted 9)
/tcb/files/auth/
(10+)
/etc/shadow (11.22+)
/etc/shadow /etc/shadow (may vary) /etc/shadow /etc/master.passwd (/etc/spwd.db) /etc/master.passwd (/etc/pwd.db) /etc/shadow /etc/shadow /etc/shadow /etc/passwd /tcb/files/auth (only with Enhanced Security) /etc/shadow /etc/udb encrypted passwords in
allow/deny root
logins
/etc/security/user /etc/ttys (doesn't affect ssh) /etc/default/login /etc/login.access;
/etc/ttys
/etc/securetty /etc/default/login /etc/securetty /etc/default/login /etc/ttys /etc/ttys /etc/default/login /dev/default/login /etc/default/login /dev/ttytab /etc/securettys /etc/securettys udbrestrict -R allow/deny root
logins
firewall config ? Aqua / System Prefs /
Sharing / Firewall
? ipfw
ipf
pf
/etc/opt/ipf/ipf.conf /etc/ipf.conf iptables
ipchains
ipfwadm
(rh) redhat-config-
securitylevel
? /etc/ipf.conf
/etc/ipf6.conf
pfctl
/etc/pf.conf
? ? (9+) /usr/aset/ ? ? ? ? firewall config
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
show installed software lslpp -L

ls /Applications
Apple System Profiler
system_profiler
ls /Network/Applications
/Network/Users/*/
Applications
/Users/*/Applications

pkginfo pkg_info
ls /var/db/pkg


rmfn, what (HP-UX 9)
swlist (HP-UX 10+)

versions
showfiles
showprods

(rh) rpm -a -i
(rh) rpm -qa
(rh) yum list installed
(deb) dselect
(deb) aptitude
(deb) dpkg -l
displaypkg
pkginfo
pkg_info pkg_info pkginfo -l
sysadm

swconfig
displaypkg
pkginfo

pkginfo
prodreg
admintool
/var/sadm/install/contents
? setld -i ? ? show installed software
add software

smitty install_all
smitty installp

/usr/lib/instl/sm_inst
installp_cmd -a
-d 'device' '-c' '-N' '-g' '-X'

installpkg
drag-and-drop
sysadm /stand/sysinstall
/usr/ports make
pkg_add
portinstall (from /usr/ports)
swinstall inst
swmgr
(rh) rpm -hiv
(rh) yum install pkg
(deb) dselect
(deb) apt-get install pkg
(deb) dpkg -i
pkgadd
pkgplus
pkg_add
/usr/pkgsrc && make
pkg_add
/usr/ports && make
pkgadd
sysadm

custom
installpkg
SCOadmin (GUI)

pkgadd ? setld -l ? ? add software
precompiled binaries of GPLware and freeware www-1.ibm.com/servers/
aix/products/aixos/linux/
download.html

aixpdslib.seas.ucla.edu/
aixpdslib.html

bullfreeware.com

fink.sourceforge.net

darwinports.opendarwin
.org

darwinports.com

? ftp.freebsd.org/
pub/FreeBSD

www.freebsd.org

hpux.cs.utah.edu

hpux.connect.org.uk

freeware.sgi.com
www.sgi.com/fun

www.linux.org
linux.tucows.com
sourceforge.net
rpmfind.net
(deb) ftp.debian.org
(deb) packages.debian.org
? ftp://ftp.netbsd.org/pub/
NetBSD/packages
ftp://ftp.openbsd.org/
pub/OpenBSD/<version>/
packages
? www.caldera.com/
skunkware
www.sunfreeware.com
www.blastwave.org
? www.tru64unix.compaq.com/
demos

tpegsrvr.zk3.dec.com/
freeware/tbl_packages.html
? ? precompiled binaries of GPLware and freeware
C compiler /usr/ibmcxx/bin/cc /usr/bin/cc (gcc) /usr/sde/default/usr/bin/cc /usr/bin/cc (gcc) /opt/softbench/bin/cc ($)
/bin/cc (9)
/usr/bin/cc (10+; not ANSI; kernel builder only)
/opt/MIPSpro/
bin/cc ($)
/usr/bin/cc
gcc /usr/bin/cc
(Metaware)
/usr/bin/cc (gcc) /usr/bin/cc /usr/bin/cc /usr/bin/cc /opt/SUNWspro/
bin/cc ($)
/usr/bin/cc /usr/bin/cc /usr/bin/cc /opt/ctl/bin/cc C compiler
show patch level
and/or patches
instfix -ivq
oslevel -r
sw_vers
Apple:About This Mac
ls /Library/Receipts
uname -a
lsbom
cat /System/Library/
CoreServices/
SystemVersion.plist
what /dgux uname -a swlist -l product |
grep PHsomeString

versions -b | grep patch (6.4-)
uname -R (6.5+)

(rh) rpm -q
(deb) dpkg -s
pkginfo -l cat /kern/version
uname -a
/etc/release
sysctl -n kern.version uname -a
pkginfo | grep EKS
swconfig -P showrev -p
prodreg (2.6+)
patchadd -p
showrev -p
(if you're lucky)
dupatch -track -type kit
dupatch -track -type patch
setld -i | grep patchname
sizer -vB
? ? show patch level
and/or patches
patch tool installp
smitty update_all
System Preferences / Software Update
softwareupdate
dg_sysreport -p patches (cvsup or cvs to update,
then rebuild)
update (9)
swinstall (10+)
inst
swmgr
apt-get update
apt-get upgrade
(rh) up2date
(rh) yum update
(mand) urpmi
pkgadd
pkgplus
cvs cvs/CTM pkgadd
sysadm
? installpatch (2.5.1-)
patchadd (2.6+)
pkgadd
/usr/sadm/bin/smpatch (9+)
n/a setld -i
dupatch
? ? patch tool
configure/show
runtime linking
fortran-2000.com/
ArnaudRecipes/
sharedlib.html
dump -H
ldd
otool -L ? ldd
ldconfig
kldstat
chatr
ldd (11+)
kmadmin
ldd
rld
_RLD_LIST
ldconfig
ldd
lsmod
ldd
ldconfig
ldd
nm
ldconfig
ldd
ldconfig
ldd ? crle
ldd
pldd
modinfo
LD_PRELOAD
ldd odump -Dl
ldd
? ? configure/show
runtime linking
fortran-2000.com/
ArnaudRecipes/
sharedlib.html
link library path $LIBPATH

$DYLD_LIBRARY_PATH
man dyld

$LIBPATH $LD_LIBRARY_PATH $LD_LIBRARY_PATH
(64-bit)
$SHLIB_PATH
(32- or 64-bit)
$LD_LIBRARY_PATH
$RLD*_PATH
$LD_LIBRARY_PATH
/etc/ld.so.conf
$LD_LIBRARY_PATH $LD_LIBRARY_PATH
/etc/ld.so.conf
? $LD_LIBRARY_PATH ? $LD_LIBRARY_PATH $LD_LIBRARY_PATH $LD_LIBRARY_PATH ? $LDPATH link library path
tracing utility trace
syscalls
truss
watch
ktrace; kdump
fs_usage
?=dg_strace
(>=4.20MU06)
ktrace
truss
trace (freeware)
tusc (11+, freeware)
par
prfstat

strace
ltrace

truss ktrace
ktruss
kdump
ktrace
ptrace
truss
scstat
?

truss
sotruss
dtrace (10+)

trace trace
truss
? cdbx
jumptrace
tracing utility
define user defaults /etc/security/
mkuser.default
/etc/environment
/usr/bin/defaults admuser -o set /etc/login.conf /etc/default
/etc/PATH
/etc/MANPATH
/etc/default/*

/etc/default/login
/etc/profile

/etc/profile
/etc/security/
/etc/skel/
/etc/default/login
/etc/profile
/etc/security/
/etc/profile
/etc/skel/*
login.conf

/etc/profile
/etc/skel/*
/etc/login.conf

/etc/default/login
/etc/profile
$HOME/.profile
? /etc/default/login
/etc/profile
/etc/security/
/etc/profile /etc/skel
/etc/profile
/etc/skel
/etc/profile
udbgen
nu scripts
define user defaults
csh global .login ? /etc/csh.login ? /etc/csh.login /etc/csh.login /etc/cshrc /etc/csh.login /etc/.login /etc/csh.login /etc/csh.login ? ? /etc/.login ? /etc/csh.login ? /etc/login csh global .login
default syslog and messages /var/adm/syslog
/var/adm/messages
/var/log/system.log /var/adm/messages /var/log/messages /var/adm/syslog/syslog.log
/var/adm/sulog
/var/spool/mqueue/syslog
/var/adm/SYSLOG
/var/adm/sulog
/var/log/syslog
/var/log/messages
/usr/adm/messages
/var/log/maillog
/var/adm/streams
/var/adm/usererr
/etc/.osm
/var/log/messages /var/log/messages /var/adm/log/messages /usr/adm/syslog
/var/adm/log/osmlog
/var/adm/messages
/var/log/syslog

/var/adm/messages

/var/log/syslog (sendmail)

(4.x+) /var/adm/messages
/var/adm/syslog.dated (kern, auth, daemon, lpr, syslog, user)
/var/adm/binary.errlog
/var/adm/messages
/var/adm/syslog.dated (kern, auth, daemon, lpr, syslog, user)
/var/adm/binary.errlog
/usr/adm/messages default syslog and messages
system error reporting tool errpt Console
/var/log/crash.log, dmesg
admsyslog -o report dmesg
send-pr
dmesg
sysdiag (9 and early10)
stm/cstm/mstm/xstm (10.20+)
EMS (from support CD)
sysmon
amsyslog
availmon
eventmond
imdmonitor
syserrpanel

dmesg

(deb) reportbug
odm
errpt
dmesg
cat /kern/msgbuf
dmesg sysadm
log3
WebSysAdmin
dmesg prtdiag dmesg (4.x) uerf; dia (DECevent)
(5.x) (System errors)
EVM (evmget; evmshow)
(Hardware errors) dia; ca (Compqaq analyze)
uerf errpt system error reporting tool
performance monitoring

ftp://ftp.software.ibm.com/
aix/tools/perftools/perfpmr

vmstat; iostat; sar; filemon; topas; trace; svmon; netpmon

vm_stat; nfsstat;
fs_usage; sc_usage;
top
Process Viewer
? fstat; nfsstat; systat; vmstat; netstat; uustat; top; iostat top; sar; vmstat;
iostat; nfsstat; netstat;
uustat; Glance($)
pcp; dkstat; pmkstat;
sar; osview; gr_osview;
ecstats; linkstat; netstat;
nfsstat; nfsvis; nodevis;
routervis; nstats; top
vmstat
procinfo -D
sar; pinfo -v;
modstat; netstat;
nfsstat; pppstat;
smtpstat; snmpstat;
uustat; top
iostat; netstat; systat;
vmstat
iostat; pstat; systat;
vmstat
vmstat; mpstat; dkstat;
sar; netstat; scstat
?

sar; iostat; kstat;
mpstat; netstat; nfsstat;
prstat; trapstat; vmstat; ptree

iostat; netstat; vmstat iostat; nfsstat; vmstat
/usr/opt/sv4b/bin/sar
iostat; nfsstat; vmstat
/usr/opt/sv4b/bin/sar

sar; xsar; tsar; xsam;
xscc; xns; xnetmon;
nfsstat; perfmon; ja;
mppview; xmppview;
sam; csam

performance monitoring
match process to file or port procfiles (5.2+, files only) lsof ? lsof
sockstat
? fuser lsof
netstat -atup
fuser lsof ? fuser ? fuser
lsof2
pfiles
match process to file or port
TASK \ OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux
NCR Unix NetBSD OpenBSD Reliant SCO UnixWare
Solaris SunOS 4 Tru64
Ultrix UNICOS OS / TASK
FAQs (see also faqs.org) www.faqs.org/faqs/
aix-faq/part1/
preamble.html

www.darwinfo.org/
faq.shtml

www.macosxhints.com

www-csc.dg.com/csc/
dguxfaqs1.asp
www.freebsd.org/doc/
en_US.ISO8859-1/books/faq
www.faqs.org/faqs/
hp/hpux-faq/preamble.html
techpubs.sgi.com/library/
tpl/cgi-bin/browse.cgi?coll=0650
&db=FAQ

www.linuxdoc.org/
FAQ/Linux-FAQ

www.debian.org/doc/
FAQ

? www.netbsd.org/
Documentation
www.openbsd.org/faq ? pcunix.com/SCOFAQ/ www.faqs.org/faqs/Solaris2/
FAQ/

www.faqs.org/faqs/Solaris2/
x86/FAQ/

www.stokely.com/
unix.sysadm.resources/
faqs.sun.html
www.faqs.org/faqs/
comp-sys-sun-faq/
www2.tru64.org/faq/
tru64_faq.php
www.supelec.fr/decus/
faq/faq-ultrix.html
www.spikynorman
.net
FAQs (see also faqs.org)
mailing list AIX-L@pucc.
princeton.edu

(LISTSERV)
lists.apple.com ? www.freebsd.org/
handbook/
eresources.html
#ERESOURCES-MAIL
hpux-admin@
dutchworks.nl

(majordomo)
?

www.linumanagers
.org

www.linux.org/
help/lists.html

? www.netbsd.org/
MailingLists
www.openbsd.org/
mail.html
? ? sun-managers@sunmanagers
.org
(majordomo)
sun-managers@
sunmanagers
.ececs.uc.edu
(majordomo)
tru64-unix-man
agers@ornl.gov
(majordomo)
http://www.ornl.gov/its/archives/
mailing-lists/
decstation-man
agers@ornl.gov

(majordomo)
? mailing list
mailing list archives

www.marist.
edu/htbin/wlvindex?
ADSM-L

marc.theaimsgroup.com/
?l=aix-l&r=1&w=2

lists.apple.com ? www.freebsd.
org/ search.html#
mailinglists
www.dutch
works.nl/
htbin/hpsysadmin
? www.linuxmanagers.org/
pipermail/linuxmanagers

lists.debian.org
? www.netbsd.org/
MailingLists
www.openbsd.org/
mail.html
? ?

www.sunmanagers.org/
archives.html

www.latech.
edu/sunman.html

www.latech.
edu/sunman.html
www-archive.
ornl.gov:8000
www-archive.
ornl. gov:8000
? mailing list archives
newsgroup(s)
groups.google
comp.unix.aix
www.thp.uni-duisburg.de/
cuaix/cuaix.html
comp.sys.mac.* ? comp.unix.bsd.
freebsd.misc
comp.sys.hp.hpux comp.sys.sgi.admin comp.os.linux.* (esp .answers) comp.sys.ncr comp.unix.bsd.
netbsd.misc
comp.unix.bsd.
openbsd.misc

lucky.openbsd.misc
de.comp.os.unix.sinix comp.unix.sco.misc comp.sys.sun.
admin
, comp.unix.solaris
comp.sys.sun
admin
comp.sys.dec, comp.unix.tru64 comp.unix.ultrix comp.unix.cray

newsgroup(s)
groups.google

user groups www.userblue.org www.apple.com/
usergroups

www.omnigroup.com/
developer/mailinglists
www.themacintoshguy.
com/lists/X.html
? www.freebsd.org/
support.html#user
www.interex.org ? www.debianhelp.org ? www.netbsd.org/gallery/
groups.htm
l
deadly.org ? ? ? ? Encompass/DECUS ? www.cug.org
www.excray.com
user groups
magazines

www.developer.
ibm.com/library/aixpert

www.macworld.com
www.stepwise.com
? www.daemonews.com www.hpchronicle.com
www.interex.org/hpuxusr
www.hppro.com
www.sgi.com/support/
pipeline.html
www.linuxjournal.com
www.linux-mag.com
www.debianplanet.org
? www.daemonnews.com undeadly.org ? ? www.sunworld.com
sun.com/sun-on-net/itworld
? www.tru64.org ? ? magazines
vendor home page www.developer.ibm.com/
tech/map/aixrm.html
www.apple.com

www-csc.dg.com/
csc/default.asp

www.freebsd.org unix.hp.com www.sgi.com/software/
software.html#IRIX
www.linux.org
www.redhat.com
www.debian.org
ncr.com
teradata.com
www.netbsd.org www.openbsd.org www.fujistu-siemens.com www.caldera.com/
products/openunix
sun.com/solaris
sun.com/bigadmin
sun.com/developers/support
soldc.sun.com
access1.sun.com
? www.tru64unix
.compaq.com
www.supelec.fr/decus/
faq/faq-ultrix.html
www.cray.com vendor home page
vendor docs and patches

www.redbooks.ibm.com

techsupport.services.
ibm.com/
server/support?
view=pSeries

developer.apple.com/
darwin
www.info.apple.com/
support/downloads.html

www.apple.com/support/
security/security.html

www-csc.dg.com/csc/
custdocsasp/
custdocs2.asp?
category=069docs.asp
www.freebsd.org/handbook
www.freebsd.org/releases/
4.0R/errata.html
docs.hp.com
itrc.hp.com
techpubs.sgi.com
www.sgi.com/
support/patch_intro.html

support.sgi.com
relnotes
grelnotes
www.linuxdoc.org/
rpmfind.net/linux/RPM
www.info.ncr.com/
eCRM-
OSHW-Browse
By-Results.cfm
?pl=&PID=&title=
&release=
&pl=Software
%20-%20
MP-RAS&sbrn=3

www.netbsd.org/
Security

www.openbsd.org/
docum.html

www.openbsd.org/
errata.html
service.fujitsu-siemens
.com
its.siemens.com/lobs/its/
its_sc/eks_en/unix_en.htm
www.caldera.com/support docs.sun.com
sunsolve.sun.com
? www.tru64unix
.compaq.com/docs
N/A (EOL) www.cray.com/
craydoc
vendor docs and patches
vendor phone (US) AIX: 800-237-5511
IBM hardware:
800-426-7378
1-800-MY-APPLE ? 925-674-0783
(FreeBSD Mall)
800-633-3600 800-800-4SGI ? ? ? ? (Germany)
+49-5251-80
? 800-USA-4SUN ? 800-344-4825 800-344-4825 ? vendor phone (US)
TASK / OS AIX Darwin DG/UX FreeBSD HP-UX IRIX Linux NCR Unix NetBSD OpenBSD Reliant SCO UnixWare Solaris SunOS 4 Tru64
(Digital Unix, OSF/1)
(4) 4.0F/G
(5) 5.0A
Ultrix UNICOS OS \ TASK

Posted by redkite
, |

0010. OS 커널 확인 방법

솔라리스 커널 Bit 확인법 솔라리스/sparc 7 이상의 운영체제는 32bit 와 64bit 로 나누어진다.

자신의 시스템의 OS가 64bit 인지 32bit 인지는 isainfo -kv 라는 명령으로 확인할 수가 있다.

# isainfo -kv
64-bit sparcv9 kernel modules

위와 같은 결과는 64bit를 뜻한다.

단, 이것은 Sparc 버전의 솔라리스에만 해당되고 Intel 버전의 솔라리스는 32Bit 이다.

######################################################################


[UNIX] solaris의 32bit or 64bit booting..
솔라리스 7은 인스톨 하실때 64비트로 설치를 할것인지를 물어보는 단계가 있습니다.
이단계에서 64비트를 선택하시면 64비트와 32비트를 모두 사용하실수 있습니다.
그러나, 굳이 한가지로만 사용하신다면 아래와 같이 하시면 됩니다.

i) 64비트 또는 32비트로 부팅할 수있는지의 여부판단

(ns>root)/# isalist

만약 sparcv9 를 볼 수 없다면 64비트로 부팅할 수 없습니다.

ii)현재 64비트 모드인지 32비트 모드인지 볼려면

(ns>root)/# isainfo -v
64-bit sparcv9 application
32-bit sparc application
위와같이 출력된다면 시스템은 64비트로 운영중인 것입니다.

그러나 아래와 같이한 line만 출력된다면 32비트로 부팅되어 있는 상태입니다.
32-bit sparc application

iii) 부팅할때 64비트 혹은 32비트로 부팅하고자 할때
리부팅을 시키신후 시스템이 올라올때 stop + A를 누르신후
ok> prompt상에서 환경설정을 다음과 같이 하시면 됩니다.

- 32비트로 부팅
ok> setenv boot-file=kernel/unix
ok> reset

- 64비트로 부팅
ok> setenv boot-file=kernel/sparcv9/unix
ok> reset

### 멀티 유저 일때는
/platform/sun4u/boot.conf 화일을 아래와 같이 변경한 후 시스템을 rebooting한다.

# vi /platform/sun4u/boot.conf

ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true

# reboot

##############################################################################################


AIX 에서 비트 확인 하는 방법 root 권한으로

bootinfo -K를 하시면 설치된 OS의 비트를 확인할 수 있습니다.

Posted by redkite
, |

vi /etc/rc.local

touch /var/lock/subsys/local


/sbin/route add -net 172.16.2.0/24 gw 203.251.60.100

solaris 10

route add 192.0.2.32 -netmask 255.255.255.224 somegatewa

 


/etc/rc3.d 정도에 실행 스크립트 추가하시면 됩니다.
이름은 적당히 정하시고 스크립트 안에 route add 문구 넣으시고요...

파일 이름은 S77routeadd 이런식으로 하시고요..(대문자 S로 시작되는 스크립트는 항상 부팅시 시스템이 실행 시키는 스크립트입니다.)
파일 안에 그냥 route add로 라우팅 테이블 추가하듯이 내용 적으시면 됩니다.

#!/bin/sh
route add 192.168.0.0 192.168.0.1

/sbin/route add -net 10.200.200.0/24 -netmask 255.255.255.0 192.168.254.100

/sbin/route add -net 10.200.200.0/24 -netmask 255.255.255.0 223.1.1.100

Posted by redkite
, |

□ HA 데몬상태

# ps -ef|grep had

root 11227 1 015:02:52 ? 0:00 /opt/VRTSvcs/bin/hashadow

root 11203 1 1 15:02:52 ? 0:04 /opt/VRTSvcs/bin/had

위와같이 had, hashadow 데몬이떠있으면정상

 

□ LLT Heartbeat Link 상태

# lltstat -n

LLT node information:

Node State Links

* 0 dbms1 OPEN 2

1 dbms2 OPEN 2

→위와같이각 Links 2개로보이면정상

 

□ GAB Membership Port 확인

# gabconfig -a

GAB Port Memberships

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

Port a gen e65507 membership 01

Port h gen e65524 membership 01

→위와같이 a, h 포트가떠있으며 membership 0 node 1 node 가보이면정상

 

□ HA Status 확인

# hastatus -sum

-- SYSTEM STATE

-- System State Frozen

 

A dbms1 RUNNING 0

A dbms2 RUNNING 0

 

-- GROUP STATE

-- Group System Probed AutoDisabled State

 

B Oracle dbms1 Y N OFFLINE

B Oracle dbms2 Y N ONLINE

위와같이 Oracle Service Group dbms2 에서 ONLINE 인지확인

 

□ Virtual IP 확인

# ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:30:6E:F3:52:31

inet addr:192.168.254.222 Bcast:192.168.254.255 Mask:255.255.255.0

inet6 addr: fe80::230:6eff:fef3:5231/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:69518290 errors:0 dropped:0 overruns:0 frame:7

TX packets:86250448 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:12808034148 (11.9 GiB) TX bytes:82464026785 (76.8 GiB)

Interrupt:56

 

eth0:0 Link encap:Ethernet HWaddr 00:30:6E:F3:52:31

inet addr:192.168.254.221 Bcast:192.168.254.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:56

.

.

.

→위와같이 eth0:0 221 VIP 가올라가있으면정상

 

□ Mount 여부확인

# df -k

oracle, data1, data2, data3 의각 mount point 들이보이며 access 가능하면정상

 

□ VCS Engine Log 확인

# vi /var/VRTSvcs/log/engine_A.log

특별한 이슈나 error 메시지는 없는지 확인

Posted by redkite
, |

0003. 유용한 커맨드

1. xargs 명령은 입력된 데이터를 라인단위로 읽어서 아규먼트화 하는 명령이다.

find 명령을 사용하여 파일을 삭제하고자 할때 유용하다.

# find . -type f -mtime +1 | xargs -n 100 rm -f

find 명령을 사용하여 현재 디렉토리 하에서 현재시간보다 하루(+) 전(24시간 내에 작성/변경된 파일만 제외)에 작성/변경된 파일을 찾으면 라인단위로 파일 리스트가 쉘에 출력되는데, 이 파일 리스트는 하나의 라인당 하나의 파일명이 출력되므로 각 라인의 파일명을 아규먼트화하기 위해 xargs를 파이프로 연결한 다음 -n 100 즉, 100 라인(100개 아규먼트)를 한번에 읽어서 rm -f [아규먼트]로 치환하여 100개 단위로 검색된 파일들을 삭제하는 것이다.

[root@localhost shell]# man xargs | col -b | cat
XARGS(1) XARGS(1)

 

NAME
xargs - build and execute command lines from standard input

SYNOPSIS
xargs [-0prtx] [-E eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
[-d delimiter] [--delimiter delimiter] [-I replace-str] [-i[replace-
str]] [--replace[=replace-str]] [-l[max-lines]] [-L max-lines]
[--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s

2. iNode 확인 방법
df -F ufs -o i

3. 압축
----------------------------------------------------------------
#tar 압축 cvf 옵션으로 ...

tar cvf abc.tar def/ WEB-INF/ a.jsp ghi/ b.jsp c.jsp
gzip -9 *20100[4-6]*
#한번더 압축 gzip

gzip abc.tar

----------------------------------------------------------------
#풀때
----------------------------------------------------------------


tar 로 압축되었을 경우 cvf 와는 반대로 xvf를 사용하시면 됩니다.

# tar xvf c.gzip

라고 하시면 압축이 풀릴겁니다.

물론 x 옵션만 사용하셔도 되지만 vf 는 압축해제 하면서 파일리스트도 출력하게 해 줍니다.

gzip으로 압축되었다면 gunzip 로 풀수 있습니다.

# gunzip c.gzip

라고 하시고 디렉토리 보시면 풀려 있을겁니다.


질문 추가 한 곳을 보면 잘 이해가 되지는 않네요.
tar cvf *.c 라고 하셨다면... 조금 난감한 상황이 생길 수도 있습니다.
ls 명령으로 보면 처음에 오는 파일에다가 그 디렉토리에 있는 모든 *.c 파일이 결합되어집니다. 다시 풀수는 있지만... 결합되어져 버린 첫번째 파일은 사용못할 수도 있습니다.

 

----------------------------------------------------------------
#추가
----------------------------------------------------------------


<< 압축하기 >>
* tar 와 gzip 따로 하기
# tar cvf file_name.tar *.c
# gzip file_name.tar

* tar 와 gzip 동시에
# tar cfp - target_dir | gzip -c > made_file.tar.gz

tar cfpv - ./201007* ilkacs_201007*.log tar |gzip -c > acs_201007.tar.gz

// target_dir = 압축할 파일들이 들어 있는 디렉토리
// made_file = 만들어질 압축파일의 이름.

<< 압축풀기 >>
* tar 와 gzip 따로 하기
# gzip -d file_name.tar.gz
# tar -xvf file_name.tar

* tar 와 gzip 동시에
# gzip -dc source_file.tar.gz | tar xvfp

4. CPIO 파일 만들기

 

cpio 를 이용한 특정 확장자 파일만 압축하기.

# find . -name '*.c' -print | cpio -o > data.cpio

 

# ls | cpio -o > ../test.cpio

 

CPIO 파일 풀기

 

-i cpio로 백업한 data를 restore 한다

-o 출력 - 묶을때
-p 통과모드

 


-d restore중 필요한 디렉토리를 자동으로 생성시킨다
-m 백업 되있는 data들의 날짜, 시간을 그대로 유지한다
-v verbose

 

# cpio -idmv < test.cpio


# cpio -i < data.cpio

# cpio -dmvi < example.cpio

# cpio -dmvi < /root/test.cpio

 

 

gz으로 압축되어 있는것을 풀기

 

예1:

# gunzip targetfile.cpio.gz
# cpio -idmv < targetfile.cpio

 

예 2:

# zcat targetfile.cpio.gz | cpio -idmv

 

 

압축 하여 CPIO 만들기

 

tar 를 이용한 특정 확장자 파일 압축하기 (리눅스)

find . -name "*.c" | xargs tar -cvf soure.tar

xargs 를 파라미터 수가 제한적이어서, 파일수가 많으면 불가능함.

 

cpio로 파일 옮기기

한 디렉토리 또는 파일시스템에서 다른 디렉토리 또는 파일시스템으로 옮겨야 할 대량의 파일이 있을 경우 다음의 명령을 이용


# find /old_directory -depth | cpio -pdmv /new_directory

이 명령은 소유자와 권한, 디렉토리 구조를 유지하면서 지정한 old_directory 밑의 모든 파일을 new_directory로 옮긴다.

 

# cd src_dir_name

# find . -depth -print | cpio -pudm target_dir_name


5.rpm 설치

  1. #rpm -Uvh test-1.2.3.src.rpm

: test.src.rpm을 /usr/src/<vender_name_dir>/SPEC 에 SPEC 파일과

/usr/src/<vender_name_dir>/SOURCES/ 에 소스를 설치 한다.

기존에 설치된 패키지가 있을 경우 업그레이드를 한다. -ivh 보다 많이 사용한다.

#rpm -Uvh test-1.2.3.rpm

: test-1.2.3.rpm 을 설치 한다. 기존에 test 라는 낮은 버젼의 패키지가 있으면 업그레이드. 없으면 그냥 -ivh 처럼 설치가 된다.

#rpm -ivh test-1.2.3.rpm

: test-1.2.3 을 처음으로 설치 한다. 처음 설치가 아니더라도 -Uvh 를 사용해도 무관 하다.

 

  1. 설치된 rpm 제거

#rpm -e test

: test 라는 이름의 패키지를 제거 한다.

#rpm -evv test

: test 라는 패키지를 제거 하는 과정을 보여 준다.

 

  1. 설치된 패키지 정보 보기

#rpm -qi test

: test 가 설치 되어 있다면, test 패키지에 대한 설명이 주루룩 뜰것 이다. 아래는 예...

Posted by redkite
, |

유저 확인 스크립트

#!/bin/ksh
for i in `cat /tmp/users`
do
last -R | grep $i | head -1 | awk '{print $1, $5, $6}' >> users.out
done
chmod +x /tmp/users.sh

#!/bin/ksh
for i in `cat /tmp/users`
do
last -a | grep $i | head -1 | awk '{print $1":", $4, $5}' >> users.out
done

 

메뉴 스크립트

case $answer in

1) . /u04/app/oracrp4/CRP4/apps/apps_st/appl/APPSCRP4_dev-db.env;
PS1='[$TWO_TASK] $PWD> ';;
2) . /u04/app/oracrp4/CRP4/db/tech_st/10.2.0/CRP4_dev-db.env;
PS1='[$ORACLE_SID] $PWD> ';;
3) . /u04/app/oracrp4/CRP4/inst/apps/CRP4_dev-db/ora/10.1.3/CRP4_dev-db.env;
PS1='[$TWO_TASK] $PWD> ';;
*) . /u04/app/oracrp4/CRP4/apps/apps_st/appl/APPSCRP4_dev-db.env;
PS1='[$TWO_TASK] $PWD> ';;
esac

Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함