Linux

「よく使うコマンドランキングの表示」を1つのコマンドにする

投稿日:2018年12月7日 更新日:

1. はじめに

UNIX系のOSで、よく使うコマンドを表示するには、以下のコマンドを実行することで実現できます(一例です)。

$ history | awk '{print $2}' | sort | uniq -c | sort -nr

これは、以下の処理をパイプ「|」でつないで実現しています。

  • history コマンドでコマンド実行履歴一覧を出力し、
  • awk '{print $2}' で2列目のみを抽出し、
  • sort でアルファベット順に並び替え、
  • uniq -c で出現回数を行の前に出力しつつ、重複した行は1つにまとめ、
  • sort -nr で、出現回数の降順に並び替える

2. 入力が面倒なコマンドを新たなコマンド(今回は関数)にする

毎回これだけの文字を入力するのは面倒なので、これを 1つのコマンドにしてみましょう。

できれば 表示する行数を引数として指定したいですが、この場合、コマンドエイリアス (alias) だと面倒そうなので、bash の関数にします。

例えば、~/.bashrc ファイルに以下の関数を書きます。

function freq-used-cmd()
{
  local COUNT=10
  local RE='^[0-9]+$'
  if [ $# -eq 1 ] && [[ $1 =~ $RE ]]; then
    COUNT=$1
  fi
  # awk の引数は、historyのフォーマットにより変える
  history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n $COUNT
}
  • (引数が1つ存在する)且つ(引数が数値である)が成り立てば、その引数値を、表示する行数として使用します。
  • 引数が指定されていなかったり、数値でない場合は、デフォルトの10行になります。

3. 作成した関数の実行

これは関数名がコマンド名になるので、以下のように実行することができます。

引数なし

$ freq-used-cmd

引数あり

$ freq-used-cmd 20

4. コマンドの引数も合わせて調べたい

コマンドの引数もつけた状態を調査対象としたいは、例えば awk の部分を以下のように書くと、コマンドの後ろにスペース1文字をはさんで、1つ目の引数($3 の部分です)までが抽出され、処理の対象となります。

awk '{print $2" "$3}'

5. 履歴のフォーマットが異なる場合

今までの例は、実は履歴のフォーマットがデフォルト状態で保存されていることを想定しています。

この場合、history コマンドを実行すると以下のような出力になります。

$ history
    1 pwd
    2 list -a
    3 which python
    4 python -V
    5 grep -n '(' a.txt
    :

しかし、例えば シェル変数 HISTTIMEFORMAT が以下のように設定されていると、

export HISTTIMEFORMAT="%Y-%m-%d (%a) %T "

history コマンドの出力に日付情報が追加されます。

$ history
    1 2018-11-05 (水) 19:45:51 pwd
    2 2018-11-05 (水) 19:45:55 list -a
    3 2018-11-05 (水) 19:46:02 which python
    4 2018-11-05 (水) 19:46:29 python -V
    5 2018-11-05 (水) 19:46:43 grep -n '(' a.txt
    :

こうなると、awk の部分を対応させなければいけません。

上記の出力がされるのであれば、スペースを区切り文字であると考え、左から5番目がコマンドになるため、awk の部分は以下のようになります。

awk '{print $5}'

6. まとめ

入力が面倒なコマンドがあったら、今回の方法でシンプルなコマンドにして使いましょう。

📂-Linux

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Linux

Ubuntu 18.04 (WSL) で curl がインストールエラーになったので対応しました

Ubuntu 18.04 LTS (WSL) の環境で curl コマンドをインストールしようとしたところ、エラーになりました。 この時の対応方法を説明します。 目次1. 状況2. 対応手順参考 1. …

SELinux

Webサーバーがサイトの構成ファイルを上書きできない問題に対応する(SELinuxが原因の場合)

目次1. はじめに2. 前提3. CentOS 7 の SELinux4. 対応手順5. おわりに参考 1. はじめに Webサイトによっては、そのWebサイトを構成しているファイルを自分で更新する場 …

Linux

ssh-agent の代わりに gpg-agent を使う手順

ssh-agent の代わりに gpg-agent を使う手順について説明します。

CentOS

CentOS 8 で spacewalk を削除する

目次1. spacewalk に関する警告が表示される2. spacewalk を削除する3. 参考 1. spacewalk に関する警告が表示される 2020年のある日、CentOS 8 で dn …

Google App Engine

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする手順を紹介します。