UNIX/主要コマンド

awk

awk [-F"区切り文字"] '[条件式] {print $フィールド番号}' ファイル名

区切り文字は省略するとスペースになる。区切り文字にタブを使用する場合は、-F"\t" と記述する。

末尾の値が0.4より大きい行を表示する

awk '{if($NF>=0.4){print $0}}'

第1フィールドが"Date"の場合は、18byte目から19byte分の値を変数Aに代入し、それ以外の場合は、変数Aの値と、egrepで一致した行を表示

egrep "^System:|^Memory:" | awk '{ if($1=="System:"){ A=substr($0,18,19); } else { print A,$0 } }'

コマンド実行結果の全ての行頭に タイムスタンプを付与する

コマンド | awk '{"date '+%H:%M:%S'" | getline t; print t,$0; close("date '+%H:%M:%S'")}'
  • date '+%H:%M:%S' の 結果を 変数 t に代入し、tの内容と、コマンド結果1行分を連結し、getlineで開いたコマンドを閉じる

Oracleのアラートログの整形(タイムスタンプをログの前に付与)

awk 'BEGIN { A="Sun Mon Tue Wed Thu Fri Sat";} {if ( index(A,$1) != 0 ){timestamp = $0;} else {print timestamp,$0;} }'
  • BEGIN
    処理の返し前に1度だけ実行される
  • index(string, search)
    引数1 の 文字列から、引数2 の文字列が見つかった位置を返す。見つからない場合は、0 を返す。

top からCPU使用率1%以上のプロセスのみ抜粋して表示する

top -b | awk '{ if(match($1, "[0-9]") != 0) { if($9 > 1){ "date '+%H:%M:%S'" | getline t; print t,$0; close("date '+%H:%M:%S'"); } } }' | sed -e 's/ *$//g'
  • 末尾に何故か空白行が大量に埋め込まれている為、sedで空白行を削除している

Jrockitの jstat -gc で取得した結果から、ヒープサイズの使用率を求め、95%以上が連続3回以上発生した場合は、末尾に * を付与する

awk '{if($2!="HeapSize"){AT=$1;AV=$4/$2*100;printf("%14s %5.2f ",AT,AV);if(AV>=95&&BV>=95&&CV>=95){printf("*\n")}else{printf("\n")}};CV=BV;BV=AV}'


 

bc

計算を行う。単独指定すると対話式になる。

羅列された数値の合計を求める

-- RSSの合計値を求める
ps aux | awk '{print $6}' | grep -v RSS | paste -s -d "+" | bc

xx進数の計算

echo "obase=<出力の進数>; ibase=<入力の進数>; <計算式>" | bc
echo "obase=10; ibase=16; FF+FF | bc
510


dd

dd if=入力ファイル of=出力ファイル bs=サイズ count=回数 [seek=書き込み位置]
オプション説明
bsブロックサイズ(単位はK、M、G)を指定。単位省略時はbyte
countブロックサイズを書き込む回数
seek書き込み開始位置を指定(指定した位置までは何も書き込まないので高速に巨大ファイルが作成可能)

NULLで埋め尽くされた50GBのファイルを/tmp/testに作成する

dd if=/dev/zero of=/tmp/test bs=1M count=0 seek=$((1024*50))


dig

dig [@DNSサーバ]  ドメイン名  [タイプ]  [オプション]

DNSサーバーを省略した場合、/etc/resolv.conf に記載しているDNSサーバーを使用する。

オプション説明
+norec[urse]再帰的問い合わせを行わず、問い合わせのサーバーだけを返す
+trace名前解決の途中経過をトレースする
+tcp最初からTCPで問い合わせる
+dnssecDNSSEオプション付きで検索する
+bufsize=byte受信可能なサイズを指定 ※2
+nsidNSID(※1)情報を問い合わせる
タイプ説明
AIPv4ネットワークアドレス(デフォルト)
AAAAIPv6ネットワークアドレス
NSネームサーバ
MXメールサーバの情報
SOASOA 情報
ANY知っているすべての情報 ※3

※1 DNS Name Server IdentifierはIPエニーキャストやロードバランシングなどにより
  1つのIPアドレスを複数台のNSで共有している際に該当の問い合わせがどのNSによって返答されたのかを
  問い合わせ側で知るためのDNSプロトコルの拡張
※2 DNSの情報が512オクテット(byte)を越えた場合、切り捨てられたという応答が返ってきた後、TCPフォールバックにより、
  TCPでの名前解決を試みる。TCPフォールバックが実行されると「Truncated, retrying in TCP mode」のメッセージが出力される
※3 権威サーバーからの応答であればゾーンファイル全ての情報を表示するが、
  AレコードのみキャッシュしているキャッシュDNSを指定した場合、ANYを指定してもAレコードしか結果が返ってこない。

出力結果説明
statusNOERRORで正常。NXDOMAINはドメイン名が存在しない。REFUSEDはローカル以外の問い合わせ拒否
flagsaaは応答を返したサーバが権威サーバである事を示す。raは相手側が再帰クエリを受付可能である事を示す
ANSWER SECION左から2番目の数値はTTLを示す
AUTHORITY SECTION問い合わせしたドメイン名の情報元のDNSサーバー
ADDITIONAL SECTION付加情報

