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でコマンドを実行するには、そのマニュアルページを参照してください。