Unix Command

UNIX系OSのコマンドのメモ。FreeBSDだったりLinux(Debian)だったり。ごった煮。
[最終更新日: 2009/12/19]

1. バックスラッシュ \

| INDEX
\ls .

上のように入力すると、aliasの適用されてない状態のコマンドを実行できる。

2. ユーザについての情報を参照する

| | INDEX

idコマンドなどが使える。以下は出力例

> id USER
uid=1001(USER) gid=1001(USER) groups=1001(USER),4(GROUP_1)

UID,GID,所属グループの確認に使える。

3. マシンの状態を見るコマンド

| | INDEX

マシン状態の確認に。

top
マシンの状態を監視する
dmesg
マシンの起動メッセージなどを見る
lspci
システムのPCIバスと、接続されている全てのデバイスに関する情報を表示する
procを覗く
cat /proc/cpuinfo とかする。
free
メモリ利用状況の確認をする。通常、空いているメモリを積極的にバッファ・キャッシュに割り当てるということので、実質的にはfree + buffer + cachedの合計が余りメモリという解釈になるようだ。ただ、bufferとcacheのすべてが転用可能な領域でないので、vmstat -aを使って、freeとinactの合計を見たほうが空きメモリの判定としてはよいかもしれない。

4. プロセス関連コマンド

| | INDEX

よく使うプロセス管理コマンド。

ps
起動しているプロセスの確認。ps auxwなどすると詳細に。fオプションでプロセスツリーの確認が可能。
STAT(状態表示)は、R=Running or Runnable, S=Sleeping, T=Stopping(Suspend), Z=Zombieなどの意味がある。
kill [PID]
プロセスを止める。オプションのPID(プロセスID)はpsなどで調べる。まずは、kill TERM [PID]で。必殺はkill KILL [PID]で。
killall [プロセス名]
ちょっと荒っぽいけど、便利。こっちはプロセス名で指定できる。

5. 検索 find

| | INDEX

以下、検索例。

# 全ディレクトリでindex.htmlという名前のファイル

find  / -name index.html -print

# カレントディレクトリ配下で拡張子がhtmlのファイル

find . -name '*.html' -print

# カレントディレクトリ配下でファイルサイズが100kb以上

find . -type f -size +100k -print

# カレントディレクトリ配下で名前がindex.htmlかindex2.html

find . \( -name index.html -o -name index2.html \) -print

# カレントディレクトリ配下で3分以内に更新されたファイル

find . -mmin -3 -type f -print

# カレントディレクトリ配下で3日以上アクセスされていないファイルをリストアップ

find . -atime +3 -type f -print;

参考:

-type d        ディレクトリのみを検索対象にする
-type f        ファイルのみを検索対象にする
-mtime / -mmin 最後に修正された時間をもとにする
-atime / -amin 最後にアクセスされた時刻をもとにする
-ctime / -cmin 最後に属性が変更された時刻をもとにする

6. カーネル関連のコマンド

| | INDEX
uname
-rでカーネルのバージョン。-a で詳細情報。
lsmod
ロードされているカーネルモジュールの確認(FreeBSDだとkldstatかな)。ちなみに、モジュールのロードは modprobe で。

7. ネットワーク状況の確認 netstat / arp

| | INDEX

ネットワーク状況の確認をする(Linux)。--inetでIP関連の情報だけを指定できる。

まずは、ルーティング情報を参照。

netstat -r

次にLISTENしているポートの確認(サービス状況の確認)をする。

netstat --inet -l

これだとポート番号とかがわかりにくいので、-nオプションもつけるとわかりやすい。

netstat --inet -ln

なお、ネットワークカードの状態などは、ifconfigで参照できる。

さらに下位の情報であるARP(IPアドレスとMACアドレスの対応)の確認にはarpが利用できる。

# 現在のARPテーブルを表示
arp -a
# ARPテーブルからエントリを削除
arp -d 192.168.1.10
# ARPテーブルへエントリを追加 (MACアドレスは':'区切りで渡す)
arp -s 192.168.1.100 00:00:00:00:00:00

8. DNS名前解決の確認 host / nslookup

| | INDEX

リゾルバの設定(/etc/resolv.conf)の設定がうまくいっているか確認。