問い合わせ(Q)と応答(A)でそれぞれのフラグを使用するか。

フラグQA意味
AA×オーソリティ応答。0なら反復の結果の応答。1ならそのDNSサーバからの応答(名前解決に使用しているDNS自体からの回答)
TCメッセージが短縮されちるか。0なら、512byte以下で未短縮。1なら短縮
RD×再帰問い合わせを要求しているか。0:反復問い合わせ。1:再帰問い合わせ
RA×DNSサーバが再帰問い合わせに応答可能か。0:再帰不可能。1:再帰可能
  • コンテンツサーバ  :ドメインの権威情報を持ってるDNSサーバ(権威サーバ)
  • フルサービスリゾルバ:権威サーバの情報を再帰的に問い合わせるDNSサーバ

dumpe2fs

ext2/ext3/ext4ファイルシステムのスーパーブロックの情報とブロックグループディスクリプタの内容を出力する

dumpe2fs [オプション] デバイス
オプション説明
-b不良ブロックを表示する
-hスーパーブロックの情報のみ表示

ファイルシステムには i-node総数や、ブロック数などファイルシステムに関する情報が格納されている
ブロックグループ(複数のブロックの固まり)の先頭にスーパーブロックが格納されておりファイルシステムで一番最初に作成されたブロックグループにあるスーパーブロックを使用
2番目以降のブロックグループにあるスーパーブロックはコピー


find

find 検索ディレクトリ [オプション]
オプション説明
-name "<file>"文字列指定。ワイルドカード表現可
-user <user>ユーザー名指定
-group <group>グループ名指定
-type <type>ファイルの種類
b:ブロックファイル c:キャラクタファイル d:ディレクトリ l:シンボリックリンク f:通常ファイル
-atime (+/-)n最終アクセスn日のファイルを検索(+n:n日以上前、-n:n日以内)
-ctime (+/-)nステータス変更がn日のファイルを検索(+n:n日以上前、-n:n日以内)
-mtime (+/-)n最終更新がn日のファイルを検索(+n:n日以上前、-n:n日以内)
-mmin (+/-)n最終更新がn分のファイルを検索(+n:n分以上前、-n:n分以内)
-newer <file>指定したファイルよりも後に更新されているファイルを検索
-size +n[c/k/b]nサイズ以上のファイルを検索(c:バイト、k:キロバイト、b:ブロック−1ブロック=512バイト)
-prune -o -print当該オプションの前に指定された条件に合致したものを除外する
-ls詳細一覧表示
-exec [command] {} \;検索結果をコマンドに引き渡して実行。findの結果が{}に反映される
ヒットする毎にコマンドを実行するので効率が悪い。xargsを使った方が圧倒的に高速

カレントディレクトリから、tmpの名前がつくフォルダ以外のファイルを ls -l で参照する

find . -type d -name "tmp" -prune -o -type f -print | xargs ls -l


free

メモリの使用量を確認する。

             total       used       free     shared    buffers     cached
Mem:       1028856     151660     877196          0      35132      43456
-/+ buffers/cache:      73072     955784
Swap:       795176          0     795176
Mem行の出力結果説明
total総物理メモリ量
used総物理メモリ使用量からfreeを引いたもの
free何の用途にも使っていない物理メモリ量
shared常に0。現在は利用されていない
buffersファイルなどのメタデータをキャッシュしている物理メモリ量
cachedファイルのデータ本体をキャッシュしている物理メモリ量
-/+ buffers/cache行説明
左側の数値(used-)buffers、cachedを含めない used量
右側の数値(used+)buffers、cachedを含めた free量
Swap説明
totalスワップの総容量
usedスワップ使用量(swapon -sなどでも確認可能)スワップアウトされたメモリが、スワップインするタイミングは再度必要になったタイミング。
一時的に負荷の掛かる作業で大量にスワップアウトした場合、なかなかスワップイン(スワップが高いまま)しないのは、そもそも必要とされてないからである
UNIX_MainCmd_01.png

/proc/meminfo よりメモリ総容量を見積もる

MemTotal = MemFree + Inactive + Active + Stab + VmallocUsed + PageTables
      -----------------(1) -----(2) ------------------------------(3)

(1) 利用可能なメモリ容量。
(2) 解放できないメモリ容量。
(3) 解放できないメモリ容量。(カーネルが使用)
※詳細はこちら

強制的にディスクキャッシュを解放する

echo 3 > /proc/sys/vm/drop_caches


grep

パターンに一致した行を抽出する。タブを検索する場合は、パターン入力時に「Ctrl+V押下後、TABキー」

grep [オプション] パターン 対象ファイまたは|ディレクトリ
オプション説明
-num指定した行数だけパターンマッチした行の前後も表示
-A num指定した行数だけパターンにマッチした行の後ろも表示
-B num指定した行数だけパターンにマッチした行の前も表示
-E拡張正規表現でパターンマッチを行う(egrepと同等)
-Iバイナリファイルを検索対象外にする(--binary-files=without-matchと同じ)
-H各行のマッチに対してファイル名を表示
-cパターンマッチした行数をカウント
-i大文字と小文字を区別しない
-rディレクトリを再帰的に検索する
-vパターンマッチしなかった行を対象にする

