<!--<!DOCTYPE Article PUBLIC "-//Davenport//DTD DocBook V3.0//EN">-->
<!doctype article public "-//OASIS//DTD DocBook V3.1//EN">

<article>

<artheader>

<title>The Linux Tips HOWTO</title>
<author>
<firstname>Paul</firstname>
<surname>Anderson</surname>
<affiliation>
 <address>paul@geeky1.ebtech.net</address>
</affiliation>
</author>
<pubdate>v3.6, June 1998</pubdate>
<othercredit role="translator" lang="ja">
<firstname>JF Project</firstname>
<surname></surname>
<contrib>日本語訳</contrib>
<affiliation>
 <address>JF@linux.or.jp</address>
</affiliation>
</othercredit>

<abstract>
<para>
<!--
This HOWTO contains those hard to find hints and tweekings that make Linux a 
bit nicer.
-->
この HOWTO では、意外と知られていないちょっとしたヒントやコツを紹介しています。
これを知れば、Linux はもっと便利になるはずです。
</para>

</abstract>

</artheader>

<sect1 id="intro">
<title><!--Introduction-->はじめに</title>

<para>
<!--
Welcome to the <emphasis>Linux Tips HOWTO</emphasis>, a list of neato tricks 
and optimizations that make Linux more fun. All I have in here right now are 
tips off of the top of my head, and tips from the old Tips-HOWTO (Why take out 
decent tips, right?).  So send all your favorite hints and tips to me so I can 
put them in the next Tips-HOWTO.
-->
ようこそ <emphasis>Linux Tips HOWTO</emphasis> へ。これは、Linux がもっと
楽しくなる小ワザやちょっとした最適化の方法を集めた文書です。いまのところ、
ここで紹介するのはわたしが思いつく限りの tips と、旧版 Tips-HOWTO から
転載した tips です(先人の知恵は拝借すべきなのです)。お気に入りのワザや tips が
あったら何でも送ってください。Tips-HOWTO の次の版で紹介します。
</para>

<para>
<!--
Paul Anderson <Emphasis>Maintainer - -Linux TIPS HOWTO</Emphasis>
-->
Paul Anderson <emphasis>Linux TIPS HOWTO の管理者</emphasis>
</para>

<para>
<!--
<Literal remap="tt">panderso@ebtech.net</Literal>
-->
&lt;panderso@ebtech.net&gt;
</para>

</sect1>

<sect1 id="short">
<title><!--Short Tips-->短い tips</title>

<sect2>
<title><!--Handy Syslog Trick <Emphasis remap="it">Paul Anderson, Tips-HOWTO 
maintainer</Emphasis>-->
お手軽 Syslog トリック 〜Tips-HOWTO 管理人 Paul Anderson
</title>

<para>
<!--
Edit your /etc/syslog.conf, and put in the following line:
-->
<filename>/etc/syslog.conf</filename> を編集して、次の行を入れます。
</para>

<para><programlisting>
  # Dump everything on tty8
  *.*					/dev/tty8
</programlisting></para>

<para>
<!--
One caveat: <Emphasis remap="it">REMEMBER TO USE TABS!</Emphasis>  syslog 
doesn't like spaces...
-->
注意事項：<emphasis>必ず Tab を使うこと！</emphasis> syslog はスペースを
嫌います.....
</para>

</sect2>

<sect2>
<title>
<!--Script to view those compressed HOWTOs. <Emphasis remap="it">
Didier Juges,</Emphasis> <Literal remap="tt">dj@destin.nfds.net</Literal>
-->
圧縮された HOWTO 文書を表示するスクリプト 
〜Didier Juges, &lt;dj@destin.nfds.net&gt;
</title>

<para>
<!--
From a newbie to another, here is a short script that eases looking for
and viewing howto documents.
My howto's are in /usr/doc/faq/howto/ and are gzipped. The file names are
XXX-HOWTO.gz, XXX being the subject.
I created the following script called "howto" in the /usr/local/sbin
directory:
-->
初心者のわたしから同じく初心者のひと向けに、HOWTO 文書の検索と表示が簡単に
できる短いスクリプトを紹介します。たとえば、わたしの環境だと HOWTO 文書は 
<filename class="directory">
/usr/doc/faq/howto/</filename> に圧縮されて入っています。ここで、文書の
ファイル名は、<filename>XXX-HOWTO.gz</filename> であり、XXX の部分はその題名
とします。わたしは、次のような "howto" というスクリプトを作成して、<filename 
class="directory">/usr/local/sbin</filename> に置きました。
</para>
<para>
<programlisting>
  #!/bin/sh
  if [ "$1" = "" ]; then
      ls /usr/doc/faq/howto | less
  else
      gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
  fi
</programlisting>
</para>

<para>
<!--
When called without argument, it displays a directory of the available
howto's. Then when entered with the first part of the file name (before
the hyphen) as an argument, it unzips (keeping the original intact) then
displays the document.
-->
引数なしでコマンドを実行すると、ディレクトリ内にある HOWTO 全部を表示します。
次に、引数としてファイル名の最初の部分(ハイフンより左側)を入力すると、
(もとの文書自体には変更を加えずに)その文書を解凍して、表示します。
</para>

<para>
<!--
For instance, to view the Serial-HOWTO.gz document, enter:
-->
たとえば、<filename>Serial-HOWTO.gz</filename> を表示する場合は、次のように
入力します。
</para>

<para><programlisting>
  $ howto Serial
</programlisting></para>

</sect2>

<sect2>
<title>
<!--Is there enough free space??? <Emphasis remap="it">Hans Zoebelein,
</Emphasis> <Literal remap="tt">zocki@goldfish.cube.net</Literal>-->
空きスペースは充分か？？？ 〜Hans Zoebelein &lt;zocki@goldfish.cube.net&gt;
</title>

<para>
<!--
Here comes a short script which will check from time to time
that there is enough free space available on anything
which shows up in mount (disks, cdrom, floppy...)
-->
マウントされているデバイス(ディスク、CD-ROM、フロッピー...)上に充分な空き
スペースがあるかどうか定期的にチェックする短いスクリプト。
</para>

<para>
<!--
If space runs out, a message is printed every X seconds
to the screen and 1 mail message per filled device is fired up.
-->
空きスペースが無くなると、X 秒ごとにメッセージが表示され、満杯のデバイスが
生じるたびに 1 通のメールが届きます。
</para>

<para>
<!--
#!/bin/sh

#
# $Id: Tips-HOWTO.sgml,v 1.4 2001/07/21 14:58:17 senda Exp $
#

#
# Since I got mysterious error messages during compile when
# tmp files filled up my disks, I wrote this to get a warning
# before disks are full.
#
# If this stuff saved your servers from exploding,
# send praising email to zocki@goldfish.cube.net.
# If your site burns down because of this, sorry but I
# warned you: no comps.
# If you really know how to handle sed, please forgive me :)
#

#
# Shoot and forget: Put 'check_hdspace &#38;' in rc.local.
# Checks for free space on devices every $SLEEPTIME sec.
# You even might check your floppies or tape drives. :)
# If free space is below $MINFREE (kb), it will echo a warning
# and send one mail for each triggering device to $MAIL_TO_ME.
# If there is more free space than trigger limit again,
# mail action is also armed again.
#

# TODO: Different $MINFREE for each device.
# Free /*tmp dirs securely from old junk stuff if no more free space.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'         # device; your put disks here
MINFREE=20480                                   # kb; below this do warning
SLEEPTIME=10                                    # sec; sleep between checks
MAIL_TO_ME='root@localhost'                     # fool; to whom mail warning


# ======= no changes needed below this line (hopefully :) =======
-->
<programlisting>
  #!/bin/sh

  #
  # $Id: Tips-HOWTO.sgml,v 1.4 2001/07/21 14:58:17 senda Exp $
  #

  #
  # ディスクが一時ファイルで満杯になると、コンパイル中に奇妙なメッセージが
  # 表示されるようになったので、これを書いて、ディスクが満杯になる前に警告
  # が表示されるようにした。
  #
  # このスクリプトで君のサーバが爆発を免れたなら、僕にお礼のメールを
  # 送ってちょうだい zocki@goldfish.cube.net
  # このスクリプトで君のサイトが全滅したなら、お気の毒ですが、おいしい
  # 話はそうないものです。責任は負えません。
  # sed の扱いに習熟されている方、おおめに見てださい。:)
  #

  #
  # 自動化する方法：rc.local に 'check_hdspace &#38;' と記述すること。
  # $SLEEPTIME 秒ごとにディスク上の空きスペースをチェックします。
  # フロッピーやテープドライブもチェックできます。:)
  # 空きスペースが $MINFREE (kb) 以下になると、警告メッセージを表示し、
  # 問題のあるデバイスごとに 1 通のメールを $MAIL_TO_ME に送信します。
  # 基準値以上の空きスペースが確保されると、再度スペース不足になった
  # 場合に備えて、メール送信機能が準備されます。
  #

  # TODO: デバイスごとに異なる $MINFREE を設定できるようにすること。
  # 空きスペースがなくなった場合、/*tmp ディレクトリのゴミファイルを
  # 掃除して、空きスペースを作るようにすること。


  DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'         # デバイス; ディスクの設定
  MINFREE=20480                                   # kb; これ以下で警告表示
  SLEEPTIME=10                                    # 秒; チェックの間隔
  MAIL_TO_ME='root@localhost'                     # 誰か; 警告メールの送信先


  # ------- これ以下の部分は、変更する必要がありません (希望) :) -------

  MINMB=0
  ISFREE=0
  MAILED=""
  let MINMB=$MINFREE/1024         # yep, we are strict :)

  while [ 1 ]; do
          DF="`/bin/df`"
	          for DEVICE in $DEVICES ; do
		  ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##`
		
		  if [ $ISFREE -le $MINFREE ] ; then
			  let ISMB=$ISFREE/1024
			  echo  "WARNING: $DEVICE only $ISMB mb free." &#62;&#38;2
			  #echo "more stuff here" &#62;&#38;2
			  echo -e "\a\a\a\a"
			
		 	  if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
				  echo "WARNING: $DEVICE only $ISMB mb free.      (Trigger is set to $MINMB mb)" \
				  | mail -s "WARNING: $DEVICE only $ISMB mb free!" $MAIL_TO_ME
				  MAILEDH="$MAILED $DEVICE"
				  MAILED=$MAILEDH
				  # put further action here like cleaning
				  # up */tmp dirs...
			  fi
			  elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
				  # Remove mailed marker if enough disk space
				  # again. So we are ready for new mailing action.
				  MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
				  MAILED=$MAILEDH
			  fi
			
		  done
		  sleep $SLEEPTIME

  done
