수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620990
  • Today | 370
  • Yesterday | 482

119 Articles, Search for 'Unix & Linux'

  1. 2009/09/04 ASCII Code의 CRLF 제거 방법
  2. 2007/12/30 형식화된 입출력 – printf, fprintf, sprintf
  3. 2007/12/23 Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현
  4. 2007/11/27 Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)
  5. 2007/07/19 아파치를 기반으로 한 웹 로그 분석 - 3. 에러 로그 분석 방법
  6. 2007/07/19 아파치를 기반으로 한 웹 로그 분석 - 2. 접속 로그 분석 방법
  7. 2007/07/19 A Simple Makefile Tutorial
  8. 2007/07/18 Linux / Unix Command: signal
  9. 2007/07/16 아파치를 기반으로 한 웹 로그 분석 - 1. 웹 로그 분석의 개요
  10. 2007/07/11 리눅스 명령어 (6)
«Prev  1 2 3 4 5 ... 12  Next»
Unix & Linux/System2009/09/04 16:59

ASCII Code의 CRLF 제거 방법

ASCII 문서나 코드를 살펴보면 CRLF가 포함된 경우가 있다.

포함되는 이유에 대해서는 다음 문서를 참조

http://en.wikipedia.org/wiki/Newline

제거하는 방법도 위 사이트에 게시되어 있지만,

다음과 같은 방법으로 간단히 제거하면 된다.

CR=13(dec)=15(oct) 제거 방법

tr -d '\015' < infile.txt > outfile.txt

LF=NL=10(dec)=12(oct) 제거 방법

tr -d '\012' < infile.txt > outfile.txt

CRLF 제거 방법

tr -d '\015\012' < infile.txt > outfile.txt



"System" 카테고리의 다른 글
  • ASCII Code의 CRLF 제거 방법 (0)2009/09/04
  • Linux / Unix Command: signal (0)2007/07/18
  • 시스템 관리자를 위한 기초 명령어 활용법 (0)2007/06/22
  • 프로세스정보 얻어오기 (0)2007/05/14
  • 여러 가지 설정으로 공격으로부터 시스템을 안전하... (0)2007/05/10
2009/09/04 16:59 2009/09/04 16:59
Posted by webdizen
Tags ASCII, CRLF, tr
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3345

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Develop2007/12/30 23:11

형식화된 입출력 – printf, fprintf, sprintf

printf, fprintf, sprintf

#include <stdio.h>

int printf(const char *format, …);

int sprintf(char *s, const char *format, …);

int fprintf(FILE *stream, const char *format, …);

출력 스트림에 각 인자를 표현하는 방법은 format 매개변수에 의해 조절된다. 이 매개변수는 출력할 일반적인 문자와 변환 지정자(conversion specifier)라고 불리는 코드를 포함하고 있다.

  • %d, %i: 정수를 십진 형태로 출력한다.

  • %o, %x: 정수를 8진수, 16진수 형태로 출력한다.

  • %c: 문자를 출력한다.

  • %s: 문자열을 출력한다.

  • %f: 부동 소수점(단일 정밀도) 숫자를 출력한다.

  • %e: 배정밀도(double precision) 숫자를 고정된 형식으로 출력한다.

  • %g: 배정밀도 숫자를 일반적인 형식으로 출력한다.

printf에 전달된 인자의 개수와 형식이 format 문자열에 있는 변환 지정자와 일치한다는 것은 매우 중요하다. 크기 지정자를 사용하여 정수 인자의 형식을 지정할 수도 있는데 없어도 된다. 크기 지정자는 h 혹은 l이 될 수 있다. 예를 들어 %hd는 short int를 나타내고, %ld는 long int를 나타낸다. 어떤 컴파일러는 이러한 printf 구문들을 검사할 수 있으나 절대 오류가 없을 수는 없다. GNU 컴파일러 gcc를 사용한다면 –Wformat이 이러한 검사를 수행해준다.

형식

인자

출력

%10s

“Hello”

         Hello

%-10s

“Hello”

Hello

%10d

1234

         1234

%-10d

1234

1234

%010d

1234

0000001234

%10.4f

12.34

     12.3400

%*s

10,”Hello”

         Hello

이 모든 예제는 10문자의 너비를 가진 필드에 출력된다. 음수 필드 너비는 항목이 필드 내에서 왼쪽 정렬됨을 의미한다. Asterisk(*)를 사용하여 변수 필드 너비를 지정한다. 이 경우에 다음 인자가 너비로 사용된다. 앞에 오는 0은 항목의 앞에 0이 쓰여짐을 의미한다. POSIX 명세에 따르면 printf는 필드의 내용을 지우지 않고 딱 맞도록 필드를 확장한다. 예를 들어 필드보다 긴 문자열을 출력하고자 시도한다면 필드는 커진다.

이 글을 출처에 해당하는 책에서 발췌하게 된 것은 Asterisk(*)를 이용해서 변수 필드 너비를 지정한다는 것을 이 책을 보고 처음 알았기 때문이다. 왜 다른 책에서는 볼 수 없었는지 의문이면서도 기능을 알게 된 것이 즐겁다.

출처 : Beginning Linux Programming 제3판 (정보문화사)

"Develop" 카테고리의 다른 글
  • 형식화된 입출력 – printf, fprintf, sprintf (0)2007/12/30
  • Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현 (0)2007/12/23
  • Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)2007/11/27
  • A Simple Makefile Tutorial (0)2007/07/19
  • 세마포어의 사용 (0)2007/05/14
2007/12/30 23:11 2007/12/30 23:11
Posted by webdizen
Tags fprintf, printf, sprintf, 형식화된 입출력
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3160

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Develop2007/12/23 00:12

Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현

리눅스를 사용하시고 있는 많은 사용자분들은 리눅스 콘솔에서 깔끔한 그래픽 표현을 보셨을 것이다.

바로 Dialog라는 유틸리티를 이용한 것이다. 다양한 매개변수와 옵션을 가지고 있는 하나의 프로그램이다.

간단한 예제를 통해서 사용방법을 살펴보도록 하자.

dialog --msgbox "Hello Dialog" 6 16

위와 같은 명령어를 콘솔에서 실행시키면 다음과 같은 화면을 볼 수 있다.

사용자 삽입 이미지

위 그림과 같이 정말 깔끔하게 표현되는 것을 볼 수 있다.


dialog 유틸리티에 다양한 옵션과 매개변수를 살펴 보도록 하자.

형식

옵션

매개변수

의미

체크 박스

--checklist

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

항목의 목록을 표시한다. 각 항목들을 개별적으로 선택할 수 있다.

정보 상자

--infobox

텍스트 높이 너비

화면을 지우지 않고 즉각 반환하는 상자에 간단하게 표시한다.

입력 상자

--inputbox

텍스트 높이 너비 [초기 문자열]

사용자가 텍스트를 입력할 수 있다.

메뉴 상자

--menu

텍스트 높이 너비 메뉴-높이 [태그 항목] …

사용자가 목록으로부터 하나의 항목을 선택할 수 있다.

메시지 상자

--msgbox

텍스트 높이 너비

사용자에게 메시지를 표시한다. 사용자는 계속하고 싶을 때 OK 버튼을 누르면 된다.

라디오 상자

--radiolist

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

사용자는 목록으로부터 한 가지를 선택할 수 있다.

텍스트 박스

--textbox

파일 이름 높이 너비

스크롤하는 상자 안에 파일을 표시할 수 있다.

예/아니오 상자

--yesno

텍스트 높이 너비

사용자에게 질문을 할 수 있다. 사용자는 Yes 혹은 No를 선택할 수 있다.


모든 dialog 형식은 몇 가지 옵션을 가지고 있다.

--title 옵션을 사용하면 상자의 제목을 지정하고, --clear 옵션을 사용하면 화면을 지울 수 있다.


다른 예제를 통해서 다양한 옵션과 매개변수를 사용해 보겠습니다.

dialog --title "Check Dialog" --checklist "Select Numbers" 14 26 3 1 "one" "off" 2 "two" "on" 3 "three" "off"

위와 같은 명령어를 콘솔에서 실행시키면 다음과 같은 화면을 볼 수 있다.

사용자 삽입 이미지

위 그림과 같이 --checklist 옵션을 사용해서 체크 박스를 표현할 수 있다.

--checklist 옵션의 매개변수를 살펴보면 다음과 같다.

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

예제에 사용된 매개변수를 살펴보면 다음과 같다.

--checklist "Select Numbers" 14 26 3 1 "one" "off" 2 "two" "on" 3 "three" "off"

높이 : 14
너비 : 26
목록-높이 : 3
태그 텍스트 상태 : 1 "one" "off"
태그 텍스트 상태 : 2 "two" "on"
태그 텍스트 상태 : 3 "three" "off"

이렇게 쉽고 간단하게 콘솔에서 그래픽 표현이 가능한 dialog 유틸리티의 막강함을 볼 수 있다.


참고 도서 : Beginning Linux Programming 제3판

"Develop" 카테고리의 다른 글
  • 형식화된 입출력 – printf, fprintf, sprintf (0)2007/12/30
  • Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현 (0)2007/12/23
  • Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)2007/11/27
  • A Simple Makefile Tutorial (0)2007/07/19
  • 세마포어의 사용 (0)2007/05/14
