반응형


출처 : http://bestheroz.blog.me/109841952


시간과 날짜와 관련된 라이브러리 함수

구분

함수 원형과 인자

함수 설명

시간

계산

time_t time(time_t *timeptr);

1970 1 1일 자정부터 경과된 현재 시간을 초단위로 계산

시간을

문자열로

변환

char *asctime(strcut tm *time);

구조체 tm형식의 시간을 문자열로 변환

char *ctime(time_t *time);

함수 time()로부터 계산된 현재 시간을 문자열로 변환

시간을

구조체로

변환

struct tm *localtime(time_t *time);

지역 시간(local time)을 구조체 tm의 형식으로 가져오는 함수

struct tm *gmtime(time_t *time);

Greenwich Meam Time(GMT)을 구조체 tm 형식으로 가져옴

시간

차이

계산

clock_t clock(void);

clock tick으로 경과된 시간

double difftime(time_t time2, time_t time1);

두 시간의 차이를 초단위로 계산

시간

지연

void Sleep(unsigned millisecond);

인자가 지정하는 만큼의 1/1000초 단위의 시간을 지연

void delay(unsigned millisecond);

예제

#include<stdio.h>

#include<time.h>

int main(void)

{

time_t now;

time(&now);

printf("현재날짜와시간: %s", asctime(localtime(&now)));

printf("현재날짜와시간: %s", ctime(&now));

return 0;

}

strcut tm은 <time.h>에 다음과 같이 정의되어 있다.

struct tm {

int tm_sec; /* (seconds) - [0,59] */

int tm_min; /* (minutes) - [0,59] */

int tm_hour; /* 시간(hour) - [0,23] */

int tm_mday; /* 날짜(day) - [1,31] */

int tm_mon; /* (month) - [0,11] */

int tm_year; /* 1900년이후의연도수*/

int tm_wday; /* dydlf(second) - [0,6] */

int tm_yday; /* 연중날짜(day) - [0,365] */

int tm_isdst; /* 일광절약시간 - [0, 59] */

};

예제

#include<stdio.h>

#include<time.h>

int main(void)

{

time_t curr;

struct tm *d;

curr=time(NULL);

d=localtime(&curr);

printf("현재날짜\n");

printf("%d%d%d\n", d->tm_year+1900, d->tm_mon+1, d->tm_mday);

printf("현재시간\n");

printf("%d%d%d\n", d->tm_hour, d->tm_min, d->tm_sec);

return 0;

}

time과 clock의 차이

구분

함수 time

함수 clock

원형

time_t time(time_t *timer);

clock_t clock(void);

기능

절대시간 또는 달력시간(calendar time)을 계산

프로세서 시간을 계산

반환 값

1970 1 1일 자정 이후 현재까지 경과된 시간을 초(second)로 반환

프로세서 시간을 반환

예제 - 함수 time 사용

#include<stdio.h>

#include<time.h>

int main(void)

{

time_t start, end;

long i=0;

double pst;

start=time(NULL);

while(i<30000000)

{

i++;

}

end=time(NULL);

pst=difftime(end, start);

printf("time: %f\n", pst);

return 0;

}

/**초단위의시간을계산하는함수time()의결과는0초**/

예제 - 함수 clock 사용

#include<stdio.h>

#include<time.h>

int main(void)

{

time_t start, end;

long i=0;

double pst;

start=clock();

while(i<30000000)

{

i++;

}

end=clock();

pst=(double)(end-start)/CLK_TCK;

printf("time: %f\n", pst);

return 0;

}

시간을 지연시키는 함수 Sleep 예제

#include<stdio.h>

#include<time.h>

#include<windows.h> //Sleep()

int main(void)

{

clock_t start, end;

double pst;

start = clock();

printf("start!\n");

Sleep(3500);

end = clock();

printf("end\n");

pst = (double)(end-start)/CLK_TCK;

printf("경과시간: %f\n", pst);

return 0;

}

시간을 처리하는 함수와는 다른 개념의 함수이지만 유용하게 사용할 수 있는 함수로 kbhit가 있다. 이 함수의 원형은 다음과 같이 함수의 인자가 없으며, 키보드 상의 어떤 키를 누르면 0이 아닌 값을, 누르지 않은 상태라면 0값을 반환하는 함수다. 함수 kbhit는 <conio.h>를 필요로 한다.

kbhit

함수원형

int kbhit(void);

반환 값

입력된 키가 있으면 0이 아닌 값을, 입력된 키가 없으면 0을 반환

프로그램 실행중에 아무키나 누르기 전까지만 프로그램을 계속 반복시키고자 한다면 반복문 while과 함께 다음과 같이 사용할 수 있다.

while(!kbhit())

{

//반복할프로그램

}

예제 - 현재 시간을 연속적으로 출력(kbhit, localtime)

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

#include<conio.h>

int main(void)

{

time_t now;

struct tm *d;

while(!kbhit())

{

system("cls");

now=time(NULL);

d=localtime(&now);

printf("현재날짜와시간: %s\n", asctime(d));

}

return 0;

}

날짜 수와 요일 계산

기준일(1년 1월 1일)로부터 특정일 사이의 날짜 수의 계싼 함수 total_days

long total_days(int year, int month, int day)

{

int months[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int i;

long total=0L;

total=(year-1)*365L+(year-1)/4-(year-1)/100+(year-1)/400;

if(!(year%4) && year%100 || !(ytear%400))

months[1]++;

for(i=0;i<month-1;i++)

total += months[i];

total += day;

return total;

}

특정일의 요일 계산

#include<stdio.h>

long total_days(int year, int month, int day);

int main(void)

{

int year, month, day;

char *week_day[] = {"", "", "", "", "", "", ""};

long total;

printf("특정일의요일구하는프로그램\n\n");

printf("입력될숫자는space bar로분리하고\n");

printf("Enter 키를누릅니다.\n");

printf("예로2005 5 1 Enter\n");

printf("년월일입력: ");

scanf("%d %d %d", &year, &month, &day);

total=total_days(year, month, day);

printf("%s 요일입니다.\n", week_day[total%7]);

return 0;

}

long total_days(int year, int month, int day)

{

int months[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int i;

long total=0L;

total=(year-1)*365L+(year-1)/4-(year-1)/100+(year-1)/400;

if(!(year%4) && year%100 || !(year%400))

months[1]++;

for(i=0;i<month-1;i++)

total += months[i];

total += day;

return total;

}

특정일 사이의 날짜 수를 계산

#include<stdio.h>

long total_days(int year, int month, int day);

int main(void)

{

long total;

total=total_days(2010, 7, 21) - total_days(1987, 4, 16);

printf("두날짜사이의날짜수: %ld\n", total);

return 0;

}

long total_days(int year, int month, int day)

{

int months[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int i;

long total=0L;

total=(year-1)*365L+(year-1)/4-(year-1)/100+(year-1)/400;

if(!(year%4) && year%100 || !(year%400))

months[1]++;

for(i=0;i<month-1;i++)

total += months[i];

total += day;

return total;

}

반응형
반응형





shell 에서 \n \t 등을 쓰려면 가장 간단한 방법을 찾아보다가..
-e 옵션을 주면 잘 실행되는 것을 확인 할 수 있었다.


$) echo -e "one\ntwo\nthree"
$) one
$) two
$) three


man echo를 보니 요러한 설명이 들어가 있다!
---------------------------------------------------------------------------------------------
설명
       이   맨페이지는 GNU 버전의 echo 를 다룬다.  대부분의 쉘들은 같은 이름, 같은
       기능의 내장 명령을 가지고 있다는 것을기억하기 바란다.

       echo 는 주어진 문자열들을 스페이스로 구분하여 출력하고 맨마지막에는개행문자
       를 출력한다.

   옵션
       -n     마지막에 개행문자를 출력하지 않는다.

       -e     문자열에서 다음 백슬래쉬로 이스케이프된 문자의 번역을 하도록 한다:
              \a     경고음 (벨)
              \b     백스페이스
              \c     마지막 개행문자를 사용하지 않는다.
              \f     폼 피드
              \n     개행문자
              \r     캐리지 리턴
              \t     수평 탭
              \v     수직 탭
              \\     백슬래쉬
              \nnn   ASCII 코드가 nnn (8진수)인 문자
---------------------------------------------------------------------------------------------      

잘 된다. PS1 변수 선언에서 어떠한 부분을 조작해 주면 된다고 하는데
일단 급한 대로 -e 옵션을 사용해야 하겠다. 으아

반응형

'OS > Common' 카테고리의 다른 글

ftp 사용법 [명령어]  (0) 2011.10.20
Tar 와 Gzip Bzip2사용법  (0) 2011.10.20
unix/linux의 OS 32/64bit 확인 방법  (0) 2011.10.04
### 서버관리 명령  (0) 2011.08.21
서버점검 명령어  (0) 2011.08.20
반응형



Oracle Tip

먼저 오라클 서버쪽 상태를 확인해보자.
-----------------------------------------------------------------------------------------------
1. 먼저 리스너의 상태를 확인해야 한다.

lsnrctl status  리스너 상태 확인
lsnrctl start     리스너 시작
lsnrctl stop     리스너 정지

listener.ora 에 해당 서버의 아이피와 뚫어줄 포트를 설정해 놓으면 해당 포트로 리스닝을 하게 된다.
listener.ora 파일을 수정하면 저장한 뒤 반드시 오라클 리스너를 재시작할 것..
-------------------------------------------------------------------------------------------------
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = (현재 IP 기입))(PORT = 1521))   -- 추가해 놓을 것.
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)
-------------------------------------------------------------------------------------------------

tnsping 아이피 포트 또는
telnet 아이피 포트
를 이용해서 현재 서버의 리스너가 정상적으로 동작하고 있는지 확인해보자.




반응형
반응형

dspmqver - 엠큐 버젼 확인

0.큐 매니저 관리
crtmqm -옵션 큐매니저명 - 큐관리자 생성 (-q 디폴트 큐매니져, -c 디스크립션, -u 데드큐 지정(데드큐는 해당 DQ 생성 해줘야함), )
strmqm 큐매니저명 - 큐 관리자 시작
strmqscv 큐매니저명 - 큐 관리자 커맨드 서버 시작
endmqm -i 큐매니저명 - 큐 관리자 정지
runmqsc 큐매니저명 - 큐관리자 명령모드
dsqmq - 현재 큐매니저 나열
runmqlsr -옵션 -m 큐매니저명 - 큐매니저 리스너 시작 (-t 프로토콜, -p 포트, -i 아이피, -m 큐매니저명)

윈도우
netstat -nap TCP | find " 포트명" => 리스너 띄운뒤 netstat으로 리스너 시작여부 확인.
유닉스
netstat -na tcp | grep 포트명

1. 명령행 모드
dsp qmgr - WMQ Object들을 확인 (dsp -> display)
dis q(*) - 큐 보기
dis chl(*) - 채널 보기

define qlocal(TEST.LQ) => def ql(TEST.LQ) => 해당 큐 정의
dis ql(TEST*) - 해당 큐보기
alter qmgr deadq(TEST.DQ) - 데드레터큐 등록

def ql(TEST.XQ) usage(XMITQ) -> Transmission Queue 정의

def qr(TEST2.TEST2.RQ) rname(TEST2.LQ) rqmname(TEST2) xmitq(TEST2.XQ) - Remote Queue 정의(큐 관리자 TEST1에서 실행)

def chl(TEST1.TO.TEST2) chltype(SDR) +
conname('127.0.0.1(1415)') trptype(TCP) xmitq(TEST2.XQ) - 송신채널 정의

def chl(TEST1.TO.TEST2) chltype(SCVR) - 수신채널 정의
ping channel(TEST1.TO.TEST2) - 채널 ping을 수행. (큐관리자 TEST1에서 실행)
start chl(TEST1.TO.TEST2)
runmqchl -c TEST1.TO.TEST2 -m TEST1
display chstatus(*)

1. 계정 최고 관리자
UNIX 계열 : mqm
WINDOWS 계열 : MUSR_MQADMIN

- 해당 큐에 접속 가능하도록 큐 관리자 등록(의미가 맞나 ㅡㅡ?) -
ALTER CHANNEL(SYSTEM.DEF.SVRCONN) CHLTYPE(SVNCONN) MCAUSER(계정 최고 관리자)

mqsc 에서 리스너 띄우기
dis listener(*) - 리스너 세부사항 표시.
alter LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) TRPTYPE(TCP) CONTROL(QMGR) PORT(1414) - 리스너 변경
start LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) - 리스너 시작 요청
반응형
반응형

사용자 생성 계정 관리

리눅스 내부 명령어 : 셀에 내장되어 있는 명령어로 셀이 명령어를 이해한다.

리눅스 외부 명령어 : /bin 안에 파일의 형태로 존재

차이점 : 내부 명령어의 실행 시 별도의 프로세서를 시작시키지 않지만, 외부 명령어의 실행 시 새로운 서브 프로세서를 fork하고 실행

검색 경로 지정

