coreutilsにあるマニアックなコマンドを紹介。

・vdir:
おそらく「ls -l」と同じだと思われる。
例)$ vidr

・yes:
'y'をkillされるまで出力する。
引数を渡すとそれを無限に出力する
例)$ yes "Hello, World"
→Hello, World
→Hello, World
→Hello, World


・logname:
おそらく「whoami」と同じ
例)$ logname
→root

・comm
引数に2つファイルを指定して、比較する(diffとはまた違った出力フォーマット)
例)$ comm hello.py aaa.py 
#!/usr/bin/python  ##共通行
print "Good morning"      ##第一引数のファイルのみにある行
print "Hello, World"  ##共通行
print "go home\n"     ##第二引数のファイルのみにある行

↑インデントで分けている模様


いろいろあるな。
CiscoのFirewallであるASAを管理するソフト、ASDMを起動すると
「Run in Demo Mode」
と出てきます。

どうやらASAをシミュレーションしてくれるようなので、実際にASAがなくても操作感がつかめるらしいです。

「Run in Demo Mode」のチェックボックスをクリックすると
http://www.cisco.com/pcgi-bin/tablebuild.pl/asa
からダウンロードしてくれ、と出てきます。
どうやら、ASDMとは別途インストールが必要なようです。


ここからが厄介なのですが、

Downloads Home →
Products →
Security →
Firewalls →
Adaptive Security Appliances (ASA) →
Cisco ASA 5500-X Series Next-Generation Firewalls →
Cisco ASA 5585-X Adaptive Security Appliance →
Software on Chassis Adaptive Security Appliance (ASA) Device Manager-7.0.2→
ここまできてやっとダウンロードできますw


その後は、簡単にインストールできました。

よーし、触りまくるぞー

Nginxはじめました。

ソースからインストールが面倒だったので、yumで入れました。
バージョンが少し古いですが、テスト用なので我慢。

設定ファイルのnginx.confを見てビックリ(゚д゚)!

http {
    server {
        listen 80;
        server_name example.com;
   ・・・・・・
    }
}

あれ?どっかで見たような・・・ってJunosじゃん
firewall {
    family inet {
        filter XXX {
            term 1 {
                ・・・
            }
        }
    }
}

設定ファイルはこういう形態が好まれるのかもしれません。


IPアドレスから国や地域を調べたい時、毎回Webで調べていましたがコマンドでもできるようです。
これでアクセスログ解析が捗りますわ。

インストール:
#yum install GeoIP

MAXMAIND社が提供しているフリーのGeoIPデータベースをダウンロード
http://dev.maxmind.com/geoip/legacy/geolite/
GeoLite Country、City、ASNがあるので、3つともダウンロードすべし。

wgetでダウンロードして解凍後、特定のディレクトリに移動
gzip -d GeoIP.dat.gz
gzip -d GeoIPASNum.dat.gz
gzip -d GeoLiteCity.dat.gz
mv Geo* /usr/share/GeoIP/


IPの調べ方:
8.8.8.8(Googleの公開DNS)を調べてみた。

# geoiplookup 8.8.8.8
GeoIP Country Edition: US, United States
GeoIP ASNum Edition: AS15169 Google Inc.

なるほど、便利!!
このコマンド自体、MAXMIND社の方が作ったみたいです
(manページより)


statコマンドはファイルの状況を表示。
具体的には、iノード番号や各種時間、種類などを表示してくれる。
(普段はあんまり使わない様な気する。)

書式:
stat [OPTION] Filename

