UNIX Tips

**目次**
Navigatorショートカットキー【Netscape Navigator】
statのモード【C,Perl,Fortran】
DNS解決確認クライアントについて 【BIND】
インストールされているサーバのヴァージョンを調べる 【汎用】
tar.gz、tar.bzip2解凍方法の基本 【UNIX全般】
Linuxカーネルのアップグレードと再構築 【Linux】
ファイル名の補完 【シェル】
ライブラリパスの通し方 【UNIX全般】
make時にうまくいかずに焦った時は 【UNIX全般】
サイトのミラーリング 【wget】
Apache設定ファイルの設定確認 【apache】
コマンドラインからファイル入力を行う 【UNIX全般】
作業の一時中断および再開(FTPの例) 【UNIX全般】
"find" Tips 【UNIX全般】
ファイルの種類を知るには 【UNIX全般】
シグナル一覧 【UNIX全般】
リダイレクション一覧 【シェル全般】
cronの振る舞い 【UNIX全般】
psの便利なオプション 【UNIX全般】
コマンド「id」 【UNIX全般】
vi Tips 【vi】
csh使用宣言のfオプション【csh】
tailの便利なオプション 【UNIX全般】
grepの便利なオプション 【UNIX全般】
インストール前のmanファイルを読むには 【UNIX全般】
mailコマンドの便利なオプション 【UNIX全般】
コマンドの連続実行 【UNIX全般】
envコマンドの便利な使い方 【UNIX全般】
pidof, killallコマンド 【UNIX全般】

**Link**
Windows Tips
Perl Tips
Adobe Acrobat Tips
Bits of knowledge(豆知識)
その他のTips


Navigatorショートカットキー【Netscape Navigator】
項目 UNIX Windows
ブックマークに追加 --- [Ctrl]+[D]
ブックマークを表示 [Alt]+[B] [Ctrl]+[B]
URIを指定 [Alt]+[O] [Ctrl]+[O]

(2001.4.10 記)
▲top

