test - 화일 유형을 점검하고 값을 비교한다. 
개요
test [표현식] 
test {--help,--version} 
설명
이 맨페이지는 GNU 버전의 test 를 다룬다. 대부분의 쉘은 같은 이름, 같은 기능의 내장 명령을 지니고 있을 것이다. 
test 조건 표현식의 평가에 따라 0 (참) 또는 1 (거짓)의 상태를 반환한다. expr. 은 단항식(unary) 또는 이항식(binary)가 될 수 있다. 단항식은 보통 화일의 상태를 조사하는데 사용된다. 문자열 연산잔와 수치 비교 연산자도 있다. 


-b 화일 
만약 화일 이 존재하며 블럭 장치이며 참. 
-c 화일 
만약 화일 이 존재하고 문자 장치이면 참. 
-d 화일 
만약 화일 이 존재하고 디렉토리이면 참. 
-e 화일 
만약 화일 이 존재하면 참. 
-f 화일 
만약 화일 이 존재하고 보통의 화일이면 참. 
-g 화일 
만약 화일 이 존재하고 set-group-id 이면 참. 
-k 화일 
만약 화일 이 ``sticky'' 비트 설정을 가지고 있으면 참. 
-L 화일 
만약 화일 이 존재하고 심복릭 링크이면 참. 
-p 화일 
만약 화일 이 존재하고 명명된 파이프이면 참. 
-r 화일 
만약 화일 이 존재하고 읽기 가능이면 참. 
-s 화일 
만약 화일 이 존재하고 0 보다 큰 크기를 갖으면 참. 
-S 화일 
만약 화일 이 존재하고 소켓이면 참. 
-t [fd] 
만약 fd 가 터미널 상에서 오픈된 것이면 참. 만약 fd 가 생략되면 기본값은 1 ( 표준출력 )이다. 
-u 화일 
만약 화일 이 존재하고 set-user-id 비트 설정을 가지면 참. 
-w 화일 
만약 화일 이 존재하고 쓰기가능이면 참. 
-x 화일 
만약 화일 이 존재하고 실행가능이면 참. 
-O 화일 
만약 화일 이 존재하고 유효 사용자 ID의 소유이면 참. 
-G 화일 
만약 화일 이 존재하고 유효 그룹 ID의 소유이면 참. 
화일1 -nt 화일2
만약 화일1 이 (수정일에 의거하여) 화일2보다 최근에 생겼다면 참. 
화일1 -ot 화일2
만약 화일1 이 화일2보다 오래된 것이면 참. 
화일1 -ef 화일2
만약 화일1 과 화일2 이 같은 장치, 같은 아이노드 번호를 갖는다면 참. 
-z 문자열 
만약 문자열의 길이가 0 이면 참. 
-n 문자열 
string
문자열 의 길이가 0 이 아니라면 참. 
문자열1 = 문자열2
두 문자열이 같으면 참. 
문자열1 != 문자열2
두 문자열이 같지 않으면 참. 
! 표현식 
표현식 이 거짓이면 참. 
표현식1 -a 표현식2
표현식1 과 표현식2 가 둘 다 참이면 참. 
표현식1 -o 표현식2
표현식1 또는 표현식2 둘 중 하나라도 참이면 참. 
인수1 OP 인수2 
여기서 OP 는 다음 중 하나이다. -eq, -ne, -lt, -le, -gt, 또는 -ge. 이러한 수치 이항 연산자들은 각각 만약 인수1이 인수2보다 같거나, 같지 않거나, 작거나, 작거나 같거나, 크거나, 크거나 같을 때 참을 반환한다. 인수1 와 arg2 는 양의 정수, 음의 정수 또는 문자열 의 길이를 평가하는 -l 문자열 표현식이 될 수 있다. 

옵션
GNU test 가 단 한 개의 인수로 시작하면 다음 옵션이 인식된다: 
--help 
표준출력으로 사용법을 출력하고 정상적으로 종료한다. 
--version 
표준출력으로 버전정보를 출력하고 정상적으로 종료한다. 

번역자

이 만 용 

참조 - http://man.kldp.org/wiki/ManPage?action=ManPageIndex&sec=1

'System > Linux' 카테고리의 다른 글