리눅스에서 명령어는 셀이 특정 검색 경로를 찾아 실행하게 되어 있다.

검색경로가 지정되어 있는 파일 : .bash_profile

PATH = _______: _______:

path에 지정된 경로에 자주 사용하는 명령어의 결로를 앞쪽에 두는 것이 좋다. path에 설정된 경로를 찾을 때까지 앞에서 뒤쪽으로 차례대로 검색

/etc/default/useradd : 사용자의 기본적인 셀 환경을 설정할 수 있음.

계정 조회

users

현재 시스템에 로그인된 사용자 계정을 조회 / 사용자 계정에 대한 정보를 확인

cat n /etc/passwd

root : x : o : o : root : /root : /bin/bash

1 2 3 4 5 6 7

1 : 사용자명

2 : 패스워드 (/etc/shadow 파일에 암호화되어 있음)

3 : 사용자 계정 uid

4 : 사용자 계정 gid

5 : 사용자 계정 이름 정보

6 : 사용자 계정 홈 디렉토리

7 : 사용자 계정 로그인 셀

cat n /etc/shadow

root : #$%!234^x13 : 11535 : o : 99999 : 7 : : : :

1 2 3 4 5 6 7 8 9

1 : 사용자명

2 : 패스워드

3 : 패스워드 파일 최종 수정일

4 : 패스워드 변경 최소일

5 : 패스워드 변경 최대일

6 : 패스워드 만료 경고 기간

7 : 패스워드 파기 기간 (패스워드 파기 후 계정 비활성 기간)

8 : 계정 만료 기간

9 : 예약 필드

계정 생성 기본 설정 파일

/etc/default/useradd : 사용자의 기본적인 그룹, 홈디렉토리, 만기일, 셀 지정

/etc/login.defs (쉐도우 패스워드 사용 시) : 사용자의 각종 환경변수 지정

user D : 기본 설정 사항 확인

계정 생성 암호 설정

useradd 생성할 계정명

passwd 생성한 계정명

useradd [옵션] 로그인 계정

-c comment : 사용자 이름 또는 정보

-d home_directory : 사용자 계정 홈 디렉토리

-e expire_date : 사용자 계정 유효 기간

-f inactive_time : 비활성 기간

-g initial_group : 기본 그룹

-G grout : 다음 그룹

-s shell : 기본 로그인 셀

-u uid : 사용자 계정 uid

계정 변경

usermod [옵션] 로그인 계정

-c comment : 사용자 이름 또는 정보

-d home_directory : 사용자 계정 홈 디렉토리

-e expire_date : 사용자 계정 유효 기간

-f inactive_time : 비활성 기간

-g initial_group : 기본 그룹

-G grout : 다음 그룹

-s shell : 기본 로그인 셀

-u uid : 사용자 계정 uid

usermod d /home/user m user

usermod e 2003-04-05 user

usermod f 3 user

usermod g users user

계정 삭제

userdel r 계정 (-r : 해당 계정자의 홈디렉토리까지 한 번에 삭제)

그룹조회

cat n /etc/group

그룹생성

groupadd [-g GID [-o]] 그룹 id (-o : GID 499이하 값으로 지정)

[-r] 그룹 id 499이하 값으로 자동 지정

[-f] 강제로 생성

groupadd g 900 toheart (900 groupid / toheart 그룹명)

그룹변경

groupmod [-g gid [-o]] gid변경

[-n] 새로운 그룹명으로 변경

groupmod g 700 toheart

groupmod n kkum toheart

그룹삭제

groupdel group group 제거

반응형

'OS > LINUX Common' 카테고리의 다른 글

tmpfs 설정하는 방법  (0) 2014.04.16
GNU tar의 특이성 , 체크섬 오류  (0) 2013.07.09
리눅스 vsftpd 설치 / 설정.  (0) 2011.10.14
Linux에서 JDK 설치  (1) 2011.08.21
리눅스명령어 43개  (0) 2011.08.21
반응형

1) PATH & LIB PATH 환경변수 추가
공통 : export PATH=$PATH:/opt/mqm/bin:/opt/mqm/samp/bin 또는 $PATH:/usr/mqm/bin:/usr/mqm/samp/bin
export EAI_HOME=$EAI_HOME_DIR
export JAVA_HOME=/opt/$java_installed_dir

HP-UX : export SHLIB_PATH=$SHLIB_PATH:/opt/mqm/lib:/opt/mqm/java/lib (32bit) 또는
export SHLIB_PATH=$SHLIB_PATH:/opt/mqm/lib64:/opt/mqm/java/lib64 (64bit)

SunOS : export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mqm/lib:/opt/mqm/java/lib (32bit) 또는
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mqm/lib64:/opt/mqm/java/lib64 (64bit)

AIX : export LIBPATH=$LIBPATH:/usr/mqm/lib:/usr/mqm/java/lib (32bit) 또는
export LIBPATH=$LIBPATH:/usr/mqm/lib64:/usr/mqm/java/lib64 (64bit)

2) Java Class Path 추가

export CLASSPATH=/opt/mqm/java/lib/com.ibm.mq.jar
export CLASSPATH=/opt/mqm/java/lib/connector.jar
export CLASSPATH=$EAI_HOME/java/lib/$user_class.jar...

3) MQ QMGR Create / Object Attribute 주의 사항

- crtmqm -lf 16384 -ls 20 -lp 5 -u $Qmgr_name.DQ -q $Qmgr_name (TX 고려 WMQ Log Sizing 필요)

- Local Queue
DEFINE QLOCAL($LOCALQ.LQ) +
MAXDEPTH(999999999) +
MAXMSGL(4194304) +
DEFPSIST(YES)

- Remote Queue
DEFINE QREMOTE($REMOTEQ.RQ) +
RQMNAME(REMOTEQMgr) +
RNAME(REMOTEQ.LQ) +
XMITQ(TRANSMIT.XQ) +
DEFPSIST(YES)

- Alias Queue
DEFINE QALIAS(ALIASQ.AQ) +
TARGQ(MTE.RQ) +
DEFPSIST(YES)

- Transmission Queue
DEFINE QLOCAL($TR.XQ) +
MAXDEPTH(999999999) +
MAXMSGL(4194304) +
DEFPSIST(YES) +
USAGE(XMITQ) REPLACE

- Cluster Queue
DEFINE QLOCAL($CLUSTERQ.LQ) +
CLUSTER(CLA) +
MAXDEPTH(999999999) +
MAXMSGL(4194304) +
DEFPSIST(YES) +
DEFBIND(NOTFIXED)

- Sender Channel
DEFINE CHANNEL($SENDERCHANNEL)+
CHLTYPE(SDR)+
XMITQ(TRANSMITTIONQ.XQ)+
CONNAME(HOSTNAME(1414)')+
MAXMSGL(104857600)+
BATCHSZ(1) BATCHINT(0) DISCINT(0)+
TRPTYPE(TCP)

* online BATCHSZ(100)정도

- Receiver Channel
DEFINE CHANNEL(EAI01P.WNETIS3T.N1) +
CHLTYPE(RCVR) +
MAXMSGL(104857600)

- Request Channel
DEFINE CHANNEL(EAI01P.WNETIS3T.N1) +
CHLTYPE(RQSTR) +
CONNAME(HOSTNAME(1414)')+
MAXMSGL(4194304)

- Svrconn Channel
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) +
CHLTYPE(SVRCONN) +
MCAUSER('mqm') +
TRPTYPE(TCP) +
MAXMSGL(104857600)

- 하트비트 간격 -> DEFAULT

- Default XQ 설정 여부 YES

- CCSID
Windows & Unix: ALTER QMGR CCSID(1208)

- 기타
alter chl(SYSTEM.DEF.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm')
def chl(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm')

def listener(LISTENER_NAME) TRPTYPE(TCP) IPADDR(ipaddr) PORT(port_number) CONTROL(STARTONLY)


- Configmgr 권한 문제 시
mqsicreateaclentry ConfigMgr_Name -u User_name -a -x F -p

반응형
반응형

오라클 인스턴스 클라이언트 설치를 해보자

----------------------------------------------
출처 : http://yang2s.tistory.com/137

오라클 ... 이놈.. 설치 하기 너무 어렵네요...

클라이언트만 설치 하려고 해도 ... 어렵 ㅠㅠ

그런데 instance client 이건 그나마 설치? 설정?

간단 하고 사용하기도 편리 하네요 ^^

우선 오라클 홈페이지 가서 다운로드 합니다.

다운로드 항목 들어 가시면 아래 항목 보일겁니다.


필히 필요한것이
BASICSQL*PLUS입니다


버전 마춰서 다운 로드 받고 압축만 풀면 끝이네요

그리고 환경변수 잡아 줍니다.

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

export PATH
SQL_PLUS=/압축푼 경로; export SQL_PLUS
PATH=$SQL_PLUS:$PATH; export PATH
LD_LIBRARY_PATH=$SQL_PLUS; export LD_LIBRARY_PATH
TNS_ADMIN=/압축푼 경로; export TNS_ADMIN;
NLS_LANG=American_America.KO16KSC5601; export NLS_LANG



tnsnames.ora 파일을 압축푼 경로에 만들어 줍니다.

접속할 SID명 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 접속할 주소 아이피 )(PORT = 포트 1521 <- 기본 포트))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 접속할SID)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

sqlplus id/password@SID

이렇게 접속 하거나
sqlplus scott/tiger@211.111.111.111:1521/testdb 이렇게 접속 하면 됩니다 ㅎㅎ
반응형
반응형
-----------------------------------------------------------------------------------------
./mqlicense.sh -accept

Licensed Materials - Property of IBM

 5724-H72

 (C) Copyright IBM Corporation 1994, 2009 All rights reserved.

US Government Users Restricted Rights - Use, duplication or disclosure
restricted by GSA ADP Schedule Contract with IBM Corp.


./mqlicense.sh: ./lap/jre/jre/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

ERROR:  Installation will not succeed unless the license
        agreement can be accepted.

        If the error was caused by a display problem,
        read the license agreement file  (LA_xx, where
        xx represents your language ) in the 'licenses'
        directory, and then run the following command:

            mqlicense.sh -accept

        Only use this command if you accept the license
        agreement.

        For other errors, contact your IBM support centre.



이럴 경우 대비책

1) config 값을 바꾼다.
You need to disable Selinux.
Go to /etc/selinux directory, open the file config, which would look like:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

Change the line SELINUX=enforcing to
SELINUX=disabled

2) java bin가 연결이 안되어 있을수도 있다..
./mqlicense.sh -accept -jre /usr/bin/java

이렇게 둘중에 하나 하면 될지도... ㅡㅡ
개인적으로 난 2번째껄로 하니깐 해결됨.
-----------------------------------------------------------------------------------------

MQ Requirement
검증이된 OS
Red Hat Enterprise Linux AS V3.0 및 Update 2
SuSE Linux Enterprise Server(SLES) V8 및 Service Pack 3

WebSphere MQ 파일 시스템 작성
제품 코드에 대한 설치 디렉토리(바이너리)는 /opt/mqm이고, 작업 데이터(오브젝트)는 /var/mqm에 저장됩니다.
해당 위치를 변경 할 수는 없고, GSKit도 디폴트 위치에 설치 되어야 합니다.
파일 시스템이 제품을 포함하기에 너무 작아서 제품 코드를 설치할 수 없는 경우는 다음중 하나를 수행 할 수 있습니다.
/bigdisk/mqm 에 설치를 하고 싶다면 다음과 같이 bigdisk로의 심볼릭 링크를 작성해 줍니다.
ln -s /bigdisk/mqm /opt/mqm
커널 구성
공유 세그먼트의 최대 크기를 256MB 이상 설정을 해야 합니다.
확인방법은 cat /proc/sys/kernel/shmmax
설정 방법은 echo 268435456 > /proc/sys/kernel/shmmax
시스템 로드가 큰 경우 열린 파일의 최대 개수를 늘려야하는데 32768 이상 설정합니다.
확인방법은 cat /proc/sys/fs/file-max
설정 방법은 echo 32768 > /proc/sys/fs/file-max
시스템을 다시 시작할 때마다 이러한 값을 구성하려면 이 명령을 /etc/rc.d/...의 시동 스크립트에 추가하는 것이 좋습니다.

리눅스 32bit mq 설치
1. root로 로그인
2. mqm그룹과 mqm그룹에 속하는 mqm 계정 생성
3. mq라이센스 승인
./mqlicense.sh -accept
4. rpm -ivh rpm파일명.rpm 로 하면 설치가 된다.
MQSeriesRuntime-6.0.0-0.i386.rpm
MQSeriesServer-6.0.0-0.i386.rpm 이 두개가 기본
MQSeriesClient-6.0.0-0.i386.rpm
MQSeriesMsg_ko-6.0.0-0.i386.rpm
MQSeriesMan-6.0.0-0.i386.rpm
MQSeriesSamples-6.0.0-0.i386.rpm
MQSeriesSDK-6.0.0-1.i386.rpm
그리고 나서 mq 설치와 동일한 방법으로 픽스를 설치를 한다.