pat又はtest1〜5にマッチした行を出力。

egrep "pat|test[1-5]" file

or条件の | は拡張正規表現でないと使用できない。

iconv

iconv -f 入力文字コード -t 出力文字コード ファイル名

文字コードの一覧は、iconv -l で確認できる
よく使うのは、EUC-JP、UTF-8、Shift-JIS

iostat

iostat [オプション] [間隔] [回数]
オプション説明
-cCPU使用率を表示
-dデバイスの仕様情報を表示
-k(m)統計情報をK(M)byteで表示
-p [デバイス名 or ALL]ブロックデバイスと、そのすべてのパーティション情報表示
-tタイムスタンプを付与する
-x拡張された情報を表示

ファイルキャッシュといったOSのファイルレベルの動作は記録されない。(ファイルキャッシュした場合 iostatには記録されない)

Linuxでの出力例

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
hda               2.63     2.11  3.14  1.34   186.29    27.63    47.72     0.09   19.15   3.05   1.37
hda1              0.57     0.00  0.04  0.00     1.23     0.00    27.01     0.00    5.15   3.95   0.02
hda2              2.05     2.11  3.08  1.34   184.84    27.63    47.99     0.09   19.34   3.06   1.35
dm-0              0.00     0.00  4.86  3.45   184.07    27.63    25.46     0.17   20.14   1.62   1.35
dm-1              0.00     0.00  0.07  0.00     0.53     0.00     8.00     0.00    7.83   0.55   0.0
項目説明
rrqm/s1秒間デバイスへマージされた読み込みリクエスト数
wrqm/s1秒間デバイスへマージされた書き込みリクエスト数
r/s1秒間の読み込みリクエスト数
w/s1秒間の書き込みリクエスト数
rsec/s1秒間の読み込みセクタ数(通常は1セクタ 512byte)
wsec/s1秒間の書き込みセクタ数(通常は1セクタ 512byte)
avgrq-szデバイスへのIOリクエストの平均サイズ(セクタ)
avgqu-szデバイスへのIOリクエストのキュー(待ち行列)の平均サイズ
awaitレスポンスタイム。IO処理時間+IO処理してない待ち時間(ミリ秒)
svctmサービスタイム。IO処理の平均処理時間(ミリ秒)
%utilデバイスへのIOリクエスト期間CPUの使用率(デバイス関連部分)

awaitとsvctmの値が離れている(IO待ちが多い)場合はIO待ちがボトルネックになっている

lsof

開いてるファイルのプロセス情報を表示する。

lsof [オプション] [ ファイル名 or ファイルシステム ]
オプション説明
-aAND条件にする。省略時はOR条件になっている
-p PIDプロセスIDを指定して表示
-c プロセス名プロセス名を指定して表示
-i:port指定したポートをオープンしているプロセスを表示 「,」で複数指定可能
-i@IPアドレス指定したIPアドレスをオープンしているプロセスを表示
-u ユーザー名ユーザー名を指定して表示
-nIPアドレスで表示(ドメイン変換しない)
-Pポート番号で表示(ポート名称変換しない)


netstat

後半のオプションは、ほぼLinux専用。

オプション説明
-a現在のすべての接続を表示する
-iインターフェイスごとのパケット統計を表示する
-n出力をIPアドレスなど数値のみに抑制する
-s各プロトコルの統計情報の一覧を表示する
-rルーティング・テーブル情報を表示する(routeコマンドと同じ)
-pPIDを表示する(rootユーザーでないと全プロセスが表示されない)
-c指定された情報を 1 秒ごとに表示し続ける
-e拡張表示モード。
-eeさらに拡張された表示を行う(主に-rオプションと組み合わせて用いる)
-oネットワーク・タイマを表示する
-lLISTEN(外部からの接続待ち受け)状態の接続のみを表示する
-t -u -wTCP(「-t」)、UDP(「-u」)、そのほかIPとICMP(「-w」)のみ表示する
-v詳細モード
-Aプロトコル種別ごとに結果を表示する( デフォルトはinet(IPv4)、unix(UNIX) )
ipx(IPX)、inet6(IPv6)、ax25、 netrom、ddp の指定が可能
-Cカーネル・キャッシュでのルーティング・テーブル情報を表示する
-FFIB(Linuxにおけるルーティング・テーブルの実装方式)からの経路情報表示(デフォルト)
-Mマスカレードされた接続を表示する
-Vバージョン情報を表示する

ルーティングテーブル表示

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.11.0    *               255.255.255.240 U        40 0          0 eth0
127.0.0.0       *               255.0.0.0       U        40 0          0 lo
default         buffalo.setup   0.0.0.0         UG       40 0          0 eth0

Flags:U(経路は有効) G(ゲートウェイ) H(宛先はホスト)
    C(キャッシュのエントリー) !( 拒否 (reject) する経路である)

mpstat

mpstat -P ALL [間隔] [回数]

Linuxでの出力例