2007/12/23 00:12 2007/12/23 00:12
Posted by webdizen
Tags console, dialog, Linux
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3157

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Develop2007/11/27 01:25

Vim에서 엉망이 된 소스 코드 자동으로 맞추기

출처 : http://special.homelinux.net/entry.php?blogid=158

정말 막강한 기능을 위 블로그를 통해서 알게 되었네요.
vim의 힘은 무궁무진 하네요. ^^


01. 엉망이 된 소스 코드를 vim으로 오픈합니다.

사용자 삽입 이미지

02. 엉망이 된 소스 코드 부분을 Shift+V 키를 이용하여 블록을 씌웁니다.

사용자 삽입 이미지

03. '=' 키 버튼을 클릭하면 다음과 같이 자동으로 맞춰집니다.

사용자 삽입 이미지

이런 기능 정말 효율적일꺼 같아요. 아름답네요 ^^
"Develop" 카테고리의 다른 글
  • 형식화된 입출력 – printf, fprintf, sprintf (0)2007/12/30
  • Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현 (0)2007/12/23
  • Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)2007/11/27
  • A Simple Makefile Tutorial (0)2007/07/19
  • 세마포어의 사용 (0)2007/05/14
2007/11/27 01:25 2007/11/27 01:25
Posted by webdizen
Tags vim, 소스코드
No Trackback 2 Comments

Trackback URL : http://www.webdizen.net/blog/trackback/3144

Leave your greetings.

  1. adnoctum

    오호 이런 게 있었군요. 그렇잖아도 어제 이런 기능이 있으면 좋겠다, 라고 어떤 글에 답글을 달았었는데. 시기적절한 포스팅 감사합니다.

    2007/11/27 10:21 [ Permalink : Modify/Delete : Reply ]
  2. webdizen

    저도 이런 기능이 있는걸 보고 깜짝 놀랬었습니다. 출처에 해당하는 블로그에서 보고 나서 바로 적용해봤지용... ^^

    2007/11/27 22:32 [ Permalink : Modify/Delete : Reply ]
[로그인][오픈아이디란?]

Unix & Linux/Applicaton2007/07/19 10:03

아파치를 기반으로 한 웹 로그 분석 - 3. 에러 로그 분석 방법

출처 : 시스템 로그 분석 (해킹 피해와 보안 추적의 결정적 파일) - 안정철 지음
(안정철 님에게 책 내용에 대해 발췌하는 것에 대해서 허락을 구하지 못하였습니다. 삭제를 요구하시면 바로 삭제 조취 하겠습니다.)

Session 03. 에러 로그 분석 방법

웹 서버가 어떻게 사용되고, 혹 잘못된 부분이 없는지를 분석할 때에 유용하게 사용될 수 있는 것 중의 하나가 에러 로그 파일이다. "에러 로그"는 웹 서버가 운영 중에 발생되는 잚소된 모든 기록을 포함하고 있다. 웹 서버의 시작이나 중지와 같은 통보정도에 지나치지 않는 일반 메세지까지 말이다. 에러 로그 파일은 'ErrorLog' 지시어를 이용하여 어느 곳에 기록할 지를 지정하며, 기본으로 설정되는 로그 파일의 경로는 "/usr/local/apache/logs/error_log"가 된다. 에러 로그의 기록을 원하지 않는 경우에는 다음과 같이 "null" 디바이스로 전송하면 된다.

ErrorLog /dev/null


이러한 방법은 웹 서버가 디스크에 엑세스하는 시간을 줄여, 실제로 아파치가 로그를 기록하는데 소비하는 시간을 감소시켜 준다. 이외에 유닉스 시스템 로그 데몬에 에러 메세지를 전송 하는 것도 가능하다. 이것은 한 호스트에 하나의 에러 로그만이 가능하며, 만약 여러 개의 ErrorLog를 지정하게 되면 마지막에 지정된 것이 사용될 것이다. 아파치의 에러 로그는 유닉스 시스템에서 사용하는 것과 같이 제일 하단의 'debug'에서부터 'emergency'까지의 전체 8개의 범위를 가지고 있다.

일반적으로 로그의 모든 메세지들을 에러 로그 파일에 기록하는 것은 디스크의 소모뿐만 아니라 로그를 기록하기 위한 프로세스 시간을 필요로 하게 된다. 이러한 부분들을 고려하여 아파치 웹 서버는 'LogLevel' 지시어를 이용한 각 로그 레벨 단위의 기록이 가능하도록 하고 있다. 예를 들어, 'notice' 또는 그 이상의 범위에 해당하는 내용만 기록에 남기고자 한다면 아래와 같이 입력할 수 있다.

LogLevel notice

이와 달리, 'debug' 레벨을 선택하게 되면 아파치에서 발생하는 모든 에러 메세지를 로그에 기록하게 되므로 자원의 공간과 프로세스 시간을 낭비하는 결과를 초래하게 된다. 물론 이와 같이 모든 내용을 기록한다는 것이 여러분들에게 어떠한 생각을 줄여 줄지는 모르지만, 'debug'와 같이 모든 내용을 기록한다는 것이 에러 로그에 있어서는 그리 비효율적이라 생각은 들지 않는다. 로그의 범위는 여러분들의 고민으로 남겨 두도록 하겠다.

다음 표는 각 단계별 로그 레벨의 의미를 나타낸 것이다.

로그 레벨 에러의 이미
emerg 불안정한 시스템 상황
alert 즉각적인 조치 필요
crit 중대한 에러
error 비교적 중대하지 않은 에러
warn 경고
notice 중대한 것은 아닌 일반적인 메세지
info 정보
debug 디버그 레벨

아파치의 에러를 시스템 로그 데몬인 'syslogd'를 전송하기 위해서는 다음과 같이 기존의 에러 로그 파일의 이름을 'syslog'로 변경하여야 한다.

ErrorLog syslog


기본적으로 에러 로그는 syslog에 'local7'의 이름으로 기록이 되며, syslog.conf에서 syslogd 데몬은 어떠한 에러 메세지들을 받을 것이지 제어하게 된다. syslog.conf에 다음의 라인을 포함하게 되면 /var/log/httpd.log에 내용을 저장하게 된다.

Local7.* /var/log/httpd.log


이외에 local7.* 과는 달리 앞쪽에서 언급하였던 로그 레벨을 기반으로 로그를 따로 저장 할 수가 있다. 아래의 예은 warn 로그 레벨 이상의 정보를 /var/log/httpd_warn.log 에 저장하는 것과 info 레벨 또는 그 이상의 메세지를 error 레벨 이하로 기준하여 /var/log/httpd_info.log 에 저장하게 된다. 쉽게 이야기하면 httpd_info.log는 info,notice,warn 레벨을 포함하는 것이다.

Local7.warn /var/log/httpd_warn.log
Local7.info;local7.!=error /var/log/httpd_info.log

웹 서버의 문제 해결은 에러 로그와 함께 아파치를 처음 접하는 초보자가 설치 후 애기치 못한 문제에 봉착하였을 경우에는 당황하지 말고 에러 로그를 찾아봄으로써 문제의 대부분을 해결할 수 있다.

웹 서버에 문제가 있을 때에는 발생되는 문제를 즉시 확인하기 위하여 계속적으로 로그 파일을 확인해 보아야 하는 경우도 있기 마련이다. 이럴 때에는 유닉스에서 제공해 주는 'tail' 명령어를 이용하여 다음과 같이 사용하면 된다.

tail -f /usr/local/apache/logs/error_log


또 다른 방법으로는 펄을 이용할 수가 있다. File::Tail 모듈을 사용하면 되고 이것을 통하여 여러분들이 다양하게 응용하여 사용해 볼 수 있으며, http://www.cpan.org/modules/by-module/File/File-Tail-0.98.tar.gz에서 구할 수 있다.

use File::Tail;
$file=File::Tail->new("/var/log/file");
while (defined($line=$file->read)) {
   print "$line";
}


"tail -f" 를 이용한 로그 파일을 살펴보면 이래와 같은 내용을 확인할 수 있다.

[Test: /]tail -F access_log
192.168.0.24 - - [2/Mar/2004 : 18:29:14 +0900] "Get /images/board.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:14 +0900] "Get /images/left.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:14 +0900] "Get /images/ground.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:14 +0900] "Get /images/test.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:14 +0900] "Get /images/user_name.html HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:32 +0900] "Get /images/images1.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:33 +0900] "Get /images/images2.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:33 +0900] "Get /images/test2.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:42 +0900] "Get /images/test3.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:42 +0900] "Get /images/test4.jpg HTTP/1.1" 200 36
192.168.0.24 - - [2/Mar/2004 : 18:29:42 +0900] "Get /images/logo.jpg HTTP/1.1" 200 36


지금까지 아파치 서버의 대표적인 Access_log와 error_log의 분석 방법에 대하여 알아보았다. 아파치 서버는 오늘날 운영중인 웹 서버중 운영 빈도가 높은 서버중 하나이다.

아파치 서버에 저장된 로그 파일로부터 유용한 정보를 얻어내기 위해서는

- 사용자 스스로 로그 파일에서 필요한 정보만을 추출하는 방법
- 자동화된 로그 분석 프로그램을 이용하는 방법