리눅스 64bit mq 설치
1. root로 로그인
2. mqm그룹과 mqm그룹에 속하는 mqm 계정 생성
3. mq라이센스 승인
./mqlicense.sh -accept
4. rpm -ivh rpm파일명.rpm 로 하면 설치가 된다.
MQSeriesRuntime-6.0.1-0.x86_64.rpm
MQSeriesServer-6.0.1-0.x86_64.rpm 이 두개가 기본
MQSeriesClient-6.0.1-0.x86_64.rpm
MQSeriesMsg_ko-6.0.1-0.x86_64.rpm
MQSeriesMan-6.0.1-0.x86_64.rpm
MQSeriesSamples-6.0.1-0.x86_64.rpm
MQSeriesSDK-6.0.1-0.x86_64.rpm
그리고 나서 mq 설치와 동일한 방법으로 픽스를 설치를 한다.
QMGR을 만들때는 /var/mqm/mqs.ini의 파일에 정의 되어있는 값들을 기본으로 생성을 합니다.
로그 사이즈는 하루 얼마나 쌓이는지 확인하고, 대략 한달치 정도 쌓이도록 저장을 합니다.
로그파일 사이즈는 16384가 최대 큰 값이고, 16384*4KB 하면 64MB 이다.

리눅스 mq 삭제 방법
1. root로 로그인
2. dspmq 명령을 사용하여 시스템에 있는 모든 큐 관리자의 상태를 표시
3. endmqm 명령을 사용하여 실행 중인 모든 큐 관리자를 정지
3. 리스너 정지, 트리거모니터링.. 기타 등등 동일.
endmqlsr -m {QMgrName}
4. ps -ef | grep mq MQ프로세스 모두 정지 했는지 확인.
amq 또는 runmq로 시작하여 명령행을 실행 중인 프로세스가 나열되지 않는지 점검, amqi로 시작하는 프로세스는 무시하여도 됩니다.
5. 설치 제거하기 전에 현재 설치되어 있는 패키지(구성요소)의 이름을 알아야함
rpm -q -a | grep MQSerise
rpm -q -a | grep gsk
*설치에 FIX가 적용이 되어있는 경우에는 기본 설치를 제거하기 전에 FIX 부터 먼저 제거 하여야 한다.
6. rpm 명령은 해당 패키지에 다른 패키지가 종속된 경우 이를 제거하지 않습니다.
이러한 이유로, 다른 패키지에 종속되지 않은 순서로 각 패키지를 설치 제거해야 합니다.
예를 들어, 런타임, 서버 및, SDK구성요소를 제거하려면 다음을 입력하십시오.
rpm -ev MQSeriseRuntime MQSeriesServer MQSeriesSDK
7. 설치가 제거된 후에는 오브젝트 디렉토리는 삭제가 되지 않고 남아 있습니다.
마이그레이션 혹은 재 설치를 할때 자동으로 이러한 오브젝트를 그대로 가져와 사용을 합니다.
기존의 QMGR과 동일하게 생성을 할려면 /var/mqm/qmgrs/{QMgrName}/qm.ini 의 파일 속성을 그대로 mqs.ini파일에 설정을 한 다음에 생성하면 됩니다.(%메모장등에 복사 필요)
반응형
반응형


출처 : http://ybhsos.tistory.com/25

1. http://java.sun.com/products/archive/index.html 에 접속

2. Linux JDK를 다운받는다.

3. 다운로드 디렉토리로 이동 및 파일 속성확인
[root@centOs-IA32 ~]# cd
[root@centOs-IA32 ~]# cd Desktop
[root@centOs-IA32 Desktop]# ls -l jdk-1_5_0_13-linux-i586-rpm.bin
-rw-r--r-- 1 ~~~~~~~~~~

4. 파일 퍼미션 변경 - 실행 권한을 주기위해 실행
[root@centOs-IA32 Desktop]# chmod u+x jdk-1_5_0_13-linux-i586-rpm.bin

5. 권한 추가후에 파일 실행

[root@centOs-IA32 Desktop]# ./jdk-1_5_0_13-linux-i586-rpm.bin

6. 라이센스 동의
YES/NO 선택 설치를 하기위해서는 YES 선택

7. rpm 파일이 생성되었는지 확인
[root@centOs-IA32 Desktop]# ls jdk-1_5_0_13-linux-i586.rpm

8. 프로그램 설치
[root@centOs-IA32 Desktop]# rpm -ivh jdk-1_5_0_13-linux-i586.rpm

9. PATH 설정 (경로 확인)
[root@centOs-IA32 Desktop]# ls/usr/java/jdk1.5.0_13

10. 환경변수 추가
[root@centOs-IA32 Desktop]# vi /etc/profile
/etc/profile 파일을 찾아서 열고
#java_environment
JAVA_HOME =/usr/java/jdk1.5.0_13
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME

11. 시스템 적용시키기
[root@centOs-IA32 Desktop]# source /etc/profile

12. 시스템 확인
[root@centOs-IA32 Desktop]# java
[root@centOs-IA32 Desktop]# java -version

반응형

'OS > LINUX Common' 카테고리의 다른 글

tmpfs 설정하는 방법  (0) 2014.04.16
GNU tar의 특이성 , 체크섬 오류  (0) 2013.07.09
리눅스 vsftpd 설치 / 설정.  (0) 2011.10.14
리눅스 계정관리 ----LINUX  (0) 2011.08.21
리눅스명령어 43개  (0) 2011.08.21
반응형


출처 : http://kldp.org/node/92461

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

질문 :
안녕하세요 코딩하다가 삽질하다가 의문의 생겨 질문 올립니다.

동적 메모리 할당에서요
malloc / new 를 하고서
free / delete를 했는데 프로세스가 OS로 메모리 반환을 하지 않네요...

pa aux | grep "프로세스명" 해서 메모리 체크를 하는데요...
뭣땜에 그런건지.. 힌트라도 부탁드려요
뭘 놓지고 있는건지 ㅠㅠ

버전은 AIX 5.2이고 컴파일러는 xlC_r 입니다;
-------------------------------------------------------------------

답변 :
퍼온 글입니다. 참고하시길..

AIX 에서 malloc, free 사용시 프로세스의 메모리 사용을 모니터링하면 free 시 메모리가
커널에 원하는 만큼 반환되지 않는 것을 알 수 있습니다. 이는 커널에서 메모리 사용효율을
극대화 하기 위해 AIX 가 사용하는 내부 아키텍쳐에 기반한 지극히 정상적인 현상입니다.

따라서 메모리 할당/해제 관련 malloc, free 사용시 메모리의 효율적 사용을 고려한 AIX 의
기본처리 방식을 무시하고 함수이름 그대로 메모리를 할당/해제 하고자 한다면 해당
프로그램에서 메모리 free 시 disclaim 함수를 free 에 앞서 추가로 호출하거나 AIX 5.2 의
경우 프로그램 시작 전에 다음의 환경변수를 set 하면 됩니다.

MALLOCDISCLAIM=true

------------------------ AIX 에서의 메모리관리 기본방식 ----------------------------

When you free memory it does not go back to the system in case you need to use the
same amount of memory again.

we will use disclaim() instead of free which really returns the memory or associated
paging space to the system.

It is not sufficient to use the free() subroutine to free the space that was allocated with
the malloc() or calloc() subroutines. The free() subroutine releases only the address
range that the structure occupied. To release the real memory and paging space, use
the disclaim() subroutine to disclaim the space as well.The call to disclaim() should
be before the call to free().

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

결론 :

ps aux 를 사용해서 메모리 사용량을 체크했을때 RSS 를 보면 늘어나기만 했지 줄어들지는 않는다.
이게 왜 이럴까 이러다가 난리 나는거 아닌가 싶었는데... 알아보니
위의 이유 때문이었다!! 결론적으로 프로그램이 처음에 구동 되었을때 RSS가 급격하게 증가하더라도 결국에는 어느 한 지점에
멈춰야 하는다는 것이다. 즉 메모리 사용량 최고치를 써놓으면 그게 더이상 늘지 않아야 한다는것.
즉 RSS는 윈도우 작업관리자의 최고 메모리 사용량과 일맥상통하는 개념같다...

반응형

'OS > AIX::' 카테고리의 다른 글

AIX 컴파일 정보 2  (0) 2012.12.05
AIX Thread Dump 분석 방법  (0) 2012.08.22
AIX 라이브러리 버전 확인  (0) 2012.07.12
AIX 컴파일 정보  (0) 2011.10.05
nmon 을 사용하여 서버 모니터링 하는 방법  (0) 2011.08.20
반응형

출처 : http://blog.naver.com/zzini0472?Redirect=Log&logNo=60056153395

1.adduser


adduser ID 옵션 경로
이것은 슈퍼 유저만이 사용할 수 있다.
명령을 입력하면 로그온 이름 등을 차례로 물어오며,
그에따라서 알맞게 입력해 나가면 된다.
ex) adduser aaa /home/aaa
adduser aaa - /home/hakwon/aaa /home/hakwon/aaa
adduser aaa -s /bin/false add user aaa -s /usr/bin/passwd -s 옵션은 계정을
발급할때 로그인을 허락하지 않고 일반 메일계정으로만 사용할수 있다.
텔넷이나 FTP로 로그인 할 수 없는 계정이 만들어집니다

2. alias

alias 또는 alias 명령='바꿀이름' 명령어 이름이 길거나 할때 별명을 만들어서 간단히 사용할 때 쓴다..

[linux22@ns linux22]$ alias
alias cp='cp -i'
alias l='ls -l'
alias l.-='ls .[a-zA-Z]* --color-tty'
alias ll='ls -al'
alias ls='ls -F --show-control-chars --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias tarc='tar cvvzf'
alias tart='tar xvvzf'
alias tarx='tar xvvzf'
alias which='type -path'

3.ami, ami_applet

내가 누구인지를 나타내 준다.


4. arch

현재 사용하고 있는 cpu의 모델을 출력(i686- 인텔 펜티엄),기계 아키텍쳐를 출력한다. arch 는 uname -m 과 같다.
현재 리눅스 시스템에서, arch 는 "i386", "i486", "i586","alpha", "sparc", "arm", "m68k","mips", "ppc"과 같은 것을 출력한다.

5. cat

텍스트 파일의 내용을 화면에 출력한다. DOS의 'type' 명령과 유사하다.
ex] cat [options] <file1> <file2> . <fileN>
-n : 행번호를 붙여서 출력시킨다.
cat에서 내용을 입력 후 저장하고 나올때는 ctrl+d, 그냥 무시할때는 ctrl+c
cat a > b (a에 내용을 b에 입력)
cat a >> b (a에 내용을 b에 추가)
cat -b : 공백라인 외의 글자가 있는 모든 행의 맨앞에 행번호를 추가
cat -n : 공백라인을 포함한 모든 행의 맨앞에 행번호를 추가
cat -s : 중복된 공백라인은 하나의 공백라인으로 처리

6. chkconfig

특정 실행 레벨에서 서비스를 실행/중지 시키기 위해 필요한 다양한 심볼릭 링크를 관리하는 데 사용되며, /etc/rc.d/init.d 디렉토리에 있는 모든 스크립트에 대한
실행 레벨 설정을 관리한다. 다음과 같이 하면 무엇이 실행레벨에 있는지 알수 있다.
[root@sulinux htdocs]# chkconfig --list
gpm 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔
crond 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔
mysql 0:끔 1:끔 2:끔 3:켬 4:켬 5:끔 6:끔
keytable 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔
syslog 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔
netfs 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔
network 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔
numlock 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔
--list다음에 서비스 항목 데몬을 적어주면 서비스에 대한 실행레벨 설정을 볼수 있다.
새로운 실행레벨을 추가 하려면 다음과 같이 하면 된다.
chkconfig --add service_name [--level runlevel]
예를 들어 다음과 같이 하면 된다.
chkconfig --add httpd
서비스를 제거하려면 --add 대신 --del을 적어주면 된다.

7. df

디스크의 용량을 확인할 수 있는 명령어입니다..
-a 전체를 나누어서 각 디렉토리와 파일의 크기를 보여준다.
-s 총 사용량을 출력해 준다.
-k kb단위로 출력해 준다.
df [-aikPv] [-t fstype] [-x fstype] [--all] [--inodes] [--type=fstype] [--exclude-type=fstype] [--kilobytes][--portability] [--print-type] [--help] [--version] [filename...]

ex)[root@ns /test]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda6 1517920 48244 1392568 3% /
/dev/hda1 23302 2551 19548 12% /boot
/dev/hda5 2419256 1118368 1177996 49% /home
/dev/hda10 497829 32423 439704 7% /tmp
/dev/hda7 1517920 837292 603520 58% /usr
/dev/hda9 497829 5405 466722 1% /var
/dev/hda8 1517920 10192 1430620 1% /var/lib


8. Du

디렉터리의 사용량을 보여주는 명령어. 옵션은 -s, -a, -m