10時08分51秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
10時08分51秒  all    0.13    0.00    0.17    0.53    0.02    0.05    0.00   99.09    862.42
10時08分51秒    0    0.21    0.01    0.22    0.72    0.04    0.04    0.00   98.76    861.64
10時08分51秒    1    0.06    0.00    0.13    0.33    0.00    0.05    0.00   99.42      0.78
項目説明
%userユーザプロセスによるCPUの使用率
%nice実行優先度を変更した(nice値)ユーザプロセスによるCPUの使用率
%systemシステムプロセスによるCPUの使用率
%iowaitI/O終了待ち時間割合(I/O進行中でその終了を待っている時間)iowaitの状態であれば、CPUを必要とする他のプロセスがCPUを使用することが可能
%irq割り込みによるCPU実行時間の割合
%softソフトウェア割り込み (software interrupt)によるCPU実行時間の割合
%idleアイドル時間の割合(ディスクI/Oリクエストでの待機時間は除く)
intr/sCPUは1秒間で受け取った平均割り込み数


perl

perl [オプション] 'スクリプト' [ファイル]
オプション説明
-n入力ファイルや標準入力から行単位でデータを読み込みスクリプトを実行する
レコードのデフォルトは行。区切り文字は [改行] (\n)
(読み込まれたデータ(後述の $_)には [改行] も含まれる。)
-e後ろに続く部分が(ファイルではなく)スクリプトであることを示す
-pnと同じだが、読み込んだ1行ラインを標準出力する
-l処理を行う標準入力に対しchomp(改行除去)を実行し、出力に対して自動的に改行(\n)を入れる
-aテキスト1行を空白文字で分割し@F配列に格納する。1番目の変数は $F[0] になる
-F区切り文字を指定して、@Fに格納する。-aオプションと組み合わせて使用する

ls で表示されたファイルを .old とつけてコピーする

ls | perl -ne 'chomp; print "cp -ip $_ $_.old\n"'
ls | perl -nle 'print "cp -ip $_ $_.old"'

,区切り2番目の文字を表示

perl -F, -alne 'print $F[1]'


pidstat

pidstat [オプション] [ 間隔  回数 ]
オプション説明オプション説明
-uCPU使用率-p PID特定のPIDプロセスに限定して表示
-wコンテキストスイッチ数-l引数を全て表示
-dディスク使用率-t関連するスレッドの情報表示
-rメモリ使用率-h複数の統計を組み合わせた際に1行で表示する


pmap

pmap [オプション] PID
オプション説明
-x詳細情報を表示する
-S各マッピング毎のスワップ予約状況を確認(Solarisのみ)
フィールド説明
Kbytes該当のファイル内容が論理アドレス空間にマッピングされている容量
RSS実際に物理メモリを使っている容量
Mappingこの領域に割り当てられたメモリの種類。anonはAnonymous(AnonPages/ユーザープロセスがmalloc()などで確保したり、プログラム本体用に利用するメモリ領域)に対応


ps

UNIXには、/usr/ucb/ps にもpsコマンドがあり使えるオプションが異なる。

オプション説明
a他ユーザーを含めた全てのプロセスを表示する
e全てのプロセスを表示する
r実行中のプロセスのみ出力する
x制御端末のないプロセスを選択する
lロングフォーマットで表示
uCPU/MEM/仮想メモリサイズ/物理メモリサイズ/実行状態を表示
mプロセスの後に該当プロセスのスレッドも表示する
-LLWP/NLWPカラムを表示し、プロセスのスレッドも表示する。-o と一緒に使用する。LWPは pstack などで実際コールされてる関数が解る
--sort=valvalにソートしたい項目(rssやvsz)を入力する
-o <format[=表示名]>[,<format>]指定されたフォーマットの項目を表示する。= の後に表示名を入れることでヘッダ行の表示名を変更できる。
表示名の分だけカラム幅が伸びる。wchanなどはカラム幅を伸ばさないと欠落するので注意
format表示説明
%cpu%CPUCPU使用率
sgi_pP実行されてるCPU番号。未実行の時は*
psrRSRプロセスが現在割り当ててるCPU番号
rtprioRTPRIOリアルタイム優先度。
bsdtimeTIMEユーザーとシステムのcpu時間の合計。フォーマットはMMM:SS
cputimeTIME累積したCPU時間。"[dd-]hh:mm:ss"
niNI優先度(19(高い)から-20(低い))
%mem%MEMメモリ使用率
rssRSS物理メモリサイズ(kB)
vszVSZプロセスの仮想メモリサイズ(KiB
sizeSZ必要とされるスワップ空間の概算の大きさ。
argsCOMMAND引数を含めたコマンド
commCOMMANDコマンド名(実行ファイル名のみ)
startSTARTEDコマンドが起動した時刻
etimeELAPSEDプロセスが起動されてからの経過時間。フォーマットは[[dd-]hh:]mm:ss
pidPIDプロセスのプロセスID番号。
ppidPPID親プロセスのプロセスID。
gidGIDグループID
groupGROUPグループ名
uidUIDユーザーID
unameUSERユーザー名
statSTATプロセス状態。
wchanWCHANプロセスがスリープしているカーネル関数の名前。実行中の場合は"-"。プロセスがマルチスレッドで、かつpsがスレッドを表示していない場合は、"*"
STAT説明
D割り込み不可能なスリープ状態 (通常 IO 中)
R実行中または実行可能状態 (実行キューにある)
S割り込み可能なスリープ状態 (イベントの完了を待っている)
Tジョブ制御シグナルまたはトレースされているために停止中の状態
Wページング状態 (2.6.xx カーネルからは無効)
X死んだ状態 (見えるべきではない)
Z終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセス
<優先度の高いプロセス (他のユーザーに対して良くない)
N優先度の低いプロセス (他のユーザーに対して良い)
L実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け)
sセッションリーダ
lマルチスレッド化されている (NPTL pthreads が行うように、CLONE_THREAD が使われている)
+フォアグラウンドのプロセスグループに含まれている