위 2가지 방법으로 나눌 수 있다. 대부분의 경우에는 수작업에 기록된 내용을 분석하고 통계를 알아내는 방법보다는 분석 프로그램을 이용하여 다양한 정리된 자료를 원할 것이다. 그러나 경영자 입장에서 웹 로그로부터 얻을 수 있는 가장 중요한 정보중 하나는 히트(hit)와 페이지뷰(pageview)이다. 히트는 웹 서버에서 받은 모든 요청과도 같다. 페이지 상에 포함된 이미지, 사운드 파일, 그리고 기타 모든 것들이 하나의 히트로 간주되며, 이와 달리 페이지뷰는 좀 더 정확하게 전체의 각 부분이 아니라 페이지 전체를 하나로 본 것이라 이해하면 된다.

이 히트와 페이지뷰를 통하여 누가 사이트를 방문하였고, 방문한 사용자들은 어디로부터 왔으며, 어떠한 페이지를 보았고, 또 얼마나 오랫동안 머물렀는지, 그리고 사용한 브라우저는 무엇인지 등 다양한 정보를 방문객으로부터 얻어낼 수가 있다.

이러한 정보를 다양하게 분석하려면 분석 툴 보다는 수작업에 의한 것이 더 다양한 정보를 획득할 수 있다는 점을 잊지 말기 바란다. 그러나 로그 분석 툴이 사람의 수작업을 통한 것보다 좀 더 정확하고 신속한 장점도 있음을 알아두자.

아무리 웹 서버의 로그를 잘 분석하고 적절히 조치할 수 있다하더라도 서버 관리자에 의한 환경 설정에 따라 외부로부터의 공격 가능성과 웹 서버 자체 또는 사용하는 어플리케이션 프로그램의 버그로 인한 공격에는 늘 노출되어 있음을 인식하자. 특히 요즘 사회이슈로 자주 등장하는 인터넷 웜의 경우 각 서버에 공통적인 취약점을 찾아서 공격하므로 웹 서버의 경우는 로그 분석만이 아니라 보안 패치가 수시로 이루어져야 한다.

아파치의 경우 공개 소프트웨어이면서 많이 운영되다 보니 시스템 자체의 취약점이 자주 발견되고 즉시 패치자료가 공개되고 있다. 따라서 아래의 사이트에서 수시로 패치자료를 다운받아 설치해두는 점이 좀더 안정적인 시스템 운영에 도움이 되리라 생각한다.

http://www.apache.org/dist/httpd/patches
"Applicaton" 카테고리의 다른 글
  • 아파치를 기반으로 한 웹 로그 분석 - 3. 에러 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 2. 접속 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 1. 웹 로그... (0)2007/07/16
  • 애플리케이션의 구현 및 분산 프로세스를 자동화하기 (0)2007/05/04
  • RPM으로 패키지 관리하기 (0)2007/05/04
2007/07/19 10:03 2007/07/19 10:03
Posted by webdizen
Tags log, 로그 분석, 아파치, 에러 로그
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3083

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Applicaton2007/07/19 10:00

아파치를 기반으로 한 웹 로그 분석 - 2. 접속 로그 분석 방법

출처 : 시스템 로그 분석 (해킹 피해와 보안 추적의 결정적 파일) - 안정철 지음
(안정철 님에게 책 내용에 대해 발췌하는 것에 대해서 허락을 구하지 못하였습니다. 삭제를 요구하시면 바로 삭제 조취 하겠습니다.)

Session 02. 접속 로그 분석 방법

아파치 웹 서버에서 기본적으로 각 클라이언트의 요청을 기록하는 'access_log'는 이름에서도 느낄 수 있는 것처럼 웹 서버에 접근되는 모든 것을 기록하게 된다. 접속 로그는 방문자 정보를 얻는데 있어서 가장 중요한 역할을 담당하고 있다. 우선, 여러분들이 정보를 가져올 'access_log'는 다음과 같이 TransferLog 지시어를 사용하여 어느 위치에 로그를 남길 것인지 결정을 할 수가 있다.
TransferLog /usr/local/apache/logs/access_log

그 러나 1.3.X 버전부터 사용자 정의 로그 포맷을 지원하고 있다. 대부분의 웹 서버들은 CLF(Common Log Format)로 파일을 생성하고 있으며, 이외에도 ELF(Extended Log Format), 그리고 Combined Log Format이 있다. 몇몇 서버들은 이외의 다른 형식 포멧을 사용학 있지만 CLF와 비슷한 형식을 취하고 있으며, 아파치 웹 서버는 기본적으로 이 포맷 방식을 따르고 있다. 지금 시점에서 여러분들이 사용하는 아파치 웹 서버의 로그 파일 설정은 다음과 같이 이루어져 있을 것이다.

CustomLog /usr/local/apache/access_log common

CLF는 각 클라이언트 요청에 한 라인으로 구성되어져 있고, 공백에 의해 각 필드는 7가지의 정보를 포함하여 구분되어 있다. 기본 포맷은 다음과 같은 형식을 갖추고 있다.

host ident authuser [date and time] request status bytes

첫 번째 필드는 원격지 호스트 주소 정보를 가지고 있다. 이것은 어느 누가 여러분들의 웹 사이트를 방문하였는가를 말해주는 것이다. 기본적으로, 이곳은 원격지 호스트의 정보가 IP 주소로 기입이 된다. 물론 아파치 웹 서버에서 호스트 이름을 찾아 기록할 수 있도록 설정할 수는 있으나, 아파치 1.3.X 버전에서는 성능상의 문제로 호스트 이름 대신 IP 주소로 기록하고 있다.

HostNameLookups off

아 파치 웹 서버는 IP 주소 대신 'HostNameLookups' 지시어를 사용하여 호스트 이름으로 기록을 할 수가 있다. 그러나 이러한 방법의 사용은 결과적으로 서버의 전반적인 성능을 떨어뜨릴 수 있는 요인 중의 하나가 될 수 있으므로 권장하지 않는다.

HostNameLookups on과 같이 사용하면 되며, on 이외에 double을 사용하여 역 방향 이름을 찾아 조회하는데도 사용할 수 있다.

logresolve 프로그램을 이용하여 IP 주소를 도메인으로 변경하는 방법은 아래와 같다.

[Test : /home/apache/bin/]logresolve -s log-stat.txt -c < text_log > new_log
[Test : /home/apache/bin/]more log-stat.txt
logresolve Statistics:
Entries : 500
   With name   :6
   Resolves    : 494
   - Not found : 21
Cache hits      : 472
Cache size     : 22
Cache buckets :   IP number * host
      1    192.168.0.25     : Host not found
     10   192.168.0.28     : Host not found
     10   192.168.0.126   : Host not found
     24   192.168.0.115   : Host not found
     48   192.168.0.3      : Host not found
    151   192.168.0.239   : Host not found

두 번째 필드는 대부분의 경우 아무런 정보를 가지고 있지 않다는 '-'로 표시될 것이다. 이것은 방문자를 식별하는 정보를 얻는 경우에 이용되며, 실질적인 인증을 통한 로그인 이름이 아니라 사용자의 이메일 주소 및 식별할 수 있는 정보 등을 의미한다. 이 정보는 'identd'에 또는 브라우저의 직접적인 정보 제공에 의해 기록되어 질 수 있으나, 이러한 기능은 이미 오래 전에 사라져 사용되지 않고 있는 정보로 생각하면 된다.

세 번째 필드 또한 '-'로 표시되는 경우가 많으며, 방문자가 사용자 인증을 통하여 접속한 경우에 사용자의 로그인 이름이 기록된다. 네 번째 필드는 클라이언트가 서버의 자원을 요청한 시각이며, 다섯 번째 필드 "request"에는 요청한 자원이 어떤 것인지를 나타낸다. 주로 웹 서버의 자원을 클라이언트로 가져가기 위해 GET을 사용하며, 그 다음에는 실제적인 문서, 즉 URL을 의미한다. 클라이언트는 '/'를 시작으로 DocumentRoot 디렉토리로 지정한 경로에 기반하여 사용자에게 문서를 보여주게 된다.

URL의 마지막에는 HTTP 프로토콜 버전이 따라오게 되는데, 이 번호는 1.0 또는 1.1이 될 것이다. HTTP/1.0은 초창기의 프로토콜 버전으로 최근의 브라우저는 HTTP/1.1을 지원하고 1.0에 비해 많은 성능개선을 한 HTTP/1.1이 주로 사용되고 있다.

여 섯 번째의 필드는 웹 서버의 상태 코드를 의미하는 것으로서 클라이언트의 요청이 성공적이었는지, 또는 문제 발생이 있었는지를 코드번호로 나타내고 있다. 대부분의 경우에는 성공적인 전송을 의미하는 200번일 것이며, 서버에서 문제가 발생할 시에는 5XX번대로 시작한 에러코드가 기록될 것이다.

마지막인 일곱 번째 필드는 클라이언트에게 전송된 바이트를 나타낸다. 이것은 하루에 얼마나 데이터가 전송되었는가를 알아내고자 할 때 사용될 수 있다.

다음의 예를 살펴보자.

192.168.0.151 - - [01/Mar/2005:23:43:50 +0900] "GET /dist/ HTTP/1.1" 200 11177