du -b : 파일의 내용을 바이트 단위로 표시(가장 흔히 사용하는 명령어)
du : 킬로바이트 단위로 내용을 보여줌
[pump@sulinux pump]$ du
28 ./.e-conf
4 ./.enlightenment/backgrounds
328 ./.enlightenment/gnome_icons
20 ./.enlightenment/menus_gnome/Settings
60 ./.enlightenment/menus_gnome
24 ./.enlightenment/menus_kde/Settings
60 ./.enlightenment/menus_kde
4 ./.enlightenment/themes
496 ./.enlightenment
8 ./.gnome/accels

9. dnslookup

DNS를 조회하는 명령어이다.

[root@sulinux pump]# nslookup
*** Can't find server name for address 211.60.198.62: Non-existent host/domain
Default Server: ns.dacom.co.kr
Address: 164.124.101.2
> yahoo,co,kr
Unrecognized command: yahoo,co,kr
> empas.com
Server: ns.dacom.co.kr
Address: 164.124.101.2
Non-authoritative answer:
Name: empas.com
Address: 211.115.211.8

10. eject

마운트된 시디롬을 뺄때 유용하다.

11. fdformat

디스켓을 퍼멧 할때 사용한다. 단 마운트 시킬 필요는 없다.
fdformat [ -n ] 장치이름
ex)fdformat /dev/fd0H1440 <--첫번째 플로피 디스크를 1.44MB 퍼맷하는 명령어

12. file

파일이 어떠한 형태의 파일인지 알아낸다.
file [-czL ][ -fm 파일명 ] 파일명(들)
-c : 매직 파일의 파싱된 형태를 보여준다.
-z : 압축되어 있는 파일의 형태를 검사한다.
-L : 뒤따르는 심볼릭 링크를 야기시킨다.
-f 파일명 : 검사한 파일에 대해 리포트를 만들 파일의 이름을 지정한다.
-m 파일명 : 파일의 형태를 결정하는 데에 사용되는 매직 파일을 정한다.
ex)[root@ns /test]# ll
합계 28
drwxr-xr-x 4 root root 4096 3월 28 16:36 ./
drwxr-xr-x 21 root root 4096 3월 28 16:18 ../
drwxr-xr-x 2 root root 4096 3월 28 16:21 aaa/
-rw-r--r-- 1 root root 27 3월 28 16:31 file
-rw-r--r-- 1 root root 27 3월 28 16:36 file1
-rw-r--r-- 1 root root 12 3월 28 16:32 file2
drwx------ 2 tomato root 4096 3월 28 16:20 melon/
[root@ns /test]# file file2
file2: International language text

13. free

현재 메모리 사용량을 보여줍니다. 옵션은 -k, -t 등이 있습니다
ex)[root@ns /test]# free
total used free shared buffers cached
Mem: 127796 75736 52060 52468 23908 28444
-/+ buffers/cache:23384 104412
Swap: 48152 0 48152

14. fsck

파일 시스템의 상태가 올바른지 검사하고, 잘못된 것이 있으면 바로 잡는다.
-a : 검사 도중 발견된 에러를 자동적으로 복구한다.
-r : 검사 도중 에러가 발견되면 복구 여부를 물어본다(사실 사용되지 않는다)
-s : 순차적인 방법으로 검색한다.
-V : 검색 중 각종 정보를 자세하게 보여준다.
-N : 실제로 검사 작업을 하지는 않도록 한다.

15. grep

지정한 패턴을 하나나 그 이상의 파일들에서 찾고 그 결과를 표준 출력 장치로 출력하는데 쓰이는 명령어
-b : 찾은 각 줄의 앞에 블록번호를 표시
-c : 찾은 줄들의 내용은 표시하지 않고 그 수만 세서 표시
-E : grep를 egrep처럼 동작하도록 지시
-F : grep를 fgrep처럼 동작하도록 지시
-f : 지정한 파일의 내용과 일치하는 부분들을 찾음
-h : 여러개의 파일에서 찾을 때 결과에 파일의 이름은 포함하지 않은
-i : 대소문자 구분 없이 찾음 grep -l : 결과를 출력 할 때 지정한 패턴이 있는 파일의 이름만 출력
-n : 출력할 때 찾은 각 줄의 앞에 파일 내에서 행 번호를 붙임
-q : 출력을 하지않음
-s : 에러가 발생하면 에러메세지 출력
-v : 지정한 패턴이 없는 행들만 출력
-w : 지정한 패턴을 하나의 단어로 보고 검색
-x : 한 줄의 전체 내용이 패턴과 같은 줄만을 찾음

16. gunzip

zip로 된 압축을 푸는 명령어입니다..

gunzip -c 파일명.zip


17. gzip

zip보다 더 압축을 하고자 할때 사용하는 명령어입니다.


gzip 압축명.tar.gz 대상파일명
-c, --stdout : 표준 출력 이용
-d, --decompress : 복구/풀기
-f, --force : 링크화일도 압축
-h, --help : 도움말
-r, --recurse : 디렉토리 내의 화일들도 모두 처리
-t, --test : 압축파일의 완전성 검사
-v, --verbose : 파일 이름과 압축률 출력
-V, --version : 버젼과 편집 사항 출력
-#, --fast, --best : 압축 시간의 지정
-1, --fast는 가장빨리 압축하나 압축률은 떨어지고 -9, --best는 가장느리나 압축률은 가장 좋다. 지정하지 않으면 -5가 사용된다.

18. Halt

시스템을 끌때사용. = shutdown

19. Head

파일의 앞부분만 보기 아무 옵션이 없으면 10줄을 나타내 준다. head -n 20 파일이름 ---> 20줄을 나타내준다.


head [-count | -n number] filename
ex)[root@ns /test]# ll
합계 28
drwxr-xr-x 4 root root 4096 3월 28 16:36 ./
drwxr-xr-x 21 root root 4096 3월 28 16:18 ../
drwxr-xr-x 2 root root 4096 3월 28 16:21 aaa/
-rw-r--r-- 1 root root 27 3월 28 16:31 file
-rw-r--r-- 1 root root 27 3월 28 16:36 file1
-rw-r--r-- 1 root root 12 3월 28 16:32 file2
drwx------ 2 tomato root 4096 3월 28 16:20 melon/
[root@ns /test]# head file
hello welcome to my server

20. hostname

컴퓨터 이름을 확인하는 명령어입니다..

예]

[linux22@ns linux22]$ hostname
ms.pubnet.ne.kr
[linux22@ns linux22]$


21. netstat : 로컬 시스템의 네트워크 연결상태를 보여주는 프로그램이다.

22. jobs

현 터미널에서 수행된 작업들을 간략하게 나열해준다

23. last

/var/log/wtmp가 만들어진 후 사용자가 로그인한 목록을 출력한다. 예를 들어
last pump라 하면 pump가 몇번 로그인 했는지 출력한다.
last [-number][username][reboot]
[root@ns /test]# last -5
linux13 pts/0 211.57.165.71 Wed Mar 28 18:25 still logged in
linux22 pts/1 211.57.165.61 Wed Mar 28 18:10 - 18:15 (00:04)
linux13 pts/0 211.57.165.71 Wed Mar 28 18:00 - 18:23 (00:22)
linux13 pts/0 211.57.165.71 Wed Mar 28 17:46 - 17:56 (00:10)
linux13 pts/0 211.57.165.71 Wed Mar 28 16:08 - 17:37 (01:29)
wtmp begins Sat Feb 24 14:05:58 2001
-num : num 만큼의 줄만 보여준다.
-n num : 윗 기능과 같음.
-R : hostname 필드를 보여주지 않음.
-a: hostname 필드를 마지막에 보여줌.이 옵션은 다음 옵션과 함께 요용하게 쓰임.
-d : 다른 호스트에서 접속한 것만 보여줌.
-x : shutdown이 일어난 상태나, run level이 바뀐 상태도 보여줌.

24. ln

링크파일을 만드는 명령어입니다..

ln -s 원본파일 링크될파일명 : 소프트 링크입니다.
ln : 하드링크입니다. 하드 링크는 생성된 후에는 일반파일과 동일하게 보여진다 (완전하게 똑 같은 파일이다.)
ln pathname... directory원본 파일에 대한 하드/심볼릭 링크화일을 만든다.
-f : 디렉토리에 대한 하드링크 생성(수퍼유저만 가능)
-s : 심볼릭 링크 생성
in [-s] soucefile target
ex)[root@ns /test]# ll
합계 28
drwxr-xr-x 4 root root 4096 3월 28 16:36 ./
drwxr-xr-x 21 root root 4096 3월 28 16:18 ../
drwxr-xr-x 2 root root 4096 3월 28 16:21 aaa/
-rw-r--r-- 1 root root 27 3월 28 16:31 file
-rw-r--r-- 1 root root 27 3월 28 16:36 file1
-rw-r--r-- 1 root root 12 3월 28 16:32 file2
drwx------ 2 tomato root 4096 3월 28 16:20 melon/
[root@ns /test]# ln file file3
[root@ns /test]# ll
합계 32
drwxr-xr-x 4 root root 4096 3월 28 16:48 ./
drwxr-xr-x 21 root root 4096 3월 28 16:18 ../
drwxr-xr-x 2 root root 4096 3월 28 16:21 aaa/
-rw-r--r-- 2 root root 27 3월 28 16:31 file
-rw-r--r-- 1 root root 27 3월 28 16:36 file1
-rw-r--r-- 1 root root 12 3월 28 16:32 file2
-rw-r--r-- 2 root root 27 3월 28 16:31 file3
drwx------ 2 tomato root 4096 3월 28 16:20 melon/

25. logname

로그인해 있는 사용자의 이름을 출력한다.

26. lpq

프린터의 상태를 알려주는 명령어이다.


27. lpr

파일을 프린터 스풀로 보내는 명령어이다.

28. lprm

인쇄 대기열에서 특정 작업을 삭제하라는 명령어이다.

29. mouseconfig

마우스 설정 프로그램이다.

30. printerconfig

프린터 설정 프로그램이다.

31. ps

프로세서를 확인하는 명령어입니다.
-l : 자세한 형태의 정보를 출력한다.
-u : 각 프로세스의 사용자 이름과 시작 시간을 보여준다.
-j : 작업 중심 형태로 출력한다.
-s : 시그널 중심 형태로 출력한다.
-v : 가상 메모리 중심 형태로 출력한다.
-m: 메모리 정보를 출력한다.
-a : 다른 사용자들의 프로세스도 보여준다.
-x : 로그인 상태에 있는 동안 완료되지 않은 프로세스들을 보여준다. 유닉스 시스템은 사용자가 로그아웃하고 난 후에도 임의의 프로세스가 계속 동작하게 할 수 있다. 그러면 그 프로세스는 자신을 실행시킨 쉘이 없이도 계속 자신의 일을 수행한다. 이러한 프로세스는 일반적인 ps 명령으로 확인할 수 없다. 이때 -x 옵션을 사용하면 자신의 터미널이 없는 프로세스들을 확인할 수 있다.
-S: 챠일드(child) CPU 시간과 메모리 페이지 결함(fault) 정보를 추가한다.
-c: 커널 task_structure 로부터 명령 이름을 보여준다.
-e: 환경을 보여준다.
-w: 긴(wide) 형태로 출력한다. 한 행 안에 출력이 잘리지 않는다.
-h: 헤더를 출력하지 않는다.
-r: 현재 실행중인 프로세스를 보여준다.
-n: USER와 WCHAIN을 위해 수치 출력을 지원한다.
ps -aux (메모리에 로드중인 프로세서들을 출력합니다.)
ps -aux | grep 프로세서 (해당 프로세서만 출력합니다.)

32.rcp

컴퓨터 사이에서 파일을 복사할 때 사용된다. "remote cp"에서 이름이 유래한다.
rcp [ -rpkx ] 파일명1 파일명2
rcp [ -rpkx ] 파일명들 디렉토리
-r : 하위 디렉토리까지 재귀적으로 모두 복사한다.
-p : 파일의 시간과 모드를 보존한다.
-k : kerberos ticktets을 요구한다.
-x : 복사되는 모든 데이터에 암호화 과정을 거친다.

33. rlogin

rlogin(remote login)은 telnet과 마찬가지로 원격 시스템에 로긴할 때 사용하는 명령어로telnet과 사용법이 거의 동일하지만, 다른점은 rlogin의 경우, 자기가 해당 시스템에 id를 가지고 있고, 시스템에 로긴할 때마다 패스워드를 치기가 싫을 경우 자신의 홈 디렉토리 아래에 rhosts라는 파일에 자신의 계정 id와 로긴할 호스트이름을 넣어두면 로긴시에 패스워드를 넣지 않고도 $rlogin -l blueksy target_host 형식으로 로긴이 가능하다. 만약 ~/.rhosts에 "+ +"의 내용이 들어있다면 누구라도 패스워드 없이 접속할 수가 있게되어 예전에 유행했던 해킹방법이 되기도 했으나 지금은 시스템들의 보안강화로 이게 통하는 시스템은 거의 없다..