ホスト名からIPアドレスを求める(正引き)、または、IPアドレスからホスト名を求める(逆引き)ことができる。

# 正引き
host [ホスト名]
nslookup [ホスト名]
dig [ホスト名]
# 逆引き
host [IPアドレス]
nslookup [IPアドレス]
dig -x [IPアドレス]

9. パケットのダンプ tcpdump

| | INDEX

パケット解析ができる。以下の場合、logfile にリダイレクトでダンプ。

tcpdump > logfile

書式は、Time Source:ip.port > Destination:ip.port : ....というふうになっている。以下は実例のサンプル。(IPアドレス/ホストの箇所だけぼかしてあります)

13:52:43.885750 [SOURCE_IP].1292 > [DESTINATION_IP].telnet: S 1793236573:1793236573(0)
win 29364 <mss 1460,nop,wscale 1,nop,nop,timestamp 0 0,nop,nop,sackOK> (DF)

10. シェルの変更 chsh

| | INDEX

ユーザのシェルを変更する。利用できるシェルは、chsh -lするか、/etc/shellsをみる。

chsh -s /bin/tcsh

11. 圧縮解凍コマンド

| | INDEX

大雑把なメモ。オプションの中身はmanで確認可能。

lzh
圧縮 lha c file.lzh Target
解凍 lha x file.lzh
zip
圧縮 zip file.zip Target
解凍 unzip file.zip
gz
圧縮 gzip Target > file.gz
解凍 gunzip file.gz
bz2
圧縮 bzip2 Target
解凍 bzip2 -d file.bz2
tar
圧縮 tar cvf file.tar Target
解凍 tar xvf file.tar
tar.gz
圧縮 tar czvf file.tar.gz Target
解凍 tar xzvf file.tar.gz
tar.bz2
圧縮 tar cjvf file.tar.gz Target
解凍 tar xjvf file.tar.gz
cab
解凍 cabextract file.cab

12. 圧縮解凍 パスワード付ZIP

| | INDEX

暗号化の目的なら、gpgの利用も検討のこと。

パスワード付ZIP圧縮ファイルの作成
zip -e hoge.zip hoge.txt
Enter password: [パスワード入力]
Verify password: [パスワード再入力]

コマンドのオプションから直接パスワードを指定する場合は、

zip -P [パスワード] -e hoge.zip hoge.txt

とすることもできる。ただし、シェルのコマンド履歴などに注意する。

パスワード付ZIP圧縮ファイルの解凍

通常のunzipと、パスワードを指定する以外は変わらない。

unzip hoge.zip
Enter password: [パスワード入力]
unzip -P [パスワード] hoge.zip

zcatのようなことをしたい場合は、以下の例のようにunzipに-pオプション(STDOUTへ出力)をつけて実行する。

unzip -p hoge.zip | less
Enter password: [パスワード入力]

13. ファイルの暗号化(GnuPG) gpg

| | INDEX
暗号化
> gpg -c secure.txt
[Enter PassPhrase]
> ls
secure.txt secure.txt.gpg
復号化
> gpg secure.txt.gpg
[Enter PassPhrase]

復号結果を標準出力に欲しい場合は、

> gpg -d secure.txt.gpg

14. ログの監視

| | INDEX

特定のログファイルの更新状況を監視するなら、

tail -f /var/log/messages

として閲覧可能。

15. 端末上でメッセージのやりとり write

| INDEX

おそらく、使う可能性のないコマンド。いや、おもしろいのだけど。

あまり解説されてないので、以下に手順をメモしておく。

  1. まず、相手(foo)の端末名を確認する。

    ps -u foo
    18235 pts/0    00:00:00 tcsh
    

    ここで、pts/0 となっているのが端末名。

  2. メッセージを送出する。Ctrl+D で終了できる。

    write foo pts/0
    

    日本語を扱う方法は不明。そもそも、相手の作業の妨害以外の用途を知らない。

なお、このメッセージを受け取りたくない場合は、以下のコマンドを使う。

mesg n

これを.cshrcなどシェルの設定ファイルに書いておくと、常時メッセージ拒否状態にできる。

ちなみに、rootだとwallコマンドでログインしてる端末全体にメッセージを送出できる。

.