</programlisting>
</para>

</sect2>

<sect2>
<title>
<!--Util to clean up your logfiles. <Emphasis remap="it">Paul Anderson, 
Tips-HOWTO Maintainer</Emphasis>&#62;-->
ログファイル掃除ユーティリティ 〜Paul Anderson, Tips-HOWTO 管理者
</title>

<para>
<!--
If you're like me, you have a list with 430 subscribers, plus 100+ messages 
per day coming in over UUCP. Well, what's a hacker to do with these huge logs? 
Install chklogs, that's what. Chklogs is written by Emilio Grimaldo, <Literal 
remap="tt">grimaldo@panama.iaehv.nl</Literal>, and the current version 1.8 
available from ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz.
It's pretty self explanatory to install(you will, of course, check out the 
info in the doc subdirectory).  Once you've got it installed, add a crontab 
entry like this:
-->
わたしと読者が同じ環境にあるとするなら、読者は 430 人の登録者リストと、日に 
100 通以上のメッセージを UUCP 上で受け取っているはずです。こういう場合、
ハッカーならどうやってこの巨大なログを処理するんでしょうか？ そう、
<application>chklogs</application> をインストールすればいいのです。
chklogs は Emilio Grimaldo &lt;grimaldo@panama.iadhv.nl&gt; が作成したもので、
最新バージョンの 1.8 は、<ulink 
url="ftp:iadhv.nl:/pub/users/grimaldo/chklog-1.8.tar.gz">
ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz</ulink> から入手できます。
なによりもまず、これをインストールしましょう(もちろん、<filename 
class="directory">doc</filename> サブディレクトリにある info ファイルも
チェックすること)。
インストールが完了したら、<filename>crontab</filename> に次の行を書き込んで
ください。
</para>
<para>
<screen>
  # Run chklogs at 9:00PM daily.
  00 21 * * *       /usr/local/sbin/chklogs -m
</screen>
</para>
<para>
<!--
While you're at it, mention to the author how nice a peice of software this 
is :)
-->
作業のあいまに、このソフトウェアがどれほど素晴らしいか作者に伝えるのを
忘れないでください。
</para>

</sect2>

<sect2>
<title>
<!--Handy Script to Clean Up Corefiles. <Emphasis remap="it">Otto Hammersmith,
</Emphasis><Literal remap="tt">ohammers@cu-online.com</Literal>-->
<filename>core</filename> ファイル掃除のお手軽スクリプト 〜Otto Hammersmith 
&lt;ohammers@cu-online.com&gt;
</title>

<para>
<!--
Create a file called rmcores(the author calls it handle-cores) with the
following in it:
-->
次のスクリプトを記述した <filename>rmcores</filename> というファイル (
このプログラムの作者は、これを <filename>handle-cores</filename> と呼んで
います) を作成します。
</para>

