1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

よく使うシェルコマンドとTips(推奨)

2022-02-09 20:47:46

I. コンソール使用のヒント

普段の業務経験から、私がよく使うショートカットをまとめてみました。

1.1 操作のショートカット

      Ctrl+rです。過去のコマンドを素早く検索することができます

      Ctrl+a / Ctrl+e:カーソルをコマンドラインの先頭/末尾に移動させる

      Ctrl+w / Ctrl+k:カーソルの前後を削除する

1.2 VIMファイル編集のショートカット

       ZZ:ファイルの保存と終了

1.3 プロセス操作のショートカット

       Ctrl+c:プロセスを強制終了する

       Ctrl+z: プロセスをハングアップさせる

       Ctrl+d。ターミナルでexitと入力した後、Enter

1.4 Linuxコマンドのショートカットキー(上)

       Shift + p: CPU使用率でソート

       Shift + m:メモリ使用量でソート

II. シェルコマンド集

まず、Shellコマンド集を分類すると、空間解析、指定ファイル操作、リンク状態解析、IP情報抽出に分けることができる。

2.1 空間解析

シナリオ1:ディスク容量が不足しており、ログディレクトリを素早く特定する必要がある場合

このシナリオは、Linuxオペレーティングシステムのディスク容量が不足しているときに、次のコマンドの組み合わせを使用して、ディスク使用量をすばやく検索し、ファイルのディスク使用量を並べ替える必要がある場合に使用します。

du -x --max-depth=1 / | sort -k1 -rn #-x means skip other filesystems

-x は、他のファイルシステムをスキップして、このファイルシステム内のファイルのみを分析し、干渉する項目を除外することを意味します。

シナリオ2:システムが多くの断片化されたファイルを生成し、inodeリソースが不足する場合

このシナリオでは、オペレーティングシステムが断片化されたファイルを大量に生成し、inodeを大量に消費します。du コマンドは、ディスク使用量を数えることができるだけで、断片化されたファイルの数を数えることはできないため、断片化されたファイルの数を数えるには、次のコマンドの組み合わせが必要であるため、inode 使用量の推移は、ファイルを作成するための inode リソース不足につながる可能性があります。

find -type f | awk -F/ -v OFS=/ 
 '{$NF="";dir[$0]++}END
{
for (i in dir) print dir[i] i}' | sort -k1 -rn | head

このコマンドはもう少し複雑で、find, awk, sort, and head を使っています。

find は指定されたファイルタイプのファイルを見つけ、それを awk にパイプし、テキストを行ごとに整形して表示します。-F / はファイルを / で分割した文字列で処理することを、-v OFS=/ は結果を / で分割して表示することを指定します。 awk コマンド全体の規則として、{}があります。END {}の書式で、前の{}は行処理操作、END {}は行処理後に全体の結果を出力する必要があることを表しています。最後に、forループでdir連想配列の全行に対して反復処理を行う。

2.2 ファイル操作の指定

シナリオ1:ファイルを一括検索してコンテンツを置き換える

シナリオ1は、複数のサブディレクトリを持つディレクトリに適用され、サブディレクトリ内のファイルが大量にある場合、指定されたファイルを見つけ、ファイルの内容を置き換える必要がありますが、次のコマンドの組み合わせを使用する必要があります。

(find . -name "*.txt"|xargs tar -cvf test.tar)
 && cp -f test.tar /home/.

カレントディレクトリにあるサブフォルダ名 consumer.xml のファイルを find コマンドですべて探し、それを sed にパイプし、その内容を -i で置き換えます。

シナリオ2:コピー梱包のためにファイルを一括検索する

シナリオ2は、主に以下のコマンドの組み合わせで、見つかったファイルをパッケージ化し、指定したパスにコピーするために使用します。

netstat -n | awk '/^tcp/{arr[$NF]++
} 
END {for (i in arr) print arr[i] " " i
}'

カレントディレクトリの .txt で終わるファイルをすべて検索して test.tar にパッケージし、パッケージが成功したらそのアーカイブを /home ディレクトリにコピーします。

2.3 ネットワーク接続状況解析

シナリオ1:tcpプロトコルで接続をリストアップし、すべての状態の合計数をカウントする

シナリオ1は主に、サーバーが現在持っているTCPタイプの接続数を確認し、TCP/IPネットワークの状態(ESTABLISHED、TIME_WAIT)を分析するために使用されます。

netstat -n | awk '/^tcp/{arr[$NF]++} END {for (i in arr) print arr[i] " " i}'

awk コマンドの全体的なルールとして、{}があります。END {}の形式で、上記のコマンドは、TCPプロトコルの下でのすべてのタイプの接続数の合計を分析し、現在のサーバー接続数の分析に使用することができます。

2.4 IP情報の抽出

シナリオ1:コマンドによるホストIP情報の取得

ip a|grep "global"|awk '{print $2}'|awk -F/'{print $1}'

ip a は、ホスト上のすべての NIC 情報を表示し、グローバルキーワードをフィルタリングし、2 列目をプリントアウトし、サブネットマスクを削除してホスト ip を取得する役割を担います。

III. よくある質問

質問1:Shellは複数のタスクを同時に行うのに適していますか?

A: いいえ。Shellは一般に同時実行タスクをnohup経由でバックグラウンドに置くため、プロセスの状態制御がうまくいかない、プロセス間の情報共有がファイル形式になってしまうなどの問題がありますので、大規模な同時実行タスクが必要な場合は、Python、Go、PHPなどで並行処理を実装することをお勧めします。

質問2:Shellはどのようなシナリオに適しているのでしょうか?

A:ログカット、プロセス解析、システム初期化など、O&M効率(性能効率ではない)要件を追求したシンプルなシナリオに適しています。

概要

シェルでよく使うコマンドとTips(おすすめ)の紹介は以上となります。ShellコマンドとTipsの詳細については、過去の記事を検索するか、以下の記事を引き続きご覧ください。