例:
# stat index.html
  File: `index.html'
  Size: 10821           Blocks: 24         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 786850      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-08-11 03:38:44.961638272 +0900
Modify: 2013-02-26 22:38:23.702800481 +0900
Change: 2013-02-26 22:38:23.702800481 +0900


regular file:ファイルの種類。他に
”block special file”や”directory”などがある。
Links:ハードリンクの数
Access:最終アクセスタイム。最後に読みんだ時間
Modify:最終編集タイム。最後にエディタなどで編集した時間(開くだけでは更新されない)
Change:最終変更タイム。最後に属性 or 内容が書き換えられた時間。
HTMLやJavascript、CSSなどはクライアントへダウンロードされるため、サイズが小さいほうが良いのは当たり前です。

ここで重要なのはダウンロードされたそれらのファイルを読むのはプログラムだということです。
高級言語は人間が読むために様々な手法を使ってわかりやすく記述しますが、読む相手がプログラムなら読みやすくする必要はありません。

つまり、プログラムの動作を説明したコメント、見やすくするためのインデントなどは不要です(言語によってインデントが必須の場合がありますが)

Javascriptの場合「JSMin」というプログラムによって、コメント・空白・タブが削除できます。

http://www.crockford.com/javascript/jsmin.html

Linuxで使う場合はコンパイルが必要になります。
##コンパイル
gcc -o jsmin jsmin.c

使い方:
./jsmin < input.js > output.js

output.jsに空白やコメントが削除されたコードが出力されます。

Junosで設定を行うにはコンフィグレーションモードに入る必要があります。
(Junosだけではありませんが)

多くの人はconfigureでコンフィグモードに入っていると思いますが、複数の人が設定を行う場合には同時に編集してしまうリスクがあります。


●configureの危ないところ ~その1~
以前のコンフィグが残ってしまう。

変更をコミットせずに終了しようとした場合、以下のような警告がでます。
ここでyesにするとオペレーションモードに移ります。
# exit
The configuration has been changed but not committed
Exit with uncommitted changes? [yes,no] (yes)

しかし、次にconfigureでコンフィグモードに入ると、
> configure
Entering configuration mode
The configuration has been changed but not committed
と出力され、以前の変更分が残ってます(show | compareで確認)

これに気づかず作業するとヤバイことは簡単に想像できます。


●configureの危ないところ ~その2~
勝手にcommitできちゃう。

何も変更してないのに、show | compareで見ると変更があったりします。
自分の変更分を他人がコミットしたり、自分が他人の変更分をコミットできたりします。
その時警告はなにも出ないため、作業途中でコミットされる可能性があり、思わぬ惨事が起こる可能性があります。


configure exclusive
この当たりを解決する仕組みがJunosにはあります。

1.show system users
コンフィグモードに入る前に現在ログインしているユーザを確認することで同時編集するリスクを軽減できます(ただし、作業中にログインされた分はわからない)

2.
configure exclusive
これは大変便利です。

configure exclusiveで入ると ~その1~ で示したようなコンフィグが残ってしまうことがありません。
コミットしてない変更分があった場合、破棄されます。
# exit
The configuration has been changed but not committed
warning: Auto rollback on exiting 'configure exclusive'
Discard uncommitted changes? [yes,no] (yes) yes

warning: discarding uncommitted changes
Exiting configuration mode

また、複数人が同時にconfigure exclusiveでコンフィグモードに入ることはできません。
> configure exclusive
error: configuration database locked by:
  XXXXX terminal p0 (pid 16351) on since 2013-07-20 11:20:06 UTC, idle 00:01:05
      exclusive [edit]

configuredだと警告は出ますが、コンフィグモードには入れます(変更、コミットはできませんが)。

●まとめ
複数人が設定する可能性があるなら、configure exclusiveを使ったほうがよい

●概要
hping3とはオープンソースのパケットジェネレータで、pingの様な操作で使うことができる。
pingはICMPだが、hping3はTCP、UDP、ICMPが使える。

●用途
・ファイアウォールのテスト
・ポートスキャン
・パフォーマンステスト
・TOS設定時やフラグメントじの挙動テスト
・経路MTUの発見
とかとか。
もちろん、TCP/IPの勉強にもなります。


●インストール
(CentOS6.2の場合)
EPELがあれば
yum install hping3
でインストール完了!!


●使い方
基本形(TCPの場合)
hping3 192.168.0.X
こんな感じで、IPアドレス(192.168.0.X)さえ与えれば動きます。
ただし、SYNとかACKとかフラグもないし、ポート番号もない(0)のでTCPパケットとしては不完全です。
これプラス最低限ポート番号(80)、フラグ(-S)が必要になります。

hping3 192.168.0.X -p 80 -S

基本的にはIPやポート、フラグを変えるだけで結構遊べます。
(フラグ一覧はman hping3を参照)


●オプション
-c:カウント
-d:データサイズ(ヘッダは別に追加される)
-p:ポート番号
--rand-source:ソースアドレスランダム
-i:インターバル(秒)
-i uX :マイクロ秒
--fast: = -i u100000(10pps:Packet Per Second)
--faster = -i u1


●やってみよう
例)ポートスキャン
hping3 --scan 1-1024 -S 192.168.0.10

例)10pps
hping3 -S -p 80 192.168.0.X -i u100000



●感想
手軽にパケットを生成できるので勉強や軽い試験にもってこいです。


通常ノードがアクセス元に返事を返す時はルーティングテーブルを見てARPによって戻す経路を選択しますが、
BIG-IPはセッションテーブルにどのMACアドレスのホストから来たかという情報を保持しているため、このセッション情報を元に戻す経路を選択します。

BIGIPではこの機能はデフォルトで有効になっています。

詳しくは参考文献を。

●参考文献
・トラ ィ ク 戻り先決定方法 フィックの戻り先決定方法 戻り先決定方法
について
http://www.f5networks.co.jp/shared/pdf/BIG-IP_TB_Last_Hop.pdf

・サーバ負荷分散入門 Load Balancing(p378)

sarコマンドのメモ


●できること
1.現在のシステム情報を表示
2.過去のシステム情報を表示

ここでいうシステム情報とは、CPU、メモリ、ネットワーク、I/Oなどの統計情報です。


●現在のシステム情報の表示
コマンドの基本形は
#sar INTERVAL COUNT
で、INTERVAL秒ごとにCOUNT回表示するという意味になります

1秒ごとに5回システムの情報を表示
例)
[root@localhost ~]# sar 1 5
Linux 2.6.32-220.el6.x86_64 (localhost.localdomain)     06/23/2013      _x86_64_        (1 CPU)

04:53:14 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:53:15 AM     all      0.00      0.00      1.00      0.00      0.00     99.00
04:53:16 AM     all      0.00      0.00      1.00      0.00      0.00     99.00
04:53:17 AM     all      0.00      0.00      1.01      0.00      0.00     98.99
04:53:18 AM     all      0.00      0.00      1.98      0.00      0.00     98.02
04:53:19 AM     all      0.00      0.00      1.00      0.00      0.00     99.00
Average:        all      0.00      0.00      1.20      0.00      0.00     98.80

と表示されるはずです。


現在のシステム情報を取得するにはこの基本形にオプションを付けて行きます。
細かいオプションを覚えるのが面倒なかたは「-A」オプションだけ付けておけばOKです。

I/Oの統計を表示
# sar -b 1 5

ページングの統計を表示
#sar -B 1 5

-nオプションはNetwork
# sar -n DEV 1 5

EDEVはエラーの統計を表示
# sar -n EDEV 1 5

キュー(LAとかも)を表示
# sar -q 1 5

メモリ使用率
# sar -r 1 5

スワップ使用率
# sar -S 1 5

#inodeのステータス表示
sar -v 1 5


●過去のシステム情報の表示
-f でファイルを指定することで過去の情報が見れます
コマンドの基本形は
# sar -f ファイル名
になります。
例)
# sar -f /var/log/sa/sa22

cent6.2の場合、保存先は
/var/log/sa/sa+日付名
になる。


この基本形に↑で紹介したオプションを付けることで過去の各種情報を見ることができます。

過去の全情報を表示
# sar -A -f /var/log/sa/sa22

過去のメモリ使用率の表示
# sar -r -f /var/log/sa/sa22

などなど。

●チューニング
・スケジュールの変更
/etc/cron.d/sysstat
sarコマンドはcronで情報収集いているため、cronのファイルを編集することで間隔を変更できる(デフォルトでは10分毎)


・保存期間の変更
/etc/sysconfig/sysstat
に保存する期間(HISTORY=7)や圧縮(COMPRESSAFTER=10)を設定できる



sarの可視化ツールが便利すぎる