192.168.0.151 의 IP 주소에서 요청한 것을 보면 2005년 3월 1일 11시 43분 50초에 Test 센터를 요청하였으며 HTTP/1.1 프로토콜을 사용하였다. 상태 코드는 200을 나타내는 것으로 보아 클라이언트에게 성공적으로 전송되었음을 알 수가 있고 총 11,177bytes가 전송되어졌다. 각 필드에 해당하는 의미를 간단하게 기술해 놓은 CLF(Common Log Format)을 구성하는 각 필드는 다음과 같다.

아이템 의미
Host 클라이언트의 호스트 이름이나 IP Address
Ident IdentityCheck가 enable 되어 있고, 클라이언트가 ident에 응답을 보내면 identity 정보를 남기게 되며, 보통은 "- "로 대체된다.
Authuser 인증이 있을 경우 여기에 사용자 이름이 기록되게 되며, 그렇지 않을 경우 "- "로 대체된다.
Date

접속한 시간과 날짜를 나타내며, 포맷은 다음과 같다 :
날짜 포맷 = [day/month/year:hour:minute:second zone]
day = 2*digit
month = 3*letter
year = 4*digit
hour = 2*digit
minute = 2*digit
second = 2*digit
zone = (+' | -') 4*digit

Request 클라이언트가 요청한 자료
Status 요청한 것에 대한 서버의 처리 사항으로 상태 코드라 한다.
Bytes 헤더를 제외한 전송된 Byte 양

지금까지 기본 로그 포맷에 대하여 알아보았다. 이번에는 'CustomLog' 지시어를 이용한 사용자 정의 로그 포맷에 대해 살펴보고자 한다.

'CustomerLog' 지시어는 'TransferLog'의 기능을 내포하고 마찬가지로 로그 파일이 어느 위치에 저장되어야 할지를 가리키며 추가적으로 저장되는 로그의 포맷을 사용자에 의해 지정을 할 수가 있다. 이전에는 CLF(Common Log Format)이라 불리는 고정된 형식으로만 사용이 가능하였다. 그러나 지금은 CLF 포맷을 여러분들이 원하는 형태 즉, 필요한 정보로 맞춤 정장과도 같이 여러분들의 입맛대로 만들 수가 있는 것이다.

원하는 형태의 로그 파일을 만들기 위해서는 포맷을 지정하여야 하고, 이 역할을 'LogFormat' 지시어가 한다. 다음의 내용을 httpd.conf에서 찾아볼 수가 있을 것이다.

LogFormat "%h %l %u %t \"%r\" %>s %b" common

이 뜻은 인용 부호 "'' 안의 로그 포맷을 "common"의 이름으로 만드는 것이다. 각 문자들이 나타내는 것은 특정 정보를 의미하며, 기술한 순서에 따라 로그 파일에 기록된다. 로그 포맷으로 사용 가능한 변수와 이에 대한 의미는 다음 표와 같다.

포맷 의미
%a 원격지 IP 주소
%A 로컬 IP 주소
%B HTTP 헤더를 제외하고 전송된 바이트
%b

HTTP 헤더를 제외하고 전송된 바이트. CLF 포맷에서는 전송된 것이 없을 경우 0으로 표시하기 보다는'-'로 표시한다.

%{FOOBAR}e 서버에 의해 지정된 환경변수
%f 파일 이름
%h 원격지 호스트
%H 요청한 프로토콜
%{Foobar}i Foobar의 내용 : 클라이언트에서 서버로 요청된 헤더라인으로 예를 들자면, Referer 헤더일 경우 %{Referer}i로 사용되어 진다.
%l 원격지 사용자 이름(이것이 사용되어 지기 위해서는 IdentityCheck가 반드시 enable 되어져 있어야 한다.)
%m 요청 방식
%{Foobar}o 서버에서 응답되는 HTTP 헤더. 예를 들면 : %{Content-Type}o, %{Last-Modified}o

%p

요청을 처리하는 서버의 참조적인 포트
%P 현 요청을 처리하고 있는 아파치 자식 프로세서의 프로세스 ID
%q 쿼리 문자열(쿼리가 있을 경우 "?" 뒤로 쿼리문이 포함되며 그렇지 않을 경우 공백으로 처리된다.)
%r HTTP 메소드를 포함한 요청의 첫 라인
%s HTTP 상태 코드. 만약 클라이언트의 요청이 내부적인 리다이렉트를 발생시켰을 경우 %s는 초기 요청을 상태 코드를 %>s는 최종 상태 코드를 포함하게 된다. 일반저긍로 %s의 사용 보다는 %>s가 유용하다.
%t 요청한 시간과 날짜(standard english format)
%{format}t strftime() function을 이용한 포맷 형식에 따른 시간
[Day/Month/Year:Hours:Minutes:Seconds Time Zone]
%T 요청을 처리하는데 걸린 시간(초)
%u 인증이 요청된 원격 사용자 이름
%U 요청된 URL
%v 요청을 처리하는 서버의 참조적인 서버 이름
%V UseCannoicalName 설정에 따른 서버 이름

여기서 많이 쓰이지 않는 'ident'와 'authuser' 필드는 제거하여 로그 파일에 기록되지 않게 할 수도 있으며, 다음과 같이 에이전트와 참조 로그를 한 로그 파일에 만드는 것도 가능하다.

LogFormat "%h %l %u %t \" %r\" %>s %b \" %{Referer}i\" \" %{User-Agent}i\"  " combined

이와 같이 로그 포맷에 대해서 알아보았는데, 이외에 다른 방법들은 없을까? 'CustomLog'와 'LogFormat'을 이용한 효율적이고도 다양한 방법들로는 무엇이 있는지 함께 알아보도록 하자.

때 로는 HTTP의 각 상태코드 별로 로그를 취합하여 효율적인 분석이 필요한 경우도 있다. 이럴 경우에는 %와 변수 사이에 HTTP 상태 코드를 집어넣어 해당하는 이벤트가 발생하는 경우에 로그를 남길 수 있다. 예를 들어, 잘못된 링크만을 따로 저장하고 할 때에는

LogFormat %404{Referer}i BrokenLinks
CustomLog /usr/local/apache/logs/broken_links BrokenLinks

와 같이 사용하면 된다. 최근에는 멀티미디어 서비스 및 이미지의 사용이 많아지고 있는 추세로 로그 파일에 많은 양의 데이터가 쌓이고 있다. 이에 대한 해결책으로는 아파치의 'mod_setenvif' 모듈을 이용하는 것으로서 방안을 제시해 주고 있다.

(a) SetEnvIf Request_URI \.gif$ gif-image
(b) CustomLog gif-requests.log common env=gif-image
(c) CustomLog nongif-requests.log common env=!gif-image
(d) LogFormat "%h %l %u %t \" %r\" %>s %b" common
(e) SetEnvIf Request_URI \.gif$ image=gif
(f) SetEnvIf Request_URI \.$ image=jpg
(g) CustomLog logs/access_log common env=!image


(a) - (c) 까지는 gif 이미지를 gif-requests.log에, 그 이외의 것은 nongif-requests.log에 저장 하는 것이며, 나머지 (d) - (g)는 CLF 포맷으로 이미지 파일인 gif를 제외한 로그를 access_log에 남기라는 의미이다.

SetEnvIf Referer www\.test\.net apache_site_referral


www.Test.net 을 통해서 들어오게 되면 apache_site_referral 변수를 설정하여 로그를 남길 수도 있다. 한 가지 주의할 점은 SetEnvIf[NoCase]에 의한 환경 변수의 지정은 CustomLog와 같이 변수를 이용한 저장일 경우에는 CustomLog 지시어 전에 설정되어 있어야 한다.

지금까지 여러 다양한 방법의 사용을 알아보았다. 마지막으로 가상 호스트를 많이 운영하는 분들을 위하여 여러 개의 로그 파일을 하나의 파일로 만드는 방법을 보자.

LogFormat "%v [%A:%p] -> %h %l %u %t \" %r\" %>s %b" virtualhost
CustomLog logs/access_log virtualhost

이 것은 기본 로그 포맷 앞에 "canonical name"과 IP 주소, 포트 번호를 나타내는 추가적인 정보가 더 기술되어 있다. 이러한 방식을 통한 운영은 OS 특성상 동시에 파일을 열 수 있는 개수의 제한 등으로 인하여 모든 가상 호스트마다 개별적인 로그 파일을 만들어 줄 수 없을 때 사용할 수가 있다.
"Applicaton" 카테고리의 다른 글
  • 아파치를 기반으로 한 웹 로그 분석 - 3. 에러 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 2. 접속 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 1. 웹 로그... (0)2007/07/16
  • 애플리케이션의 구현 및 분산 프로세스를 자동화하기 (0)2007/05/04
  • RPM으로 패키지 관리하기 (0)2007/05/04
2007/07/19 10:00 2007/07/19 10:00
Posted by webdizen
Tags log, 로그 분석, 아파치, 접속 로그
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3082

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Develop2007/07/19 08:34

A Simple Makefile Tutorial

출처 : http://palantir.swarthmore.edu/maxwell/ ··· tutor%2F

Makefiles are a simple way to organize code compilation. This tutorial does not even scratch the surface of what is possible using make, but is intended as a starters guide so that you can quickly and easily create your own makefiles for small to medium-sized projects.

A Simple Example