34. rpm

레드햇패키지 메니저로 패키지를 관리하는 프로그램입니다.
rpm -Uvh 해당패키지 (업그레이드)
rpm -ivh 해당패키지 (설치)
rpm -e 해당패키지 (삭제)
rpm -Uvh --nodeps --force 해당패키지 (파일대치 패키지대치로 설치)

35. shutdown

시스템을 종료할 때 일반적으로 사용되는 명령어이다.
shutdown -t n : 옵션 t 뒤에 n 초만큼 후에 경고 메시지 후에 kill 신호를 보낸다.
shutdown -h(halt) : 완전히 닫는다.
shutdown -r(reboot) : 종료 후 재부팅을 한다.
shutdown -f(fast) : 빠른 리부팅을 한다 (파일 시스템 검사 생략)
shutdown -c(cancel) : 예약되어 있는 종료 취소
shutdown -k(kidding) : 모든 것이 정상이지만, 종료 시간이 되면 모든 프로그램이 멈춘다.

36. sort

파일을 소팅할때 사용합니다.
-c : 파일이 정렬되었는지 검사한다. 그렇다면 아무런 출력도 하지 않는다.
-m : 특정한 파일을 병합한다. 파일은 이미 정렬되었다고 가정한다.

-u : 고유한 행만이 출력된다.
-o 파일명: 출력 파일 이름을 지정한다. 이름은 입력 파일 이름과 같을 수 있다.
-d : 사전(dictionary)과 같은 순서대로 정렬한다. 단어 정렬 순서에는 문자, 숫자,공백 문자만이 사용된다.
-f : 대문자와 소문자를 구별하지 않는다.
-i : 정렬에 사용되는 문자 중 프린트될 수 없는 문자는 사용하지 않는다.
-M : 단어를 정렬할 때 달을 의미하는 문자를 취급한다. FEB는 JAN보다 뒤에 정렬 된다.
-n : 숫자를 같은 문자가 아닌 정말로 숫자로 취급해서 수의 크기대로 정렬한다.
-r : 역순으로 정렬한다.
-t 문자 : 단어 등 필드를 구분하는 문자를 지정한다. 탭(tab)이나 공백 문자 이외의 문자를 구분 문자로 취급하도록 한다.
-b : 단어의 뒤에 오는 공백 문자는 정렬 키(key) 값으로 무시하도록 한다.

37. sndconfig

사운드카드를 설정해 주는 프로그램이다.

38. stat

파일이나 디렉토리엥 관한 다양한 통계 자료를 보여주는 프로그램이다.
stat file
ex)[root@ns /test]# ll
drwxr-xr-x 4 root root 4096 3월 28 17:55 ./
drwxr-xr-x 21 root root 4096 3월 28 17:50 ../
drwxr-xr-x 2 root root 4096 3월 28 16:21 aaa/
-rw-r--r-- 1 root root 27 3월 28 16:36 file1
[root@ns /test]# stat file1
File: "file1"
Size: 27 Filetype: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 3,6 Inode: 16348 Links: 1
Access: Wed Mar 28 16:36:11 2001(00000.01:24:55)
Modify: Wed Mar 28 16:36:11 2001(00000.01:24:55)
Change: Wed Mar 28 16:36:11 2001(00000.01:24:55)

39.sync


현재 시스템 디스크의 IO 버퍼에 있는 디스크 이미지를 하드 디스크로 기록한다.
sync

40. test

파일의 각종 상태를 검사하여 결과를 알려준다. 이것은 셸 스크립트 상에서 if 문이나 while 문 등과 함께 사용되는 것이 보통이다.
test 표현식
-r 파일명 : 파일이 읽기 권한이 있으면 참
-w 파일명 : 파일이 쓰기 권한이 있으면 참
-x 파일명 : 파일이 실행하기 권한이 있으면 참
-f 파일명 : 파일이 일반(regular) 파일이면 참
-d 파일명 : 파일이 디렉토리이면 참
-b 파일명 : 파일이 존재하고 블록 장치 파일이면 참
-c 파일명 : 파일이 문자 전용 파일(character special file)이면 참
-u 파일명 : 파일이 set-user-ID 플래그가 세트되어 있으면 참
-g 파일명 : 파일이 set-group-ID 플래그가 세트되어 있으면 참
-k 파일명 : 파일이 sticky 비트가 세트되어 있으면 참
-s 파일명 : 파일의 크기가 0보다 크면 참
-t 파일 디스크립터 : 파일 디스크립터에 해당하는 파일이 열려 있고, 터미널 장치로부터 사용되고 있으면 참, 기본 디스크립터 값은 1이다.
-z 문자열 : 문자열의 길이가 0이면 참
-n 문자열 : 문자열의 길이가 t 이상이면 참

41. top

cpu와 메모리를 사용하는 작업들에 대한 시스템 정보를 출력한다. 원래 화면으로 되돌아가려면 q를 입력한다.

42. tty

현재 사용하고 있는 단말기 장치의 경로명과 파일명을 보여줌

43. uname

사용중인 운영체제에 대한 정보를 출력한다.
-a : 현재 사용중인 운영체제와 커널의 컴파일 정보 등을 출력한다.-snrvm 과 같다.
-s : 시스템 이름을 알려준다.
-n : 시스템의 노드(node) 이름을 알려준다.
-r : 오퍼레이팅 시스템의 증명번호를 알려준다.
-v : 오퍼레이팅 시스템의 버전(version) 번호를 알려준다.
-m : 하드웨어의 이름을 알려준다.
[root@ns /test]# uname -a
Linux ns.pubnet.ne.kr 2.2.16-3kr2 #1 Thu Aug 10 16:33:55 KST 2000 i686 unknown

반응형

'OS > LINUX Common' 카테고리의 다른 글

tmpfs 설정하는 방법  (0) 2014.04.16
GNU tar의 특이성 , 체크섬 오류  (0) 2013.07.09
리눅스 vsftpd 설치 / 설정.  (0) 2011.10.14
리눅스 계정관리 ----LINUX  (0) 2011.08.21
Linux에서 JDK 설치  (1) 2011.08.21
반응형

### 서버관리 명령

l.파일목록보기,소유/허가권 명령어.


1) ls 파일 목록보기.


ls -lahnd file*또는생략.


-l ;상세목록보기(파일명,파일크기,날짜/시간,허가원,소유권,그룹정보등).


-a ;숨겨진 파일을 포함해서 디렉토리 내의 모든 파일보기.


-n ;소유자명,그룹명 대신 Uid,Gid로 보기.


-h ;파일크기를 k,m단위로 보기.


-d ;현재 디렉토리내의 정보만 보기.


2) ls 명령으로 알아보는 상세정보.


ls -la


결과) drwxr_xr_x 2 hanvit hanvit 4k 10월7일10:10 public_html


d(디렉토리)rwx(user rwx)r_x(group)r_x(other) 2(디렉토리수) hanvit(user소유권)hanvit(그룹소유권).


l(심볼릭 링크(hard link,soft link)


b(블록장치:모든 디바이스 드라이버는 파일 시스템을 통해서 접근되는데, 디스크처럼 블록 단위로 입


출력이 이루어지는 장치를 액세스할 때 사용하는 특수 파일이 블록장치파일이다. 예)하드디스크)


c(문자장치 : 모뎀)


3) chmod 파일허가원 변경.


chmod u-x,g+w,o-x public_html


8진법 으로 변경하기.(아래)














4) chown 사용자 소유권 변경.


chown 소유자명 파일명 -R


-R : 하위폴더에 있는 모든 파일 포함.


5) chgrp 그룹 소유권 변경.


chgrp 그룹명 파일명 -R


6) 사용자 소유권/그룹권한 변경.


chown 소유자명:그룹명 파일명 -R





2.파일 관리와 조작.


1) cp 파일복사 cp index.html index.php


cp -i *.conf /temp


-i : 파일복사시 복사여부 확인기능.


2) mv 파일이동


mv -i *.conf /temp


3) ln 파일링크


ln /usr/local/apache/bin/apachectl ./apache


ln -s /usr/local/apache/bin/apachectl ./apache


-s :소프트 링크 != 하드링크


4) find 파일찾기


find / -name[-perm,-type, -user, -group, -nouser, -nogroup, -exec 명령어 {}\;]


/ :찾을 디렉토리 지정.


-name 파일명 : 파일이름으로 찾기.


-perm 모드 : 파일 퍼미션 조건이 맞는 것만 찾기.


-type : 파일 타입(b,c,d,f,l등)을 지정하여 찾기.


-user : 파일 소유권을 지정하여 찾기.


-group : 그룹에 해당하는 파일찾기.


-nouser -nogroup : 소유권이 없이 파일찾기.


-exec 명령어 {} \; :find 명령에 의해 검색된 파일에 대해 명령를 수행할 수 있게 한다.


find /etc -name services -exec grep tcp {} \; |more


5) gzip 파일압축


gzip -d -9 파일명


: 옵션없이 압축한다.


-9 :가장 좋은 압축률로 압축한다.


-d :압축을 푼다.


6) mkdir 디렉토리 생성.


7) rmdir 빈 디렉토리 삭제.


8) pwd 현재 디렉토리 위치를 알아낸다.


9) rm 파일삭제


rm -rf 파일명.


-r : 하위디렉토리 까지 삭제한다.


-f : 삭제여부 확인없이 삭제한다.


10) tar 파일묶기.


tar -cvf mysql.tar /usr/local/mysql : -c 여러파일을 하나의 이름으로 묶느다.


tar -xvf mysql.tar : -x 묶기파일을 푼다.


tar -zxvf mysql.tar.gz gzip으로 압축된파일을 tar로 푼다.


11) cat 파일내용 출력


12) more 한번에 한 화면씩 파일 내용보기.


13) du 디스크 사용량 보기


du -sh /home :홈디렉토리의 사용량을 알아본다.


-s :개별디렉토리별로 크기를 출력하지 말고 합으로 보여준다.


-h :k,m 단위로 보여준다.


14) which 지정된경로에서 파일 찾기.


15) df 디스크 사용가능 용량보기


16) sync : 버펴 내용을 디스크에 비우기





3. 프로세스 조작


1) ps 프로세스 목록보기


ps -auxr


-a :현재 사용자가 실행시킨 프로세스뿐만 아니라 모든 프로세서 보기.


-u :프로세스 소유자를 보여준다.


-x :제어터미널에 없는 프로세스를 보여준다.


-r : 수행중인 프로세스만 보여준다.


출력결과제목 분석:


USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND


USER :프로세스 소유자.


PID :프로세스 고유번호.


%CPU : CPU사용비율


%MEM : 프로세스가 사용한 메모리 비율.


VSZ : 가상 메모리양.


RSS :프로세스가 사용한 실제 메모리 양.


TTY :프로세스의 제어 터미널연결상황.


STAT :프로세스 상태(S :sleep상태,R:cpu사용중,D:인터럽트될 수 없는 sleep,Z:Zombie,W:메모리상주없음, < :높은우선순위 프로세스 N:낮은 우선순위 프로세스 L:메로리 페이지가 잠겨 있음)


START : 프로세스가 시작한 날짜


TIME : 프로세스가 cpu를 사용한 시간.


COMMAND : 프로세스의 이름


2) top : 모니터링 프로그램


3) kill :프로세스 번호로 죽이기


4) killall :프로세스 이름으로 죽이기





4. 기타 명령.


1) who :현재 시스템에 로그인중인 사용자 보기.


2) su : 슈퍼 유저 권한 획득하기.





5. 네트워킹 도구.


1) telnet


2) ftp


3) mail


6. 편집기


1) vi


2) emacs


3) joe


4) pico


##### 크기가 가장 큰 파일, 디렉토리 찾기
가장 큰 디렉토리를 찾으려면,
du -S | sort -n

가장 큰 파일을 찾으려면,
ls -lR | sort +4n

##### 현재 디렉토리의 크기만을 파악할때
[root@dev2 local]# du -c -h --max-depth=0 *
6.4M apache
35M bin
43M dns
1.7M doc
42k etc
1.0k games
42k geektalkd
1.1M gnuws
1.1M include
41k info
19M jakarta-tomcat-3.2.3
0 jre
15M jre118_v3
25M lib
62k libexec
1011k man
1.3M mm.mysql.jdbc-1.2c
937k sbin
3.8M share
1.8M shoutcast-1-8-3-linux-glibc6
5.2M ssl
159M total

##### 시스템 정보 감추기
/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h


##### 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
ps -aux | sort +4n
또는
ps -aux | sort +5n

##### FTP로 들어온 사용자 확인하기
ftpwho
ftpcount


##### 원하지 않는 사용자 죽이기
[root@dream /root]# skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠?
그럴때는

[root@dream /root]# skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

less 결과를 vi로 보기
less상태에서 v를 누르면 바로 vi로 감


###### vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다.

또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.

블럭을 설정 하신 뒤,

