GNU/Linux >> Linux の 問題 >  >> Linux

Linuxの履歴コマンドを詳細に説明

Linuxコマンドラインを頻繁に使用している場合、historyコマンドを効果的に使用すると、生産性が大幅に向上する可能性があります。

Linuxには、最近使用された最後のコマンドをすべて表示するための非常に便利なコマンドがあります。このコマンドは単にhistoryと呼ばれます 。

タイムスタンプの表示

通常、historyと入力すると コマンドラインでは、デフォルトで数字の後に最近使用したコマンドが表示されます。監査の目的で、以下に示すように、コマンドと一緒にタイムスタンプを表示すると便利な場合があります。

historyでタイムスタンプを有効にするには コマンド出力の場合、HISTTIMEFORMATを構成する必要があります Bash変数。

export HISTTIMEFORMAT="%F %T "
history | more
1  2020-06-25 19:02:39 systemctl restart network
2  2020-06-25 19:02:43 exit
3  2020-06-25 19:02:47 id
4  2020-06-25 19:02:56 cat /etc/hosts
コマンド履歴の検索

これは、historyで最も頻繁に使用される機能である可能性があります コマンド 。非常に長いコマンドをすでに実行している場合は、キーワードを使用して履歴を検索し、完全に入力しなくても同じコマンドを再実行できます。

  1. Control+Rを押します キーワードを入力します。
  2. コマンドが表示されたらEnterキーを押します。これにより、履歴からコマンドが実行されます。

次の例では、hostを検索しました 、前のコマンドcat /etc/hostsを表示しました hostという単語を含む履歴 。

(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

コマンドを実行する前に、履歴からコマンドを編集したい場合があります。たとえば、systemctlを検索できます 、systemctl restart networkが表示されます コマンド履歴から、このコマンドを選択します(ESCを押します) キー)、restartを変更します stop

次に、Enterを押すだけで、再実行します。 。

(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network
最後に実行されたコマンドを繰り返します

さまざまな理由で、前のコマンドを繰り返してしまう場合があります。最後に実行されたコマンドを繰り返す4つの異なる方法は次のとおりです。

  1. up arrowを使用します 前のコマンドを表示し、Enterキーを押して実行します。
  2. !!」と入力します コマンドラインからEnterキーを押します
  3. !-1」と入力します コマンドラインからEnterキーを押します。
  4. Control+Pを押します 前のコマンドが表示されたら、Enterキーを押して実行します。
特定のコマンドを実行する

次の例では、コマンド#4を繰り返したい場合は、 !4を実行できます。 以下に示すように。

history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1
特定の単語で始まる前のコマンドを実行する

!と入力します その後に、再実行するコマンドの最初の数文字が続きます。次の例では、!psと入力します 入力して、psで始まる前のコマンドを実行しました 、これはps aux | grep yp

!ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp
履歴アイテムの数を制限する

これはHISTSIZEによって制御されます およびHISTFILESIZE 組み込みのBashシェル変数。次の2行を~/.bashrcに追加します ファイルを作成してログアウトしてから、再度ログインします。

HISTSIZE=1500
HISTFILESIZE=1500

その結果、history 1500個のコマンドを保存するように設定されています。

履歴ファイル名を変更する

デフォルトでは、history ~/.bash_historyに保存されます ファイル。

次の行を.bash_profileに追加します ファイルを作成してBashシェルに再ログインし、historyコマンドを.my_commandlineに保存します。 .bash_historyの代わりにファイル ファイル。

HISTFILE=/root/.my_commandline

これは、異なる履歴ファイル名を使用して異なる端末から実行されたコマンドを追跡する場合に使用されます。

履歴から継続的に繰り返されるエントリを削除する

次の例では、pwd は3回入力されましたが、履歴を作成すると、3回連続して出現するすべてを確認できます。重複を排除するには、HISTCONTROLを設定します ignoredupsへ 以下に示すように。

history | tail -4
44  pwd
45  pwd
46  pwd
47  history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd
58  history | tail -4
履歴全体で重複を消去

ignoredups 上記のように、重複するコマンドが連続している場合にのみ、重複を削除します。履歴全体で重複を排除するには、HISTCONTROLを設定します erasedupsへ 以下に示すように。

export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38  pwd
39  systemctl restart network
40  history | tail -3
ls -l
systemctl restart network
history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -l
39  systemctl restart network
40  history | tail -6
特定のコマンドを記憶しないように履歴を強制する

コマンドを実行すると、historyに指示できます。 HISTCONTROLを設定してコマンドを無視する ignorespaceへ 次に示すように、コマンドの前にスペースを入力します。

コマンドを履歴から隠すことができるため、多くのジュニアシステム管理者がこれに興奮しているのを見ることができます。 ignorespaceがどのように行われるかを理解するのは良いことです 動作します。ただし、ベストプラクティスとして、歴史から意図的に何かを隠さないでください。

export HISTCONTROL=ignorespace
ls -ltr
pwd
 systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67  ls -l
68  pwd
69  history | tail -3
以前の履歴をすべてクリア

以前のhistoryをすべてクリアしたい場合があります 、しかし、歴史を前進させ続けたい。

history -c
履歴コマンドから単語を置き換える

historyを検索する場合 、別のコマンドを実行したいが、検索したコマンドと同じパラメータを使用したい場合があります。

以下の例では、!!:$ viの横 commandは、前のコマンドから現在のコマンドへの引数を取得します。

ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf

以下の例では、!^ viコマンドの横にあるのは、前のコマンドから最初の引数を取得します(つまり、cp コマンド)を現在のコマンド(つまり、vi コマンド)。

cp nginx.conf nginx.conf.bak
vi  !^
vi nginx.conf
特定のコマンドを特定の引数に置き換える

以下の例では、!cp:2 履歴内でcpで始まり、cpの2番目の引数を取り、次に示すようにls-lコマンドの代わりに使用する前のコマンドを検索します。

cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

以下の例では、!cp:$ cpで始まり、cpの最後の引数(この場合は上記の2番目の引数でもあります)を取り、以下に示すようにls-lコマンドの代わりに使用する履歴内の前のコマンドを検索します。

ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
履歴の使用を無効にする

historyを無効にする場合 すべて一緒に、入力したコマンドをBashシェルに記憶させたくない場合は、HISTSIZEを設定します。 以下に示すように0に変更します。

export HISTSIZE=0
履歴から特定のコマンドを無視する

pwdなどの基本的なコマンドで履歴を乱雑にしたくない場合があります およびlsHISTIGNOREを使用する 履歴から無視するすべてのコマンドを指定します。

lsを追加することに注意してください HISTIGNORElsのみを無視します ls -lではありません 。したがって、履歴から無視したい正確なコマンドを提供する必要があります。

export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79  export HISTIGNORE="pwd:ls:ls -l:"
80  systemctl restart network
81  history
[Note that history did not record pwd, ls and ls -l]

historyの詳細については Linuxでコマンドを実行するには、そのマニュアルページを参照してください。


Linux
  1. Linuxでhistoryコマンドを使用する方法

  2. Linuxmvコマンド

  3. Linuxduコマンド

  1. Linuxipコマンド

  2. Linuxcdコマンド

  3. Linux履歴コマンド

  1. Linuxの履歴コマンド(Bashの履歴)

  2. LinuxのWコマンド

  3. Linuxでのlsコマンド:17の便利な例の説明