statのモード【C,Perl,Fortran】

 UNIXのシステムコールstat(2)によりファイルのステイタスを取得する(C,Perl,Fortranのstat関数による取得法を下部に記す)。
 さてその時に「モード」(Cならst_mode、Perl・Fortranなら3番目に入っている値は何か。ファイルのモードの10進数である。8進数にすればお馴染みの数値に変わる。
(例:mode=33261の場合、8進数にすると0100755(100755でないことに注意)。即ち"010=普通のファイル"、次の"0"はset-user-ID,set-group-ID,sticky、次の"755"がパーミッション)。

【C】
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>

void main(void)
{
    struct stat buffer;

    stat("filename", &buffer);
    printf("st_mode:%ld\n", buffer.st_mode);
}

【Perl (Standard style)】
$mode = (stat filename)[2];
print 'filemode(Type and Permission)=',"$mode\n";

【Perl (Objective style after Ver.5)】
use File::stat;
$obj_stats = stat(filename);
print 'filemode(Type and Permission)=' . $obj_stats->mode . "\n";

【Fortran】
integer stat, statb(13)
character filename*(*)
stat ( filename , statb )
write(6,*) 'statb(3)=',statb(3)

(2000.4.10 記)
(2001.2.19 改訂(Perl5追加))
▲top

DNS解決確認クライアントについて【BIND】

 UNIX(およびLinux)におけるDNSとして事実上標準となっているのはBINDです。このBINDに付属するツールnslookupが長らくUNIX(およびLinux)におけるDNS解決確認クライアントとして使用されてきました。しかし最近は(多分BIND8.2から?)nslookupを使用するとdigかhostを使えというメッセージが出されます。対話式nslookupは将来的に破棄される方向のようです。実際、
dig hostname
host hostname
dig IP address
host IP address
などで快適にDNS解決確認が行えます。

(2001.5.15 記)
▲top

インストールされているサーバのヴァージョンを調べる【汎用】

 インストールされているサーバソフトのヴァージョンを調べる方法を記述します。UNIXでもWindowsでも、コマンドラインから実行すれば同じです。パスが通っていない場合はフルパス指定する必要があります。

【sendmail】
 ◆ローカル:
  sendmail -d0.1 -bp
 ◆リモート:
  telnet hostname 25
  −ヴァージョンが表示される
  quit

【apache】
 ◆ローカル:
  httpd -v
 ◆リモート:
  telnet hostname 80
  head
  −ヴァージョンが表示される

【bind】
 ◆ローカル:
  named -v
  あるいは
  nslookup -type=txt -class=chaos version.bind
 ◆リモート:
  nslookup -type=txt -class=chaos version.bind hostname
  −ヴァージョンが表示される
  (※セキュリティ向上の為、ヴァージョン番号を非表示にしているホストもある)

(2001.9.18 記)
(2001.11.20 更新 = bind追加)
▲top

tar.gz、tar.bzip2解凍方法の基本【UNIX全般】
圧縮方式 コマンド
tar.gz gtar zxvf xxxxxxxxxxxxx.tar.gz
(gtarは大概tarへのシンボリックリンク)
tar.bz2 tar --bzip2 -xvf xxxxx.tar.bz2
(bzip2解凍の為のショートオプションはlであったりIであったりjであったり…tarのヴァージョンによって全く異なり困りものだ。上記のようにロングネームで指定してやればtarのヴァージョンに関わりなく解凍できる。)

(2001.9.26 記)
(2001.10.15 更新)
▲top

Linuxカーネルのアップグレードと再構築【Linux】

su
cd /usr/src
rm linux
tar --bzip -xvf kernel-2.4.10.tar.bz2
mv linux linux-2.4.10
ln -s linux-2.4.10 linux
cd linux
make mrproper
make xconfig(或いはconfig,menuconfig)
make dep;make clean
make bzImage
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.10
ln -sf /boot/vmlinuz-2.4.10 /boot/vmlinuz
cp System.map /boot/System.map-2.4.10
ln -sf /boot/System.map-2.4.10 /boot/System.map
make modules
make modules_install
vi /etc/lilo.conf
lilo
fdformat /dev/fd0
mkbootdisk 2.4.10
reboot

(2001. 9.27 記)
(2001.10.31 更新)
(2002. 1. 7 更新)
▲top

ファイル名の補完【シェル】

 シェルによっては(bash,zsh,ksh,tcsh等)、ファイル名の補完機能を持つ。これはとても便利な機能なので是非使おう。
 使用例1:
nihira@zeus% ls -la
total 28
drwxr-xr-x 7 root root 4096 Sep 25 20:33 .
drwxr-xr-x 6 root root 4096 Oct 1 19:48 ..
drwxr-xr-x 4 root root 4096 Sep 26 18:30 BUILD
drwxr-xr-x 8 root root 4096 Sep 25 20:33 RPMS
drwxr-xr-x 2 root root 4096 Sep 26 18:30 SOURCES
drwxr-xr-x 2 root root 4096 Sep 26 18:30 SPECS
drwxr-xr-x 2 root root 4096 Sep 26 14:18 SRPMS
-rw-r--r-- 1 root root 4 Oct 2 11:51 memo.txt
nihira@zeus% cd R
ここで[Tab]キーを押すことにより残りのPMSが補完される。

 使用例2:
nihira@zeus% ls -la
total 28
drwxr-xr-x 7 root root 4096 Sep 25 20:33 .
drwxr-xr-x 6 root root 4096 Oct 1 19:48 ..
drwxr-xr-x 4 root root 4096 Sep 26 18:30 BUILD
drwxr-xr-x 8 root root 4096 Sep 25 20:33 RPMS
drwxr-xr-x 2 root root 4096 Sep 26 18:30 SOURCES
drwxr-xr-x 2 root root 4096 Sep 26 18:30 SPECS
drwxr-xr-x 2 root root 4096 Sep 26 14:18 SRPMS
-rw-r--r-- 1 root root 4 Oct 2 11:51 memo.txt
nihira@zeus% vi m
ここで[Tab]キーを押すことにより残りのemo.txtが補完される。

 使用例3:
nihira@zeus% tc
ここで[Tab]キーを押すことにより$PATH中にあるtcから始まるファイル名が表示される。
tc tcbck tclmain tclsh tcopy tcov tcpdump tcsh tctl
nihira@zeus% tc

これは「あのコマンド、確かtcから始まってたな。」といったうろ覚えのコマンドを実行する助けとなる。

(2001.10. 2 記)
(2003. 2. 5 更新)
▲top

ライブラリパスの通し方【UNIX全般】

ライブラリパスの追加方法(~/.cshrcへの記述例):
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/xxx/yyy/zzz

(2001.10.12 記)
▲top

make時にうまくいかずに焦った時は【UNIX全般】

 make cleanしてから再度最初からトライする。最も基本的で最も効果的な対策だと思います。煮詰まった頭で色々余計なことを考えてトライ&エラーしていてもどうにもなりません。ふっと肩の力を抜いて「make clean」して、最初からやり直す…おお!うまくいった!という経験が何度かあります。

(2001.10.12 記)
▲top

サイトのミラーリング【wget】

wget -m http://www.abc.xyz.jp -nH -o ./mirror.log

-m : ="-r -N -l inf -nr"
 ----------------------------------------------------
 -r : recursive web-suck -- use with care!
 -N : don't re-retrieve files unless newer than local.
 -l : maximum recursion depth (inf or 0 for infinite).  -nr : don't remove `.listing' files.
 ----------------------------------------------------
-nH : don't create host directories.
-o : log messages to FILE.

(2001.10.15 記)
▲top

Apache設定ファイルの設定確認【apache】

apacheの設定ファイルを変更したらいきなりapacheの再起動をせずに以下のコマンドで設定内容にスペルミス等ないかを確認してから行う。

/usr/local/apache/bin/apachectl configtest

(2001.10.23 記)
▲top

NICの速度変更方法【Linux】

100BASEにする
ifconfig eth0 media 100baseTX

自動認識にする
ifconfig eth0 media autoselect

(2001.11.20 記)
▲top

コマンドラインからファイル入力を行う【UNIX全般】

 2〜3行のちょっとしたファイルを作成したい時、いちいちviで作成するのは面倒である。そのような場合は以下のようにすればよい。

nihira %> cat > test.txt
Takuma,
I am Takuma, too.
-NIHIRA Takuma
^D

 上記例で「^D」と表記したのは「編集が終了したら[Ctrl+D]キーで抜ける」という意味だ。
 上記例を実行すれば以下のようにファイルがちゃんと作成されているはずだ。

nihira %> ls -l test.txt
-rw-r--r-- 1 nihira users 42 Jan 30 05:11 test.txt
nihira %>

 この編集作業中には大概の場合[Backspace]キーは利用できないと思う。その場合は[Ctrl+H]を使用すれば前の文字の削除を行える。
 (前行に関しては寡聞にして知らない。知ってらっしゃる方、教えて下さい)

 この方法の利点は「viのように全画面占領しない為、直前のls等の出力を見ながらファイル作成が可能」な点である。

 なお、以下のようにすることで既存のファイルに追加書きをすることも可能。

nihira %> ls -l test.txt
-rw-r--r-- 1 nihira users 42 Jan 30 05:11 test.txt
nihira %> cat >> test.txt
See you.
^D
nihira %> ls -l test.txt
-rw-r--r-- 1 nihira users 51 Jan 30 05:12 test.txt

(2001. 1.30 記)
(2001.12.10 公開)
(2003. 1.30 更新)
▲top

作業の一時中断および再開(FTPの例)【UNIX全般】

 以下は「FTP先のディレクトリにREADMEが置いてあった。これを読んでからgetなりなんなりを行いたい」という場合の例である。

nihira %> ftp ftp.penguins.co.jp[Enter]
ftp > get README[Enter]
ftp > ^Z

nihira %> cat README[Enter]

nihira %> %[Enter]
ftp ftp.penguins.co.jp[Enter]
ftp >

 以上のように「Ctrl+Z」で中断、「%」で再開を行うことができる。
 但し、上記例だと「ftp ftp.abc.xyz.jp」を表示されたところで表示が一時停止されることに注意が必要である。そこで[Enter]を押すことにより作業が再開される。

(2001. 1.30 記)
(2001.12.10 公開)
▲top

"find" Tips【UNIX全般】

 カレントディレクトリ以下の最後にアクセスした時間(atime)が最近1日以内のファイルを全て表示する。

find ./ -atime -1

 カレントディレクトリ以下のファイル中、サイズが0バイトであるものを削除する。

find . -size 0c -exec rm {} \;
 カレントディレクトリ以下のファイル中、xyz以降に修正されたファイルを削除する(xyz以降であるからxyz自体は削除されない)。

find . -newer filename -exec rm {} \;

(2001.12.11 記)
(2002. 5.14 追記)
(2002. 5.17 追記)
▲top

ファイルの種類を知るには【UNIX全般】

 fileコマンドを使うとよい。

例:
nihira %> file aaa.txt
aaa.txt: ASCII text

(2001.12.12 記)
▲top

シグナル一覧【UNIX全般】

 以下に一例を示す。
 自分のシステムのシグナル一覧を知る際には「kill -l」或いは「trap -l」を実行すること。

シグナル名 シグナル番号 概要
SIGHUP 1 端末ハングアップ
SIGINT 2 割り込みキー
SIGQUIT 3 中断
SIGILL 4 不正な命令
SIGTRAP 5 トレース トラップ
SIGIOT 6 I/O トラップ命令
SIGEMT 7 エミュレータ トラップ命令
SIGFPE 8 浮動小数点例外
SIGKILL 9 キル
SIGBUS 10 バス エラー
SIGSEGV 11 セグメンテーション違反
SIGHSYS 12 システムコールへの間違った引数
SIGPIPE 13 読み出しでオープンされていないパイプへの書込み
SIGALRM 14 アラームクロック
SIGTERM 15 ソフトウェア終了
SIGUSR1 16 ユーザ定義シグナル1
SIGUSR2 17 ユーザ定義シグナル2
SIGCLD 18 子の終了
SIGPWR 19 電源障害による再起動

(2002.1.18 記)
(2002.3.8 更新)
▲top

リダイレクション一覧【シェル全般】

 忘れがち、或いは混同しがち。メモっとこう。
(但しcsh系の場合noclobberの設定による)

作業 sh系
(sh,bash,ksh,zsh等)
csh系
(csh,tcsh等)
STDOUTのリダイレクト > file > file
STDOUTの追加リダイレクト >> file >> file
STDERRのリダイレクト 2> file STDERRのみを取り出すことができない
STDERRの追加リダイレクト 2>> file STDERRのみを取り出すことができない
STDOUTとSTDERRのリダイレクト > file 2>&1 >& file
STDOUTとSTDERRの追加リダイレクト >> file 2>&1 >>& file
STDOUTとSTDERRをパイプを通してコマンドに渡す 2>&1 | command |& command
STDOUTとSTDERRを別々のファイルにリダイレクト > file1 2> file2 例:(command > file1) >& file2

(2002.2.22 記)
▲top

cronの振る舞い【UNIX全般】

1. cronはサブシェルをホームディレクトリで開始する。
2. cronが設定する環境変数は以下の通り。
  HOME (ex. /home/taro)
  LOGNAME (ex. taro)
  SHELL(=/usr/bin/sh)
  PATH(=/usr/bin)

 自分の普段使っている環境と、cronに設定して実行する場合とでは環境変数が全く違う状況になることを忘れてはならない。システムコマンド等をスクリプト中に記述する際にはフルパスで記述する癖をつけておくとよい。

(2002. 3.18 記)
(2003. 1.21 更新)
▲top

psの便利なオプション【UNIX全般】

ps -U uid(username)    実UIDで選択する(名前も可)
ps -u uid(username)    実行UIDで選択する(名前も可)

(2002. 4. 1 記)
▲top

コマンド「id」【UNIX全般】

現在の実ユーザID、実効ユーザID、実グループID、実効グループIDの名前または値を表示。「id -a」により、複数グループに属している場合に全てを表示。

(2002. 4. 1 記)
▲top

vi Tips【vi】

括弧の片方にカーソルを合わせ「%」を入力 → 対応する括弧に移動。

(2002. 5.14 記)
▲top

csh使用宣言のfオプション【csh】

#!/bin/csh -f
とスクリプト1行目に書くことは何を意味するか。
-f オプションは ~/.cshrc を読み込まない事を表す。逆に言えば、-f オプションを付けていないスクリプトでは ~/.cshrc中で定義している設定(alias等)が有効になる。

(2002. 5.15 記)
▲top

tailの便利なオプション【UNIX全般】

tail -f filename       ファイル最終10行をリアルタイム表示
tail -f -n 25 filename    ファイル最終25行をリアルタイム表示

(2002. 7. 4 記)
▲top

grepの便利なオプション【UNIX全般】

ps -ef | grep xyz を実行すると、"grep xyz"というプロセス自体も表示されてしまう。

nihira3395810Jul 03-0:44/usr/bin/xyz
nihira597981009:39:01pts/20:00/home/nihira/axyz
nihira6113653960109:47:45pts/20:00grep xyz

ps -ef | grep -v grep | grep xyzとすると

nihira3395810Jul 03-0:44/usr/bin/xyz
nihira597981009:39:01pts/20:00/home/nihira/axyz

と、「-v」で指定した文字列を含まないものを表示してくれる。

(2002. 7. 5 記)
▲top

インストール前のmanファイルを読むには【UNIX全般】

nroff -man aaaaa.n | moreとすればよい。
(例)nroff -man gettyu.1 | more

(2002.11. 8 記)
▲top

mailコマンドの便利なオプション【UNIX全般】

mail -c address1,address2 address3
とすれば、
To: address3
Cc: address1,address2
なメールが送れる。

(2003. 2. 4 記)
▲top

コマンドの連続実行【UNIX全般】

command1; command2; command3
とすれば、
command1、command2、command3を順次実行できる。

command1 && command2
とすれば、
command1が正常終了した場合のみ(終了値が0である場合のみ)、command2を実行する。

(2003. 2. 5 記)
▲top

envコマンドの便利な使い方【UNIX全般】

 色々な環境で一つのスクリプトを実行する場合にコマンドenvを活用すると便利だ。

 例えばPerlのスクリプトがあるとする。Aというホストではperlは/usr/local/bin/perlにあり、Bというホストではperlが/usr/bin/perlにあるとする。スクリプトの1行目を書き直さなければならない。しかしenvを使えば以下のように書ける。

#!/usr/bin/env perl

 envコマンドが環境変数PATHからperlを探してくれる。
 勿論envが/usr/binに無ければ動かないが、大概envは/usr/binにあるようだ。

(2003. 2. 8 記)
▲top

pidof, killallコマンド【UNIX全般】

 便利なコマンド2つ。

killall httpd ... httpdプロセスを全てkill
pidof httpd ..... httpdのpidを全て表示

(pidofの例)
# pidof httpd
7989 7988 7987 17326 17081 17054 17053 17052 17050 17049 29313

(2006. 1. 27 記)
▲top


Text by 仁衡琢磨(anaksimandros@nihira.jp)


Back to the index.

home


Valid XHTML1.0! Valid CSS!