Linux Gazette #24

    편역 : 포항공대 분산처리환경 연구실 권순선  
    e-mail : cessi@postech.ac.kr  
     

 

 Copyright ⓒ1996-98 Specialized Systems Consultants. Inc.
Linux Gazette is a member of the Linux Documentation Project.

 

2센트짜리 팁 몇가지

 

또 하나의 간단한 팁

    Date : Sun 30 Nov 1997 03:48:40 -0800(PST)
    From : Gary Johnson gjohnso@season.com
    이미 이 팁을 알고 있는 사람이 있을지도 모르겠는데, 아직 이 Linux Gazette에 실린 적이 없다면 실어주세요.
    사용되지 않는 가상 콘솔로 화면을 전환하면 화면에 아무 것도 나타나지 않게 되고, 키보드로도 조작할 수 없는 상태가 됩니다. 시작할 때 다음과 같이 해보십시오.

    setterm -clear > /dev/tty12

    Alt 키와 F12키를 동시에 누르거나 엑스 윈도우를 사용하고 있을 때는 Alt 키와 Ctrl 키, F12 키를 동시에 누르면 됩니다. 그 가상 콘솔(/dev/tty12)에는 로그인 프로세스가 돌아가고 있지 않기 때문에 특별히 하고 있는 일은 없습니다.

     

도스 에뮬레이터

    Date : Fri, 5 Dec 1997 00:55:55 -500
    From : Joey Hess Joey@kitenet.net
    나는 좋아하는 게임을 하기 위해서 도스 에뮬레이터를 가끔 쓰곤 합니다. 그러나 C:\>프롬프트는 정말 싫어하죠. 그래서 생각하기를 도스 에뮬레이터가 시작할 때에 특정한 명령어를 실행하도록 하고 싶어서 방법을 생각해냈습니다. 지금 보여드리는 펄 스크립트가 바로 그러한 역할을 하죠. 맨 윗부분의 주석을 잘 보세요. 도스 쪽에서 해주어야 할 일을 얘기하고 있습니다. 기본적인 아이디어는 홈 디렉토리에 dos_do.bat라는 파일을 만들어 두고 그 파일에 도스 에뮬레이터가 실행하기를 원하는 명령들을 적어준 다음, lredir을 이용해서 도스 에뮬레이터가 실행할 때에 홈 디렉토리에서 그 파일을 찾을 수 있도록 하는 것이죠.

    #!/usr/bin/perl
    # # This runs dosemu.#
    # Any parameters specified after "-" will be passed in to dosemu to be
    # run as dos commands.
    #
    # Setup : add to autoexec.emu:
    #     lredir.com h: linux\fs\$(home)
    #     if exist h:\dos_do.bat call h:\dos_do.bat#
    # GPL Copyright 1996, 1997 Joey Hess
    # Split params into dosemu parameters and dos commands.
    while ($a=shift @ARGV) {
         if ($a=~m/-/ ne undef) {last}
         $dosemu_command_line.="$a ";}
    $dos_command_line=join(' ',@ARGV);
    $dos_command_line=~s/;/\r\n/g;

    open (OUT," >$ENV{HOME}/dos_do.bat" ) || exit print
    "$ENV{HOME}/dos_do.bat:
    $!";
    if ($dos_command_line) {
         print OUT "$dos_command_line\r\n"; # note dos CR LF
         print OUT "Exitemu\r\n";
         }
    close OUT;
    system "/usr/bin/dos $dosemu_command_line";
    unlink "$EVN{HOME}/dos_do.bat";

    Re: "find를 사용해서 원하는 것을 찾아내기"
    Date : Wed, 03, Dec 1997 16:03:30 +0100
    From : Mike Neuhauser mike@gams.co.at
    Jon Rabone,
    jkr@camcon.co.uk 씨가 지난 번 12월호 Linux Gazette에서 다음과 같이 썼습니다.

     

find를 이용하여 원하는 것 찾아내기

    1997년 10월자 Linux Gazette에서 Dave Nelson씨는 grep이 원하는 문자열을 포함하는 파일을 나타낼 수 있도록 다음과 같이 제안했었죠.

    find . -type f -exec grep "string" /dev/null {} \;

    이것은 모든 파일에 대해서 grep을 실행하는데 여기 더 짧고도 효과적인 방법이 있습니다.

    grep "string" 'find . -type f

    주의할 것은 조건에 맞는 파일의 개수가 많을 경우 쉘의 명령행 버퍼의 범위를 벗어나므로 문제가 생길 수도 있다는 것입니다.

    명령행 버퍼의 오버플로우를 방지하기 위해서 다음과 같이 하십시오.

    find . -type f | xargs grep "string"

    이 방법은 파일 이름에 공백이 들어갈 경우(touch "test file"을 실행하고 'ls'로 확인해 보십시오) 문제가 생길 수 있습니다. 이러한 문제를 해결하기 위해서는

    find . -type f -print0 | xargs -0 grep "string"

    find는 심볼릭 링크된 디렉토리에 대해서는 기본적으로 검색을 실시하지 않으니 -follow 옵션을 사용해야 할 경우도 있다는 것을 알아두세요.

     