プロセスの状態を確認する

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19340  1504 ?        Ss   19:04   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    19:04   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    19:04   0:00 [migration/0]
# ps axwwo sgi_p,psr,ni,uname,pid,%cpu,%mem,vsz,rss,stat,start,wchan:30,cputime,args
P PSR  NI USER       PID %CPU %MEM    VSZ   RSS STAT  STARTED WIDE-WCHAN-COLUM_____     TIME COMMAND
*   0   0 root         1  0.0  0.0  19340  1504 Ss   19:04:05 poll_schedule_timeout 00:00:00 /sbin/init
*   1   0 root         2  0.0  0.0      0     0 S    19:04:05 kthreadd              00:00:00 [kthreadd]
*   0   - root         3  0.0  0.0      0     0 S    19:04:05 migration_thread      00:00:00 [migration/0]


rpm

rpm [オプション] [パッケージ名]
オプション説明(インストール関連オプション)
-iパッケージをインストールする
-Uパッケージをアップグレードする、なければインストールする
-Fパッケージがインストールされていればアップグレードする
-eパッケージをアンインストールする
-v詳細な情報を表示する
-h進行状況を#で表示する
--nodeps依存関係を無視してインストールする
--force既存のファイルを新しいものに置き換える
--oldpackageダウングレードする時に使用
--test実際にはインストールせずテストを実施する
オプション説明(照会関連のオプション)
-q指定したパッケージがインストールされているか照会する
-aインストール済みの全パッケージ表示
-f [ファイル名]指定したファイルを含むパッケージ名を表示する
-p [パッケージファイル名]対象としてパッケージファイルを指定する
-c設定ファイルのみ表示する
-dドキュメントのみを表示する
-iインストール済みのパッケージを表示する
-l指定したパッケージに含まれるファイルを表示する
-R指定したパッケージが依存しているパッケージを表示する
-whatrequires指定したパッケージが依存してるパッケージを表示
-changelog変更履歴を表示する


rpmbuild

RPMをビルドするコマンド(RPMパッケージを作成する)

rpmbuild -b<STAGE> | -t<STAGE> [オプション] ファイル名
-bspecファイルを使う場合
-ttarファイルの内部からspecファイルを探す場合
STAGE説明
aバイナリパッケージとソースパッケージをビルドする
bバイナリパッケージをビルドする
sソースパッケージだけをビルドする
pパッチを適用する
cmakeを行う
imake installを行う
オプション説明
--cleanパッケージが作成された後にビルドツリーを削除する
--nobuildビルドを実行しない。specファイルの検査を行う場合に便利
--rmsourceビルド後にソースを削除する
--rmspecビルド後にspecファイルを削除する
--short-circuitビルドするSTAGEを飛ばし、c(make) または i(make install) を直接実行する


sar

Linuxはデフォルトで、/var/log/sa に収集されている。

sar [オプション] [実行間隔] [実行回数]
オプション説明
-o <file>結果をファイルに出力する
-i 秒データを記録する秒数を指定
-f <file>ファイルを読み込む
-s hh:mm:ssデータの開始時刻を設定。-fと併用して使用
-Cファイルからデータを読み込む際、sadcにより挿入されたコメントを表示
-A全ての統計情報
-Bページングの統計情報
-cプロセス生成情報
-uCPU利用状況
-P ALLCPUコア毎のCPU使用状況
-qRUNキューに溜まっているプロセス数、サイズ、ロードアベレージ
-rメモリとスワップの統計表示
-Rメモリの統計を表示
-Wスワップの発生状況
-n DEV送受信パケットの統計情報
-n EDEVネットワークエラーの統計情報
-n SOCKソケットの統計情報
-viノード、ファイル、その他カーネルテーブルの統計
dentunusd は未使用のキャッシュエントリ数で、dentry_cache内で解放可能な容量が見積もれる
1エントリのサイズは約 200byte の為、dentunusd x 200byte が dentry_cache で解放可能な容量となる(dentry_cache容量はslabtopコマンドで確認)
-wシステムスイッチの情報表示
-yttyデバイスの情報表示
# sar -r 1 5
11時55分50秒 kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
11時55分51秒     16228    215692     93.00     59176     54668    491508         4      0.00         4
11時55分52秒     16228    215692     93.00     59176     54668    491508         4      0.00         4
11時55分53秒     16228    215692     93.00     59176     54668    491508         4      0.00         4
項目説明
項目説明
kbmemfree物理メモリの空き容量
kbmemused使用中の物理メモリ量
%memused物理メモリ使用率
kbbuffersカーネル内のバッファとして使用されている物理メモリの容量
kbcachedカーネル内でキャッシュ用メモリとして使用されている物理メモリの容量
kbswpfreeスワップ領域の空き容量
kbswpused使用中のスワップ領域の容量
%swpusedスワップ使用率
kbswpcad物理メモリに戻したが、スワップから削除されてない容量


