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
で最も頻繁に使用される機能である可能性があります コマンド 。非常に長いコマンドをすでに実行している場合は、キーワードを使用して履歴を検索し、完全に入力しなくても同じコマンドを再実行できます。
-
Control+R
を押します キーワードを入力します。 - コマンドが表示されたら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つの異なる方法は次のとおりです。
up arrow
を使用します 前のコマンドを表示し、Enterキーを押して実行します。- 「
!!
」と入力します コマンドラインからEnterキーを押します - 「
!-1
」と入力します コマンドラインからEnterキーを押します。 -
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
などの基本的なコマンドで履歴を乱雑にしたくない場合があります およびls
。 HISTIGNORE
を使用する 履歴から無視するすべてのコマンドを指定します。
ls
を追加することに注意してください HISTIGNORE
へ ls
のみを無視します 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でコマンドを実行するには、そのマニュアルページを参照してください。