삭제를 하려면 x
복사를 하려면 y
붙여넣기는 p

man 페이지 프린트하기
man -t vi > vi.ps

####### ping 무시하기
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

####### 동시에 여러개의 하위 디렉토리 만들기
mkdir -p music/koreanmusic/ost

리로 다시 살리기
boot : vmlinuz root=/dev/hda6

####### 특정 사용자 ftp 접근 막기
/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.

ls라는 파일이 포함된 rpm패키지 찾기일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.rpm -qf /bin/ls
[root@piruks /etc]# which ls
/bin/ls
[root@piruks /etc]# rpm -qf /bin/ls
fileutils-4.0i-2mz

####### 현재 rpm패키지의 의존패키지
rpm -qR 패키지명

현재 디렉토리크기
du -h --max-depth=1 .

바로 이전 디렉토리로 가기
cd -
반응형

'OS > Common' 카테고리의 다른 글

ftp 사용법 [명령어]  (0) 2011.10.20
Tar 와 Gzip Bzip2사용법  (0) 2011.10.20
unix/linux의 OS 32/64bit 확인 방법  (0) 2011.10.04
Shell에서 \n(newline) 발동하게 하기  (0) 2011.09.07
서버점검 명령어  (0) 2011.08.20
반응형

출처 : http://blog.naver.com/sjh9853?Redirect=Log&logNo=80091441578

linux 점검명령어
서버명 : hostname
OS버전 : cat /etc/issue.net
cat /etc/redhat-release
kernel : uname -r
cat /proc/version
cpu : cat /proc/cpuinfo
top
memory : free -m
top
cat /proc/meminfo
swap : free -m
top
cat /proc/swaps
df -m (free size check)
F/S : df -h
log : /var/log/messages.* #tail messages.*