sed

sed [オプション] '条件式' [対象ファイル]
条件式説明
s/置換前/置換後/置換前の文字を置換語の文字に置換する。/gにした場合、全てのパターンを置換する
行数,行数指定した行数〜行数を処理する
d削除
i 文字列文字列を前に追加する
a 文字列文字列を後ろに追加する
-- 5〜10行目を削除
sed -e '5,10d' test.txt

-- 正規表現とグループ置換を利用した例。「05/22 11:22:33 INFO abcde 1234567890.log ABCDE」といった文字列が「05/22 123456789.log」となる
sed -e 's/^([0-9]\{2\}\/[0-9]\{2\}).*\([0-9]\{10\}.log\).*/\1 \2/g'


snoop

snoop [オプション] [フィルタ]
オプション説明
-d <IF>キャプチャーするIFを指定(省略時は最上位のIF)
-t -a絶対時間を表示
-o <File>出力結果をファイルに保存
-i <File>ファイルを読み込み標準出力する
-v詳細モード
-s <Size>指定したサイズでパケットを切り捨てる(通常は全部の長さ取得)
-p first[,last]表示するパケットを指定する
フィルタ説明
src <IP>送信元がIPのパケットを抽出
dst <IP>送信先がIPのパケットを抽出
host <IP>送信元もしくは送信先がIPのパケットを抽出
broadcastブロードキャストパケットを抽出
port <Port番号>ポート番号を指定
gatewayデフォルトゲートウェイを経由してくるパケットを抽出
ip,arp,rarp,udp,tcp,icmp対応するプロトコルを抽出
andAND条件
orスペースでフィルタを羅列する場合はOR条件
not否定条件
()条件をグループ化する


sort

sort [オプション] [ファイル名]

先頭から文字列を比較し並び替える。オプションを指定しなければ先頭から行末までの文字列で比較する。

オプション説明
-b行頭の空白は無視する
-f小文字、大文字を無視する
-n数値や記号(+ - . ,)を数値としてソートする。先頭の空白は無視される
-r降順にソートする
-u同じ行が存在した場合は1行だけ表示する
-t区切り文字ソートの区切り文字を指定。デフォルトは空白
-k数値[.数値]ソートのフィールド位置を指定する。先頭フィールドは1
+数値 -数値ソートの区切り位置(byte単位)+10.5 で10byte〜14byteでソートする。先頭は0

VSZ(仮想メモリサイズ)でソートする

ps aux | sort -bn -k5.1


stat

stat [オプション] ファイル名

ファイルの atime、ctime、mtimeをマイクロ秒単位で表示する

表示項目説明
Accessatimeファイルのアクセス時刻。アクセスする度に更新される為、パフォーマンス観点から、mountオプション の noatime で更新させなくすることも可能
Modifymtimeファイルの修正時刻
Changectimeファイルの状態変更時刻(i-node更新時刻)ファイルの移動や付属情報を変更するだけでも更新される


strace

strace [オプション] [コマンド]
# strace -ttTvf -p [PID]

プログラムのシステムコールを表示する

オプション説明
-p PID指定したPIDのトレースを表示
-f子プロセスもトレース
-rシステムコールの処理時間(-T や -ttが無効になる)
-Tシステムコールに費やされた時間
-tシステムコールの実行時間 -tt でマイクロ秒まで表示
-s SIZEread/writeで渡されてるバッファを省略せず、指定されたサイズの長さまで表示
-o結果をファイルに出力する
-e システムコール指定したシステムコールのみ絞って表示。複数表示させる場合は-e trace=open,read
-c統計情報を表示


systemctl

systemctl [コマンド] サービス名 [オプション]

-- 稼働中サービス一覧
systemctl list-units --type=service

-- 定義してるサービス一覧
systemctl list-unit-files --type=service
コマンド説明
statusサービスのステータスとログの確認
is-activeサービスが実行中か確認
is-enabledサービスが有効か確認
enableサービスを有効化する
disableサービスを無効化する
startサービスを起動する
stopサービスを停止する


swap