<para><programlisting>
  #!/bin/sh
  USAGE="$0 &#60;directory&#62; &#60;message-file&#62;"

  if [ $# != 2 ] ; then
          echo $USAGE
          exit
  fi

   echo Deleting...
  find $1 -name core -atime 7 -print -type f -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
</programlisting></para>

<para>
<!--
And have a cron job run it every so often.
-->
そして、<command>cron</command> のジョブとして、これを定期的に起動して
ください。
</para>

</sect2>

<sect2>
<title>
<!--Moving directories between filesystems. <Emphasis remap="it">Alan Cox,
</Emphasis> <Literal remap="tt">A.Cox@swansea.ac.uk</Literal>-->
異なるファイルシステム間でのディレクトリ移動 〜Alan Cox 
&lt;A.Cox@swansea.ac.uk&gt;
</title>

<para>
<!--
Quick way to move an entire tree of files from one disk to another
-->
あるディスクから他のディスクへ、ファイルツリーを丸ごとすばやく移動させる方法。
</para>

<para><programlisting>
  (cd /source/directory &#38;&#38; tar cf - . ) | (cd /dest/directory &#38;&#38; tar xvfp -)
</programlisting></para>

<para>
<!--
<Emphasis remap="it">&lsqb; Change from cd /source/directory; tar....etc.  to 
prevent possibility of trashing directory in case of disaster. Thanks to Jim 
Dennis, jim@starshine.org, for letting me know. -Maint. </Emphasis>-->
<sgmltag>[</sgmltag>事故でディレクトリをダメにしてしまわないように、
<command>cd /source/directory; tar...</command> の部分を変更しました。
これを教えてくれた Jim Dennis &lt;jim@starshine.org&gt; 、ありがとう。〜管理人
<sgmltag>]</sgmltag>
</para>

</sect2>

<sect2>
<title>
<!--Finding out which directories are the largest. <Emphasis remap="it">Mick 
Ghazey,</Emphasis><Literal remap="tt">mick@lowdown.com</Literal>-->
どのディレクトリが一番大きいかを知る 〜Mick Ghazey &lt;mick@lowdown&gt;
</title>

<para>
<!--
Ever wondered which directories are the biggest on your computer?  Here's how 
to find out.
-->
お使いのコンピュータでどのディレクトリが一番大きいか？って思ったことは
ありませんか？ 次のコマンドで判ります。
</para>

<para><programlisting>
  du -S | sort -n
</programlisting></para>

</sect2>

<sect2>
<title><!--The Linux Gazette-->Linux Gazette</title>

<para>
<!--
Kudos go to John Fisk, creator of the Linux Gazette.  This is an excellent 
e-zine plus, it's <Emphasis remap="bf">FREE!!!</Emphasis>  Now what more could 
you ask?  Check it out at:
-->
Linux Gazette の創刊者、John Fisk に栄誉あれ！ 素晴らしいオンラインマガジンで
あるばかりでなく、無料！！！なのです。これ以上何を期待します？ 次のサイトを
チェックしてください。
</para>

<para>
  <ulink url="http://www.linuxgazette.com/">http://www.linuxgazette.com</ulink>
</para>

<para>
<!--
BTW, It turns out that (1) LG is now out on a monthly basis, and (2) John Fisk 
no longer maintains it, the fellows at SSC do.
-->
現在、Linux Gazette は (1) 月刊になり、(2) John Fisk は既に編集を退いて、
SSC が引き継いでいます。
</para>

</sect2>

<sect2>
<title>
<!--Pointer to patch for GNU Make 3.70 to change VPATH behavior.
<Emphasis remap="it">Ted Stern,</Emphasis> <Literal remap="tt">
stern@amath.washington.edu</Literal>-->
GNU Make 3.70 の VPATH まわりの振る舞いを変えるパッチの場所 〜Ted Sterm 
&lt;sterm@amath.washington.edu&gt;
</title>

<para>
<!--
I don't know if many people have this problem, but there is a "feature" of GNU
make version 3.70 that I don't like. It is that VPATH acts funny if you give it
an absolute pathname.  There is an extremely solid patch that fixes this, which
you can get from Paul D. Smith <Literal remap="tt">
&lt;psmith@wellfleet.com&#62;</Literal>.  He also posts the
documentation and patch after every revision of GNU make on the newsgroup
&quot;gnu.utils.bug&quot; Generally, I apply this patch and recompile gmake on 
every system I have access to.
-->
この問題を抱えている人が多いかどうかは分かりませんが、GNU Make のバージョン 
3.70 にはわたしの気に入らない「特徴」があります。VPATH を絶対パス名で与えた
場合、おかしな動作をするのです。これに対処するきわめて安定したパッチを Paul D. 
Smith &lt;psmith@wellfleet.com&gt; が提供しています。また、彼は GNU Make が更新
されるたびに、ニュースグループ gnu.utils.bug にドキュメントとパッチを投稿
しています。わたしは、アクセスするシステムのほぼすべての gmake にこのパッチを
当てて再コンパイルしています。
</para>

</sect2>

<sect2>
<title>
<!--How do I stop my system from fscking on each reboot? <Emphasis remap="it">
Dale Lutz,</Emphasis> <Literal remap="tt">dal@wimsey.com</Literal>-->
リブートのたびにいちいち fsck するのをやめさせるには？ 〜Dale Lutz 
&lt;dal@wimsey.com&gt;
</title>

<para>
<!--
Q:  How do I stop e2fsck from checking my disk every time I boot up.
-->
Q：ブートのたびに e2fsck がディスクをチェックします。やめさせるには？
</para>

<para>
<!--
A:  When you rebuild the kernel, the filesystem is marked as 'dirty' and
so your disk will be checked with each boot.  The fix is to run:
-->
カーネルを再構築すると、そのファイルシステムは "dirty" とマークされ、
その結果、ブートのたびにディスクがチェックされてしまいます。これを
やめさせるには、次のコマンドを実行します。
</para>

<para><programlisting>
  rdev -R /zImage 1
</programlisting></para>

<para>
<!--
This fixes the kernel so that it is no longer convinced that the 
filesystem is dirty.
-->
このコマンドでカーネルが修正されるので、ファイルシステムは "dirty" だと
判断されることがなくなります。
</para>

<para>
<!--
<Emphasis>Note: If using lilo, then add </Emphasis><Literal remap="tt">
read-only</Literal> <Emphasis>to your linux setup in your lilo config file 
(Usually /etc/lilo.conf) </Emphasis>
-->
<note><title>注意</title><para>
lilo を使っている場合、lilo の設定ファイル (通常は、<filename>/etc/lilo.conf
</filename>) の linux 設定の部分に <option>read-only</option> を加えてくださ
い。</para></note>
</para>

</sect2>

<sect2>
<title>
<!--How to avoid fscks caused by "device busy" at reboot time. <Emphasis 
remap="it">Jon Tombs,</Emphasis> <Literal remap="tt">jon@gtex02.us.es
</Literal>-->
リブートの際、"device busy" のせいで fsck されるのを避ける方法 〜Jon Tombs 
&lt;jon@gtex02.us.es&gt;
</title>

<para>
<!--
If you often get device busy errors on shutdown that leave the filesystem in
need of an fsck upon reboot, here is a simple fix:
-->
シャットダウン時に "device busy" エラーが頻発する場合は、リブート時にファイル
システムが fsck されます。以下に簡単な修正方法を述べます。
</para>

<para>
<!--
To <Literal remap="tt">/etc/rc.d/init.d/halt</Literal> or <Literal remap="tt">
/etc/rc.d/rc.0</Literal>, add the line
-->
<filename>/etc/rc.d/init.d/halt</filename> か <filename>/etc/rc.d/rc.0
</filename> に移動し、そして
</para>

<para><programlisting>
  mount -o remount,ro /mount.dir
</programlisting></para>

<para>
<!--
for all your mounted filesystems except /, before the call to umount -a. This
means if, for some reason, shutdown fails to kill all processes and umount the
disks they will still be clean on reboot. Saves a lot of time at reboot for
me.
-->
の一行を、<command>umout -a</command> を呼ぶ前に、<filename 
class="directory">/</filename> を除いた、マウントする予定のすべてのファイル
システムに対して付け加えます。こうすれば、何らかの理由で <command>shutdown
</command> がプロセスの <command>kill</command> に失敗してディスクの 
<command>umount</command> ができなかった場合でも、リブートの際、ディスクは 
"clean" なままです。リブート時間をかなり節約してくれます。

</para>

</sect2>

<sect2>
<title>
<!--How to find the biggest files on your hard-drive. 
<Emphasis remap="it">Simon Amor,</Emphasis> <Literal remap="tt">
simon@foobar.co.uk</Literal>
-->
ハードディスク上の一番大きなファイルを見つける方法 〜Simon Amor 
&lt;simon@foobar.co.uk&gt;
</title>

<para><programlisting>
  ls -l | sort +4n
</programlisting></para>

<para>
<!--
Or, for those of you really scrunched for space this takes awhile but works 
great:
-->
あるいは、ディスクスペースがまさに逼迫している場合には、ちょっと時間が
掛かりますが、効果てきめんの次のコマンドを使ってください。
</para>

<para><programlisting>
  cd /
  ls -lR | sort +4n
</programlisting></para>

</sect2>

<sect2>
<title>
<!--How to print pages with a margin for hole punching. <Emphasis remap="it">
Mike Dickey,</Emphasis> <Literal remap="tt">mdickey@thorplus.lib.purdue.edu
</Literal>
-->
パンチ穴を開けるマージンを取ってプリントアウトする方法 〜Mike Dickey 
&lt;mdickey@thorplus.lib.purdue.edu&gt;
</title>

<para><programlisting>
  #!/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
</programlisting></para>

</sect2>

<sect2>
<title>
<!--A way to search through trees of files for a particular regular expression.
<Emphasis remap="it">Raul Deluth Miller,</Emphasis> <Literal remap="tt">
rockwell@nova.umd.edu</Literal>-->
特定の正規表現を使ってファイルツリーを検索する方法 〜Raul Deluth Miller 
&lt;rockwell@nova.umd.edu&gt;
</title>

<para>
<!--
I call this script 'forall'.  Use it like this:
-->
わたしはこのスクリプトを "forall" と呼んでいます。次のようにして使って
ください。
</para>

<para><programlisting>
  forall /usr/include grep -i ioctl
  forall /usr/man grep ioctl
</programlisting></para>

<para>
<!--
Here's forall:
-->
以下は、"forall" の中身です。
</para>

<para><programlisting>
  #!/bin/sh
  if [ 1 = `expr 2 \&#62; $#` ]
  then
          echo Usage: $0 dir cmd [optargs]
          exit 1
  fi
  dir=$1
  shift
  find $dir -type f -print | xargs "$@"
</programlisting></para>

</sect2>

<sect2>
<title>
<!--A script for cleaning up after programs that create autosave and backup 
files. <Emphasis remap="it">Barry Tolnas,</Emphasis> <Literal remap="tt">
tolnas@nestor.engr.utk.edu</Literal>
-->
プログラムが勝手に作ったバックアップファイルやオートセーブファイルを
掃除するスクリプト 〜Barry Tolnas &lt;tolnas@nestor.engr.utk.edu&gt;
</title>

<para>
<!--
Here is a simple two-liner which recursively descends a
directory hierarchy removing emacs auto-save (&num;) and backup (&tilde;) 
files, .o files, and  TeX .log files. It also compresses .tex files and
README files. I call it 'squeeze' on my system.
-->
以下で紹介するのは、<application>emacs</application> のオートセーブファイル(
<filename>#</filename>)、バックアップファイル(<filename>~</filename>)、
<filename>.o</filename> ファイル、<application>TeX</application> の 
<filename>.log</filename> ファイルについて、ファイル階層を再帰的に下降して
削除する簡単な 2 行モノです。<filename>.tex</filename> と <filename>README
</filename> ファイルの圧縮もします。わたしはこれを "sqeeze" と呼んでいます。
</para>

<para><programlisting>
  #!/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 {} \;
</programlisting></para>

</sect2>

<sect2>
<title>
<!--How to find out what process is eating the most memory. <Emphasis 
remap="it">Simon Amor,</Emphasis><Literal remap="tt">simon@foobar.co.uk
</Literal>
-->
一番メモリを食っているプロセスを探す方法 〜Simon Amor &lt;simon@foobar.co.uk
&gt;
</title>

<para><programlisting>
  ps -aux | sort +4n
</programlisting></para>

<para>
<!--
-OR-
-->
または、
</para>

<para><programlisting>
  ps -aux | sort +5n
</programlisting></para>

</sect2>

<sect2>
<title>
<!--Rigging vi for C programming, <Emphasis remap="it">Paul Anderson,
</Emphasis><Literal remap="tt">Tips-HOWTO Maintainer</Literal>-->
C プログラミング向けに <application>vi</application> をいじる 〜Paul Anderson 
Tips-HOWTO 管理者
</title>

<para>
<!--
I do a lot of C programming in my spare time, and I've taken the time to
rig vi to be C friendly.  Here's my .exrc:
-->
わたしは、暇があると C プログラムを書いてます。その合間に、<application>
vi</application> で C を書きやすくするための修正を加えました。以下がわたしの 
<filename>.exrc</filename> です。
</para>

<para><programlisting>
  set autoindent
  set shiftwidth=4
  set backspace=2
  set ruler
</programlisting></para>

<para>
<!--
What does this do?  autoindent causes vi to automatically indent each line
following the first one indented, shiftwidth sets the distance of &circ;T to 4 
spaces, backspace sets the backspace mode, and ruler makes it display the line
number.  Remember, to go to a specific line number, say 20, use:
-->
これが何をしているかというと、まず <option>autoindent</option> は、最初に一度
インデントを入れるとそれ以下の行でも自動的にインデントを入れるものです。
<option>shiftwidth</option> は、<command>&circ;T</command> をスペース 4 つ
分に設定するもので、<option>backspace</option> は、backspace モードに
設定するもの、<option>ruler</option> は、行番号を表示するものです。
特定の行番号に移動する場合、たとえば 20 行目に行くには、次のコマンドを
使います。
</para>

<para><programlisting>
  vi +20 myfile.c
</programlisting></para>

</sect2>

<sect2>
<title>
<!--Using ctags to ease programming.-->
ctags を使って、プログラミングをやりやすくする方法
</title>

<para>
<!--
Most hackers already have ctags on their computers, but don't use it.  It can 
be very handy for editing specific functions.  Suppose you have a function, in 
one of many source files in a directory for a program you're writing, and you 
want to edit this function for updates.  We'll call this function foo().  You 
don't where it is in the source file, either.  This is where ctags comes in 
handy. When run, ctags produces a file named tags in the current dir, which is 
a listing of all the functions, which files they're in and where they are in 
said files.  The tags file looks like this:
-->
たいていのハッカーは、コンピュータ上に ctags を入れていますが、使ってません。
でも、これは特定の関数を編集する際にとても便利です。たとえば、ある関数があり、
それが作成中のプログラム用ディレクトリ内のたくさんのソースファイルのひとつに
入っていて、ちょうど更新のためにその関数の編集をしたいのだとします。そして、
この関数の名前は、<function>foo()</function> だとして、これをどのソース
ファイルに入れたのか忘れてしまったとします。ctags が便利なのはそういう場合
です。ctags を実行すると、<filename>tags</filename> というファイルが
カレントディレクトリに作成され、そのファイルにすべての関数が表示されます。
そして、それらがどのファイルにあるのか、そのファイル内のどこにあるのかを
教えてくれます。<filename>tags</filename> ファイルの中身は次のようなものです。
</para>

<para><programlisting>

  ActiveIconManager	iconmgr.c	/^void ActiveIconManager(active)$/
  AddDefaultBindings	add_window.c	/^AddDefaultBindings ()$/
  AddEndResize	resize.c	/^AddEndResize(tmp_win)$/
  AddFuncButton	menus.c	/^Bool AddFuncButton (num, cont, mods, func, menu, item)$/
  AddFuncKey	menus.c	/^Bool AddFuncKey (name, cont, mods, func, menu, win_name, action)$/
  AddIconManager	iconmgr.c	/^WList *AddIconManager(tmp_win)$/
  AddIconRegion	icons.c	/^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
  AddStartResize	resize.c	/^AddStartResize(tmp_win, x, y, w, h)$/
  AddToClientsList	workmgr.c	/^void AddToClientsList (workspace, client)$/
  AddToList	list.c	/^AddToList(list_head, name, ptr)$/
</programlisting></para>

<para>
<!--
To edit, say AddEndResize() in vim, run:
-->
<application>vim</application> で、たとえば <function>AddEndResize()
</function> を編集する場合は、次のようにします。
</para>

<para><programlisting>
  vim -t AddEndResize
</programlisting></para>

<para>
<!--
This will bring the appropriate file up in the editor, with the cursor located 
at the beginning of the function.
-->
これによって、エディタに適切なファイルが読み込まれ、カーソル位置が指定した
関数の最初にきます。
</para>

</sect2>

<sect2>
<title>
<!--Why does sendmail hang for 5 minutes on startup with RedHat? <Emphasis 
remap="it">Paul Anderson,</Emphasis><Literal remap="tt">paul@geeky1.ebtech.net
</Literal>-->
Red Hat で sendmail が起動時に 5 分間ハングする理由 〜Paul Anderson 
&lt;paul@geeky1.ebtech.net&gt;
</title>

<para>
<!--
This is a fairly common problem, almost to the point of being a FAQ.  I don't
know if RedHat has fixed this bug in their distribution, but you can repair it
yourself.  If you look in your /etc/hosts file, you will find it looks 
something like:
-->
これは、FAQ の対象になるくらい広く知られた問題です。Red Hat のディストリ
ビューションでこのバグが修正されたのかどうかは知りませんが、自分で直すこと
もできます。<filename>/etc/hosts</filename> ファイルを覗くと、次のように
なっているのが分かると思います。
</para>

<para><screen>
  127.0.0.1		localhost	yourbox
</screen></para>

<para>
<!--
When sendmail starts, it does a lookup on your hostname(in this example, 
yourbox). It then finds that the IP for yourbox is 127.0.0.1, sendmail doesn't 
like this, so it does the lookup again.  It continues with this for a while 
until it eventually gives up and exits.  Fixing the problem is extremely easy,
edit your /etc/hosts file and change it to something like this:
-->
<application>sendmail</application> は起動時にホスト名(上記の例では、
<option>yourbox</option>) を探します。そして、<option>yourbox</option> の IP 
が <option>127.0.0.1</option> であることを知るわけですが、<application>
sendmail</application> はこの IP が嫌いなので、もう一度、探そうとします。
これを何度か繰り返して、最後に諦めて終了してしまいます。この問題を解決するのは
とても簡単で、<filename>/etc/hosts</filename> ファイルを開いて、たとえば次の
ように変更するだけです。
</para>

<para><screen>
  127.0.0.1		localhost
  10.56.142.1		yourbox
</screen></para>

</sect2>

<sect2>
<title>
<!--How do I configure RedHat for using color-ls? <Emphasis remap="it">Paul 
Anderson,</Emphasis> <Literal remap="tt">paul@geeky1.ebtech.net</Literal>-->
Red Hat で color-ls を使うための設定方法 〜Paul Anderson 
&lt;paul@geeky1.ebtech.net&gt;
</title>

<para>
<!--
RedHat's distribution comes with color-ls, however why they don't configure
it for colour use by default is beyond me.  Here's to fix it.
-->
Red Hat ディストリビューションには color-ls が同梱されていますが、
どうして初期設定の色使いのまま放置されているのか理解に苦しみます。
以下は、それを修正するものです。
</para>

<para>
<!--
First, type eval `DIRCOLORS`
-->
まず、<userinput>eval `DIRCOLORS`</userinput> とタイプします。
</para>

<para>
<!--
Next, alias ls='ls -&#045;color=auto'
-->
次に、<userinput>alias ls='ls --color=auto'</userinput> とします。
</para>

<para>
<!--
And put the 'alias.....' in your /etc/bashrc
-->
そして、上記 <userinput>alias.....</userinput> を <filename>/etc/bashrc
</filename> に記述します。
</para>

</sect2>

<sect2>
<title>
<!--How do I find which library in /usr/lib holds a certain function? 
<Emphasis remap="it">Pawel Veselow,</Emphasis>
<Literal remap="tt">vps@unicorn.niimm.spb.su</Literal>
-->
特定の関数が <filename>/usr/lib</filename> のどのライブラリにあるか
探す方法 〜Pawel Veselow &lt;vps@unicorn.niimm.spb.su&gt;
</title>

<para>
<!--
What if you're compiling and you've missed a library that needed linking in?
All gcc reports are function names...  Here's a simple command that'll
find what you're looking for:
-->
コンパイルの途中でリンクする必要があるライブラリが見当たらない場合、どうしま
す？ <command>gcc</command> が報告するのは関数名だけです。以下の簡単なコマンド
で、その関数を見つけることができます。
</para>

<para><programlisting>
  for i in *; do echo $i:;nm $i|grep tgetnum 2&#62;/dev/null;done
</programlisting></para>

<para>
<!--
Where tgetnum is the name of the function you're looking for.
-->
上記の <option>tgetnum</option> という部分に、探している関数名が
はいります。
</para>

</sect2>

<sect2>
<title>
<!--I compiled a small test program in C, but when I run it, I get no 
output!-->
C の簡単な test プログラムをコンパイルしたけれど、実行しても何も出力されない！
</title>

<para>
<!--
You probably compiled the program into a binary named test, didn't you?
Linux has a program called test, which tests if a certain condition is true,
it never produces any output on the screen.  Instead of just typing
test, try: ./test
-->
おそらく、そのプログラムをコンパイルして、<filename>test</filename> という
名前のバイナリを作成したのではないでしょうか？ Linux には <filename>test
</filename> というプログラムがもともと存在しています。これは、ある条件が
真か否かをテストするプログラムで、真の場合は画面に何も表示しません。単に 
<userinput>test</userinput> と打つのではなく、<userinput>./test</userinput> 
と打ってみてください。
</para>

</sect2>

</sect1>

<sect1 id="detaild">
<title><!--Detailed Tips-->詳しい Tips</title>

<sect2>
<title>
<!--Sharing swap partitions between Linux and Windows. <Emphasis remap="it">
Tony Acero,</Emphasis> <Literal remap="tt">ace3@midway.uchicago.edu</Literal>
-->
Linux と Windows でスワップパーティションを共有する方法 〜Tony Acero 
&lt;ace3@midway.uchicago.edu&gt;
</title>

<para>

<orderedlist>
<listitem>

<para>
<!--
 Format the partition as a dos partition, and create the Windows
swap file on it, but don't run windows yet. (You want to keep the swap
file completely empty for now, so that it compresses well).
-->
まず、対象となるパーティションを DOS パーティションとしてフォーマットして、
そのパーティション上に Windows スワップファイルを作成します。しかし、まだ 
Windows は起動しないでください(あとで圧縮がよく効くように、この時点では
スワップファイルを空にしておいてください)。
</para>
</listitem>
<listitem>

<para>
<!--
 Boot linux and save the partition into a file.  For example if the partition 
was /dev/hda8:
-->
Linux を起動して、上記パーティションをファイルとして保存します。たとえば、
パーティションが <filename>/dev/hda8</filename> であるとすると、以下の
ようにします。
</para>

<para><programlisting>
  dd if=/dev/hda8 of=/etc/dosswap
</programlisting></para>

</listitem>
<listitem>

<para>
<!--
 Compress the dosswap file; since it is virtually all 0's it will compress 
very well
-->
DOS スワップファイルを圧縮します。ほぼすべて 0 が並んでいるので、圧縮は非常に
よく効きます。
</para>

<para><programlisting>
  gzip -9 /etc/dosswap
</programlisting></para>

</listitem>
<listitem>

<para>
<!--
 Add the following to the /etc/rc file to prepare and install the swap space 
under Linux:
-->
<filename>/etc/rc</filename> ファイルに次のような行を加えて、Linux 上に
スワップスペースを準備し、インストールします。
</para>

<para><note><title>注意</title><para>
<!--
XXXXX is the number of blocks in the swap partition
-->
<option>XXXXX</option> の部分には、スワップパーティションのブロック数が
入ります。
</para></note>
</para>

<para><programlisting>
  mkswap /dev/hda8 XXXXX
  swapon -av   
</programlisting></para>

<para>
<!--
Make sure you add an entry for the swap partition in your /etc/fstab file
-->
<filename>/etc/fstab</filename> ファイルにこのスワップパーティションの
エントリを加えるのを忘れないでください。
</para>

</listitem>
<listitem>

<para>
<!--
 If your init/reboot package supports /etc/brc or /sbin/brc add the
following to /etc/brc, else do this by hand when you want to boot to
dos&verbar;os/2 and you want to convert the swap partition back to the
dos/windows version:
-->
お使いの init および reboot パッケージが <filename>/etc/brc</filename> か 
<filename>/sbin/brc</filename> をサポートしている場合、次の行を <filename>
/etc/brc</filename> に付け加えてください。サポートしていない時は、DOS もしくは 
OS/2 をブートする場合でスワップパーティションを DOS/Windows バージョンに
戻したい場合に、下記を手動で入力してください。
</para>


<para><programlisting>
  swapoff -av
  zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
</programlisting></para>

<para>
<!--
&num; Note that this only writes the first 100 blocks back to the partition. 
I've found empirically that this is sufficient 
-->
<note><title>注意</title><para>
上記は、最初の 100 ブロックをパーティション上に書き戻すだけです。
わたしは、経験上これで充分だと思っています。
</para></note></para>

</listitem>

</orderedlist>
</para>

<para>
<!--
&gt;&gt;  What are the pros and cons of doing this?
-->
&gt;&gt; この方法の長所と短所
</para>

<para>
<!--
Pros: you save a substantial amount of disk space.
-->
長所：かなりのディスクスペースを節約できること。
</para>

<para>
<!--
Cons: if step 5 is not automatic, you have to remember to do it by hand,
and it slows the reboot process by a nanosecond :-)
-->
短所：ステップ 5 を自動化できない場合、毎回手動で入力しなければならないので、
リブートが 1 ナノ秒遅れてしまうこと。:-)
</para>