Let's start off with the following three files, hellomake.c, hellofunc.c, and hellomake.h, which would represent a typical main program, some functional code in a separate file, and an include file, respectively.

hellomake.c hellofunc.c hellomake.h
#include 

int main() {
// call a function in another file
myPrintHelloMake();

return(0);
}
#include 
#include

void myPrintHelloMake(void) {

printf("Hello makefiles!\n");

return;
}
/*
example include file
*/

void myPrintHelloMake(void);

Normally, you would compile this collection of code by executing the following command:

gcc -o hellomake hellomake.c hellofunc.c -I.

This compiles the two .c files and names the executable hellomake. The -I. is included so that gcc will look in the current directory (.) for the include file hellomake.h. Without a makefile, the typical approach to the test/modify/debug cycle is to use the up arrow in a terminal to go back to your last compile command so you don't have to type it each time, especially once you've added a few more .c files to the mix.

Unfortunately, this approach to compilation has two downfalls. First, if you lose the compile command or switch computers you have to retype it from scratch, which is inefficient at best. Second, if you are only making changes to one .c file, recompiling all of them every time is also time-consuming and inefficient. So, it's time to see what we can do with a makefile.

The simplest makefile you could create would look something like:

Makefile 1
hellomake: hellomake.c hellofunc.c
gcc -o hellomake hellomake.c hellofunc.c -I.

If you put this rule into a file called Makefile or makefile and then type make on the command line it will execute the compile command as you have written it in the makefile. Note that make with no arguments executes the first rule in the file. Furthermore, by putting the list of files on which the command depends on the first line after the :, make knows that the rule hellomake needs to be executed if any of those files change. Immediately, you have solved problem #1 and can avoid using the up arrow repeatedly, looking for your last compile command. However, the system is still not being efficient in terms of compiling only the latest changes.

One very important thing to note is that there is a tab before the gcc command in the makefile. There must be a tab at the beginning of any command, and make will not be happy if it's not there.

In order to be a bit more efficient, let's try the following:

Makefile 2
CC=gcc
CFLAGS=-I.

hellomake: hellomake.o hellofunc.o
$(CC) -o hellomake hellomake.o hellofunc.o -I.

So now we've defined some constants CC and CFLAGS. It turns out these are special constants that communicate to make how we want to compile the files hellomake.c and hellofunc.c. In particular, the macro CC is the C compiler to use, and CFLAGS is the list of flags to pass to the compilation command. By putting the object files--hellomake.o and hellofunc.o--in the dependency list and in the rule, make knows it must first compile the .c versions individually, and then build the executable hellomake.

Using this form of makefile is sufficient for most small scale projects. However, there is one thing missing: dependency on the include files. If you were to make a change to hellomake.h, for example, make would not recompile the .c files, even though they needed to be. In order to fix this, we need to tell make that all .c files depend on certain .h files. We can do this by writing a simple rule and adding it to the makefile.

Makefile 3
CC=gcc
CFLAGS=-I.
DEPS = hellomake.h

%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)

hellomake: hellomake.o hellofunc.o
gcc -o hellomake hellomake.o hellofunc.o -I.

This addition first creates the macro DEPS, which is the set of .h files on which the .c files depend. Then we define a rule that applies to all files ending in the .o suffix. The rule says that the .o file depends upon the .c version of the file and the .h files included in the DEPS macro. The rule then says that to generate the .o file, make needs to compile the .c file using the compiler defined in the CC macro. The -c flag says to generate the object file, the -o $@ says to put the output of the compilation in the file named on the left side of the :, the $< is the first item in the dependencies list, and the CFLAGS macro is defined as above.

As a final simplification, let's use the special macros $@ and $^, which are the left and right sides of the :, respectively, to make the overall compilation rule more general. In the example below, all of the include files should be listed as part of the macro DEPS, and all of the object files should be listed as part of the macro OBJ.

Makefile 4
CC=gcc
CFLAGS=-I.
DEPS = hellomake.h
OBJ = hellomake.o hellofunc.o

%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)

hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS)

So what if we want to start putting our .h files in an include directory, our source code in a src directory, and some local libraries in a lib directory? Also, can we somehow hide those annoying .o files that hang around all over the place? The answer, of course, is yes. The following makefile defines paths to the include and lib directories, and places the object files in an obj subdirectory within the src directory. It also has a macro defined for any libraries you want to include, such as the math library -lm. This makefile should be located in the src directory. Note that it also includes a rule for cleaning up your source and object directories if you type make clean. The .PHONY rule keeps make from doing something with a file named clean.

Makefile 5
IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

LIBS=-lm

_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)

hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~

So now you have a perfectly good makefile that you can modify to manage small and medium-sized software projects. You can add multiple rules to a makefile; you can even create rules that call other rules. For more information on makefiles and the make function, check out the GNU Make Manual, which will tell you more than you ever wanted to know (really).

"Develop" 카테고리의 다른 글
  • Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현 (0)2007/12/23
  • Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)2007/11/27
  • A Simple Makefile Tutorial (0)2007/07/19
  • 세마포어의 사용 (0)2007/05/14
  • cvs를 이용한 프로젝트 관리 (2)2007/05/14
2007/07/19 08:34 2007/07/19 08:34
Posted by webdizen
Tags gcc, Makefile
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3081

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/System2007/07/18 21:58

Linux / Unix Command: signal

출처 :http://linux.about.com/od/commands/l/blcmdl7_signal.htm

NAME

signal - list of available signals

DESCRIPTION

Linux supports both POSIX reliable signals (hereinafter "standard signals") and POSIX real-time signals.

Standard Signals

Linux supports the standard signals listed below. Several signal numbers are architecture dependent, as indicated in the "Value" column. (Where three values are given, the first one is usually valid for alpha and sparc, the middle one for i386, ppc and sh, and the last one for mips. A - denotes that a signal is absent on the corresponding architecture.)

The entries in the "Action" column of the table specify the default action for the signal, as follows:

Term
Default action is to terminate the process.
Ign
Default action is to ignore the signal.
Core
Default action is to terminate the process and dump core.
Stop
Default action is to stop the process.

First the signals described in the original POSIX.1 standard.

SignalValueActionComment







or death of controlling process
SIGINT 2TermInterrupt from keyboard
SIGQUIT 3CoreQuit from keyboard
SIGILL 4CoreIllegal Instruction
SIGABRT 6CoreAbort signal from abort(3)
SIGFPE 8CoreFloating point exception
SIGKILL 9TermKill signal
SIGSEGV11CoreInvalid memory reference
SIGPIPE13TermBroken pipe: write to pipe with no readers
SIGALRM14TermTimer signal from alarm(2)
SIGTERM15TermTermination signal
SIGUSR130,10,16TermUser-defined signal 1
SIGUSR231,12,17TermUser-defined signal 2
SIGCHLD20,17,18IgnChild stopped or terminated
SIGCONT19,18,25
Continue if stopped
SIGSTOP17,19,23StopStop process
SIGTSTP18,20,24StopStop typed at tty
SIGTTIN21,21,26Stoptty input for background process
SIGTTOU22,22,27Stoptty output for background process

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

Next the signals not in the POSIX.1 standard but described in SUSv2 and SUSv3 / POSIX 1003.1-2001.

SignalValueActionComment




SIGPOLL
TermPollable event (Sys V). Synonym of SIGIO
SIGPROF27,27,29TermProfiling timer expired
SIGSYS12,-,12CoreBad argument to routine (SVID)
SIGTRAP5CoreTrace/breakpoint trap
SIGURG16,23,21IgnUrgent condition on socket (4.2 BSD)
SIGVTALRM26,26,28TermVirtual alarm clock (4.2 BSD)
SIGXCPU24,24,30CoreCPU time limit exceeded (4.2 BSD)
SIGXFSZ25,25,31CoreFile size limit exceeded (4.2 BSD)

Up to and including Linux 2.2, the default behaviour for SIGSYS, SIGXCPU, SIGXFSZ, and (on architectures other than SPARC and MIPS) SIGBUS was to terminate the process (without a core dump). (On some other Unices the default action for SIGXCPU and SIGXFSZ is to terminate the process without a core dump.) Linux 2.4 conforms to the POSIX 1003.1-2001 requirements for these signals, terminating the process with a core dump.

Next various other signals.

SignalValueActionComment




SIGEMT7,-,7Term
SIGSTKFLT-,16,-TermStack fault on coprocessor (unused)
SIGIO23,29,22TermI/O now possible (4.2 BSD)
SIGCLD-,-,18IgnA synonym for SIGCHLD
SIGPWR29,30,19TermPower failure (System V)
SIGINFO29,-,-
A synonym for SIGPWR
SIGLOST-,-,-TermFile lock lost
SIGWINCH28,28,20IgnWindow resize signal (4.3 BSD, Sun)
SIGUNUSED-,31,-TermUnused signal (will be SIGSYS)

(Signal 29 is SIGINFO / SIGPWR on an alpha but SIGLOST on a sparc.)

SIGEMT is not specified in POSIX 1003.1-2001, but neverthless appears on most other Unices, where its default action is typically to terminate the process with a core dump.

SIGPWR (which is not specified in POSIX 1003.1-2001) is typically ignored by default on those other Unices where it appears.

SIGIO (which is not specified in POSIX 1003.1-2001) is ignored by default on several other Unices.

