· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Tips-HOWTO

<!doctype linuxdoc system>


<article>
<title>The Linux Tips HOWTO
<author>Paul Anderson, <url url="mailto:paul@geeky1.ebtech.net" name="paul@geeky1.ebtech.net">
<date>    v2.4, 12 October 1996
<abstract>
이 하우투 문서는 사람들이 잘 모르는 힌트와 리눅스를  좀 더 편리하게 만드는 조정법을 설명하고 있다. 
(번역투의 문장을 한국어식 표현으로 고치는 작업이 필요할것 같습니다.)
</abstract>  
<toc>
<sect>소 개
<p>  
  리눅스를 좀더 재밌게 만들어주는 좋은 트릭과 최적화 방법의 리스트인
  리눅스 팁 하우투 문서에 온 것을 환영한다. 내가 여기에 기록해
  놓은 것은 모두 내 머리속에서 나온  팁들과 예전의 팁-하우투
  문서에 있던 것들이다. 여러분이 좋아하는 힌트나 팁이 있다면
  다음 버전의 팁-하우투에 넣을수 있도록 나에게 보내주길 바란다.
  Paul Anderson Maintainer--Linux TIPS HOWTO
  <url url="mailto:panderso@ebtech.net" name="panderso@ebtech.net">
  
</p>
<sect> 간단한 팁들
  
<sect1> 간단한 Syslog 트릭 (Paul Anderson, Tips-HOWTO maintainer)
<p>
  /etc/syslog.conf를 수정하여 다음 라인을 추가합니다:
<verb>
         # 모든 것을 tty8에 쓰기
         *.*                                     /dev/tty8
  </verb>
  경고 : syslog.conf 파일에서는 스페이스 대신 탭을 사용하십시오.