swap オプション
# /usr/sbin/swap -l
swap ファイル   デバイス  swaplo ブロック 空き容量
/dev/dsk/c0d0s1     102,1       8 1048568 1048568
swapファイルスワップファイルのフルパス名
デバイススワップデバイスのデバイス番号
swaplo利用可能なスワップスペースの開始位置
ブロックスワップスペースのサイズ(1ブロック=512byte)
空き容量現在割り当てられていないスワップスペースの総容量
# /usr/sbin/swap -s
合計: 148472k バイト割り当て済み + 23132k 予約済み = 171604k 使用済み, 1075460k 使用可
説明
バイト割り当て済みディスクによってバックアップされたスワップスペースとして現在割り当てられているスワップスペース総容量
予約済み現在は割り当てられてないがメモリによって確保されているスワップスペースの総容量
使用済み割り当て済み と 予約済み を足したスワップスペース総容量
使用可現在利用可能なスワップスペースの総容量(全く使用されてない状況だとTMPFSSWAPFSの容量に等しくなる)
  1. プロセスが追加メモリを要求すると、そのプロセスに物理メモリのメモリページを割り当てる
  2. 物理メモリの個々のページがスワップスペースによりバックアップされる(スワップスペースの予約)
  3. 物理メモリが不足した場合は物理メモリからスワップスペースへスワップされる
  4. プロセスが予約済みページに実際に書き込みを始めるとシステムは
    物理スワップスペースの特定の場所をそのページに割り当てる

tcpdump

tcpdump [オプション] [条件式]
  • i で IFの指定を省略した場合、最初のIFが指定される。条件式はandで複数繋げることが可能。
