shellでの条件式
if文を書くときに高級言語よりもだいぶ癖があるので少しずつ書いていく
bracket []
[]はtestコマンドの略, if文で使いやすい
if [ -n “${HOGE_APPLICATION}” ]; then echo “hoge!” fi
-n は non zeroの略なので(1文字以上ならtrueになる)空文字チェックになる。 ブラケット前後の半角スペース必須 ## double bracket [[]] double bracketの方がsingle bracketよりも機能が充実していて&&, ||, Pattern matching, 正規表現などが使えるらしい 使えるのならとりあえずdouble bracketにしておけばいいのかな? ## 引用元 [http://qiita.com/yohm/items/3527d517768402efbcb6]
shellで連続してコマンドを打ちたい時の繋ぎ文字
前提として コマンドは 正常終了時にステータス0 異常終了時は1
を返す
連続してコマンドを打ちたい時の繋ぎ文字としては下記の3つがあり
; && ||
;(セミコロン)
前のコマンドが終わり次第次が実行
&&(アンパサンド2つ)
前のコマンドが0(正常終了)なら次を実行
||(パイプ2つ)
前のコマンドが1(異常終了)なら次を実行
実行した結果に応じて次の処理を変えたい時に使い分ける。
netstatを使って「TCPで繋がる」と思ってるものを確認する
サーバーを作った時に作ったサーバのTCPのレイヤーで接続可能か知りたい時がある。 大体の場合は 「つながる想定(セキュリティの設定とか)なんだけど繋がらない」って時にサーバーに入って確認する
例
netstat -anp | grep 8080
なんとなく 「誰」 が 「どこに」 どこのポートを使って接続してるのかがわかる
unicornの例
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 18431/unicorn.rb -E
stateはメモしておく
- ESTABLISHED -> 接続確立済みで現在接続中
- TIME_WAIT -> 接続終了待ちの状態
- LISTEN -> 接続可能な状態(待ち受けてる)
ユースケースに則った使い方は別記事にしようと思う
因みに使ってるportを調べたい時は
lsof -i:8080
が便利そうだというのを見つけた。 これはまた別で。
wコマンドでuptime(稼働時間)とか現在時刻とか確認する
topでもいいんだけど 「知りたい情報だけサラっと見たい」ってのもスマートな気がするのでメモ。
$ w
と1文字打つだけ
$ w 11:44:01 up 246 days, 20:16, 2 users, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT surfing pts/0 ***************** 11:35 6:09 0.03s 0.03s -bash surfing pts/1 ***************** 11:42 1.00s 0.03s 0.00s w
ヘッダ部分
- 11:44:01 -> 現在時刻,timezoneがずれてないかとか見る
- up 246 days, 20:16 -> 起動されてから何日経ってるか, 最近rebootされてないかとか見る
- 2 users -> 今何人ログインしてるか
- load average: 0.00, 0.02, 0.05 -> 1分, 5分, 15分のロードアベレージ
下段
USER -> ログインしてるユーザー
TTY -> tty
FROM -> アクセス元
IDLE -> アイドル時間(現在時刻-最後にttyアクセスした時間)
JCPUは、TTYから実行されている全プロセスが使った時間であり、PCPUは、「WHAT」項目で示されているカレントプロセスが使った時間です
JCPUはttyからってことで実質該当のユーザーが使ったCPUの時間ってことであってるかな。 PCPUはWHATで表示されているカレントプロセスが使った時間。
freeコマンドでlinuxメモリの状態を確認する
サーバー管理上メモリの使用状況は非常に重要な点となるので
free
コマンドの使い方を整理しておく。
まずはとりあえず
free -h
で状態を見てみる
オプション * -m (メガバイトで表示) * -t スワップも表示 * -s 指定した秒で繰り返し表示 * -h とりあえずざっくり読みやすくしてくれる
$ free -h total used free shared buff/cache available Mem: 3.4G 531M 243M 168M 2.6G 2.3G Swap: 0B 0B 0B
ここで表してるもの Mem:列 total ->実メモリの容量
used -> 実メモリの使用量
free -> 実メモリの空き容量
shared -> 共有メモリ量
buff/cache -> (実メモリの used) - (buffers + cached )
avaliable -> この値は、新しいアプリがスワップせずに使える容量はどれくらいか。といった値を示しているようです
sharedは複数のプロセスで共有されてるメモリ領域 buffとcacheはその名の通りOSが確保しているバッファとキャッシュの領域。 なのでこの領域は事実上プロセスが確保できる領域のはず。
実際の使用メモリ量は
used - buffers - cached
実際の空きメモリ量は
free + buffers + cached
実運用上で最も見ることになるのはこの二つと思われ(保有しているメモリの量とプロセスが使えるメモリ量)
total buff/cache Mem: 3.4G 2.6G
メモ
バッファとキャッシュとは? www.math.kobe-u.ac.jp
Linux(っていうか UNIX かな?) では, 各プロセスにメモリを割り振った残りを バッファ(buffer)とキャッシュ(cache)に利用して, ディスク入出力の負荷を減らしている.
osがよしなにやってくれてる領域で、プロセスから必要になったら解放してくれる。 って認識で合ってるのかな。