Real-time Signals

Linux supports real-time signals as originally defined in the POSIX.4 real-time extensions (and now included in POSIX 1003.1-2001). Linux supports 32 real-time signals, numbered from 32 (SIGRTMIN) to 63 (SIGRTMAX). (Programs should always refer to real-time signals using notation SIGRTMIN+n, since the range of real-time signal numbers varies across Unices.)

Unlike standard signals, real-time signals have no predefined meanings: the entire set of real-time signals can be used for application-defined purposes. (Note, however, that the LinuxThreads implementation uses the first three real-time signals.)

The default action for an unhandled real-time signal is to terminate the receiving process.

Real-time signals are distinguished by the following:

1.
Multiple instances of real-time signals can be queued. By contrast, if multiple instances of a standard signal are delivered while that signal is currently blocked, then only one instance is queued.
2.
If the signal is sent using sigqueue(2), an accompanying value (either an integer or a pointer) can be sent with the signal. If the receiving process establishes a handler for this signal using the SA_SIGACTION flag to sigaction(2) then it can obtain this data via the si_value field of the siginfo_t structure passed as the second argument to the handler. Furthermore, the si_pid and si_uid fields of this structure can be used to obtain the PID and real user ID of the process sending the signal.
3.
Real-time signals are delivered in a guaranteed order. Multiple real-time signals of the same type are delivered in the order they were sent. If different real-time signals are sent to a process, they are delivered starting with the lowest-numbered signal. (I.e., low-numbered signals have highest priority.)

If both standard and real-time signals are pending for a process, POSIX leaves it unspecified which is delivered first. Linux, like many other implementations, gives priority to standard signals in this case.

According to POSIX, an implementation should permit at least _POSIX_SIGQUEUE_MAX (32) real-time signals to be queued to a process. However, rather than placing a per-process limit, Linux imposes a system-wide limit on the number of queued real-time signals for all processes. This limit can be viewed (and with privilege) changed via the /proc/sys/kernel/rtsig-max file. A related file, /proc/sys/kernel/rtsig-max, can be used to find out how many real-time signals are currently queued.

CONFORMING TO

POSIX.1

SEE ALSO

kill(1), kill(2), setitimer(2), sigaction(2), signal(2), sigprocmask(2), sigqueue(2)
"System" 카테고리의 다른 글
  • ASCII Code의 CRLF 제거 방법 (0)2009/09/04
  • Linux / Unix Command: signal (0)2007/07/18
  • 시스템 관리자를 위한 기초 명령어 활용법 (0)2007/06/22
  • 프로세스정보 얻어오기 (0)2007/05/14
  • 여러 가지 설정으로 공격으로부터 시스템을 안전하... (0)2007/05/10
2007/07/18 21:58 2007/07/18 21:58
Posted by webdizen
Tags Linux, Signal, Unix
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3080

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/Applicaton2007/07/16 14:29

아파치를 기반으로 한 웹 로그 분석 - 1. 웹 로그 분석의 개요

출처 : 시스템 로그 분석 (해킹 피해와 보안 추적의 결정적 파일) - 안정철 지음
(안정철 님에게 책 내용에 대해 발췌하는 것에 대해서 허락을 구하지 못하였습니다. 삭제를 요구하시면 바로 삭제 조취 하겠습니다.)


Session 01. 웹 로그 분석의 개요

인터넷의 대중화로 한 기업의 이미지를 대표함과 동시에 기업의 생존전략 도구로서 필수불가결한 것 중의 하나가 바로 사용자에게 실질적인 서비스를 제공해 주고 있는 웹 서버이다. 더욱이 시간이 흐르면서 지금의 상황에 반문이라도 하듯이 늘어나고 있는 방대한 양의 컨텐츠와 멀티미디어 서비스 등으로 인하여 인터넷에서의 웹 서버 역할은 날로 중요해지고 있다.

웹 서버를 운영하는 목적 중의 하나는 클라이언트에게 다양한 정보를 제공하는 역할을 수행하는 것이다. 그렇다면 관리자는 이러한 환경의 제공만으로 본연의 역할을 다한 것일까? 어떠한 목적으로의 운영을 결정하였는가에 따라, 이 질문에 대한 대답은 달라질것이며 필자의 입장에서는 클라이언트에게 더 나은 정보 및 환경을 제공하기 위한 방법의 하나로 웹 서버의 단순한 운영만으로는 시스템 운영자 또는 웹 마스터의 역할을 다한것이라고 생각하지 않는다.

한 예로 모 기업의 마케팅 부서 담당자 입장에서 생각해보면, 마케팅 담당자는 그 기업의 생산 계획에서 판매 계획에 이르기까지 전 과정을 체크해야 한다. 여기에 웹 사이트를 이용한 제품 및 여러 가지 홍보 등은 결코 빠질 수 없는 중요한 광고매체로 인식되고 있으며, 대부분의 담당자들은 웹사이트에 기록된 일종의 가공되지 않은 데이터를 원하지는 않을 것이다.

웹사이트를 방문한 사용자들의 정보가 필요로 하는 것에 따라 한눈에 파악하기 쉽도록 만들어지고, 많은 유용한 정보들을 포함하도록 한다면 곧 이러한 정보와 전통적인 데이터들의 통합된 정보는 마케팅적인 면에서 큰 장점을 가지고 있다는 것은 굳이 언급하지 않아도 알 수 있다. 효과적인 광고, 웹사이트에서의 방문자 행동, 구매비율과 같이 총체적으로 이미 분석된 정보를 활용할 수가 있다. 이러한 모든 것들이 현재의 마케팅의 이해와 함께 웹사이트의 분석에 마케팅적으로 이용될 수 있는 부분으로 시장에서 새로운 비즈니스로서 성장하고 있다.

웹 서버의 로그 파일은 초기에 문제의 진단 및 처리량 등의 파악에 이용될 목적으로 디자인되었으나, 지금과 같이 웹사이트의 성능 개선 및 다양한 곳에 이용되리라고는 예상하지 못했다. 현 상에서의 이와 같은 모든 로그 정보들이 웹사이트 운영에 중요한 정보로서 자리매김하였으며, 이는 단순히 접속되는 데이터로 모든 방문객과 모든 페이지에 대해 기록할 수 있게 하여 웹사이트 내에 누군지는 모르지만 수많은 방문객에 관계없이 웹 서버는 바쁘게 움직이고 있다. 이제 필자가 여러분들과 함께 웹 로그의 중요성을 설명한 만큼 아파치 웹 서버에서 제공하는 로그의 이해에 기본을 두고 방문자 정보 분석에 첫 발걸음을 내딛어보자!

01. 어떠한 정보를 이용할 수 있을까?
시작하기에 앞서 여러분들은 웹 서버에서 제공하는 정보로는 어떠한 것이 가능한지 알아야 한다. 아파치 웹 서버는 클라이언트가 요청하는 모든 정보를 로그 파일에 기록하게 되고, 기록된 여러 다양한 정보는 다음을 포함하여 분석을 하게 된다.

1. 원격접근 호스트의 주소
이것은 "누가 나의 웹사이트를 방문했는가" 와도 비슷하다고 할 수 있다. 좀 더 자세히 말하자면, 방문자가 어디에서 접속했는지를 말해준다.

2. 방문횟수 및 시간
방문자가 얼마나 자주 웹사이트를 방문했는가를 알려준다. 주로 오전 9시부터 오후 6시까지의 업무시간 사이에 많은 방문이 이루어진다고 생각할 수 있고, 그렇지 않은 이외의 시간은 집에서의 접속으로 추정할 수가 있다.

3. 요청한 웹 서버의 자원
사이트에서 가장 인기 있는 페이지는 어디일까? 클라이언트가 요청한 자원의 정보를 기록하여 운영자는 어느 부분이 가장 인기 있는 부분이며, 또 그렇지 않은 부분을 판별할 수가 있다.

4. 방문자의 운영체제(Operating System), 브라우저 그리고 브라우저 버전
여러분들의 사이트를 방문하는 사용자가 Mac 또는 PC를 이용한 접속이 몇 %나 될까? 또는 넷스케이프, 인터넷 익스플로러를 이용한 퍼센트는 기본 정보 이외의 'User Agent'정보를 이용하여 방문자의 부가적인 정보를 얻을 수 있다. 위와 같은 정보들은 정확하지 않을 수도 있으나, 완벽히 신뢰하지 못할 만큼은 아니다. 이 뜻은 웹 서버의 로그 자료에만 너무 의존하지 말아야 한다는 점이다. 어떤 페이지에 어느 정도의 사용자가 방문했는지 정확히 알ㄹ줄 수 있을까? 물론 수치상으로 기록된 정보로는 그렇지만, 프록시 캐쉬 등을 이용한 경우에는 웹 서버에 직접적으로 접근하지 않으므로 로그에 기록되지 않을 수가 있다.

비록 이러한 데이터들이 정확하지 않더라도 여러분들의 사이트를 얼마나 방문하는지 등의 대략적인 정보로 사용할 수가 있기 때문에 웹 서버의 로그 파일이 중요한 역할을 한다는 것은 의심할 여지가 없다.

