The Linux Tips HOWTOPaul Anderson, paul@geeky1.ebtech.netv2.4, 12 October 1996이 하우투 문서는 사람들이 잘 모르는 힌트와 리눅스를 좀 더 편리하게 만드는 조정법을 설명하고 있다. (번역투의 문장을 한국어식 표현으로 고치는 작업이 필요할것 같습니다.) 1. 소 개리눅스를 좀더 재밌게 만들어주는 좋은 트릭과 최적화 방법의 리스트인 리눅스 팁 하우투 문서에 온 것을 환영한다. 내가 여기에 기록해 놓은 것은 모두 내 머리속에서 나온 팁들과 예전의 팁-하우투 문서에 있던 것들이다. 여러분이 좋아하는 힌트나 팁이 있다면 다음 버전의 팁-하우투에 넣을수 있도록 나에게 보내주길 바란다. Paul Anderson Maintainer--Linux TIPS HOWTO panderso@ebtech.net 2. 간단한 팁들2.1 간단한 Syslog 트릭 (Paul Anderson, Tips-HOWTO maintainer)/etc/syslog.conf를 수정하여 다음 라인을 추가합니다: # 모든 것을 tty8에 쓰기 *.* /dev/tty8경고 : syslog.conf 파일에서는 스페이스 대신 탭을 사용하십시오. 2.2 Core 파일들을 지우기 위한 간단한 스크립트ohammers@cu-online.com Core 파일을 지우기 위한 간단한 스크립트 다음과 같이 rmcores란 이름의 파일을 만드십시오. (이름은 상관 없지만 여기서는 handle-cores라고 했음):
#!/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 cron에 등록시켜서 주기적으로 실행시키십시오. 2.3 파일 시스템간 디렉토리 옮기기Alan Cox, A.Cox@swansea.ac.uk 한 디스크로부터 다른 디스크로 파일 트리 전체를 빠르게 옮기는 방법 (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)문제가 있을 경우 디렉토리가 깨지는 것을 막기 위해서 cd /source/directory; tar...etc 였던 것을 수정했습니다. (By Jim Dennis jadestar@rahul.net) 2.4 어떤 디렉토리가 가장 큰지 알아내기.여러분의 컴퓨터에서 가장 큰 디렉토리가 궁긍하십니까? 여기에 방법이 있습니다. du -S | sort -n 2.5 The Linux GazetteLinux Gazette의 창시자인 John Fisk에게 감사의 말을 전합니다. 이것은 꽤 놀라운 온라인 잡지이며 무료입니다! 이곳에서 확인하시기 바랍니다. 이 사이트에서 John Fisk에게 온라인 잡지 Linux Gazette에 관한 메모를 남겨 주십시오. 2.6 Pointer to patch for GNU Make 3.70 to change VPATH behavor.Ted Stern, stern@amath.washington.edu Pointer to patch for GNU Make 3.70 to change VPATH behavor. 많은 사람들이 이러한 문제점을 지니고 있는지는 알수없지만, 내가 좋 아하지 않는 3.70 버전의 GNU make의 특징이 있다. 그것은 절대 경 로를 줄 경우 VPATH가 재미있는 행동을 한다는 것이다. 이것을 수정 하는 절대적으로 믿을만한 패치가 있는데, Paul Smith< psmith@wellfleet.com>으로부터 그것을 구할 수 있다. 또 그는 앞으로의 모든 새로운 버전의 make의 문서와 패치를 뉴스그룹 |gnu.utils.bug|에 올려놓을 것이다. 일반적으로, 나는 내가 억세스하는 모든 시스템에 이 패치를 적용하고 gmake를 다시 컴파일한다. 2.7 부팅할 때마다 fsck 하는 것 막기Dale Lutz, dal@wimsey.com Q: 매번 부팅할때마다 e2fsck가 디스크 검사하는 것을 막을 수 있습니까? A: 커널을 다시 불러올 때, 파일시스템은 'dirty'로 기록됩니다. 그래서 부팅 때마다 디스크 검사를 하는 것이며, 이것을 방지하려면 다음과 같이 하십시오: rdev -R /zImage 1이것은 파일시스템이 'dirty'로 기록되지 않도록 커널을 수정합니다. 메모 : lilo를 사용한다면 lilo config file 내의 리눅스 설정에 read-only를 추가합니다. (흔히 /etc/lilo.conf) 2.8 부트시에 "device busy"에 의해 야기되는 fscks 피하기.Jon Tombs, 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할 때 상당한 시간을 절약해준다. 2.9 하드디스크 상에서 가장 큰 파일 알아내기Simon Amor, simon@foobar.co.uk ls -l | sort +4n또는 하드디스크가 공간상의 문제가 있다면 이것은 시간은 걸리지만 잘 훌륭히 동작할 것이다. cd / ls -lR | sort +4n 2.10 How to print pages with a margin for hole punching.Mike Dickey, mdickey@thorplus.lib.perdue.edu
#!/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 2.11 파일 트리 전체에 걸쳐 특정 정규표현식 검색하기.Raul Deluth Miller, rockwell@nova.umd.edu 파일 트리 전체에 걸쳐 특정 정규표현식 검색하기 내 'forall' 스크립트이다. 이렇게 사용해라: forall /usr/include grep -i ioctl forall /usr/man grep ioctlforall은 다음과 같다: #!/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 "$@" 2.12 자동 세이브나 백업 파일을 만드는 프로그램을 사용한 뒤의 청소를 위한 스크립트.Barry Tolnas, tolnas@nestor.engr.utk.edu 자동 세이브나 백업 file을 만드는 프로그램. 여기 디렉토리 계층구조를 타고 내려가면서 emacs의 자동-세이브(#)와 백업( ) file과 .o file 그리고 TEX.log 파일들을 삭제하는 간단한 두줄짜리가 있다. 이것은 또한 .tex와 README file을 압축하는 기능도 한다. 나는 이것을 'sqeeze'라 이름지었다.
#!/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 {} \; 2.13 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기simon@foobar.co.uk 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기 ps -aux | sort +4n -OR- ps -aux | sort +5n 3. 세부적인 tip3.1 Linux와 windows에서 swap 파티션 공유하기.Tony acero, ace3@midway.uchicagi.edu
3.2 변경되지 않는 flag 사용하기.Jim Dennis, 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로 압축따위를 할수도 있다. 3.3 새로운 stuff를 어디에 넣을것인가에 대한 제안Jim dennis, 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 사람들에 의해 관리되어 왔으며, 수많은 업그 레이드와 패키지 설치가 이루어졌다. 그럼에도 나에게는 초기의 설치 와 설정이 끝난뒤에 집어 넣게될 중요한 엘리먼트들에 대한 좋은 아이 디어가 있다. 3.4 시스템관리자를 위한 몇가지 팁.Jim Dennis, jadestar@rahul.net 시스템관리자를 위한 몇가지 팁. /README.'hostname'과 /etc/README.'hostname'을 만들고 관리해 라. 혹은 /usr/local/etc/README.'hostname'도 가능하다. 절대적으로, 시스템 관리를 시작한 첫날로부터 온라인 로그 file내에 기록을 해라. root의 /bash_logout에 | vi /README.$(hostname) | 과 같은 라인을 적어도 좋다. 이것을 하는 또 다른 방법은 su나 sudo에 다음과 같은 일을 하는 스크립트를 기록하는 것이다. 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 -(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내에 임베딩될 수도 있다. 당연히 다음 과 같은 종류의 커맨드가 실행될 수 있다: cp $data $some_users_home/tmp su -c $origcommand $whatever_switches cp $some_users_home/tmp $data대개 마지막의 예방조치는 홈 또는 싱글 유저 워크스테이션 사용자에게 해당하는 것이다 -- 그러나 그것은 멀티유저 시스템, 특히 대중에게 노출되어 있는 시스템의 관리자에게 도 유용한 것이다. 3.5 xdm의 host 선택자를 어떻게 설정할것인가.Arrigo Triiulzi, a.triulzi@ic.ac.uk
경고 : 예전의 SLS(1.1.1)을 가지고서 몇가지 이유 때문에 xdm 라인 뒤에 -nodaemon을 남겨 놓을 수도 있다. 이것은 이후의 릴리즈에서는 동작하지 않는다. |
Your present plans will be successful. |