Linuxを使い始めたけど、コマンドの種類もオプションも豊富過ぎてどういう場面でどんな組み合わせを使えばいいのかわからない、そんな方少なくないと思います。
自身の頭の中を整理する目的も兼ねてまとめてみましたのでご活用ください。
■ターゲット
・Linux初心者
・LPICは持ってるけど実務経験に乏しい
・単純オペレーションがメイン
・これからSREとか高度な運用をやっていきたい
・普段は必要になるたびに調べながら使ってるけど、空で出てこない
■基本テクニック
ログイン、ユーザ変更、ディレクトリ移動した場合は直後に確認する
コンフィグファイルを変更する前にバックアップをとる
ログイン確認(ホスト名とユーザ名)
uname -n;id -un
カレントディレクトリ配下のファイルを詳細表示する
ls -l
-l:詳細表示
ll
・・・ls -lの省略コマンド、aliasでデフォルト設定されている
ls -ltr
・・・タイムスタンプが古いものを先頭に新しいものを末尾に表示する、変更したファイルなどを探すのに便利
ディスク配下のファイルをサイズが小さい順に並べる
du -sh | sort
・・・ディスク使用率の逼迫時などの確認時に使う
現在のディレクトリを確認する
pwd
・・・Print Working Directoryの略らしい
年月日を自動で付けたバックアップをとる
cp -ip ファイル名{,_`date +%Y%m%d`}
-i:コピー先ファイルが存在する場合は上書きするか確認する
-p:権限やオーナ情報やタイムスタンプもそのままとる
cronのバックアップを取る
crontab -l > ファイル名_`date +%Y%m%d`}
他ユーザのcron設定を確認する
cat /etc/crontab/ユーザ名
・・・全サーバのすべてのCron設定を確認する場合などに使う
バックアップファイルとの差分を取る
diff -u ファイル名{,_`date +%Y%m%d`}
・・・大抵は-uオプションのほうが見やすいが、場合によっては付けないほうが良い場合もある。
出力結果とファイルとで差分を取る
cat HOGE.log | diff ファイル名 -
・・・HOGE.logのcat結果と指定ファイルの中身を比較する
2つの出力結果をファイルに書き込まずに差分を取る
diff (cat HOGE.log) (cat FUGA.log)
・・・標準出力結果同士を比較している
1つ上のディレクトリに移動する
cd ../
2つ上のディレクトリに移動する
cd ../../
ディレクトリ移動する前のディレクトリに戻る
cd -
文字列置換
sed -e 's/HOGE/FUGA/g' ファイル名
・・・・ファイル名の中のHOGE文字列をFUGA文字列に置換する
viコマンド
行番号を表示する
:set number
検索する
/検索文字列
2個目以降を探す場合は[n]を押す
前方を探す場合は[N]を押す
置換する
:%s/HOGE/FUGA/g
置換する前の確認をする
:%s/HOGE/FUGA/gc
lessコマンド
moreの強化版、viと同様のコマンドが使える、tailやheadのように使うことも出来る
zip圧縮ファイルの中身を見る
zless
・・・lessと同じ使い勝手
zcat
・・・パイプでheadやtailしてログのタイムスタンプ確認などに使う
■応用テクニック
ワンラインでssh,su,任意のコマンド複数を実行する。
ssh example_host "su -c 'uname -n;id -un;tail -100 /var/log/messages' -"
複数条件のgrep
egrep -e 'HOGE|FUGA' -v 'GEFU|FUGE' FILE.dat
・・・HOGEもしくはFUGAを含み、かつGEFUもしくはFUGEを含まない
ログファイルから特定の意味を示す文字列のみを取り出す
cut -d "(" -f 2 FILE.dat | cut -d ")" -f 1
・・・()で囲われた文字列データを取り出す
例:aaaaa(host1)bbbbbb →host1
ccccccccc(host2)dddddd →host2
eee(host3)fff →host3
ログファイルから特定の条件を満たす文字列を絞り込み、さらに特定の意味を示す文字列のみ取り出す
egrep -e '^"Apr 10 12:15:"|2018' | cut -d " " -f 3 | cut -d " " -f 1
while sleep 60; do ps -ef | grep http | wc -l ; done
・・・1分ごとにhttpプロセスの数をカウントし続ける
■障害対応時の確認ポイントなど
FTPのエラーが出たので調べる
tail -500 /var/log/xferlog
・・・FTPログを探る(proftpdの場合)
tail -500 /var/log/messages
SCPやSFTPなどSSHを利用したサービスのエラーを調べる
tail -500 /var/log/secure
・・・SSH通信を通したか弾いたかを探る
tail -500 /var/log/messages
FWなどを通過してサーバまで来ているはずなのに通信できないので調べる
less /etc/host.allow
less /etc/host.deny
・・・TCPWrapperで制限がかかっている可能性を探る
IPやサービス/ポート指定を忘れていたりしないか。
ntpの同期が上手くいかないので調べて復旧させる(ntp的上位サーバから対応する)
/usr/sbin/ntpq -p
・・・状態確認。特にoffset値が時刻ズレを意味している。
less /etc/ntp.conf
・・・上位の時刻同期先を確認する
ntpdate -u ntp1.jst.mfeed.ad.jp
・・・上位の時刻同期先を指定して強制的に時刻同期する
systemctl status ntpd
・・・ntpdのステータス確認
systemctl restart ntpd
・・・ntpdの再起動
随時書き足していきます。