オプション説明
-s1パケットの取得サイズ指定(デフォルトは64byte)
-f外部はIPアドレス、内部はドメイン名で表示する
-Nホスト名の内、ドメイン名を表示しない
-STCPシーケンス番号を絶対値で表示する
-nドメイン名をIPアドレスで表示する
-t時間情報を出力しない
-v通常情報に加え、TOS(type of service)、TTL(time to live)、フラグ情報、サービス情報等を表示。-vv で更に詳細。-vvvで更に詳細
-X16進とASCII文字を出力する
-c Count指定したパケット数を取得するとキャプチャを終了する
-C <MB>指定した容量(MB)でパケットを分割する
-G <秒>時間ローテーション(出力ファイル名は %Y %m %d %H %M %S で一意になるようにすること)
-W <数>指定した数でファイルをローテーション。-Cと共に使用する
-i NIC監視対象のNICを指定
-r Fileキャプチャーしたファイルを読み込む
-w Fileキャプチャーした内容をファイルに出力する
-F File条件式をファイルから読み取る
-z <コマンド>ローテーション後のファイルに対して実行するコマンド(-z gzip)
-Z <UID>オプションでローテーション時の書き込み権限を指定する(-Z root)
条件式説明
host IPフィルタリング対象のIPアドレスまたはホスト名
port Portフィルタリング対象のポート番号
net IPネットワークアドレスをフィルタする。対象のネットワークのホスト全てが対象になる
ip proto Protocolフィルタリングするプロトコル名(ICMP、IGRP、UDP、TCP、ND)を指定
src 送信元指定した送信元をフィルタリング対象とする
dst 送信先指定した送信先をフィルタリング対象とする
tcp[tcpflags] [& TCPフラグ] == 値指定したTCPフラグ(fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg)を対象とする(参考

使用例

NIC名がeth1で、ネットワークが172.28.0.0/16 且つ、ポート番号21のパケットをtest.capに出力

tcpdump -i eth1 -n -c 1000 net 172.28 and port 21 -w test.cap

SYN または FIN フラグのパケットを対象とする(以下、何れも同じ)

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
tcpdump '(tcp[tcpflags] & tcp-syn == 2) or (tcp[tcpflags] & tcp-fin == 1)'
tcpdump 'tcp[tcpflags] == 2 or tcp[tcpflags] == 1'

SYN ACK フラグが両方セットされたパケットを対象とする(SYNフラグのビット位置1(2^1=2) + ACKフラグのビット位置4(2^4=16) が 両方成立=両方の値を合算)

tcpdump 'tcp[tcpflags] == 18'


taskset

taskset [オプション]

特定プロセスの親和性の確認や、設定を行う。

オプション説明
-c [CPU番号]親和性を設定するCPU番号を指定。複数指定はカンマ区切り。省略した場合は現在の親和性を表示
-pプロセスIDを指定

CPU番号0を指定してコマンド実行

taskset -c 0 ls -l


top

top [オプション]
オプション説明
-bバッチモードで起動
-d 秒更新する間隔
-n 回数実行する回数
-HプロセスのスレッドごとのCPU使用率を表示(WebLogicのJavaとか見る場合)
-p <PID>取得対象のPIDを指定する
起動中説明起動中説明
1CPU毎の使用率に切り替えf表示項目の追加・削除する
kCPU使用率の高い順位ソートo表示順序の変更。小文字で下、大文字で上
MRES(物理メモリ)の高い順にソートcプロセスの引数を表示する
F項目を選択してソートするu特定ユーザーのみ表示する。空白なら全ユーザー
n表示数を変更するs更新頻度の変更
W現在の表示設定を保存するhヘルプ表示


vmstat

vmstat [間隔] [回数]
オプション説明
-n間隔表示した際に表示されるヘッダーを表示しない
-aアクティブ/非アクティブなメモリを表示
-fブート後のfork数を表示
-m/proc/slabinfo(カーネルキャッシュ情報)を表示
-sイベントカウンタとメモリの統計表示
-dディスクの統計表示
-p パーティションパーティションの詳細な統計
-S m出力の表示サイズをMbyteにする
# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
0  0      4  15968  59436  54692    0    0    52    15 1007    71  9  3 85  3
0  0      4  15968  59436  54692    0    0     0     0 1006     8  0  0 100  0
0  0      4  15968  59444  54692    0    0     0    52 1007    13  0  0 100  0
0  0      4  15968  59444  54692    0    0     0     0 1005     9  0  0 100  0
項目説明
r実行待ちのプロセス数
b割り込み不可能なスリープ状態にあるプロセス数
wスワップアウトされているが、それを除いては実行可能なプロセス数。
このフィールドは計算されるが、Linux は決して desperation swap しない
swpd仮想メモリの総量 (kB)
free空きメモリの量 (kB)
buffバッファに用いられているメモリの量 (kB)
siディスクからスワップインされているメモリの量 (kB/s)
soディスクにスワップしているメモリの量 (kB/s)
biブロックデバイスに送られたブロック (blocks/s)
boブロックデバイスから受け取ったブロック (blocks/s)
in一秒あたりの割り込み回数。クロック割り込みも含む
cs一秒あたりのコンテキストスイッチの回数
usユーザーCPU利用率
syシステムCPU利用率
idアイドル率
waIO待ちCPU利用率

Solaris独自項目

項目説明
re一旦free list に入れられた後に、そのページ上のデータが再び必要になって復帰したページ数
mfminor fault
piページインされたメモリサイズ(KB)
poページアウトされたメモリサイズ(KB)
frfree されたメモリサイズ (KB)
de仮想メモリが予備として確保するバッファサイズ。高いとメモリ不足の可能性
srページアウトスキャナによってスキャンされたメモリページ数。高いとメモリ不足の可能性
inインタラプトの回数
syfaults の下にある sy はシステムコールの回数

参考->vmstat コマンドの読み方

watch

watch [オプション] "実行コマンド"
オプション説明
-n 回数実行回数
-d前回の結果と違う部分をハイライト表示する


xargs

標準入力から引数を読み込み、指定のコマンドを実行する
引数で渡される文字列が長い場合、引数の長さを分割してxargs で指定したコマンドを実行する(xargs tar cvf などは複数回実行されると最後の引数分割分のファイルで上書きされてしまう)

オプション説明
-n num指定した数値の回数、標準入力を読み込む度にxargsで指定したコマンドを実行する
-0空白文字を含んだファイルを1つの文字列として扱う場合に付与する
-t DIRxargs mv -t /var/log のようにターゲットのディレクトリを指定する場合に使用

例えば、findで、*.logの結果を標準入力として、rm のコマンドを実行する。

find / -name "*.log" | xargs rm

下記でも同じ結果を得られるが、下記の場合、*.logがヒットした回数分rmコマンドが実行される。
xargsを使用すると、1回だけしかrmを実行しない為、処理が高速。

find / -name "*.log" -exec rm {} \;

10個標準入力を読み込む度にgrepコマンドを実行する

find / -name \*.c -print | xargs -n 10 grep "検索対象文字列"

lsの結果をtarで固める

touch arc.tar
ls -1 *.log | xargs tar rvf arc.tar または tar cvf `ls -1 *.log`
※ いきなり cvf でやると引数が長い場合、分割されて最後に実行された tarファイルのみになってしまうので、追記で行ってる


yum

yum <オプション> <パッケージ名|グループ名>
オプション説明
-y update自動でYes応答してアップデートする
check-updateアップデート可能なパッケージの一覧を表示
cleanダウンロードしたパッケージと古いヘッダを削除する。clean allと同じ
clean oldheaders古いヘッダを削除
clean packagesダウンロードしたパッケージを削除
info利用可能なパッケージの情報を表示
info <パッケージ>パッケージ名 指定したパッケージの情報を表示
installパッケージ名 指定したパッケージをインストール
list利用可能なパッケージの一覧を表示。(例)ldapと付くパッケージ一覧表示。yum list '*ldap*'
list installedインストール済みのパッケージ一覧を表示
list updatesアップデート可能なパッケージの一覧を表示
providesパッケージ名 パッケージに含まれるファイルの一覧を表示
removeパッケージ名 指定したパッケージをアンインストールする。
指定したパッケージと依存関係があるパッケージは、削除するかどうか確認を求める
repolist allリポジトリが有効か無効か確認する
searchキーワード キーワードでパッケージを検索する。
検索の対象は、RPMファイルのName、Packager、Dummary、Descriptionの各フィールド
updateアップデート可能な全パッケージをアップデート
grouplistグループの一覧を表示
groupinstallグループ単位のインストール
groupremoveグループ単位の削除
groupupdateグループ単位のアップデート
groupinfoグループに含まれるデフォルトパッケージとオプションパッケージを表示

インストールを行わずパッケージのDLのみ実施

プラグインのインストール

yum -y install yum-downloadonly        ‥‥CentOS5の場合
yum -y install yum-plugin-downloadonly ‥‥CentOS6以降

パッケージのダウンロード(DL先を指定しない場合は /var/cache/yum/)

yum install --downloadonly --downloaddir=<DIR>

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-15 (土) 18:28:50 (12d)