zmodem  (0) 2011.01.25
TCPDUMP User Guide  (0) 2011.01.25
/dev/null  (0) 2011.01.23
/dev/zero와 /dev/null  (0) 2011.01.23
리눅스 포그라운드와 백그라운드  (0) 2011.01.23
Posted by linuxism
,

/dev/null

System/Linux 2011. 1. 23. 13:26
Shell Programming을 할 때 /dev/null을 사용하게 되면 상당히 효율적으로 out line에 대한 처리가 가능하다.

/dev/null은 standard out이든 standard err든 모든 output을 출력하고 싶지 않을 때 사용한다.

일종의 블랙홀이다. 한 번 빠져들어가면 없어져 버리는...

find / -size 1000c 2> /dev/null 이런 명령을 보았을 것이다.

2> /dev/null 은 standard err만을  출력하지 않겠다는 의미다. 때문에 이 명령이 끝나면 실제 Permission관련 에러들이 

발생해야 하는데 이러한 익셉션은 모두 블랙홀로 빠져들어가 버리게 된다.

1> /dev/null 이것은 Standard Out만을 출력하지 않겠다는 의미다. 때문에 에러만을 출력하게 된다.

> /dev/null을 하게 되면 아무것도(에러도, 일반결과물도) 출력을 하지 않게된다.

사용 용도를 보자면 다수의 필요없는 출력결과들의 양을 컨트롤 할 수 있는 명령이다.

개발시 알려진 에러를 출력을 하고 싶지 않은 익셉션이 있다면 이를 통해 제어하는 것도 가능할 것이다.

참조 - http://blog.naver.com/blubeard?Redirect=Log&logNo=80108557977

'System > Linux' 카테고리의 다른 글

TCPDUMP User Guide  (0) 2011.01.25
리눅스 test 명령어  (0) 2011.01.23
/dev/zero와 /dev/null  (0) 2011.01.23
리눅스 포그라운드와 백그라운드  (0) 2011.01.23
리눅스 시스템 종료 및 재부팅  (0) 2011.01.19
Posted by linuxism
,
참조 - http://blog.naver.com/bunny121?Redirect=Log&logNo=140009911469

/dev/zero 와 /dev/null

/dev/null의 쓰임새

/dev/null을 "블랙홀"이라고 상상해 보세요. 이 파일은 거의 읽기 전용 파일이나 마찬가집니다. 이 파일에 쓰는 모든것은 영원히 사라져 버릴겁니다. 이 파일에서 무언가를 읽으려고 하거나 어떤 결과를 바라는 것은 무의미한 일입니다. 그럼에도 불구하고, /dev/null은 명령어 줄이나 스크립트에서 아주 유용하게 쓸 수 있습니다.

표준출력이나 표준에러 막기(예 30-1에서 인용):

rm $badname 2>/dev/null
#           에러 메세지[stderr]는 완전히 사라져 버립니다.

파일 자체와 모든 퍼미션은 그대로 가지면서 내용만 지우기(예 2-1 와 예 2-2에서 인용):

cat /dev/null > /var/log/messages
#  : > /var/log/messages   라고 해도 같지만, 이렇게 하면 새 프로세스를 띄우지 않습니다.

cat /dev/null > /var/log/wtmp

로그 파일의 내용을 자동으로 비우기(상용 웹 사이트에서 보내는 귀찮은 "쿠키"를 처리할 때 특별히 좋습니다):

예 29-1. 쿠키 항아리를 숨기기

if [ -f ~/.netscape/cookies ]  # 있다면 지우고,
then
  rm -f ~/.netscape/cookies
fi

ln -s /dev/null ~/.netscape/cookies
# 이제 모든 쿠키는 디스크에 저장되지 않고 블랙홀로 보내집니다.
/dev/zero의 쓰임새

/dev/zero도 /dev/null처럼 가상 파일(pseudo file)이지만, 실제로 널 값을 갖고 있습니다(아스키 문자 0이 아닌 숫자 0). 이 파일에 무언가를 쓰면 그 출력은 사라집니다. 이 파일에서 널 값을 읽어 내는 것은 아주 어렵습니다만 od 명령어나 헥사 에디터로 할 수는 있습니다. /dev/zero는 특정한 길이의 초기화된 더미 파일을 임시 스왑 파일로 만드는데 주로 쓰입니다.

예 29-2. /dev/zero로 스왑 파일 세팅하기

#!/bin/bash

# 스왑 파일 만들기.
# 루트로 실행시키세요.