Unix(유닉스) 점검명령어
서버명 : hostname
OS버전체크 : uname -a
showrev
firmware : prtdiag -v
#cd /usr/platform #cd `uname -i` #cd sbin #./prtdiag -v|more
cpu check : psrinfo -v
sar 2 10
ps -ef
memory check : prtdiag -v
swap check : swap -s
df -m (free size check)
flie system : df -h
log view : cd /var/adm/messages.* #tail messages.*
cd /var/log/syslog.* #tail messgaes.*
booting chechk : dmesg
dump or core : /var/crash/[hostname]/*
routing table : netstat -nr
link traffic : netstat -i
disk i/o : iostat -xcPn 2 10


IBM AIX 점검명령어

#uname –amML : 서버 정보 확인

#uname -L : 서버 시리얼넘버 확인

#oslevel –s : OS버전확인(TL SP확인)

#lssrc -g tcpip :

#instfix –i |grep ML(and SP) : OS버전 확인

#lsdev –Cc processor : 프로세서 수 확인

#lsattr –El mem0 : 메모리 용량 확인.

#topas : 시스템(프로세스, 메모리, 네트워크) 체크.

#ls –al .*Com* : 패치 확인.

#errpt |more : 시스템 에러 체크 à errpt –aj [errorID] |more : errpr에 대한 상세내역 확인.

#lsdev –Cc disk : 디스크 확인

#lspv : 디스크 활성상태확인

#lsvg –l [볼륨그룹명] : 볼륩그룹 확인.

#df –g : 파일시스템 용량체크.

#ifconfig – a : ip정보확인

#netstat –rn : 라우트 정보 확인 (디폴트게이트웨이 확인)

#ping 테스트

#lsdev –Cc if : 네트워크 인터페이스 확인

#lsdev –Cc adapter : 네트워크 카드 확인

#lsdev –Cc pci : pci슬롯 확인.

#lscfg –v : FRU 확인. (lsdev –Cc, lsdev –P)

#lsconf : 장치정보

#du –sk * : 하위 디렉토리 및 파일 용량정보 출력

#bootinfo –r

#bosboot -a : 부트이미지 생성

#ps –ef | grep [프로세서명] : 실행중인 프로세서 검색



Windows(윈도우즈) 점검명령어

서버명 : hostname
[내컴퓨터]- [속성]에서 확인
OS버전 : winver (OS버전확인)
[내컴퓨터]- [속성]에서 확인
patch : winver (패치버전 확인)
[내컴퓨터]- [속성]에서 확인
cpu : dxdiag (CPU 클럭확인)
[작업관리자]
memory : dxdiag (메모리 용량확인)
[작업관리자]
F/S : [내컴퓨터]-[드라이브]별 용량확인
log : [관리]-[이벤트뷰어]

반응형

'OS > Common' 카테고리의 다른 글

ftp 사용법 [명령어]  (0) 2011.10.20
Tar 와 Gzip Bzip2사용법  (0) 2011.10.20
unix/linux의 OS 32/64bit 확인 방법  (0) 2011.10.04
Shell에서 \n(newline) 발동하게 하기  (0) 2011.09.07
### 서버관리 명령  (0) 2011.08.21
반응형

출처 : http://blog.naver.com/dalbong97?Redirect=Log&logNo=130109136330

nmon 을 사용하여 서버 모니터링 하는 방법

1. 서버 접속 후 프롬프트 상에서 “nmon” 명령어 타이핑 후 엔터


2. CPU 별 사용률 조회를 위해서는
1
번 화면 상태에서 키보드 “c” 키(CPU의 C) 입력 (엔터키 입력 필요 없음)

3. CPU 점유율 높은 프로세스 별로 조회를 위해서는
1
번 또는 2번 화면 상태에서 키보드 “t”키(Top process 의 T) 입력 (엔터키 입력 필요 없음)

4. nmon 프로그램 종료를 키보드 “q” 입력 또는 “컨트롤+C” 입력

반응형

'OS > AIX::' 카테고리의 다른 글

AIX 컴파일 정보 2  (0) 2012.12.05
AIX Thread Dump 분석 방법  (0) 2012.08.22
AIX 라이브러리 버전 확인  (0) 2012.07.12
AIX 컴파일 정보  (0) 2011.10.05
AIX malloc - free 시 혹은 new - delete 시의 메모리 반환  (0) 2011.08.21
반응형

* 유닉스 명령어


alias(명령어 간소화하기)
apropos(관련된 명령어 찾기)
arch(컴퓨터 종류 알기)
arp(같은 서브넷의 IP 보여주기)
at(작업 시간 정하기)
atd(계획성 있는 작업 실행하기)
awk(특정 패턴 문자 처리하기)
a2p(펄 파일로 바꾸기)
badblocks(배드 블럭 검사하기)
bc(계산기)
biff(메일 수신 소리로 확인하기)
bg(후면작업; 배경화면 설정)
bind(키나 함수 순서 결합하기)
break(루프 빠져나가기)
cal(달력보기)
builtin(내부 명령어 알아보기)
case(조건 처리하기)
cat(화면상에서 파일 보기)
cd(디렉토리 변경하기)
cfdisk(디스크 설정하기)
chattr(파일 속성 변경하기)
chfn(사용자 정보 변경하기)
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)
chmod(파일 권한 바꾸기) 755 파일명 ---> 431431431
chown(파일 주인 바꾸기)
chsh(지정된 셸 바꾸기)
cksum(CRC값을 점검한다)
clear(화면 청소하기)
clock(CMOS 시각을 조정하기)
cmp(파일 비교하기)
colcrt(문자 변환 필터)
colrm(열 삭제하기)
column(가로 정렬하기)
comm(파일 비교 출력하기)
command(명령어 알아보기)
continue(루프 계속돌기)
cp(파일 복사하기)
cpio(복사본 만들기)
crontab(cron을 관리한다)
csplit(파일에 서식, 규칙 정하기)
cut(필요한 필드만 출력하기)
date(날짜 보기)
dd(블럭장치 읽고 쓰기)
debugfs(ext2 파일 시스템 디버깅하기)
declare(변수 선언하기)
df(파일 시스템의 사용량 보기) -k
dirs(디렉토리 목록 표시하기)
dmesg(부팅 메시지 보기)
dnsdomainname(DNS 이름 출력)
domainname(NIS 이름 출력&설정)
du(디렉토리와 파일의 용량 파악하기)
dumpe2fs(파일 시스템 정보 보기)
echo(표준 출력하기)
eject(장치 해제하기)
elm(메일 관련)
enable(내부 명령어 지정)
env(환경변수 출력하기)
eval(인수 읽기)
exec(셸 명령어 실행하기)
exit(종료하기)
expand(탭을 공백으로 변환하기)
export(변수 지정하기)
e2fsck(파일 시스템 복구하기)
fc(지정된 편집기 받기)
fdformat(플로피 디스크 포맷하기)
fdisk(파티션 나누기)
fg(지정된 작업을 전면 프로세스로 시작하기)
file(파일 종류 보기)
find(파일 찾기)
finger(사용자 정보 알기)
fold(정형화하기)
fmt(정형화하기)
for(반복 실행하기)
free(메모리 사용량 알아보기)
fsck(파일 시스템 검사하기)
fstab(파일 시스템에 대한 고정적인 정보 저장하기)
ftp(파일 전송 프로그램)
fuser(프로세스 ID 출력)
getkeycodes(매핑 테이블 출력하기)
grep(특정 문자(열) 검색하기)
gzexe(실행 파일 압축하기)
gzip(압축하기)
halt(시스템 종료하기)
hash(기억해 두기; index 역할)
head(파일의 앞부분 출력하기)
help(도움말 보여주기)
host(호스트 정보 보기)
history(사용 명령어 목록보기)
hostname(서버 이름 알기)
id(계정 정보 알기)
if(조건문 실행하기)
ifconfig(랜카드에 주소 할당하기)
imolamod(모듈 설치하기)
inetd(인터넷 서비스의 최상위 데몬)
init(실행 단계 정하기)
ispell(철자법 검사하기)
jobs(수행중인 프로세스 알기)
kbd_mode(키보드 모드 출력하기)
kill(프로세스 죽이기)
klogd(커널 로그 데몬)
ldd(공유 라이브러리의 의존성 알기)
less(페이지 단위로 출력하기)
let(정규식 표현하기)
lilo(부팅하기)
ln(링크하기)
locate(패턴에 맞는 파일 찾기)
login(로그인하기)
logger(시스템 로그 기록하기)
logname(사용자 로그인명 보여주기)
logout(로그인 셸 종료하기)
look(특정 단어 검색하기)
losetup(중복 장치 확인하기)
lpd(프린트 데몬)
lpq(현재 프린트 작업 상태 출력하기)
lpr(출력하기)
lprm(대기열에 있는 문서 삭제하기)
ls(디렉토리 내용보기) -al
lsattr(파일 시스템의 속성 보여주기)
lsdev(하드웨어 장치 출력하기)
lsmod(모듈 정보 출력하기)
mail(메일 관련)
make(컴파일하기)
man(매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg(메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs(파일 시스템 생성하기)
mkfs(파일 시스템 만들기)
mknod(특수 파일 만들기)
mkswap(스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount(장치 연결하기)
more(화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt(메일 관련)
mv(파일 옮기기)
mzip
netstat(현재 네트웍 상황 보기)
nice(프로세스 우선 순위 변경하기)
od(8진수로 파일 보기)
passwd(암호 입력하기)
pidof(실행중인 프로그램의 프로세스 ID 찾기)
pine(메일 관련)
ping(네트웍 확인하기)
popd(pushd 취소)
ps(프로세스 상태 알기)
pstree(프로세스 상관관계 알기)
pwd(절대경로 보여주기)
quota(디스크 한계량 알기)
rarp(rarp 테이블 관리하기)
rcp(원격 호스트에 파일 복사하기)
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate(네트웍으로 시간 설정하기)
reboot(재부팅하기)
rmmod(모듈 지우기)
readonly(읽기 전용으로 표시하기)
renice(프로세스 우선 순위 바꾸기)
reset(터미널 초기화하기)
restore(다시 저장하기)
rlogin(바로 접속하기)
rm(파일 지우기)
rmdir (디렉토리 지우기)
route(라우팅 테이블 추가/삭제하기)
rpm(프로그램 추가/삭제)
rpm2cpio(rpm을 cpio로 변환하기)
rsh(원격으로 명령어 실행하기)
rup(호스트 상태 출력하기)
rusers(호스트에 로그인한 사용자 출력하기)
rwall(호스트 사용자에게 메시지 뿌리기)
script(기록하기)
set(변수값 설정하기)
setup(시스템 관련 설정하기)
showmount(호스트의 마운트 정보 보여주기)
shutdown(전원 끄기)
sleep(잠시 쉬기)
source(스크립트 번역하기)
split(파일 나누기)
ssh(암호화된 원격 로그인하기)
stty(터미널라인 설정 보여주기)
su(계정 바꾸기)
suspend(셸 중단하기)
swapoff (스왑 해제하기)
swapon(스왑 활성화하기)
sync(버퍼 재설정하기)
syslogd(로그인 과정 설정하기)
tac(거꾸로 보기)
tail(문서 끝부분 출력하기)
talk(이야기하기)
tar(파일 묶기)
tcpdchk(tcp wrapper 설정하기)
tcpmatch(네트웍 요청에 대해 예측하기)
tee(표준 입력으로부터 표준 출력 만들기)
telnet(원격접속하기)
test(테스트하기)
times(셸에서의 사용자와 시스템 시간 출력하기)
top(cpu 프로세스 상황 보여주기)
tr(문자열 바꿔주기)
true(종료 코드 리턴하기)
type(유형 보기)
ul(밑줄 처리해서 보여주기)
ulimit(제한하기)
umask(매스크 모드 설정하기)
umount(장치 해제하기)
unalias(별명 제거하기)
uname(시스템 정보 보기)
unexpand(공백 문자를 탭으로 변환하기)
uniq(중복된 문장 찾기)
useradd(사용자 계정 만들기)
userdel(계정 삭제하기)
usermod(사용자 계정정보 수정하기)
unset(설정 변수 해제)
uptime(시스템 부하 평균 보여주기)
users(로그인된 사용자 보여주기)
w(시스템에 접속한 사용자 상황 알아보기)
wait(프로세스 기다리기)
wall(모든 사용자에게 메시지 보내기)
wc(문자, 단어, 라인수 세기)
whatis(명령어의 간단한 설명보기)
while(루프 명령어)
who(사용자 알기)
write(콘솔 상에서 간단한 메시지 보내기)
xcopy(반복적으로 복사하기)
XFree86
ypchfn(NIS에서 사용하는 chfn 명령어)
ypchsh(NIS에서 사용하는 chsh 명령어)
yppasswd(NIS에서 사용하는 passwd 명령어)
zcat(압축 파일 보기)
zcmp(압축 파일 비교하기)
zforce(강제로 gz 만들기)
zgrep(압축 상태에서 grep 실행하기)
zmore(압축 상태에서 more 실행하기)
znew(.Z 파일을 .gz로 다시 압축하기)

반응형
반응형


참고 블로그
원문 : http://blog.naver.com/kater102?Redirect=Log&logNo=134098328

원격에서 프로세스를 스타트 시키는 코드를 작성한 후에 프로세스 핸들을 모니터링 해보니 계속해서 2개씩 누수가 일어나는게 아닌가...
이상하다 분명히 KillProcess 할때 해당 프로세스의 핸들은 닫아줬는데 ㅡㅡ ....


BOOL CreateProcess (
   LPCTSTR IpApplicationName,     // 생성할 프로세스의 실행파일 이름 argv[0]
   LPSTR IpCommanLine,              // 아규먼트로 넘길 값 argv[1~ 이후]
   LPSECURITY_ATTRIBUTES IpProcessAttributes,   // 프로세스의 보안속성을 의미하며 디폴트로 NULL
   LPSECURITY_ATTRIBUTES IpThreadAttributes,     // 쓰레드의 보안속성을 의미하며 디폴트로 NULL
   BOOL bInheritHandles,     // 전달 인자가 TRUE 이면 생성되는 자식 프로세스는 부모 프로세스가 소유하는 핸들 중 일부를 상속한다.
   DWORD dwCreationFlags,    // 프로세스의 특성 디폴트로 0
   LPVOID IpEnvironment,        // 프로세스가 환경블록을 통해 관리하는 메모리 블록에 프로세스 실행에 필요한 문자열을 저장한다.
   LPCTSTR IpCurrentDirectory,     //   생성하는 프로세스의 현재 디렉터리를 설정하는 인자.
   LPSTARTUPINFO IpStartupInfo,   //  STARTUPINFO 구조체 변수는 생성하는 프로세스의 속성을 지정한다.
   LPPROCESS_INFOMATION IpProcessinfomation    // 프로세스 구조체 변수의 주소값을 인자로 전달, 해당 변수에 프로세스 정보가 채워짐.
);

요건 STARTUPINFO 구조체의 정보.



CreateProcess를 하게 되면 부모프로세스는 해당 함수를 사용하여 자식 프로세스를 생성하게 되는데 유닉스의 fork의 개념과 유사한 것 같다.
그리고 해당 프로세스의 정보를 담는 정보가 담겨있는 핸들이 두개 추가로 생기는데 이걸 따로 사용하지 않을꺼라면 닫아줘야 한다.

CreateProcess 할때 사용하는 PROCESS_INFORMATION에 핸들을 두개 추가로 생기게 되는데 이 핸들을 닫아주지 않으면
CreateProcess 할때마다 핸들의 Count가 2개씩 증가해서 핸들 누수가 발생할 수 있다. 따라서 일일히 닫아줘야 한다.
별도로 해당 정보를 사용하지 않을꺼라면 바로바로 닫아주자.

 STARTUPINFO   si;
 PROCESS_INFORMATION pi;

 char command_line[4096];

 memset(&si, 0, sizeof(si));
 si.cb = sizeof(si);

 memset(&pi, 0, sizeof(pi));
 sprintf(command_line, "%s %s", ProcessName, Arguments);

 if(CreateProcess(NULL, command_line, NULL, NULL, 0, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
 {
  ProcessId = pi.dwProcessId;
  ReasonCode = 0;
  // 메모리 누수를 위해 CreateProcess 핸들 두개 CloseHandle 추가 - JangPD
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);

  return 0;
 }

반응형

'Coding Tip > Win Programming' 카테고리의 다른 글

CL RF 의미와 사용  (0) 2011.07.13
반응형


윈도우에서 쓰레드 생존여부를 검사하는 방법은 검색으로도 쉽게 나오고 어디에서나 이렇게 쓰라고 되어 있기 때문에 금방 찾을 수 있었지만
유닉스 계열에서는 그 방법을 찾기가 쉽지 않았다. 오늘 그 방법을 드디어 알아내서 기쁜 마음에 까먹을까봐 블로깅 해놓음.
너무 기쁘다 으아아

------------------------------------------------------------------------------------
윈도우에서 쓰레드의 생존여부를 검사하는 함수는 GetExitCodeThread 함수를 사용하게 됨.
GetExitCodeThread 함수는 retval 부분에 현재 쓰레드의 상태를 기록해 주기 때문에 해당 값을 이용해서 쓰레드를 관리할 수 있게 된다.

함수 원형
BOOL GetExitCodeThread(HANDLE hThread, LPDWORD ipExitCode);

리턴 값
생존시 : ipExitCode가 STILL_ACTIVE로 셋팅됨.
종료시 : 스레드가 시작한 함수의 리턴값, 강제종료시에는 ExitThread 함수의 인수가 리턴.

예제)
HANDLE MyThread;
DWORD ipExitCode;

GetExitCodeThread(MyThread,&ipExitCode);
if(ipExitCode == STILL_ACTIVE) 
{
// 살아 있음.
}
else 
{
// 죽었음.
}
------------------------------------------------------------------------------------



------------------------------------------------------------------------------------
유닉스 계열에서는 pthread를 사용하기 때문에 함수가 다름.
유닉스 혹은 리눅스에서 pthread.h 파일을 이용해서 코딩하게 될 경우 pthread_kill 함수를 사용하면 되는데
해당 함수는 쓰레드 아이디와 시그널을 해당 쓰레드에 전달하여 쓰레드 생존 여부를 확인하는 약간 꽁수 같은 방법이라고 할 수 있겠다.
컴파일 할 때는 gcc -o (output) (input) -lpthread(pthread Library를 링크해줄 것)

함수 원형
int pthread_kill(pthread_t thread_id, int sig);

리턴 값
성공 : 0
실패 : ERROR
ESRCH : 해당 THREAD_ID를 찾을 수 없을 때.
EINVAL : 잘못된 Signal을 전달할 경우.

예제)
#include<pthread.h>
#include<signal.h>
#include<errno.h> // 필요시 추가.

pthread_t MyThread;
int status;

status = pthread_kill(MyThread,0);
if ( status == ESRCH ) // 존재하지 않는 쓰레드 아이디일때, 다시 살리면 된다.
{   
}
else if ( status == EINVAL ) // 잘못된 시그널을 전달했을 경우.


else // 현재 쓰레드는 생존해 있다.
{
}
------------------------------------------------------------------------------------

반응형
반응형


리눅스에 자주 사용하는 tail 명령어와 같은 역활을 하는 C 코드.
옵션으로 사용하는 몇 라인 긁어오라는건 for문 하나만 추가하면 구현이 가능하다.

FILE 객체에 _ptr 필드 가지고 난리를 치다가 결국 안되서 fseek을 사용해서 구현했더니 잘 된다.
현재는 One_Line 배열에 한줄만 가져가는 코드인 상태.


 #define LINE_CHECK_BYTE_NUM 512

char *InquireLog()
{
     FILE *fp = NULL;
     char c;
     long leng=1l;
     char One_Line[512];

     if((fp = fopen("test.txt","rb")) == NULL)
           fprintf(stderr,"LOG_PATH Open Error\n");

     while(leng++ < LINE_CHECK_BYTE_NUM){
           fseek(fp,-(leng),SEEK_END);
           c = fgetc(fp);
           if(c == '\n'){
                fgets(One_Line,leng,fp);
                //printf("One_Line : %s\n",One_Line);
                break;
           }
     }
    return One_Line;
}

반응형
반응형

CR : Carriage Return
LF : Line Feed

간단하게 타자기를 생각을 하면 한글자씩 입력하면 먼지 옆으로 한칸씩 밀려나고,
한줄을 다 입력하고 나서는 그걸 왼쪽으로 밀어 주고 또 입력을 하는 것을 영화에서 봤을 것이다.

간단하게 한줄에서 왼쪽 끝으로 밀어주는것이 CR이고
다음 줄에 입력을 하도록 종이를 한줄 밀어주는것이 LF 라고 할수 있다.

어떤 연유에서 처리 방법들이 엔터를 CR+LF(\r\n)으로 처리하고
Unix/Linux계열에서는 엔터를 LF(\n)으로 처리하고
MAC 계열에서는 엔터를 CR(\r)로 처리한다고 한다.

굳이 Dos/Windows 상황에서 \r\n의 차이점을 느끼려면 파일을 읽을 때 binary모드로 읽으면
파일에 엔터가 \r\n으로 표기되지만 ASCII 모드로 읽으면 \n 으로만 표기가 되는 것을 알 수 있다.

Windows 는 개행을 carrige return 과 line feed 이 두개의 문자를 개행코드로 하고,
Unix는 line feed를 개행코드로 하며, Mac은 Carrige Return 을 개행코드로 한다

퍼온 곳 : http://seongunism.tistory.com/65
반응형

'Coding Tip > Win Programming' 카테고리의 다른 글

CreateProcess시 핸들 누수 현상  (3) 2011.08.17
반응형



사실 모든 Path를 외우지 않는 이상 창을 분할해서 열어서 편집할 때 그 파일이 어디에 위치해 있는지 알기 어렵다.
그래서 Vim에서는 윈도우 탐색기와 같이 디렉터리 탐색기 플러그인 툴을 기본적으로 제공하는데 netrw 라는 툴이다.
이 기능은 창을 분할하여 탐색하고 동시에 편집도 가능하게 해주는 강력한 Vim의 툴로써 그 사용법을 알아두면 매우 이로울 것이다.

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

 명령어  설명  모드
 :e 디렉토리경로  명령행 모드에서 edit 또는 e를 한 다음 디렉토리 경로를 입력하면 해당 디렉토리에 대해서 netrw 툴이 실행된다.  명령행 모드
 <Enter>  해당 디렉토리 또는 파일을 연다.  netrw 명령어
 w 또는 j 또는 방향키 ↓  netrw 내에서 아래로 이동하는 방향키  netrw 명령어
 b 또는 k 또는 방향키 ↑  netrw 내에서 위로 이동하는 방향키  netrw 명령어

 i  파일을 표시할 방법을 변경한다.
(한줄 방식, 파일 정보 표시방식, 와이드 방식, 트리 방식)
 netrw 명령어
 s  정렬 방식을 바꿔준다 (time, size, name 방식)  netrw 명령어
 o  커서 위치의 파일을 수평 분할된 새창으로 열어준다.  netrw 명령어
 v  커서 위치의 파일을 수직 분할된 새창으로 열어 준다.  netrw 명령어
 p  커서 이취의 파일을 미리 보기 창으로 열어준다. (미리 보기 파일의 창 닫기는 일반 모드로 CTRL-w z 를 사용한다)  netrw 명령어
 P  커서 위치의 파일을 바로 이전에 생성된 창에 열어준다. 바로 이전에 생성된 창이 없을 시에는 수평 분할된 새 창으로 열어준다.  netrw 명령어
 R  커서위치의 파일의 파일명을 바꾼다.  netrw 명령어
 t  새로운 탭으로 분할하여 열어준다.  netrw 명령어
 -  상위 디렉토리로 이동한다. 디렉토리가 보이는 것에서 ../에 커서를 위치시키고 엔터를 눌러도 된다.  netrw 명령어



현재 수평분할해서 파일을 하나 열어 놓은것을 확인할 수 있다. (s 키)
수평분할된 창에서 아래창을 보면 Netrw 의 현재 상태를 알 수 있는데
/root 로 현재 위치를 표시하고
Sorted by 즉 정렬방식은 name으로 되어 있고
파일 표시 방식(i 키)를 이용하여 정보표시방식으로 되어 있다.
현재 커서의 위치는 하얀색 가로 줄로써 확인할 수 있다. 
Quick Help라고 써 져있는 부분을 보면 간단한 실행 단축키를 알 수 있다. 더욱 자세한 설명은 F1 키를 눌러 Help를 참고하자.



 






반응형
반응형


이제 Vim 에디터를 조금 더 고급스럽게 써보는 방법인 창분할 과 탭 사용법에 대해서 알아보도록 하자.
사실 본인의 경우는 창을 분할해서 사용하기 보단 여러개의 터미널로 접속해서 사용하였다. 물론 이렇게 하게 되면 각 창별로 내가 셋팅해서 사용할 수 있기 때문에 편하긴 하지만 서버에 터미널 접속 갯수의 제한이 있거나 동시에 파일을 여러개 띄어놓고 한개의 창에서 작업하기에는 창 분할을 사용하는게 더욱 효율적이다. 물론 어느 것이나 그렇지만 익숙해지면 정말로 훌룡한 기능이다. 비쥬얼 베이직이나 여러 다른 편집 툴 역시 탭이나 창분할을 지원하기도 하지만 Vim은 빠르고 사용법이 간단하다는 장점이 있으니 Vim 에디터의 창분할 기능을 적극적으로 사용해서 사용해보자.

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

 명령어  설명   모드 
 :#sp filename  #에 숫자를 넣은 행의 크기 만큼 창이 수평 분할된다. filename을 넣게 되면 해당 파일을 오픈하거나 없으면 새파일을 만든다. 같은 파일에서는 일반모드로 #ctrl-w s 를 치면 #크기 만큼 창이 수평으로 분할된다.  명령행 모드
 :#vs filename  #에 숫자를 넣은 열의 크기 만큼 창이 수직 분할된다. filename을 넣게 되면 해당 파일을 오픈하거나 없으면 새파일을 만든다. 같은 파일에서는 일반모드로 #ctrl-w v 를 치면 #크기 만큼 창이 수직으로 분할된다.  명령행 모드
 :#new filename  #에 넣은 숫자만큼 상하로 창을 수평 분할하여 위쪽에 창에는 새로운 파일을 생성하여 표시한다. 일반모드에서 #ctrl-w n 를 치면 단축키로 사용할 수 있다.   명령행 모드
 :#vnew filename   #에 넣은 숫자만큼 좌우로 창을 수직 분할하여 왼쪽에 창에는 새로운 파일을 생성하여 표시한다.  명령행 모드
 ctrl-w ctrl-방향키
또는 ctrl-w 방향키
또는 ctrl-w ctrl-h,j,k,l (소문자)
 현재 창에서 해당 방향의 창으로 이동할 때 사용된다. 방향키 대신 소문자로 h,j,k,l 키를 사용할 수 있다. 대신 대문자를 사용하면 창을 해당으로 보내게 된다.  일반모드
 ctrl-w ctrl-w
 ctrl-w w
 현재 창에서 오른쪽 방향으로 이동합니다. 오른쪽 끝 창이라면 아래로 내려감.   일반모드
 ctrl-w ctrl-p
 ctrl-w p
 바로 이전에 사용한 창으로 이동.  일반모드
 ctrl-w =  모든 창의 크기를 동일하게 조절  일반모드
 ctrl-w #+  #크기만큼 창의 크기를 키운다. #이 생략되어 있을시에는 1로 판단.  일반모드
 ctrl-w #-   #크기만큼 창의 크기를 줄인다. #이 생략되어 있을시에는 1로 판단.  일반모드


아래의 다양한 크기로 조정된 창들이 수평 수직분할이 되어 있으며 맨 위에는 새로운 파일을 생성해서 다양하게 관리하고 있다.




또한 처음 vim을 시작할 때 여러 파일을 분할하여 창을 열고 싶다면 -o 또는 -O 옵션을 사용하여 열면 된다.
두 창을 상하로 분리하여 사용하고 싶다면 소문자 o를 좌우로 분리해서 사용하고 싶다면 대문자 O를 사용하면 된다.
먼저 위치는 것이 위쪽에 그리고 왼쪽에 위치하게 된다.

ex) vim -o John.txt set.x t.x 를 했을 때의 결과 화면




또한 창 분할의 강력한 기능을 소개하자면 바로 두 개의 파일을 비교하는 기능이다.
vim 을 처음 시작할 때 -d 옵션을 주고 vim -d filename.x filename2.x 와 같이 입력하게 되면 아래와 같이 두개의 수직분할된 창을 열어 서로 다른 내용을 표시해준다. 원본을 놔두고 수정사항을 체킹해야 하거나 디버깅 할 때, 혹은 버젼을 관리해야 할 때 유용하게 사용할 수 있을 것이다.



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

창 분할의 경우는 생성할 수록 창의 크기가 n개의 갯수만큼 분할 되기 때문에 한번에 코드 내용을 많이 보면서 편집할 때는 적절하지 않다.
따라서 여타 편집기와 같이 vim에서는 tab 기능을 제공하는데 마우스가 아닌 모든 것을 키보드로 처리해야 한다. 명령어가 직관적이어서 크게 어렵지 않으니 한번 살펴보자.

 명령어  설명   모드 
 :#tabedit filename
또는 :#tabe filename
 #번째 탭에 filename에 해당 하는 파일을 엽니다. #이 생략되면 현재 열려 있는 탭 바로 뒤에 탭을 생성하여 파일을 엽니다. filename이 생략되면 빈 이름의 파일이 생성됩니다.  명령행 모드
 :#tabnew filename  #번째 탭에 파일을 생성합니다. #이 생략되면 현재 열려 있는 탭 바로 뒤에 탭을 생성하여 파일을 생성합니다. filename이 생략되면 빈 이름의 파일이 생성됩니다.  명령행 모드
 :#tabclose
또는 :#tabc
 #번째 탭의 파일을 닫습니다. #이 생략되면 현재의 탭을 닫습니다.  명령행 모드
 :#tabnext
또는 :#tabn
 #번째 다음 탭을 봅니다. #이 없으면 바로 다음 탭을 엽니다.  명령행 모드
 #gt  #번째 탭을 엽니다. #이 생략되면 바로 다음 탭을 엽니다.  일반 모드
 #ctrl-PageDown  #번째 탭을 엽니다. #이 생략되면 바로 다음 탭을 엽니다.  일반 모드
 :#tabprevious
또는 :#tabp
 #번째 이전 탭을 봅니다. #이 없으면 바로 이전 탭을 엽니다.  명령행 모드
 #gT  #번째 이전 탭을 엽니다. #이 생략되면 바로 이전 탭을 엽니다.  일반 모드
 #ctrl-pageUp  #번째 이전 탭을 엽니다. #이 생략되면 바로 이전 탭을 엽니다.  일반 모드
 :tabmove #
또는 :tabm #
 #번째 탭으로 이동합니다. #이 생략되면 가장 마지막 탭으로 이동합니다.  명령행 모드


아래 그림파일을 보면 t1.x 파일 즉 3번째 탭이 할성화 되어 있다. 또한 파일 명 바로 앞에 + 가 있는 건 수정내용이 있다는 것을 의미한다. 여러 파일을 동시에 열때와 달리 탭을 이용해서 열게 되면 굳이 저장하지 않아도 이동이 가능하다.

창을 분할할 때도 옵션을 줘서 파일을 열었듯이 탭 역시 처음 실행시 옵션을 주면 아래와 같이 탭을 가지고 실행 시킬 수 있다. 옵션은 -p 이다.
ex) vim -p filename.x filename1.x

 




 




반응형
반응형


이전의 내용은 Vim 에디터의 초급 단계의 내용으로 중급 단계로 가기 위한 작은 첫 걸음을 띄기 위해서는 파일 관련 기능을 필히 숙지해야 한다.
물론 파일 관련 기능을 알았다고 해서 중급사용자라고 할 순 없지만 그래도 Vim 에디터를 조금은 사용할 줄 알게 되는 수준은 되는 것 같다.

이번 파일 관련 기능1 에서는 다양하게 파일을 열고 닫는 법에 대해서 알아보도록 하자. 

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

 명령어  설명   모드 
 :e #  추가로 편집하고자 하는 파일 이름 인 #을 넣으면 이전 편집하던 내용을 잠시 놔두고 다른 파일을 편집한다. 없으면 새롭게 생성한다.
대신 이전에 수정하던 파일은 반드시 수정하고 넘어가야 한다. 수정하지 않고 강제로 넘어가면 수정했던 내용은 지워진다.
어떠한 파일을 편집 할 수 있는 한개씩 확인하고 싶다면 tab을 누르면 되고 모두 확인하고 싶다면 ctrl-d 를 누르면 된다. 
 명령행 모드
 ctrl-6 또는 ctrl-^  이전에 편집했던 내용으로 돌아갈때 누르면 된다. 역시 현재 편집했던 내용은 저장하지 않으면 없어진다.  명령행 모드
 vim #1 #2 #3 #4....  vim 에디터는 여러개의 파일을 동시에 열 수 있다. vim 이후에 여러개의 파일명을 공백과 함께 입력하면 동시에 여러개의 파일을 편집할 수 있다.  명령행 모드
 :#n  여러개의 파일을 동시에 오픈했을 때, 현재 편집하던 파일이 아니라 #1 -> #2 로 가고자 할때
:n을 누르면 된다. 한번에 여러개를 건너 띌때는 # 숫자를 기업하면 된다.
ex) :2n 을 입력하면 #1 -> #3 으로 이동함.
 명령행 모드
 :#N  :n이 정방향으로 증가한다면 :#N은 뒤쪽으로 이동한다.
ex) 현재 편집하던 파일이 #4라면 :3N 을 입력하면 #4 -> #1 로 가게 된다.
 명령행 모드
 :qa  여러개의 파일이 열려 있을 때 다른 파일이 편집중이라 닫히지 않을때는 qa를 누르면 모두 닫히게 된다. 혹은 q! 를 눌러서 강제로 종료해도 된다.   명령행 모드
 :w #  #에 해당하는 파일 이름을 저장할 수 있다.
w는 write의 약자로 wrie라고 써도 된다.
 명령행 모드
 :sav #  #에 해당하는 파일을 다른 이름으로 저장한다.
sav는 saveas로 써도 된다.
 명령행 모드
 :up  현재 바뀐 내용만 저장하게 된다. w는 내용이 바뀌던 안 바뀌던 모두 저장하므로 서버에 터미널이 여러개 붙어 있을 과부하를 주게 되는데 up은 상대적으로 적은 과부하를 주게 되어 유리하다.  명령행 모드
 :x  기능은 up 을 한 다음에 q 를 동시에 한 것과 같다. 즉 wq와 같은 기능을 하지만 wq가 upq 와 같은 효과라서 wq보다 효율적인 명령이다. wq보다 x를 사용하기를 추천한다.  명령행 모드


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

여러개의 파일을 동시에 열었을 때 해당 파일들을 동시에 편집하고 관리하는 좀 더 강력한 기능에 대해서 알아보자

 명령어  설명  모드
 :ls
 :buffers
 :files
 현재 열려 있는 파일 목록을 확인한다.  명령행 모드 
 숫자ctrl-6
 :e #숫자
 숫자번째 파일 목록을 연다.   일반모드 
 :0f  현재 파일을 목록에서 제거합니다.
연결된 파일이 있다면 해제하여 이름없음 파일로 바꿉니다. 
 명령행 모드 
 :r  해당파일을 목록에 끼워넣는다.   명령행 모드 
     


또한 비쥬얼 베이직 이나 기타 편집 툴에도 있는 기능에 대해서 소개하겠다.
바로 해당 함수나 헤더파일 등의 정의부로 이동하는 단축키인데, #include<stdio.h>의 경우 stdio.h 파일의 내용을 보고 싶을 때가 있다면 해당 부분에 커서를 옮기고 gf를 눌러보자. 해당 파일의 정의부로 이동할 수 있을 것이다. 물론 :e /usr/include/stdio.h 와 같은 방법으로도 열 수 있지만 좀 더 편리한 단축키 사용법을 알아놔서 나쁠 것 없으니 이 기회에 알아놓자.

 gf   현재 커서 위치의 파일명을 열어준다.
기본적으로 등록된 /usr/include 와 같은 검색 위치를 제외한 추가적인 위치를 등록하고 싶다면 :set path+=경로명을 쳐주거나 .vimrc 파일에 등록해서 사용하면 된다. 
 일반모드
 ctrl-w f   현재 커서 위치의 파일명을 분할된 창에 열어준다.  일반모드
 ctrl-w gf   현재 커서 위치의 파일명을 탭에서 열어준다.  일반모드






반응형

+ Recent posts