Re:find를 이용해서 원하는 것을 찾아내기

    Data : 5 Dec 1997 17:47:50 -0000
    From : Dale K. Hawkins khawkins@mines.edu
    제가 사용하고 있는 방법은 다음과 같습니다.

    find . -type f -exec grep "string" /div/null {} \;

    그런데 제 친구가 다음과 같은 방법을 알려 주더군요. 매우 좋은 방법이었습니다.

    find . -type f | xargs fgrep "string" /dev/null

    이 방법은 매번 새로운 grep  프로세스를 생성하지 않아도 된다는 장점이 있죠. 그런데 정말 빠르고도 교묘한 방법이 있습니다. 다음과 같이 해보세요.

    locate $PWD | grep "$PWD" | xargs fgrep "string" /dev/null

    이 방법도 괜찮긴 하지만 grep이 매번 실행되고, 디렉토리에 대해서까지 grep이 실행된다는 단점이 있죠.

    locate $PWD | grep "$PWD" |xargs -ifilename sh -c \
      "if [ -f filename ]; then echo filename; fi "|\
    xargs fgrep "string" /dev/null

    제 글을 읽으시는 독자분들께 : lesspipe.sh이 설치되어 있다면 한번 보세요.

     

find로 원하는 것을 찾아내기 세 번째 이야기

    Data : Thu, 11 Dec 1997 17:12:46 +100(MET)
    From : Axel Dietrich Axel.Dietrich@newroinformatik.ruhr-uni-bochum.de
    Linux Gazette 1997년 10월 호에서 Dave Nelson씨는

    find . -type f -exec grep "string" /dev/null {} \;

    을 권장했었습니다.
    Jon Rabone씨의 "더 짧고도 효과적인" 방법은 다음과 같습니다.

    grep "string" 'find . -type '

    다음과 같은 방법은 명령행 버퍼의 오버플로우 걱정을 할 필요없이 사용할 수 있습니다.

    find . -type f -exec grep -l"string" {}\;

    '-l' 옵션은 grep이 "string"을 포함하는 파일명을 나타내도록 해줍니다. 이런 식의 검색을 특정 파일들에 대해서 행하기 위해서 저는 -type과 -name 옵션을 쓰죠. 다음과 같이 말이죠.

    find . \(-type f -name "*\.html"\) -exec grep -l "string" {}\;

    이것은 html의 확장자를 가지는 모든 파일에 대해서 "string"을 포함하는지 알아보고 포함하고 있는 파일명을 출력해줍니다.

    /Axel

     

find에 관해 좀 더 알아볼까요?

    Date : Tue, 16 Dec 1997 14:12:57 + 100(MET)
    From : Alexander Larsson
    alla@lysator.liu.se
    1997년 12월자 Linux Gazette에서 Jon Rabone씨는 다음과 같이 말했었죠.

    이것은 각각의 파일에 대해서 grep을 실행하는데 좀 더 짧고 간단한 방법이 있습니다.

    grep "string" find . -type f

    그런데 알아두어야 할 것은 조건에 맞는 파일들이 많은 경우 명령행 버퍼가 오버플로우될 수도 있다는 것입니다.

    이것보다 조금 더 좋은 방법이 있죠.

    find . -type f | xargs grep "string"

    이 방법은 명령행 버퍼가 가득 찰 때마다 새로운 grep 프로세스를 실행해줍니다.

     