ROOT_UID=0         # 루트 $UID 는 0.
E_WRONG_USER=65    # 루트가 아님.

FILE=/swap
BLOCKSIZE=1024
MINBLOCKS=40
SUCCESS=0

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo; echo "이 스크립트는 루트만 실행시킬 수 있습니다."; echo
  exit $E_WRONG_USER
fi  
  

if [ -n "$1" ]
then
  blocks=$1
else
  blocks=$MINBLOCKS              # 명령어줄에서 지정해 주지 않으면 
fi                               # 40 블럭을 기본값으로 세트.

if [ "$blocks" -lt $MINBLOCKS ]
then
  blocks=$MINBLOCKS              # 최소 40 블럭이어야 됩니다.
fi  


echo "Creating swap file of size $blocks blocks (KB)."
dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks  # Zero out file.

mkswap $FILE $blocks             # Designate it a swap file.
swapon $FILE                     # Activate swap file.

echo "Swap file created and activated."

exit $SUCCESS

/dev/zero의 다른 응용으로는, 파일이 0으로만 이루어진 지정된 크기를 갖게 하는 것인데, 루프백 디바이스를 마운트 하는 등의 특별한 목적을 위해 쓰입니다. 예 13-6와 예 12-33를 참고하세요.

예 29-3. 램디스크 만들기

#!/bin/bash
# ramdisk.sh

#  "ramdisk" 란 시스템의 RAM 의 일정 부분(segment)을 
#+ 파일시스템처럼 쓰는 것을 말합니다.
#  램디스크의 장점은 읽고/쓰기가 아주 빠르다는데 있습니다.
#  단점: 휘발성이 있기 때문에 시스템이 리부트되거나 꺼지면 그 내용을 잃어버립니다.
#        램디스크로 할당한 만큼의 메모리를 못 쓰게 됩니다.
#
#  램디스크가 뭐가 좋을까요?
#  테이블이나 사전처럼 아주 큰 데이타를 램디스크에 올려 놓으면
#+ 디스크 접근 속도보다 메모리 접근 속도가 훨씬 빠르기 때문에 데이타 탐색 속도가 빨라집니다.


E_NON_ROOT_USER=70             # 루트로 실행.
ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk
SIZE=2000                      # 2K 블럭(필요에 따라 수정)
BLOCKSIZE=1024                 # 1K (1024 byte) 블럭 크기
DEVICE=/dev/ram0               # 첫번째 램 디바이스

username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
  echo "\"`basename $0`\" 는 루트로 실행시켜야 됩니다."
  exit $E_NON_ROOT_USER
fi

if [ ! -d "$MOUNTPT" ]         #  마운트 포인트가 존재하는지 확인해서
then                           #+ 이 스크립트를 여러번 실행시켜도 에러가 나지 않도록 함.
  mkdir $MOUNTPT              
fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # 램 디바이스 초기화(zero out).
mke2fs $DEVICE                 # 램 디스크에 ext2 파일시스템을 만들고,
mount $DEVICE $MOUNTPT         # 마운트.
chmod 777 $MOUNTPT             # 일반 사용자도 접근 가능하게.
                               # 하지만 언마운트는 루트만.

echo "이제 \"$MOUNTPT\" 를 쓸 수 있습니다."
# 이제부터는 일반사용자까지도 램디스크에 파일을 저장할 수 있습니다.

#  주의할 점은 램디스크가 휘발성을 갖기 때문에 리부트나 전원이 꺼질 때에는
#+ 그 내용이 없어집니다. 
#  저장하고 싶은 것이 있다면 램디스크가 아닌 일반 디렉토리로 복사해서 쓰면 됩니다.

# 리부트후에 램디스크를 다시 셋업하고 싶다면 이 스크립트를 실행시키면 됩니다.
#  /mnt/ramdisk 를 이 스크립트를 통하지 않고 
#+ 다른 방법으로 다시 마운트하려고 한다면 제대로 동작하지 않을 것입니다.

exit 0

'System > Linux' 카테고리의 다른 글

리눅스 test 명령어  (0) 2011.01.23
/dev/null  (0) 2011.01.23
리눅스 포그라운드와 백그라운드  (0) 2011.01.23
리눅스 시스템 종료 및 재부팅  (0) 2011.01.19
리눅스 성능 모니터링  (0) 2011.01.19
Posted by linuxism
,