02. 로그 파일은 어떻게 작동되나?
매 시간 웹사이트의 모든 정보는 웹 서버에 의해 파일로 기록된다. 아파치 웹 서버는 이 정보를 접속 로그, 에러 로그 등으로 불리는 다양한 형태로 저장한다. 로그 파일에는 어느 시간에 어떤 페이지를 요청했는지의 기록뿐만 아니라, 클라이언트가 요청한 것에 대한 추가적인 여러 유용한 정보들이 존재한다. 아파치를 설치하면 기본적으로 두개의 파일이 쓰이며, 이중의 하나는 access_log이고, 다른 하나는 error_log이다.

이 파일들은 아파치의 기본 설치에 따라 '/usr/local/apache/logs'에 위치하게 되며, 설정 파일을 통해 로그 파일의 위치는 변경이 가능하다. 이전의 버전에서는 로그 파일이 내용에 따라 다음과 같이 두 가지로 나누어져 있었으나, 현재의 1.3.x에서는 차후 설명할 mod_log_config에 따라 통합적인 방법의 사용이 가능하였다.

  • 접속로그
  • 에러 로그

접속 로그는 웹 서버로부터 전송되는 정보가 기록되는 것으로 여러 페이지 중의 하나를 방문한 사용자가 어떤 링크를 통하여 혹은 배너를 통하여 접속하게 되었는지의 정보 등을 알 수 있다. 이러한 정보는 여러분들이 방문자의 관심 사항을 간접적으로나마 파악할 수 있게 한다.

아울러 온라인 광고를 하는 경우 이 정보를 이용하여 어느 사이트에 배너 광고를 해야 효율적인가를 결정할 수 있고 더불어 기업의 입장에서는 어떠한 사이트와 좋은 관계를 유지해야 하는가의 판별력에도 도움을 줄 것이다. 클라이언트가 사용한 브라우저에 대한 정보를 에이전트 로그에 기록되며, 웹 서버 운영상에 나타나는 에러 또는 CGI 스크립트 실행 시 발생되는 문제점은 에러 로그 파일에 쓰여진다.

"Applicaton" 카테고리의 다른 글
  • 아파치를 기반으로 한 웹 로그 분석 - 3. 에러 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 2. 접속 로... (0)2007/07/19
  • 아파치를 기반으로 한 웹 로그 분석 - 1. 웹 로그... (0)2007/07/16
  • 애플리케이션의 구현 및 분산 프로세스를 자동화하기 (0)2007/05/04
  • RPM으로 패키지 관리하기 (0)2007/05/04
2007/07/16 14:29 2007/07/16 14:29
Posted by webdizen
Tags 로그 분석, 아파치, 웹 로그
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3075

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux2007/07/11 00:11

리눅스 명령어

출처 : http://www.mireene.com/webimg/linux_tip1.htm

■ 퍼미션(권한)이란?

Owner

Group

Other

Owner와 Group은 파일소유자자신과 자신이 속한그룹. Other은 제3자, 웹사이트 방문객은 제3자로 nobody로 취급.

r

w

x

r

w

x

r

w

x

r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1)

7

5

5

파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만, 제3자는 읽고 실행만 시킬 수 있다.

7

7

7

제3자도 쓰기 권한이 주어진다.

*.html  *.cgi, *.pl *.txt등의 파일은 업로드시 반드시 ascii로 하고 나머지 그림(*.gif *.jpg)이나 자바 애플릿(*.class), 실행파일(*.exe *.zip *.rar)등은 binary mode로 업로드 할 것.

■ 리눅스 기본명령어

명령어

사 용 법

login

사용자 인증과정

리눅스 시스템은 기본적으로 multi-user 개념에서 시작하였기 때문에 시스템을 이용하기 위해서는 반드시 로그인을 하여야 합니 다. 로그인은 PC 통신에서도 많이 사용되어져 왔기 때문에 그 개 념  설정에 그다지 어려움이 없을 것입니다. 흔히 말하는 ID를 입력하는 과정입니다. 

passwd

패스워드 변경

리눅스, 특히 인터넷의 세계에서는 일반 컴퓨팅 상황에 비하여 훨씬 해킹에 대한 위험이 높습니다. 패스워드는 완성된 단어 보다는 단어 중간에 숫자나 키보드의 ^, #, ' 등과 같은 쉽게 연상 할 수 없는 기호를 삽입하여 만들어 주는 것이 좋습니다

du

하드사용량 체크(chkdsk)

자신의 하드공간을 알려면
# du
특정 디렉토리의 사용량을 알려면
# du -s diretory_name

ls

파일 리스트 보기(dir)

F : 파일 유형을 나타내는 기호를 파일명 끝에 표시
   (디렉토리는 '/', 실행파일은 '*', 심볼릭 링크는 '@'가 나타남).
l  : 파일에 관한 상세 정보를 나타냅니다.
a : dot 파일(.access 등)을 포함한 모든 파일 표시.
t  : 파일이 생성된 시간별로 표시
C : 도스의 dir/w명령과 같 이 한줄에 여러개의 정보를 표시
R : 도스의 dir/s 명령과 같이 서브디렉토리 내용까지.

(예)
# ls -al  
# ls -aC
# ls -R

cd

디렉토리를 변경

# cd cgi-bin     : 하부 디렉토리인 cgi-bin으로 들어감.
# cd  ..             : 상위디렉토리로 이동
# cd 또는 cd ~  : 어느곳에서든지 자기 홈디렉토리로 바로 이동
# cd /webker     : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
                         아닌 다른 디렉토리(webker)로 이동하려면 /로
                         시작해서 경로이름을 입력하면 된다.

cp

화일 복사(copy)

# cp index.html index.old
    : index.html 화일을 index.old 란 이름으로 복사.

# cp /home/test/*.*  .
    : test 디렉토리내의 모든 화일을 현 디렉토리로 복사.

mv

파일이름(rename) / 위치(move)변경

# mv index.htm index.html
    : index.htm 화일을 index.html 로 이름 변경

$ mv file  ../main/new_file
    : 파일의 위치변경

mkdir

디렉토리 생성

# mkdir download  : download 디렉토리 생성

rm

화일삭제

# rm test.html : test.html 화일 삭제
# rm -r <디렉토리> : 디렉토리 전체를 삭제
# rm -i a.*
    : a로 시작하는 모든 파일을 일일이 삭제할 것인지 확인하면서 삭제

rmdir

디렉토리 삭제

# rmdir cgi-bin : cgi-bin 디렉토리 삭제

pwd

현재의 디렉토리 경로를 보여주기

pico

리눅스용 에디터

put

ftp 상태에서 화일 업로드

> put  guestbook.tar.gz

get

ftp 상태에서 화일 다운로드

> get  guestbook.tar.gz

mput 또는 mget

여러개의 화일을 올리고 내릴때 (put,get과 사용법동일)

chmod

화일 permission 변경

리눅스에서는 각 화일과 디렉토리에 사용권한을 부여.

예) -rwxr-xr-x   guestbookt.html
rwx  :처음 3개 문자 = 사용자 자신의 사용 권한
r-x  :그다음 3개 문자 = 그룹 사용자의 사용 권한
r-x  :마지막 3개 문자 = 전체 사용자의 사용 권한

읽기(read)---------- 화일 읽기 권한
쓰기(write)---------- 화일 쓰기 권한
실행(execution)---------- 화일 실행 권한
없음(-)---------- 사용권한 없음

명령어 사용법
chmod [변경모드] [파일]

# chmod 666  guestbook.html
    : test.html 화일을 자신에게만 r,w,x 권한을 줌

# chmod 766  guestbook.html
    : 자신은 모든 권한을 그룹사용자와,전체사용자에게는
      읽기와 쓰기 권한만 줌

alias

" doskey alias" 와 비슷하게 이용할 수 있는 쉘 명령어 alias는 말그대로 별명입니다. 사용자는 alias를 이용하여 긴 유 닉스 명령어를 간단하게 줄여서 사용할 수도 있습니다.
이들 앨리어스는 [alias ls 'ls -al'] 같이 사용하시면 되는데, 한 번 지정한 alias를 계속해서 이용하시려면, 자신의 홈디렉토리에 있는
.cshrc(Hidden 속성)을 pico등의 에디터를 이용하여 변경시 키면 됩니다.

cat

파일의 내용을 화면에 출력하거나 파일을 만드는 명령( 도스의 TYPE명령)

# cat filename

more

cat 명령어는 실행을 시키면 한 화면을 넘기는 파일일 경우 그 내용을 모두 볼수가 없다. 하지만 more 명령어를 사용하면 한 화면 단위로 보여줄 수 있어 유용.

# more <옵션>
옵션은 다음과 같습니다.

Space bar : 다음 페이지
Return(enter) key : 다음 줄
v : vi 편집기로 전환
/str : str 문자를 찾음
b : 이전 페이지
q : more 상태를 빠져나감
h : 도움말
= : 현재 line number를 보여줌

who

현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.

# who

whereis

소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다

# whereis perl : perl의 위치를 알려준다

vi,
touch,
cat

새로운 파일을 만드는 방법

# vi newfile :  vi 편집기 상태로 들어감
# touch newfile : 빈 파일만 생성됨
# cat > newfile  : vi 편집기 상태로 들어감, 문서 작성후 Ctrl+D로 빠져나옴

cat,
head,
tail

파일 내용만 보기