find를 이용하는 또 하나의 방법

    Date : Sat, 27 Dec 1997 12:06:47 -0500
    From : rchandra@letter.com
    지금 논의되고 있는 "어떻게 서브디렉토리에 있는 파일들에 대해서 grep을 실행해줄 수 있는가?"하는 문제에 관한 여러 가지 방법들은 매우 유용하긴 하지만 검색을 실시하는 디렉토리에 바이너리 파일이 있을 경우에는 터미널을 제어하지 못하는 문제가 생길 수도 있습니다. 왜냐하면 바이너리 파일의 몇몇 제어 문자들(Control Characters)이 터미널을 그래픽 모드로 바꿔놓을 수 있기 때문입니다. 물론 이렇게 되었을 경우 터미널을 다시 바로잡는 방법이 있긴 하지만 아무래도 가장 좋은 방법은 그러한 일이 없도록 처음부터 방지하는 것이 가장 좋겠죠.
    이제 화면에 찍혀나올 수 없는 문자들을 모두 없애봅시다. 어쨌든 읽을 수는 없지만 다음과 같은 명령을 내려보세요.

    sed -e 's/[^-~][^-~]*//g'

    이 명령은 화면에 출력될 수 없는 (제어) 문자들을 그냥 스페이스들로 바꿔 버립니다. 이 명령은 파이프를 이용하여 쉽게 다른 명령어들과 결합해서 사용할 수 있습니다. 여기 간단한 쉘 스크립트가 있습니다. 저는 이것은 grepfind라고 이름붙여서 사용하고 있죠.

    #!/bin/sh
    #save this in a file called grepfind and do a "chmod 755 grepfind"
    #
    if test $@ = 0 -o "$1" = "-h" -o "$1" = "-help" ; then
    echo 'grepfind  ─ recursively descends directories and egrep all files '
    echo
    echo 'Usage: grepfind [-help][-h](start_directory] egrep_search_pattern'
    echo
    echo 'The surrent directory is used as start_directory if parameter'
    echo 'start_directory is omitted. The search is case insensitive.'
    echo 'Multiple occurrences of control characters are replaced by a single'
    echo 'space. This makes it possible to grep around in files that contain'
    echo 'binary data and strings without setting the terminal accidently'
    echo 'to graphics mode.'
    echo
    echo 'Example : grepfind/home "hello world"
    else
    if ["$2" = "" ];then
    find . -type f -exec egrep -i "$1" /dev/null {} \;|sed -e 's/[^-~][^-~]*//g'
    else
    if [-d "$1" ] ;then
      find $1 -type f -exec egrep -i "$2" /dev/null {} \;|sed -e 's/[^-~][^-~]*//g'
    else
      echo "ERROR: $1 is not a directory"
    fi
    fi
    fi
    #_END_OF_grepfind

     

RE: 도와주세요

    Date : Sun, 7 Dec 1997 14:25:25 +0100(MET)
    From : Roland Smith
    rsmith@ibm.net

    Javier씨에게,
    당신의 지난 번 Linux Gazette 기사에 대한 답신입니다.
    당신은 MOZILLA(넷스케이프)가 저장되어 있는 디렉토리에 대한 환경변수를 설정하여야 한다고 하셨었죠.
    두가지 방법이 있습니다.
    'export MOZILLA_HOME=/usr/local/netscape'을 컴퓨터가 매번 시작될 때마다 실행해주거나 혹은 /etc/profile파일을 수정하면 됩니다. 이것은 bash쉘이 시작될 때 읽어오는 파일입니다. 이 파일에 다음과 같은 내용을 추가하세요.(넷스케이프는 /usr/local/netscape 디렉토리에 설치되어 있다고 가정합니다.)

    MOZILLA_HOME=/usr/local/netscape
    export MOZILLA_HOME

    또한 윈도우 매니저의 설정 파일에도 넷스케이프의 실행 파일의 위치를 알려주어야 넷스케이프를 윈도우 매너자가 사용하는 툴바나 메뉴에서 곧바로 이용할 수 있습니다. 이것은 사용하는 윈도우 매니저에 따라 틀리죠. 만약 FVWM2-95를 사용하신다면 다음과 같은 내용을 홈 디렉토리에 있는 .fvwm2rc95파일에 추가해주세요.

    #add to this menu
    AddMenu "Utilities" Titel
    + "Netscape%mini-ascape.xpm% Exec netscape -geometry
    931x683+54+9 &

     

사용하지 않는 하드디스크 회전 속도 줄이기

    Date : Mon, 08 Dec 1997 14:21:31 -0500
    From : Peter S Galbraith galbraith@mixing.qc.dfo.ca
    Linux Gazette 12월호 기사 중 하드 디스크의 회전 속도를 줄이기 위해서 hdparm 명령을 사용하는 방법이 있었죠. 이것을 제 오래된 SCSI 하드 디스크에 다음과 같이 적용해보았습니다.
    안타깝게도 SCSI 하드 디스크에는 hdparm 명령이 작동하지 않는군요. (메뉴얼 페이지에도 나와있지 않은 게 참 이상하죠?)

    bash-2.01#hdparm -S6 /dev/sdb

    /dev/sdb;
    operation not supported on SCSI disks

     

    보안 스크립트

     

     

     

     

     

     

     


     

 

home으로...