作業手順書を作成する際、実際にわたしが便利だと感じて使っているLinuxコマンドやノウハウを紹介します。
タップできる目次
インフラ作業で使えるLinuxコマンドテクニック
dateコマンドで日付をYYYYMMDD形式で出力する
# date +%Y%m%d
20201225
cpコマンドで強制的に上書きする
「alias cp=’cp -i’」のようにエイリアス設定されていると「-f」オプションによる強制的な上書きができなくなります(上書きする際に確認される)。
確認なしに強制上書きする必要がある場合は「cp」の前にバックスラッシュを付ける事で実現できます。
# \cp SOURCE DEST
シングルクォーテーションをシングルクォーテーションで囲む
シングルクォーテーションで囲った文字列を更にシングルクォーテーションで囲う必要がある場合、シングルクォーテーションを「’\”」に変換すれば解決できます。
たとえば次のようにすると失敗します。
# echo ”hoge”
hoge
#
正しくは次のようにします。
# echo ”\”hoge’\”’
‘hoge’
#
trで空白を削除する
標準入力で受け取った文字列からすべての空白を削除するには「tr」コマンドが便利です。
# echo ‘a b c d’ | tr -d ‘[:blank:]’
abcd
tr -d ‘[:space:]’ とすると改行も削除するので注意が必要です。
trで連続した空白をひとつにまとめる
# echo ‘a b c d’ | tr -s ‘[:blank:]’
a b c d
コマンドの実行結果をファイルとして扱う
このテクニックは便利です。
たとえばdiffコマンドでファイルを比較する際にsortしたファイルを使いたい場合、わざわざ別のファイルにsortした結果を書き出してからdiffする必要はありません。
コマンドの実行結果をファイルとして扱うには「<(コマンド)」のようにします。
# diff <(sort File1) <(sort File2)
長いコマンドを短くする
コマンドは短い方が作業者の負担もチェッカーの負担も減りますし、作業手順書のレビューをする際もレビューアの負担を減らしコマンドの誤りを見つけやすくなります。
たとえば以下のようなマンドは短くできます。
# cp -pv /etc/fstab /etc/fstab-$(date +%Y%m%d)
上記のコマンドは以下のように短くすることができます。
# cp -pv /etc/fstab{,-$(date +%Y%m%d)}
実行するとこのような感じになります。
# cp -pv /etc/fstab{,-$(date +%Y%m%d)}
‘/etc/fstab’ -> ‘/etc/fstab-20200131’
#
全然コマンドが短くなってないように見えるかも知れませんが、上記の例はパスが短いからであって深いパスになると恩恵が分かるはずです。
そしてcpだけはなくdiffするときもcpをdiffに変えるだけで良くなります。
# diff /etc/fstab{,-$(date +%Y%m%d)}
このコマンド短縮はsshで流し込む時も画面がすっきりします。
# Target= “
hosta
hostb
hostc
“
for j in ${Target}; do
echo ——- $j ——-;
ssh $j ‘cp -pv /etc/fstab{,-$(date +%Y%m%d)}’
done
すべてのファイルから検索する
ある文字列を含むファイル名と行番号を表示するにはfindとxargs、grepを組み合わせると便利です。
find <パス> -type f | xargs grep -Hn <文字列>
find / -type f | xargs grep -Hn hogehoge