# cat filename         : 파일의 내용을 모두 보여줌
# head -n filename : n줄 만큼 위세서부터 보여줌
# tail -n filename     : n줄 만큼 아래에서부터 보여줌


■ 압축명령어 사용법

압축 명령어

사 용 법

tar .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
(압축파일이 아님)

# tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을때
# tar xvf [파일명(.tar, _tar)]  :  풀 때
  (cf) cvfp/xvfp 로 하면 퍼미션 부동
compress 확장자 .Z 형태의 압축파일 생성

# compress    [파일명]     : 압축시
# uncompress [파일명]    : 해제시
gzip 확장자 .gz, .z 형태의 압축파일 생성

#  gzip     [파일명]    : 압축시
#  gzip -d [파일명]   : 해제시
기타 .tar.Z
이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음,
다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
아니면 다음과 같이 한 번에 풀 수도 있다.
# zcat  [파일명].tar.Z  : 해제시

.tar.gz또는 .tar.z
# gzip -cd [파일명]    : 해제시

.tar.gz 또는 .tar.z .tgz
gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나,
하지만 다음과 같이 하면 한 번에 처리를 할 수 있다.

# gzip -cd 파일.tar.gz | tar xvf -  또는
# tar xvzf 파일.tar.gz
# tar xvzf 파일.tgz

■ 리눅스 필수명령어

Linux/Unix 명령어

설 명

MS-DOS 비교

./x

x 프로그램 실행
(현재 디렉토리에 있는 것)

x

↑/ ↓

이전에(↑) / 다음에(↓) 입력했던 명령어

doskey

cd x (또는 cd /x)

디렉토리 X로 가기

cd

cd .. (또는 cd ../ 또는 cd /..)

한 디렉토리 위로 가기

cd..

x 다음 [tab] [tab]

x 로 시작하는 모든 명령어 보기

-

adduser

시스템에 사용자 추가

/

ls (또는 dir)

디렉토리 내부 보여주기

dir

cat

터미널 상의 텍스트 파일 보기

type

mv x y

파일 x를 파일 y로 바꾸거나 옮기기

move

cp x y

파일 x를 파일 y로 복사하기

copy

rm x

파일 지우기

del

mkdir x

디렉토리 만들기

md

rmdir x

디렉토리 지우기

rd

rm -r x

디렉토리 x를 지우고 하위도 다 지우기

deltree

rm p

패키지 지우기

-

df (또는 df x)

장치 x의 남은 공간 보여주기

chkdsk ?

top

메모리 상태 보여주기(q는 종료)

mem

man x

명령어 x에 관한 매뉴얼 페이지 얻기

/

less x

텍스트 파일 x 보기
(리눅스에서는 더 많은 필터 적용 가능)

type x | more

echo

어떤 것을  echo 화면에 인쇄한다.

echo

mc

UNIX를 위한 노턴 커맨더

nc

mount

장치 연결(예: CD-ROM, 연결을 해제하려면 umount)

-

halt

시스템 종료

-

reboot ([ctrl] + [alt] +[del])

시스템  다시 시작하기

[ctrl] + [del] + [del]

■ 고급명령어

고급 명령어

chmod <권한> <파일>

파일 권한(permissions) 변경

ls -l x

파일 x의 자세한 상황을 보여줌

ln -s x y

x에서 y로 심볼릭 링크를 만들어 줌

find x -name y -print

디렉토리 x안에서 파일 y를 찾아서 화면에 그 결과를 보여줌

ps

지금 작동중인 모든 프로세스들을 보여줌

kill x

프로세스 x를 종료 (x는 ps 명령으로 알 게 된 PID)

[alt] + F1 - F7

터미널 1-7까지 바꾸기 (텍스트 터미널에서; F7은 X-윈도우(시작될때))

lilo

부트 디스크를 만듦

용어


symlink

다른 파일이나 디렉토리로 심볼릭 링크. 윈도유98의 바로가기 같은 것

shell script

여러 명령어들을 차례로 수행하게 한 것. MS-DOS의 배치 파일 같은 것

"Unix & Linux" 카테고리의 다른 글
  • 리눅스 명령어 (6)2007/07/11
  • 왜 리눅스 커널을 알아야 하는가? (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ③ vim 편집기 활용법 (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ② 고급 명령과 시... (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ① 설치와 기본 명... (0)2007/05/04
2007/07/11 00:11 2007/07/11 00:11
Posted by webdizen
Tags Linux, 리눅스, 명령어
No Trackback 6 Comments

Trackback URL : http://www.webdizen.net/blog/trackback/3072

Leave your greetings.

  1. 오상우

    난 아직도 이해가 잘 안되는데, eXecute와 Read권한이 틀린점이 정확히 뭐야?
    텍스트로 스크립트파일을 만들고 chmod -x [filename] 하는거랑 eXecute권한이랑 같은건가 생각도 했는데,
    실행파일 속성을 가지고 있으면, Readable한 것 만으로 실행 되어야하는 것 아닌가?
    예를들어 권한이 001 이면[ Read(x) Write(x) eXecute(o) ] 어떻게 되는겨?
    ## 몰라서 물어보는거임 -_-

    2007/07/11 04:59 [ Permalink : Modify/Delete : Reply ]
  2. webdizen

    chmod -x [filename]을 이용하실 경우 현재 권한에서 eXecute 권한을 모두 제거하게 됩니다.
    chmod +x [filename]을 이용하실 경우 위의 경우와 반대 상황이 됩니다.
    예를 들어 제시하신 chmod 001 [filename] 을 하실 경우에는 ---------x 이런 식으로 권한이 변경됩니다.

    Read 권한, eXecute 권한의 차이점은 일반 텍스트 파일의 경우에는 Read 권한으로 읽기가 가능하니, 별 문제가 없겠지만, 실행 파일의 경우에는 eXecute 권한이 필요하답니다.

    2007/07/11 09:57 [ Permalink : Modify/Delete : Reply ]
  3. 오상우

    또다른 질문.
    1. chmod +x [filename]은 모든 사용자분류 (Owner/Group/Other)의 eXecute 권한에(3번째 비트) 대해 +1(OR연산 -_-)
    즉, 전체 퍼미션 부분에 +001001001(2) 해주는 것과 같은건지? (논리회로... 아놔 -_-)
    2. 그렇다면 텍스트 파일에 Read권한이 없고 eXecute 권한만 있으면 cat [txt-file]을 때리면 내용이 보이는지?
    (아, 요건 이따 직접 해보면 되것구나 -_-)
    3. UNIX시스템은 MS-DOS처럼 확장자에 따라(*.exe *.com *.bat 등) 실행 파일이냐 아니냐를 따지는게 아니라,
    eXecute 퍼미션이 있으면 실행을 하는 건가?
    4. HTML, PHP, Java Script처럼 서버에 텍스트 파일로 존재하고, Client의 Parser, Interpreter등으로 동작하는
    웹언어들의 경우, Client의 Read권한만 있어도 eXecute가 가능한가?
    5. 위리플의 질문 다시하는건데, Read권한이 없고 eXecute권한만 있다고 해도 실행이 가능해?

    2007/07/11 17:05 [ Permalink : Modify/Delete : Reply ]
  4. webdizen

    오상우님의 질문에 대한 답변
    1. chmod +x [filename]와 동일한 명령어는 chmod 111 [filename]에 해당합니다. 말씀하신 것과 같이 실제적인 bit는 0001001001이 됩니다.
    2. 텍스트 파일에 Read권한이 없고 eXecute 권한만 있을 경우 cat 명령어가 Permission denied 오류를 내면서 읽어지지 않습니다. 당연한 결과로 텍스트 파일에는 Read 권한이 있어야 볼 수 있는 이치죠.
    3. UNIX 시스템은 MS-DOS와 달리 확장자 개념이 없지만, 실행파일의 경우 eXecute 권한이 없으면 실행이 당연히 안된답니다.
    4. HTML, PHP, Java Script 처럼 서버에 텍스트 파일로 존재하는 파일들은 당연히 웹 언어로 작성된 텍스트 파일이라는 것을 염두하신다면 eXecute 권한이 아니라 Read 권한이 필요하다는 것을 알 수 있습니다.
    5. Read권한이 없고, eXecute 권한만 있다면, 웹 브라우저 상에서 Permission denied 오류가 발생합니다.

    2007/07/12 00:47 [ Permalink : Modify/Delete : Reply ]
  5. 후미후

    후홧 옛날 기억이 새록새록 납니다.^^ 올만에 이수안님 블로그 들려서 웃고 갑니다.

    2008/05/07 09:50 [ Permalink : Modify/Delete : Reply ]
    • webdizen

      하핫; 웃고 가신다니 저도 즐겁네요...

      2008/05/12 20:42 [ Permalink : Modify/Delete ]
[로그인][오픈아이디란?]

«Prev  1 2 3 4 5 ... 12  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • RADIUS
  • Messaging
  • SystemTray
  • 에어론 의자
  • FlashWindow
  • 강원대학교 후문
  • Lempel
  • Property
  • 돌체 리만코
  • Misc
  • BEA
  • XCANVAS
  • 장려상
  • History ComboBox
  • OPENXML
  • 논리 로그
  • GetProcAddress
  • 실체화
  • NetSH
  • 인덱스

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
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          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.