この記事について
この記事は、Linux上でコマンドをそこそこ実行してきた私が独断と偏見でよく使う5大コマンドをまとめたものです。
痒い所に手が届くような内容になることを願って記します…。
コマンドたち
①netstat -anp | grep "Listen "
netstatコマンドは、使用しているディストリビューションによってはssコマンドに置き換わっている可能性があります。
実現できること
LISTENしているポートを確認できます。
アプリケーションやミドルウェアに接続できない場合のトラブルシュートに使用できます。
使用方法
ポートの状況を調べたいサーバ上でコマンドを打つだけです。
127.0.0.53:53
や:::80
の箇所: LISTENしているIPアドレスとポート
0.0.0.0:*
や:::*
の箇所: 接続する側のIPアドレスとポート
このような状況ではSSL設定したはずなのに、443
ポートが開いていないぞというような形で調査ができます。
$ netstat -anp | grep "LISTEN "
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
②lsof -i:<ポート番号>
実現できること
ポートが何によって開放されているかを確認できます。
使用方法
コマンドの<ポート番号>
の箇所を調べたいポート番号に置き換えてコマンドを打ちます。
COMMANDの箇所がapache2
になっているので、80
番ポートを開放しているのはapache2
であると分かります。
$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 374 root 4u IPv6 27362 0t0 TCP *:http (LISTEN)
apache2 1011 www-data 4u IPv6 27362 0t0 TCP *:http (LISTEN)
apache2 1012 www-data 4u IPv6 27362 0t0 TCP *:http (LISTEN)
③grep -lR "<検索文字列>" <ディレクトリ名>
実現できること
指定したディレクトリ配下の検索文字列を含むファイルを一覧取得できます。
エディタでやれは禁止。
使用方法
コマンドの<検索文字列>
を検索したい文字列に置き換え、<ディレクトリ名>
を配下を検索したいディレクトリ名に置き換えてコマンドを打ちます。
特定の変数が使用されているファイルの一覧を抜き出す際などに利用できます。
# ディレクトリ/ファイル構成
$ tree
.
├── test1
└── test_dir
├── test2
└── test_dir2
└── test3
$ cat test1
aaa
$ cat test_dir/test2
bbb
$ cat test_dir/test_dir2/test3
aaabbb
$ grep -lR "aaa" ./
./test1
./test_dir/test_dir2/test3
④Ctrl + R
実現できること
コマンドの履歴を検索できます。
あのめっちゃ長いコマンドもう一回打ちたい…を実現できます。
使用方法
Ctrl + Rを押すことで検索画面に切り替わります。
その後、検索文字列を打つことで検索文字列を含むコマンドの中で最後に打ったコマンドを呼び出せます。
ここでは、111
を検索文字列として、echo 111
が履歴から検索されています。
この状態から、Enter
で実行、Tab
でコマンドの表示、Ctrl + R
でさらに古いコマンドの検索ができます。
# 111で検索した状態
(reverse-i-search)`111': echo 111
# Enter押下時(コマンドが実行される)
$ echo 111
111
# Tab押下時(コマンドは実行されていない状態)
$ echo 111
# さらにCtrl + Rを押下時(さらに古いコマンドの検索)
(reverse-i-search)`111': echo 111222
⑤for
実現できること
繰り返す処理を行うことができます。
一定の間隔でコマンドを打ったり、複数のサーバにコマンドをばらまいたりできます。
調査したいサーバをローラーで調査する際などに使用していました。
使用方法
以下の構文で繰り返し処理が実行できます。
for <実際の処理に使用する変数> in <変数に格納するもののリスト>; do <コマンド>; done
使用する際のイメージはこんな形です。
echo
の部分をssh
に変えることにより、サーバへのローラー処理などが可能になります。
$ _hosts="test1 test2 test3"
$ for host in $_hosts; do echo "====$host===="; echo "hello $host"; done
====test1====
hello test1
====test2====
hello test2
====test3====
hello test3
あとがき
コマンドを直接打つ機会も減っていると思いますが、なにかの助けになれば幸いです。
こんなのも便利だよがあれば、是非教えてください!