</sect2>

<sect2>
<title>
<!--Desperate Undelete. <Emphasis remap="it">Michael Hamilton,</Emphasis> 
<Literal remap="tt">michael@actrix.gen.nz</Literal>-->
削除してしまったファイルをなんとか復活させる方法 〜Michael Hamilton 
&lt;michael@actrix.gen.nz&gt;
</title>

<para>
<!--
Here's a trick I've had to use a few times.
-->
ここでは、わたしがこれまで何度か使ったトリックを紹介します。
</para>

<para>
<!--
Desperate person's text file undelete.
-->
削除してしまったテキストファイルをなんとかして復活させる方法。
</para>

<para>
<!--
If you accidentally remove a text file, for example, some email, or
the results of a late night programming session, all may not be lost.
If the file ever made it to disk, ie it was around for more than 30
seconds, its contents may still be in the disk partition.
-->
テキストファイル、たとえばメールや深夜のプログラミング作業の成果といった
ものを誤って削除してしまったとしても、諦めてしまうのは早計です。
ファイルが一旦ディスクに書き込まれていた場合、すなわち、だいたい 30 秒以上
そこにあった場合は、その内容はまだディスクパーティションに残っているかも
しれません。
</para>

<para>
<!--
You can use the grep command to search the raw disk partition for the
contents of file.
-->
<command>grep</command> コマンドを使って、生のディスクパーティション
(raw disk partition)を検索し、ファイルの中身を探すことができます。
</para>