</p>  
<sect1> Core 파일들을 지우기 위한 간단한 스크립트 
<p>  
  <url url="mailto:ohammers@cu-online.com"  name="ohammers@cu-online.com">
  Core 파일을 지우기 위한 간단한 스크립트

  다음과 같이 rmcores란 이름의 파일을 만드십시오. (이름은 상관 없지만 여기서는 handle-cores라고 했음):
         
 <code>
         #!/bin/sh
         USAGE="$0 <directory> <message-file>"
         if [ $# != 2 ] ; then
                 echo $USAGE
                 exit
         fi
          echo Deleting...
         find $1 -name core -atime 7 -print -exec rm {} \;
         echo e-mailing
         for name in  `find $1 -name  core -exec  ls -l {}  \; | cut 
  -c16-24`
         do
                 echo $name
                 cat $2 | mail $name
         done
</code>    
  
  cron에 등록시켜서 주기적으로 실행시키십시오.

</p>  
 <sect1> 파일 시스템간 디렉토리 옮기기
<p>
Alan Cox,<url url="mailto:A.Cox@swansea.ac.uk" name="A.Cox@swansea.ac.uk">
  한 디스크로부터 다른 디스크로 파일 트리 전체를 빠르게 옮기는 방법
<verb>  
        (cd /source/directory &&  tar cf  - . )  | (cd  /dest/directory 
  && tar xvfp -)
</verb>  
  문제가 있을 경우 디렉토리가 깨지는 것을 막기 위해서 cd /source/directory; tar...etc 였던 것을 수정했습니다. (By Jim Dennis <url url="mailto:jadestar@rahul.net" name="jadestar@rahul.net">)
</p>  
<sect1> 어떤 디렉토리가 가장 큰지 알아내기. 
<p>
<url url="mailto:mghazey@miso.lowdown.com" name="mghazey@miso.lowdown.com">
  
여러분의 컴퓨터에서 가장 큰 디렉토리가 궁긍하십니까? 여기에 방법이 있습니다.
  <verb>
         du -S | sort -n
  </verb>
</p>
<sect1> The Linux Gazette
<p>
Linux Gazette의 창시자인 John Fisk에게 감사의 말을 전합니다. 이것은 꽤 놀라운 온라인 잡지이며 무료입니다! 이곳에서 확인하시기 바랍니다.

      <url url="http://linuxgazette.net/" name="http://linuxgazette.net/">

  이 사이트에서 John Fisk에게 온라인 잡지 Linux Gazette에 관한 메모를 남겨 주십시오.
</p>  
<sect1>Pointer  to patch for GNU Make 3.70 to change VPATH behavor.
<p>
Ted Stern,<url url="mailto:stern@amath.washington.edu" name="stern@amath.washington.edu">  Pointer  to patch for 
  GNU Make 3.70 to change VPATH behavor.
많은 사람들이 이러한 문제점을 지니고 있는지는 알수없지만, 내가 좋
  아하지 않는 3.70 버전의 GNU make의 특징이  있다. 그것은 절대 경
  로를 줄 경우 VPATH가 재미있는 행동을 한다는 것이다. 이것을 수정
  하는     절대적으로      믿을만한     패치가     있는데,      Paul 
  Smith<<url url="mailto:psmith@wellfleet.com" name="psmith@wellfleet.com">>으로부터 그것을 구할 수 있다. 또 그는 
  앞으로의  모든  새로운  버전의  make의  문서와  패치를  뉴스그룹 
  |gnu.utils.bug|에 올려놓을 것이다. 
  일반적으로, 나는 내가 억세스하는 모든 시스템에 이 패치를 적용하고 
  gmake를 다시 컴파일한다. 
</p>  
<sect1>
부팅할 때마다 fsck 하는 것 막기
<p>
Dale Lutz, <url url="mailto:dal@wimsey.com" name="dal@wimsey.com">

  Q: 매번 부팅할때마다 e2fsck가 디스크 검사하는 것을 막을 수 있습니까?

  A: 커널을 다시 불러올 때, 파일시스템은 'dirty'로 기록됩니다. 그래서 부팅 때마다 디스크 검사를 하는 것이며, 이것을 방지하려면 다음과 같이 하십시오:
<verb>
  rdev -R /zImage 1
</verb>
 이것은 파일시스템이 'dirty'로 기록되지 않도록 커널을 수정합니다.

메모 : lilo를 사용한다면 lilo config file 내의 리눅스 설정에 read-only를 추가합니다. (흔히 /etc/lilo.conf)
</p>  
  
<sect1>부트시에   "device busy"에  의해  야기되는 fscks   피하기. 
<p>
Jon Tombs, <url url="mailto:jon@gtex02.us.es" name="jon@gtex02.us.es">
  리부팅할 때  filesystem이 fscks를  필요로 하게  만드는  셧다운시의 
  device busy 에러를 종종 만난다면, 여기 간단한 해결책이 있다:
   /etc/rc.d/init.d/halt 혹은 /etc/rc.d/rc.0에 다음의 라인을 추가한다. 
       mount -o remount,ro /mount.dir
  루트 '/'를 제외한 모든 마운트  된 filesystem에 있어서 umount  -a를 
  호출하기 전에 이러한 처리를  해준다. 이것은 몇가지  이유에 있어서 
  shutdown이 모든 프로세스를 죽이고 디스크를 umount 하는데 실패하
  더라도 reboot할 때  여전히 'clean'할 것을  의미한다. 나의  경우에는 
  reboot할 때 상당한 시간을 절약해준다. 
</p>  
<sect1>하드디스크 상에서 가장 큰 파일 알아내기
<p>
Simon Amor, <url url="mailto:simon@foobar.co.uk" name="simon@foobar.co.uk">
<verb>
	ls -l | sort +4n
</verb>
또는 하드디스크가 공간상의 문제가  있다면 이것은 시간은  걸리지만 
  잘 훌륭히 동작할 것이다. 
<verb>
	cd /
     ls -lR | sort +4n
</verb>
</p>
<sect1>How   to  print  pages   with  a   margin for   hole   punching. 
<p>
Mike   Dickey, 
      <url url="mailto:mdickey@thorplus.lib.perdue.edu" name="mdickey@thorplus.lib.perdue.edu">
    
 <code>
            #!/bin/sh
            # /usr/local/bin/print
            # a simple formatted printout, to enable someone to
            # 3-hole punch the output and put it in a binder
            cat $1 | pr -t -o 5 -w 85 | lpr
  </code>   
</p>
<sect1>파일 트리 전체에 걸쳐 특정 정규표현식 검색하기. 
<p>
Raul Deluth Miller, <url url="mailto:rockwell@nova.umd.edu" name="rockwell@nova.umd.edu"> 파일 트리 전체에 걸쳐 특정 정규표현식 검색하기 
내 'forall' 스크립트이다. 이렇게 사용해라:
<verb>
	forall /usr/include grep -i ioctl
         forall /usr/man grep ioctl
</verb>
forall은 다음과 같다:
   <code>       
  
         #!/bin/sh
         if [ 1 = `expr 2 \> $#` ]
         then
                 echo Usage: $0 dir cmd [optargs]
                 exit 1
         fi
         dir=$1
         shift
         find $dir -type f -print | xargs "$@"

  </code>        
</p> 
<sect1>자동 세이브나 백업 파일을 만드는 프로그램을 사용한 뒤의 청소를 위한 스크립트.   
<p>
Barry Tolnas, <url url="mailto:tolnas@nestor.engr.utk.edu" name="tolnas@nestor.engr.utk.edu"> 자동 세이브나 백업  file을 만드는 프로그램.
  여기 디렉토리 계층구조를 타고 내려가면서 emacs의 자동-세이브(#)와
  백업(~) file과 .o file 그리고 TEX.log 파일들을 삭제하는 간단한 
  두줄짜리가 있다. 이것은 또한 .tex와 README file을 압축하는 기능도
  한다. 나는 이것을 'sqeeze'라 이름지었다.
         
 <code> 
         #!/bin/sh
         #SQUEEZE removes unnecessary files  and compresses .tex 
  and README files
         #By Barry tolnas, tolnas@sun1.engr.utk.edu
         #
         echo squeezing $PWD
         find  $PWD \( -name \*~ -or -name \*.o -or -name \*.log 
  -or -name \*\#\) -exec
         rm -f {} \;
         find $PWD \(  -name \*.tex -or  -name \*README\*  -or 
  -name \*readme\* \) -exec gzip -9 {} \;
         
   </code>
</p>  
<sect1>어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
<p>
<url url="mailto:simon@foobar.co.uk" name="simon@foobar.co.uk"> 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
<verb>

	ps -aux | sort +4n
    -OR-
         ps -aux | sort +5n
</verb>  
</p>
<sect> 세부적인 tip
  
<sect1>Linux와   windows에서 swap   파티션 공유하기.  
<p>
Tony acero, 
  <url url="mailto:ace3@midway.uchicagi.edu" name="ace3@midway.uchicagi.edu">
<enum>
<item>해당 파티션을 도스 파티션으로 포맷하고, 거기에 윈도우 swap file
  을 생성한 뒤 아직  윈도우를 실행하지는 말아라.  ( 여러분은 우선은 
  swap file이 완전히 비어있는 상태로 보존되기를 바랄 것이고,  그러므
  로 그것은 잘 압축된다.)
<item>Linux로 부팅한뒤에 그 파티션을 file로 저장한다. 예를들어 파티션
  이 /dev/hda8이었다면 
<verb>
	dd if=/dev/hda8 of=/etc/dosswap
</verb>
<item>그 도스 swap file을 압축한다. 그것은 가상적으로 모두 0이기 때문
  에 매우 잘 압축될 것이다. 
<verb>
	gzip -9 /etc/dosswap
</verb>
<item>Linux에 swap 공간을 준비하고 설치하기위해 /etc/rc file에 다음의 
  라인을 추가한다. 
<verb>
	xxxxx는 swap 파티션의 block 개수이다. 
         mkswap /dev/hda8 XXXXX
         swapon -av
</verb>
	/etc/fstab file에 swap 파티션을 위한 엔트리를 추가했음을 확인하라. 
<item> init/reboot 패키지가 /etc/brc  혹은 /sbin/brc를 지원한다면 다음을 
  /etc/brc에 추가하고, 그렇지 않은 경우 dos | os/2로 부팅하고 싶을 때 
  그리고 swap 파티션을 dos/windows 버전으로 바꾸고 싶을 때 이것을 
  손으로 해주어라.
<verb>
	swapoff -av
         zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
</verb>
# 이것은 오직 처음의 100 블록  만을 파티션에 기록함을 알아두어라. 
  나는 경험적으로 100    이면 충분함을 알아내었다. 
  >> 이것의 장점과 단점은 무엇인가.
  장점 : 상당한 양의 디스크 스페이스를 절약할 수 있다. 
단점 : step 5가 자동적으로 이루어지지 않을 경우, 여러분은 그것을 직접 해주어야 함을 기
       억해야 하며, reboot 프로세스가 조금 느려진다. 
</enum>
</p>
<sect1>변경되지 않는 flag 사용하기.
<p>
Jim Dennis, <url url="mailto:jadestar@rahul.net" name="jadestar@rahul.net">
변경되지 않는 flag 사용하기 
  여러분의 시스템을 설치하고  환경을 설정한  바로 뒤에  /bin, /sbin, 
  /usr/bin, and /usr/lib 그리고 다른 usual suspects로 간  뒤 'chattr +i 
  command'를 자유로이 사용하라. 또한 그것을 root의 커널 file에 추가
  해라. 이제 'mkdir /etc/.dist/'를 하고 /etc  의 모든 것을 그 디렉토리
  로 복사해라. (나는 recursion을 피하기위해  이것을 /tmp/etcdist.tar를 
  사용하는 두 step을 사용한다.) (옵션으로 당신은 /etc/.dist.tar.gz을 만
  들수도 있다)-- 그리고 그것을 변경되지 않도록  만든다. 이런일을 하
  는 이유는 root로 로그인 했을 때 당할수  있는 피해를 줄이기 위해서
  이다. 당신은 stray redirection 오퍼레이션으로 오버라이트를  하지 않
  을 것이며, 'rm -rf' 명령을 사용할 때 시스템을 사용불가능하게  하는 
  일이 없을  것이다. (여러분은  여전히 많은  피해를 입겠지만,  libs와 
  bins는 좀더 안전해질 것이다)
  이것은 다양한 보안과 denial  of service exploits를  불가능하게 혹은 
  더욱 어렵게 만들 것이다. ( 그들의 많은  부분이 독자적인 shell을 제
  공하지 않는 SUID 프로그램의  활동을 통해 file을  overwrite 하는데 
  의존하기 때문이다) 
  이것의 오직 한가지 불편한 점은 다양한 종류의 시스템  바이너리들을 
  'make install' 할 때이다. 반면에  그것은 또한 'make install'이  file을 
  overwrite하지 않도록 해준다. 여러분이 Makefile을 읽는 것을 깜박 잊
  고 다시 기록될 file들을 chattr -i  할 때(그리고 당신이 file을 풀어놓
  을 디렉토리도), make는 실패하며, chattr 명령을 사용하여  그것을 다
  시 실행해야 한다. 당신은 자신의 기존의 bins,  libs, 혹은 무엇이던간
  에 .old/ 디렉토리로 옮길 기회를 얻게된다. 또는 그것들을 리네임하거
  나 tar로 압축따위를 할수도 있다. 
</p>  
<sect1>새로운 stuff를 어디에 넣을것인가에 대한 제안
<p>
 Jim dennis, <url url="mailto:jadestar@rahul.net" name="jadestar@rahul.net"> 새로운 stuff를 어디에 넣을것인가에 대한 제안

모든 새로운 stuff들은 /usr/local 혹은 /usr/local/'hostname'에서 시작
  한다.  당신의   배포본이 /usr/local을   비워놓는   것중의 하나라면 
  /usr/local/src, /usr/local/bin 등을 만들고 그것을 사용해라. 만약 당신
  의 배포본이 /usr/local  트리에 뭔가를  집어넣는다면, 당신은  'mkdir 
  /usr/local/'hostname''을 하고 그것에 'wheel' 그룹 +w를 부여하고 싶
  을지 모른다. (나는 wheel 그룹의 모든 멤버들이 그 아래에서 오직 그
  들 자신의 file만을 다루도록, 그리고 생성되는 모든  file이 'wheel' 그
  룹에 속하도록 SUID와 SGID도 만들었다)
  이제                       새로운                      패키지들을 
  /usr/local/src/.from/$WHEREVER_I_GOT_IT에 집어넣도록  항상 자
  신을    훈련시켜라.     그리고    그들을     /usr/local/src에서(혹은 
  .../$HOSTNAME에서) build 해라. 그것이 로컬의 heirarchy 아래에 설
  치되었음을 확인해라. 만약 그것이 절대적으로 /bin 또는 /sbin 아래에 
  설치가 되야 한다면, 어딘가에 존재할 때 로컬의 heirarchy로부터 각각
  의 엘리먼트로의 심볼릭 링크를 만들어라. 
  이렇게 하는 이유는 -- 그것이 번거로운 일임에도  불구하고 -- 만일
  의 경우에 백업되고, 리스토어되고 배포본으로부터 완저히 다시설치하
  는 것 등을 막는데 도움을 주기 때문이다. /usr/local/.from 디렉토리를 
  사용함으로써, 소스가 나온곳의 비공식적 log를 유지할수도 있다 --이
  것은 새로운 업데이트 사항을 찾을 때  도움을 준다 -- . 또 security 
  announcement 리스트를 모니터링 할 때 중요할수도 있다. 
  집에 있는 나의 시스템중 하나는 내 자신이 이러한 방책을 적용시키기 
  전에 구성된다. 나는  여전히 그것이 설치된  시스템으로서의 stock과 
  다른점이 무엇인지를 모른다. 이것은  내 집의 시스템에  거의 설정을 
  하지 않았다는 점과, 내가 그것을 사용하는 유일한 사람이라는 사실을 
  무시한 것이다. 
  반대로 내가 직장에서 설정 해놓은 시스템(내게 그곳의 시스템 관리자
  로서의 임무가 맡겨졌을 경우)은 모두  이런식으로 설정되어 있고, 많
  은 청부인과 다른 MIS 사람들에 의해  관리되어 왔으며, 수많은 업그
  레이드와 패키지 설치가 이루어졌다. 그럼에도  나에게는 초기의 설치
  와 설정이 끝난뒤에 집어 넣게될 중요한 엘리먼트들에 대한 좋은 아이
  디어가 있다. 
</p>  
<sect1>시스템관리자를 위한 몇가지 팁.
<p>
Jim Dennis, <url url="mailto:jadestar@rahul.net" name="jadestar@rahul.net"> 시스템관리자를 위한 몇가지 팁.

/README.'hostname'과 /etc/README.'hostname'을 만들고  관리해
  라. 혹은 /usr/local/etc/README.'hostname'도 가능하다. 
  절대적으로, 시스템 관리를  시작한 첫날로부터 온라인  로그 file내에 
  기록을 해라. root의 /bash_logout에 | vi /README.$(hostname) | 과 
  같은 라인을 적어도 좋다. 이것을  하는 또 다른 방법은 su나  sudo에 
  다음과 같은 일을 하는 스크립트를 기록하는 것이다. 
  <verb>
                    function exit \
                            { unset exit; exit; \
                              cat ~/tmp/session.$(date +%y%m%d) \
                              >> /README.$(hostname) && \
                              vi /README.$(hostname)
                              }
                    script -a ~/tmp/session.$(date +%y%m%d)
                    /bin/su.org -
</verb>  
  (session log를 만들기 위해  typescript를 사용하고,  자동으로  log를 
  appending과 updating을 할 함수를 만든다).
  나는 내가 이 방식의 자동화  도구를 만들지 않았음을 인정할  것이다
  -- 나는 단지 여지껏 스스로의 훈련에 의존해 왔을 뿐이다. 그러나 나
  는 장난삼아 그런 아이디어를 생각해 왔었다.  (심지어는 이미 본  스
  크립트의 프로토타입이나 shell 기능의 문제에서 조차도.) 이것으로 나
  를 다시 붙드는 것은 'script' 명령 그 자체이다. 나는 이것을 사용하기 
  전에 소스를 입수하고 몇가지 커맨드 라인 파라메터를 추가해야겠다고 
  생각한다(커맨드 라인으로부터 스크립트를 잠시중단하거나 정지시키기 
  위해서).
  내가 마지막으로 제안 하는 것은 : root의 'PATH=/bin'으로 구성되야 
  한다는 점이다. 바로 그렇다. 다른 무엇도  root의 path에 이어서는 안
  된다. root가 하는 모든일은 /bin으로부터 혹은 alias나 shell 함수에 의
  해서 심볼릭  링크를 받던가  또는 혹은  /bin 디렉토리내의  script나 
  binary이던가 또는 뚜렷한 패스로 타입되는  것이다. 이것은 누군가가 
  binary를 얼마나 신임하는지를 인식하고  root로서 실행하도록 만들어
  준다. 멀티 유저 호스트의 현명한 관리자는 특정  패턴이나 loophole을 
  찾아내기 위해 자신의 /bin과 /*history를 정기적으로 살펴볼 것이다. 
  실제로 동기가 부여된 어드민은 자동화 될 수있는 sequence를 알아채
  고, 온전한 체크가 삽입될 수 있는곳에  위치시키며, root의 특권을 일
  시적으로 삼가기 위한 작업들을 한다(에디터를 설치하고, 정교한 스크
  립트 구조를 가진 MTA의 또는  다른곳의 커다란 인터액티브 프로그
  램을  설치한다.  (그들을  불명예스러운  vi  ./.exrc   그리고 emacs 
  ./.emacs 그리고 교활한 $EXINIT 그리고 임베딩된 header/footer 매크
  로처럼 transparent나 data file내에 임베딩될 수도 있다.  당연히 다음
  과 같은 종류의 커맨드가 실행될 수 있다:
  <verb>
                         cp $data $some_users_home/tmp
                         su -c $origcommand $whatever_switches
                         cp $some_users_home/tmp $data
</verb>
대개 마지막의 예방조치는 홈  또는 싱글 유저  워크스테이션 사용자에게 해당하는  것이다 
    -- 그러나 그것은 멀티유저 시스템, 특히 대중에게 노출되어 있는 시스템의 관리자에게
    도 유용한 것이다.
</p>
<sect1>xdm의   host 선택자를  어떻게  설정할것인가.  
<p>
Arrigo  Triiulzi, 
  <url url="mailto:a.triulzi@ic.ac.uk" name="a.triulzi@ic.ac.uk">
<enum>
<item>대개 etc/rc/rc.6 혹은 /etc/rc.local에 xdm을 설치하는 file을  xdm startup 라인을 포함하
   도록 다음과 같은 라인을 추가하라. 
<verb>   
         /usr/bin/X11/xdm
         exec /usr/bin/X11/X -indirect hostname
</verb>
<item>/usr/lib/X11/xdm/Xserver를 수정하여 예를들어 starting 0와 같이 로컬 머신상에서 서버
   를 시작하게하는 다음과 같은 라인을 언급하라.   
<item>머신을 재부팅하라. 그러면 you are home and away.(무슨뜻인지..^^;)
  내가 그것을 나의 서브넷에 맞게 설정하기 위해 필사적으로  노력하던
  때, 모든 문제를 조사하기 위해서 거의  일주일이나 걸렸기 때문에 나
  는 이것을 추가하였다. 
</enum>  
</p>
<p>
경고 : 예전의 SLS(1.1.1)을 가지고서 몇가지 이유 때문에 xdm 라인 뒤에 -nodaemon을 남겨
  놓을 수도 있다. 이것은 이후의 릴리즈에서는 동작하지 않는다. 
</p>  
</article>  




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-05-27 14:22:02
Processing time 0.0091 sec