<para>
<!--
For example, recently, I accidentally deleted a piece of email.
So I immediately ceased any activity that could modify that partition:
in this case I just refrained from saving any files or doing any compiles
etc.  On other occasions, I've actually gone to the trouble of bring the
system down to single user mode, and unmounted the filesystem.
-->
たとえば、最近わたしは誤ってあるメールを削除してしまいました。その際、まず
わたしはメールが存在していたパーティションの内容を変更してしまうような作業を
すべて急遽取りやめました。この時は、ファイルを保存したり、プログラムを
コンパイルしたりしないようにしました。それ以外にも、実際にシステムをシングル
ユーザモードに落として、そのファイルシステムを umount したこともありました。
</para>

<para>
<!--
I then used the egrep command on the disk partition:  in my case the email
message was in /usr/local/home/michael/, so from the output from df,
I could see this was in /dev/hdb5
-->
次に、わたしは、対象となるディスクパーティションに <command>egrep</command> 
コマンドをかけました。その際、削除してしまったメールは <filename 
class="directory">/usr/local/home/michael/</filename> に置かれていたので、
<command>df</command> コマンドの出力から、それが <filename>/dev/hdb5</filename>
 にあることが分かりました。
</para>

<para><programlisting>
  sputnik3:~ % df
    Filesystem         1024-blocks  Used Available Capacity Mounted on
    /dev/hda3              18621    9759     7901     55%   /
    /dev/hdb3             308852  258443    34458     88%   /usr
    /dev/hdb5             466896  407062    35720     92%   /usr/local

  sputnik3:~ % su
  Password:
  [michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 &#62; /tmp/x
 </programlisting></para>

<para>
<!--
Now I'm ultra careful when fooling around with disk partitions, so I
paused to make sure I understood the command syntax BEFORE pressing
return.  In this case the email contained the word 'ftp' followed by
some text followed by the word 'COL'.  The message was about 20 lines
long, so I used -50 to get all the lines around the phrase.  In the
past I've used -3000 to make sure I got all the lines of some source
code.  I directed the output from the egrep to a different disk
partition - this prevented it from over writing the message I was
looking for.
-->
わたしは、ディスクパーティションをいじる際は極端に慎重になるので、ここでも
リターンキーを押す前に、一旦間をおいて、コマンドの構文が正確かどうか確認しま
した。この場合、メールには "ftp" という単語が含まれていて、その後に "COL" 
という単語で始まる文章が続いていました。メールのメッセージは 20 行くらいだった
ので、<option>-50</option> を使って該当する文章の前後すべてのテキストを
取得するようにしました。以前は、<option>-3000</option> を使って、ソースコード
のすべての行を取得できるようにしたこともありす。また、ここでは、<command>
egrep</command> の出力を別のディスクパーティションにリダイレクトしています。
これは、探しているメールが、<command>egrep</command> の出力で上書きされて
しまうことを防止するためです。
</para>

<para>
<!--
I then used strings to help me inspect the output
-->
つづいて、<command>strings</command> を使って、取得した出力を検査して
みました。
</para>

<para><programlisting>
  strings /tmp/x | less
</programlisting></para>

<para>
<!--
Sure enough the email was in there.
-->
思った通り、メールはその中に入っていました。
</para>

<para>
<!--
This method can't be relied on, all, or some, of the disk space may
have already been re-used.
-->
この方法は、ディスクスペースの全部または一部がすでに上書きされているような
場合には、成功しないかもしれません。
</para>

<para>
<!--
This trick is probably only useful on single user systems.  On
multi-users systems with high disk activity, the space you free'ed up
may have already been reused.  And most of use can't just rip the box
out from under our users when ever we need to recover a file.
-->
このトリックが有効なのは、おそらく一人でシステムを使っている場合だけかもしれ
ません。複数のユーザがいて、ディスクが頻繁に書き換えられる場合だと、削除
したファイルが置かれていた空間はすでに上書きされてしまっているかもしれません。
それに、たいてのユーザは、ファイルを復旧する必要があるときでも、マシンを勝手に
独り占めするようなことはできません。
</para>

<para>
<!--
On my home system this trick has come in handy on about three
occasions in the past few years - usually when I accidentally trash
some of the days work.  If what I'm working survives to a point where
I feel I made significant progress, it get's backed up onto floppy, so
I haven't needed this trick very often.
-->
わたしの自宅のシステムでは、過去数年で 3 度ほど、数日分の成果を間違って捨てて
しまった際に、このトリックが役立ちました。こうした作業を通じて自分でもたいへん
進歩したと思っている点は、フロッピーに作業のバックアップを取っておくように
なったことです。おかげで、このトリックを使う機会は随分減りました。
</para>

</sect2>

<sect2>
<title>
<!--How to use the immutable flag. <Emphasis remap="it">Jim Dennis,</Emphasis> 
<Literal remap="tt">jadestar@rahul.net</Literal>
-->
immutable(不変)フラグの使い方 〜Jim Dennis &lt;jadestar@rahul.net&gt;
</title>

<para>
<!--
Use the Immutable Flag
-->
Immutable フラグを使おう。
</para>

<para>
<!--
Right after you install and configure your system
go through the /bin, /sbin/, /usr/bin, /usr/sbin and
/usr/lib (and a few of the other usual suspects and
make liberal use of the 'chattr +i command'.  Also add that
to the the kernel files in root.  Now 'mkdir /etc/.dist/'
copy everything from /etc/ on down (I do this in two steps
using /tmp/etcdist.tar to avoid recursion) into that directory.
(Optionally you can just create /etc/.dist.tar.gz) -&#045; and
mark that as immutable.
-->
システムのインストールと設定が済んだら、すぐに <filename>/bin</filename>、
<filename>/sbin</filename>、<filename>/usr/bin</filename>、<filename>
/usr/sbin</filename>、<filename>/usr/lib</filename> (その他、およそ
必要そうな場所) にいって、どんどん <command>chattr +i</command> コマンドを実行
します。そして、root になって、カーネルファイルにもそのコマンドを実行
してください。次に、<command>mkdir /etc/.dist/</command> を実行して、<filename>
/etc</filename> 以下にある全ファイルをそのディレクトリにコピーします
(わたしは、一旦 <filename>/tmp/etcdist.tar</filename> を作ることで、コピーが
ループするのを防いでいます。<filename>/etc/.dist.tar.gz</filename> を
作るというのでもいいでしょう)。そして、それらのファイルも immutable にします。
</para>

<para>
<!--
The reason for all of this is to limit the damage that you can
do when logged in as root.  You won't overwrite files with a
stray redirection operator, and you won't make the system
unusable with a stray space in an 'rm -fr' command (you might
still do alot of damage to your data &#045;- but your libs and
bins will be safer.
-->
このようにしておくと、root でログインした際でも起こりうるダメージを最小限に
食い止められます。リダイレクション操作を誤ってファイルを上書きすることが
なくなりますし、<command>rm -fr</command> コマンドで間違ってスペースを
入れてしまいシステムを不安定にしてしまうこともなくなります(その場合でも、
データにはかなりのダメージが及ぶかもしれませんが、ライブラリとバイナリの
安全性は向上します)。
</para>

<para>
<!--
This also makes a variety of security and denial of service
exploits either impossible or more difficult (since many of
them rely on overwriting a file through the actions of some
SUID program that *isn't providing an arbitrary shell command*).
-->
また、この作業によりセキュリティ全般が強化され、サービスを停止させるような
攻撃が不可能もしくはより困難になります(そうした攻撃の多くは、SUID された
プログラムの挙動を悪用してファイルを上書きする方法をとっていますが、
そうした SUID されたプログラムは本来勝手なシェルコマンドの実行を許すもの
ではないからです)。
</para>

<para>
<!--
The only inconvenience of this is when building and
doing your 'make install' on various sorts of system binaries.
On the other hand it also prevents the 'make install' from
over-writing the files.  When you forget to read the Makefile
and chattr -i the files that are to be overwritten (and the
directories to which you want to add files) &#045;- the make fails,
you just use the chattr command and rerun it.  You can also
take that opportunity to move your old bin's, libs, or whatever
into a .old/ directory or rename or tar them or whatever.
-->
この作業による唯一の短所は、様々なシステムコマンドをビルドして、
<command>make install</command> する際に不便が生じるという点です。
つまり、<command>make install</command> する場合でも、ファイルを上書き
できなくなってしまいます。あらかじめ <filename>Makefile</filename> を読んで、
上書きされることになるファイル(およびファイルがインストールされるディレクトリ)
に対して <command>chattr -i</command> を実行するのを忘れると、make が失敗
してしまいます。そうした場合は、<command>chattr</command> を実行し、
再度 make してください。また、その機会を利用して、古いバイナリやライブラリ
などを <filename>.old/</filename> ディレクトリに移動させたり、リネームしたり、
<command>tar</command> でまとめておいたりするといいかもしれません。
</para>

</sect2>

<sect2>
<title>
<!--A suggestion for where to put new stuff. <Emphasis remap="it">Jim Dennis,
</Emphasis> <Literal remap="tt">jadestar@rahul.net</Literal>-->
新しいモノを入れる場所についての提言 〜Jim Dennis &lt;jadestr@rahul.net&gt;
</title>

<para>
<!--
All new stuff starts under /usr/local! or /usr/local/`hostname`
-->
新しいモノはみんな <filename>/usr/local</filename> か <filename>
/usr/local/'hostname'</filename> から始めよう。
</para>

<para>
<!--
If your distribution is one that leaves /usr/local empty
then just create your /usr/local/src, /usr/local/bin etc
and use that.  If your distribution puts things in the /usr/local
tree than you may want to 'mkdir /usr/local/`hostname`' and
give the 'wheel' group +w to it (I also make it SUID and SGID
to insure that each member of the wheel group can only mess with
their own files thereunder, and that all files created will
belong to the 'wheel' group.
-->
お使いのディストリビューションの <filename>/usr/local</filename> 以下が
空になっているなら、自分で <filename>/usr/local/src</filename> や 
<filename>/usr/local/bin</filename> などを作成して使いましょう。
お使いのディストリビューションの <filename>/usr/local</filename> 以下に
すでにファイルツリーがある場合は、<command>mkdir /usr/local/'hostname'
</command> を実行した上で、'wheel' グループに書き込み権限(<option>+w</option>)
を与えましょう(わたしはさらに、SUID および SGID することで、wheel グループの
個々のメンバだけがそこにファイルを置け、それらの全ファイルが wheel グループに
属するようにしています)。
</para>

<para>
<!--
Now discipline yourself to *ALWAYS! ALWAYS! ALWAYS!* put new
packages under /usr/local/src/.from/&dollar;WHEREVER&lowbar;I&lowbar;GOT
&lowbar;IT/
(for the .tar or whatever files) and build them  under
/usr/local/src (or .../&dollar;HOSTNAME/src).  Make sure that it
installs under the local hierarchy.  If it *absolutely must*
be installed back in /bin or /usr/bin or somewhere else -&#045;
put a symlink from the local heirarchy to each element that
when anywhere else.
-->
これからは、いつも！いつも！いつも！新しいパッケージを <filename>
/usr/local/src/.from/取得場所の名前(&dollar;WHERE_I_GOT_IT)/</filename> に
置いて、<filename>/usr/local/src</filename> (もしくは <filename>...
/&dollar;HOSTNAME/src</filename>) 以下でコンパイルするようにしましょう。
もし「どうしても」<filename>/bin</filename> や <filename>/usr/bin</filename> 
等にインストールしなければならないプログラムであるなら、<filename>/usr/local/
</filename> 以下の階層から必要な場所にシンボリックリンクを張るようにしま
しょう。
</para>

<para>
<!--
The reason for this &#045;- even though it's more work -&#045; is that
it helps isolate what has to be backed up and restored or
reinstalled in the event of a full re-install from the
distribution medio (usually CD these days).  By using a
/usr/local/.from directory you also keep an informal log
of where your sources are coming from -&#045; which helps when
you're looking for new updates -&#045; and may be critical when
monitoring the security announcement lists.
-->
こうした作業は面倒ではありますが、これによって、ディストリビューションの
メディア(最近は CD が一般的です)から全体を再インストールする際に、
バックアップやリストアすべき部分と、再インストールすべき部分を分けやすく
なります。また、<filename>/usr/local/.from</filename> ディレクトリを使う
ことで、ソースをどこから取ってきたかを不完全ながら記録しておくことが
できるので、パッケージを更新するときに便利ですし、セキュリティ関係の
アナウンスを追いかけるときには非常に重要な情報になります。
</para>

<para>
<!--
One of my systems at home (the one I'm calling from)
was put together before I adopted these policies for myself.
I still don't "know" all the ways that it differs from the
stock "as installed" system.  This is despite the fact that
I've done very little with my home system's configuration
and I'm the *only* person who ever uses it.
-->
自宅のシステムのひとつ(今これを書いているマシン)を使い始めた当時、
わたしはまだこうした方針を実行していませんでした。それゆえ、
「インストールした当初の」状態と現在の状態とがどれだけ違うか未だに
よく分かっていません。マシンのシステム設定はほとんどいじっておらず、
これを使っているのは自分だけであるにも関わらず、そんな状況なのです。
</para>

<para>
<!--
By contrast the systems I've set up at work (when I was thrust
into the role of system administrator there) have all been
configured this way -&#045; have been administered by many
contractors and other MIS people, and have had a large number
of upgrades and package installations.  Nonetheless I have a
very good idea which precise elements were put in *after*
the initial installation and configuration.
-->
それにひきかえ、わたしが職場(システム管理者の役をやらされていた
頃です)で設置したシステムは、すべて上記の方法で設定しました。
それらのマシンは、契約先の SE や情報関係の様々なひとびとによって
管理されてきましたが、今でもわたしは、最初にインストールと設定を
した後に組み入れられたパッケージがどれなのかをつぶさに理解しています。
</para>

</sect2>

<sect2>
<title>
<!--Converting all files in a directory to lowercase. <Emphasis remap="it">
Justin Dossey,</Emphasis> <Literal remap="tt">dossey@ou.edu</Literal>-->
ディレクトリ内のファイル名を小文字に変換する 〜Justin Dossey 
&lt;dossey@ou.edu&gt;
</title>

<para>
<!--
I noticed a few overly difficult or unnecessary procedures recommended
in the 2c tips section of Issue 12.  Since there is more than one, I'm
sending it to you:
-->
Linux Gazette の issue 12 に掲載されている 2c tips (訳注：原文は、
<ulink url="http://www.linuxgazette.com/issue12/lg_tips12.html#lowerit">
こちら</ulink>です。なお、この Tips は、<ulink 
url="http://www.linuxgazette.com/issue13/lg_tips13.html#notes">Linux Gazette 
issue 13</ulink> に掲載されています。
山口さん、情報提供ありがとうございました。)
で、ちょっと難しすぎるか不必要と思われる手順が紹介されていることに
気付きました。方法はいろいろあるわけなので、わたしからもその手順を紹介します。
</para>

<!--
#!/bin/sh
         # lowerit
	 # convert all file names in the current directory to lower case
	 # only operates on plain files -&#045;does not change the name of directories
	 # will ask for verification before overwriting an existing file
-->

<para><programlisting>
  #!/bin/sh
         # lowerit
	 # カレントディレクトリの全ファイル名を小文字に変換するスクリプト
	 # 通常ファイルだけを対象とする -&#045;ディレクトリ名は変更しない
	 # 既存のファイルを上書きする前に、確認を求める
	 for x in `ls`
	   do
	   if [ ! -f $x ]; then
	     continue
	     fi
	   lc=`echo $x  | tr '[A-Z]' '[a-z]'`
	   if [ $lc != $x ]; then
	     mv -i $x $lc
	   fi
	   done
</programlisting></para>

<para>
<!--
Wow.  That's a long script.  I wouldn't write a script to do that;
instead, I would use this command:
-->
ん〜、長すぎます。わたしなら、こういうふうには書きません。むしろ、
次のコマンドを使います。
</para>

<para><programlisting>
  for i in * ; do [ -f $i ] &#38;&#38; mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
  done;
</programlisting></para>

<para>
<!--
on the command line.
-->
これなら、コマンドラインで出来ます。
</para>

<para>
<!--
The contributor says he wrote the script how he did for
understandability (see below).
-->
この投稿者は、彼が使っている方法を分かり易いスクリプトにしたと
いっていますが(下記参照)、ちょっと違うと思う。
</para>

<para>
<!--
On the next tip, this one about adding and removing users, Geoff is
doing fine until that last step.  Reboot?  Boy, I hope he doesn't reboot
every time he removes a user.  All you have to do is the first two
steps.  What sort of processes would that user have going, anyway?  An
irc bot?  Killing the processes with a simple
-->
次の tips は、ユーザの追加と削除についてです。Geoff は上手くやっています
が、最後の手順がよくない。リブート？ 彼がユーザの削除のたびにリブート
していないことを望みます。最初のふたつの手順で充分です。そのユーザがどんな
プロセスを走らせているのでしょうか？ IRC ロボットでしょうか？ そうした
プロセスは次のコマンドで簡単に kill できます。
</para>

<para><programlisting>
  kill -9 `ps -aux |grep ^&#60;username&#62; |tr -s " " |cut -d " " -f2`
</programlisting></para>

<para>
<!--
Example, username is foo
-->
たとえば、ユーザ名が foo なら、以下のようになります。
</para>

<para><programlisting>
  kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
</programlisting></para>

<para>
<!--
That taken care of, let us move to the forgotten root password.
-->
これで充分です。忘れてた root パスワードが必要になりますが。
</para>

<para>
<!--
The solution given in the Gazette is the most universal one, but not the
easiest one.  With both LILO and loadlin, one may provide the boot
parameter &quot;single&quot; to boot directly into the default shell with no 
login or password prompt.  From there, one may change or remove any passwords
before typing &quot;init 3&quot; to start multiuser mode.
Number of reboots: 1
The other way
Number of reboots: 2
-->
Linux Gazette で紹介されてる解決法は最も汎用性がありますが、一番簡単な方法と
いうわけじゃありません。LILO や loadlin を使っているなら、ブートパラメタとして 
&quot;<option>single</option>&quot; を入力して、ログイン手続きやパスワードなし
でデフォルトシェルを直接起動できます。その状態でパスワードを変更するか削除した
上で、&quot;<option>init</option>&quot; を入力し、マルチユーザモードに
移行すればいいと思います。この場合、リブート回数は 1 回で済みます。そうでない
と 2 回必要です。
</para>

<para>
Justin Dossey
</para>

</sect2>

<sect2>
<title>
<!--How To Upgrade Sendmail <Emphasis remap="it">Paul Anderson,</Emphasis> 
<Literal remap="tt">paul@geeky1.ebtech.net</Literal>-->
Sendmail をアップグレードする方法 〜Paul Anderson &lt;paul@geeky1.ebtech.net
&gt;
</title>

<para>
<!--
We're starting from raw, clean source.  First, obtain the sendmail source code.
I've d/led version 8.9.0, which is, as you will notice, bleeding edge.
I grabbed it from ftp.sendmail.org:/pub/sendmail/sendmail.8.9.0.tar.gz
-->
ここでは、何も修正されていないオリジナルのソースを使います。まず、sendmail の
ソースコードを入手します。わたしは、version 8.9.0 を取ってきました。これは、
お気づきかと思いますが、安定版ではありません。取得先は、
<ulink url="ftp://ftp.sendmail.org:/pub/sendmail/sendmail.8.9.0.tar.gz">
ftp.sendmail.org:/pub/sendmail/sendmail.8.9.0.tar.gz</ulink> でした。
</para>

<para>
<!--
It's about 1Meg, and considering I'm running 8.7.6, I think it's worth the
effort.  If this works, you'll undoubtedly hear about it, elsewise
I can't get the new HOWTO versions out without e-mail:)
-->
これは 1 メガ前後あり、現在わたしは 8.7.6 を使っていることを考慮すると、
この作業はなかなか大変です。上手くいけばメールのやりとりができますが、
そうでないと、メールなしでは HOWTO の新版を出せなくなってしまいます。:)
</para>

<para>
<!--
Now, once you've got the source d/led, unpack it.  It'll create a dir called
<Literal remap="tt">sendmail-8.9.0</Literal> in the current directory.  Change 
into that directory, read the README and RELEASE&lowbar;NOTES files(and be 
amazed at the updates they've done).  Now, cd in src.  This is where most of 
your work will be done.
-->
ソースを落としたら、解凍します。解凍すると、カレントディレクトリに <filename>
sendmail-8.9.0</filename> というサブディレクトリが作成されます。その
ディレクトリに移動して、<filename>README</filename> と <filename>
README_NOTES</filename> を読みましょう(そして、開発者たちが達成した更新結果に
驚愕しましょう)。次に、<filename>src</filename> ディレクトリに移動します。
作業のほとんどは、ここで行います。
</para>

<para>
<!--
<Emphasis>A quick note: Sendmail is a small, powerful and well-written program.
The sendmail binary itself compiled in less than 5 minutes on my
5x86 133 with 32Megs RAM!  The entire compile and install(sans config)
took under 15 minutes!</Emphasis>
-->
<note><title>簡単な注意</title><para>
sendmail は、コンパクトでパワフルな非常に良くできたプログラムです。
sendmail のバイナリは、5x86 133MHx の CPU と 32M バイト RAM のわたしの
環境でも 5 分以下でコンパイルできました。(設定を除いた)コンパイルと
インストール全体で、15 分以下です！</para></note>
</para>

<para>
<!--
I don't normally run BIND on my system, so I found the lines:
-->
わたしは普段自分のシステム上で BIND を動かしていないので、次の行は、
</para>

<para><programlisting>
  # ifndef NAMED_BIND
  #  define NAMED_BIND    1       /* use Berkeley Internet Domain Server */
  # endif
</programlisting></para>

<para>
<!--
and changed the 1 to a 0, ala:
-->
<option>1</option> を <option>0</option> に変更し、以下のようにしました。
</para>

<para><programlisting>
  # ifndef NAMED_BIND
  #  define NAMED_BIND    0       /* use Berkeley Internet Domain Server */
  # endif
</programlisting></para>

<para>
<!--
On Debian 1.3.1, db.h is by default installed in /usr/include/db, instead
of /usr/include, where sendmail hopes to find it.  Change to the src, 
mailstats, makemap, praliases, rmail and smrsh directories and execute
the following command:
-->
Debian 1.3.1 の場合、デフォルトで <filename>db.h</filename> は、sendmail 
で必要とされる <filename>/usr/include</filename> ではなく、<filename>
/usr/include/db</filename> にインストールされます。それゆえ、<filename>src
</filename>、<filename>mailstats</filename>、 <filename>makemap</filename>、 
<filename>praliases</filename>、 <filename>rmail</filename>、 <filename>
smrsh</filename> のそれぞれのディレクトリに移動して、次のコマンドを実行して
ください。
</para>

<para><programlisting>
 ./Build -I/usr/include/db
</programlisting></para>

<para>
<!--
Once you've done that, cd .. and type make install.  There!  Sendmail
version 8.9.0 should now be installed!  This is, of course, assuming you
already have your original configuration.  For everything to work smoothly
on my system, since I host free mailing lists for people using majordomo,
I had to add the following to the beginning of my /etc/sendmail.cf:
-->
以上が済んだら、<userinput>cd ..</userinput> を実行し、<userinput>make 
install</userinput> と打ってください。これで sendmail version 8.9.0 が
インストールされます！ もちろんこれは、自分用の設定ファイルを既にもっている
場合です。わたしは majordomo を使ったフリーメーリングリストをホストしている
ので、すべてをスムースに稼働させるために、次の行を <filename>/etc/sendmail.cf
</filename> に付け加える必要がありました。
</para>

<para><programlisting>
  O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
</programlisting></para>

<para>
<!--
Sendmail 8.9.0 is rather pedantic about directory and file permissions
these days, and will complain about dirs and files in aliases or .forward
files that are group or world writeable.  While it's not a good idea
to disable this pedantry, I am only running with a single person at
the console and I felt it was okay to allow this minor security
hole.  YMMV.
-->
sendmail 8.9.0 は、ディレクトリ配置やファイルパーミッションの設定を最近細かく
チェックするようになっているので、エイリアスとなっているディレクトリや
ファイル、もしくはグループでの書き込み権限や自由な書き込み権限が付けられた 
<filename>.forward</filename> ファイルについて sendmail から文句が出るかも
しれません。こうした細かなチェック機能を停止させることはよい考えではありま
せんが、わたしはシングルユーザでコンソールを使って作業するだけなので、
チェック機能停止が小さなセキュリティホールとなったとしても大丈夫だろうと
思っています。そのあたりは、ご自分の環境にあわせて判断してください。YMMV
</para>

</sect2>

<sect2>
<title>
<!--Some tips for new sysadmins. <Emphasis remap="it">Jim Dennis,</Emphasis> 
<Literal remap="tt">jadestar@rahul.net</Literal>-->
新人システム管理者のための tips 〜Jim Dennis &lt;jadestar@rahul.net&gt;
</title>

<para>
<!--
Create and maintain a /README.`hostname` and/or a
/etc/README.`hostname` <Emphasis>&lsqb;Or possibly /usr/local/etc/README.
`hostname` -Maint. ]</Emphasis>
-->
<filename>/README.'hostname'</filename> か <filename>/etc/README.'hostname'
</filename> のどちらか一方もしくは両方を作って、それを管理すること &lsqb;
あるいは、<filename>/usr/local/etc/README.'hostname'</filename> でもいいで
しょう 〜管理人&rsqb;
</para>

<para>
<!--
Absolutely, from *day one* of administering a system
take notes in an online log file.  You might make
&quot;vi /README.&dollar;(hostname)&quot; a line in root's &nbsp;
/bash&lowbar;logout.
Another way to do this is to write an su or a sudo script
that does something like:
-->
システム管理を始めたその日から、必ずオンラインのログファイルに記録を
付けるようにしましょう。root の <filename>/bash_logout</filename> に 
&quot;<command>vi /README.&dollar;(hostname)</command>&quot; という
一行を入れておくこともできます。あるいは、次のような <command>su</command> 
もしくは <command>sudo</command> スクリプトを書いておいてもよいでしょう。
</para>

<para><programlisting>
  function exit \
          { unset exit; exit; \
            cat ~/tmp/session.$(date +%y%m%d) \
            &#62;&#62; /README.$(hostname) &#38;&#38; \
            vi /README.$(hostname)
            }
  script -a ~/tmp/session.$(date +%y%m%d)
  /bin/su.org -
</programlisting></para>

<para>
<!--
(use the typescript command to create a session log
and create a function to automate appending and updating
the log).
-->
(入力履歴を記録するコマンドを使ってセッションログを取るとともに、関数を
作成して自動的にそのログに追加・更新がなされるようにしています)
</para>

<para>
<!--
I'll admit that I haven't implemented this automation of
policy -&#045; I've just relied on self-discipline so far.
However I have been toying with the idea (even to the
point of prototyping the scripts and shell functions as you
see them).  One thing that holds me back on this is
the 'script' command itself.  I think I'll have to grab the
sources and add a couple of command line parameters (to
pause/stop the script recording from the command line) before
I commit to using this).
-->
わたし自身は、こうした自動化を方針として採用していません。これまで手動で
記録する習慣を守ってきました。ただ、自動化というのもアリかなと思っている
だけです(ご覧のように、スクリプトやシェル関数を作ってみたりはしてるわけ
です)。上記スクリプトで気になる点は、<command>script</command> コマンド
が入っているところです。このコマンドのソースを取ってきて、(コマンド履歴の
記録を一時停止したり中止したり出来るような)コマンドラインパラメタを付け加え
てから、これを使おうと考えています。
</para>

<para>
<!--
My last suggestion (for this round):
-->
わたしの(今回の)最後の提案は、
</para>

<para>
<!--
Root's path should consist of 'PATH=&nbsp;/bin'
-->
root ユーザのパスは、'<envar>PATH=&nbsp;/bin</envar>' とすべきである
</para>

<para>
<!--
That's it.  Nothing else on root's path.  Everything root
does is provided by a symlink from &nbsp;/bin or by an alias or
shell function, or is a script or binary in &nbsp;/bin, or is
typed out with an explicit path.
-->
ということです。root のパスにそれ以外を付け加えるべきではありません。
ルートの作業で使うコマンドは、<filename>/bin</filename> からのシンボリック
リンクかエイリアス、もしくはシェル関数というかたちで提供するか、あるいは、
<filename>/bin</filename> にあるスクリプトかバイナリとするか、絶対パスを指定
するかのいずれかにすべきです。
</para>

<para>
<!--
This makes anyone running as root aware (sometimes painfully
so) of how he or she is trusting binaries.  The wise admin
of a multi-user host will periodically look through his or
here &nbsp;/bin and &nbsp;/.*history files to look for patterns and
loopholes.
-->
こうしておけば、root 権限で作業をする人は、自分がどれほどバイナリを頼りに
しているか(ときには、痛いほど)分かるはずです。マルチユーザのホストを管理する
賢明なシステム管理者なら、自分の <filename>/bin</filename> や <filename>
/.*history</filename> ファイルを定期的に調べて、なんらかのパターンや抜け穴が
ないかどうか探すようになるでしょう。
</para>

<para>
<!--
The really motivated admin will spot sequences
that can be automated, places where sanity checks can be
inserted, and tasks for which &quot;root&quot; privileges should be
temporarily eschewed (launching editors, MTA's and other
large interactive programs with elaborate scripting features
that *might* be embedded in transparent or data files -&#045;
like the infamous vi ./.exrc and emacs ./.emacs and the
even more insidous &dollar;EXINIT and the embedded header/footer
macros).  Naturally those sorts of commands can be run
with something like:
-->
本当にヤル気のあるシステム管理者なら、自動化できる箇所を探し当て、
システムの妥当性を検査するプログラムを必要な場所に置くことで、root 権限が
必要な作業をいちいちしないで済むようにするでしょう
(スクリプトによって機能を細かく調整できる、エディタや MTA その他の対話的な
巨大プログラムについては、透過的なファイルやデータファイルが利用されることに
なるでしょう。たとえば、悪名高い <application>vi
</application> の <filename>./.exrc</filename> や <application>emacs
</application> の <filename>./.emacs</filename>、さらに面倒な <envar>
&dollar;EXINIT</envar> および組み込みヘッダやフッタマクロといったものです)。
当然、そうしたコマンドは、次のように実行することもできます。
</para>

<para><programlisting>
  cp $data $some_users_home/tmp
  su -c $origcommand $whatever_switches
  cp $some_users_home/tmp $data
</programlisting></para>

<para>
<!--
(...where the specifics depend on the command).
-->
(オプションや引数は、コマンドによって異なります)
</para>

<para>
<!--
Mostly these last sorts of precautions are overboard for the
home or &quot;single&quot; user workstation -&#045; but they are very good
policy the admin of a multi-user -&#045; particular a publicly
exposed system (like the one's at netcom).
-->
自宅で利用する場合やユーザが自分だけという場合、後半部分での提案は大げさでは
ありますが、マルチユーザシステムの管理者、特にインターネットに常時接続されて
いる(ネット関連企業などの)システムの管理者の場合、これらは非常に有益な
ポリシーであると思います。
</para>

</sect2>

<sect2>
<title>
<!--How to configure xdm's chooser for host selection. <Emphasis remap="it">
Arrigo Triulzi,</Emphasis> <Literal remap="tt">a.triulzi@ic.ac.uk</Literal>-->
xdm で X サーバのホスト選択ができるようにする設定方法 〜Arrigo Triulzi 
&lt;a.triulzi@ic.ac.uk&gt;
</title>

<para>

<orderedlist>
<listitem>

<para>
<!--
 Edit the file that launches xdm 
(most likely /etc/rc/rc.6 or /etc/rc.local) so that it contains the
following lines in the xdm startup section.
-->
xdm を起動するファイル(たいてい、<filename>/etc/rc/rc.6</filename> か 
<filename>/etc/rc.local</filename> にあります)を開いて、xdm の起動セクション
が次のような内容になるよう編集します。
</para>

<para><programlisting> 
  /usr/bin/X11/xdm
  exec /usr/bin/X11/X -indirect hostname
</programlisting></para>

</listitem>
<listitem>

<para>
<!--
 Edit /usr/lib/X11/xdm/Xservers and comment out the line which
starts the server on the local machine (i.e. starting 0:)
-->
<filename>/usr/lib/X11/xdm/Xservers</filename> を開いて、ローカルマシン上の
X サーバを起動させる行をコメントアウトします(すなわち、起動しないように
します)。
</para>
</listitem>
<listitem>

<para>
<!--
 Reboot the machine and you're home and away.
-->
マシンをリブートすると、ローカルマシン上の X サーバも、リモートマシンの 
X サーバも両方使えるようになります。
</para>
</listitem>

</orderedlist>

</para>

<para>
<!--
I add this because when I was, desperately, trying to set it up for
my own subnet over here it took me about a week to suss out all the
problems.
-->
これを紹介するのは、わたしがなんとか自分自身のサブネットを設定して現在の
状態にもってくる際、すべての問題の解決に 2 週間ちかくかかったからです。
</para>

<para>
<!--
Caveat: with old SLS (1.1.1) for some reason you can leave a -nodaemon
after the xdm line -&#045; this does <Emphasis remap="bf">NOT</Emphasis> work 
for later releases.
-->
注意：古い SLS (1.1.1) を使う場合、理由はよく分かりませんが、xdm の設定行に 
<option>-nodaemon</option> という記述を入れたままにすることもできます。
ただし、これは、それ以降のバージョンには当てはまりません。
</para>

</sect2>

</sect1>

<sect1>
<title>日本語訳について</title>
<para>
<literallayout>
翻訳：鴨澤眞夫(1996/10/01) &lt;JCD00743@niftyserve.jp&gt;
更新：千旦裕司(2001/03/20) &lt;ysenda@pop01.odn.ne.jp&gt;
校正：山口さん(2001/07/07) &lt;keita@kyomu.net&gt;
</literallayout>
</para>
<para>
誤訳・誤字・脱字等がありましたら、&lt;JF@linux.or.jp&gt; まで
ご連絡ください。
</para>

</sect1>


</article>
