コマンドプロンプトで,暗記するべき10の必須コマンド (後半)ネットワーク系
前記事では,現場で使えるコマンドプロンプトのコマンド例として,ファイル処理系の5つを挙げた。
引き続いて今回は,ネットワーク系の5つを挙げる。
- つながらなくなって数日間何もできないまま
- ちょっといじったら,もう直し方がわからなくなった…。
というような面倒事は,だいたいネットワーク周りで起こるのではないだろうか。
Windowsコマンドプロンプト上でそれほど多くの設定ができるわけではないが,とにかくネットワークに強い人は重宝される。
下記のコマンドもtipsとして覚えておきたい。
(6)ポート番号とプロセス名の対応を知りたい: netstat
ポートの競合が起こり,プログラムが動かないという事はたまにある。(ApacheとSkypeなど。)
- 「このプログラムは,何番のポートを使ってるのか?」
- 「このポートは,どのアプリケーションが占有してるのか?」
というような時には,下記のコマンドで調べることになる。
プロセスのポート利用状況を一覧する
netstat -ano
すると,
- プロトコル種別
- ローカルアドレスとポート番号
- 通信先アドレスとポート番号
- 通信状態
- プロセス番号(PID)
が表示される。
次に,プロセスIDからアプリケーション名を特定する。これには3つの方法がある。
(a) netstat自体にやらせる方法
もしも,上のコマンドでオプションに -b を追加すれば,プロセスIDだけでなくプロセス名をも表示させる事ができる。
netstat -abno
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 3212
[apache.exe]・・・
のように,リッスンポートの作成に使われたexeファイル名が出てくる。
この場合,80番ポートを使っているのが,PID=3212のapache.exeだとわかる。
しかし,この操作は非常に重い。表示されるまで時間がかかる。
(b) タスクマネージャを見る方法
最もやりやすい方法だろう。
コマンドプロンプトを開いているのなら,コマンドライン上から taskmgr と入力するのが速い。
メニューバーから,表示→列の選択→PID を選択すると,各プロセスごとにPIDが表示される。
(c) tasklist コマンドを使う方法
これはXP Home Editionでは利用できないコマンドなのだが,使える環境ならば役立つ。
プロセスIDからプロセス名を特定する
tasklist /FI "PID eq 2780"
上のようにすると,2780番のPIDについてアプリケーション名が表示される。
このようにしてポートの占有状況が分かれば,
あとは競合状態にあるプログラムを終了させたり,
あるいは使われていないポート番号を利用するように調整するだけだ。
ところで,netstatコマンドで表示される情報は複数ページに渡る。
必要な行だけを抽出して表示させる事はできないか?
前回でてきたfindstrコマンドとパイプにすればよい。
特定のポートを利用しているプロセスだけ表示
netstat -oan | findstr ":80"
こうすれば,80番ポートを利用しているアプリケーションの情報だけが,行単位で抽出表示される。
(注意:自分だけでなく,相手アプリケーションが80番を利用しているケースも含めて表示される。)
(7)自分のIPアドレスを知りたい: ipconfig
自分のマシンやリモートログイン先のマシンが,もしDHCP支配下にある場合,IPアドレスは動的に割り当てられる。
マシンのIPアドレスを知る方法はいろいろあるだろうが,
もっとも手軽な方法は,下記のコマンドを適当なバッチに保存しておくことではなかろうか。
自分のIPアドレスを表示する
@ipconfig
@pause
pauseは,「続行するには何かキーを押してください . . .」というウェイト表示を出すためのコマンド。
上記を my_ip.bat などの名前で保存してデスクトップ上に置いておき,ダブルクリックすれば,現在のIPアドレスがわかる。
何かキーを押せば表示は終わる。恐らく一番手軽な方法。
(8)サーバが生きているか調査: ping
ある人にとっては,このpingコマンドがコマンドプロンプトの存在意義のようなものだろう。
あるサーバにネットワーク経由で接続できるか調査
ping IPアドレス
応答がなければ,相手サーバがダウンしているか,途中のネットワーク設定がおかしいか,自分のマシンの設定がおかしいかのどれかだと予測できる。
しかし ping コマンド自体はありふれているので,少し応用してみよう。
LAN上に3台のPCがあって,3台の応答を一括して調べたいとする。この場合,
for %i in (1,2,3) do ping 192.168.0.%i
とすれば,
- 192.168.0.1
- 192.168.0.2
- 192.168.0.3
の3つのアドレスへ順番にpingを送ってくれる。これも必要ならばバッチにしておくと便利。
なお,pingで相手サーバから応答がない場合は tracert IPアドレス と打ちこんでパケットの伝搬経路を確かめる。
経路の途中で,しかもLAN内で応答が途切れた場合,次に挙げる route コマンドが役に立つかもしれない。
(9)LANで違うセグメントにアクセスしたい: route
これは,自宅にいると不要なコマンドかもしれない。
職場で,社内LAN上にDBサーバがあり,そこに接続したいという状況を考えよう。
応答がない場合,例えば次のような原因が考えられる。
- (a)そのDBは「SQL Server 2005」なので,デフォルトでTCPアクセスが拒否される設定のままだった。
MSSQLに関連したこのトラブルはよくある。コマンドライン上では
データソース '〜' への接続を作成できません。
サーバーへの接続を確立中にエラーが発生しました。SQL Server 2005 に接続している場合、既定の設定では SQL Server によるリモート接続が許可されていないために、このエラーが発生した可能性があります。(プロバイダ: 名前付きパイプ プロバイダ、エラー: 40 - SQL Server への接続を開けませんでした)。
が出る。
この場合,configuration managerから,外部からの接続を受け付けるように設定変更すればよい。
SQL Server 2005でネットワーク接続を有効にするには?
http://www.atmarkit.co.jp/fdotnet/dot...
こういった「相手サーバ側の問題」の他に,ルータ未設定のために接続できない事もある。
- (b)まだroute add をしていなかった。
LAN上の異なるセグメントに接続する
自機が接続できるセグメント一覧表示
route print
セグメント間を仲介できるように設定
route -p ADD 192.168.220.0(アクセスしたいセグメント)
MASK 255.255.255.0(ネットマスク)
192.168.〜(自分のいるセグメントのデフォルトゲートウェイのIP)
この設定を行なったのち再度 route print して,自分の接続したいセグメントがDestinationに含まれていればOK。
-p はpermanentの略で,PCをシャットダウンした後も設定を持続させる事を意味する。printと混同しないこと。
※おまけで,Mac OSX版の設定法。
確認
netstat -r
設定
sudo route add 192.168.220.0/24 192.168.〜
OS9以下には,route addの機能が存在しないらしい。
(10)IPアドレスとドメイン名を相互変換: nslookup
IPアドレスの正引き,または逆引きの操作。
Webサイトのアクセス解析を閲覧している際に,リファラがサイト名ではなくIPアドレスになっていて,どこのサイトなのか知りたいというような時に。
IPアドレスの正引き・逆引き
nslookup IPアドレスまたはドメイン名
まとめ(前半+後半)
- for %V in ( *.txt ) do %V
- dir /s /b *.txt
- findstr /n /s "検索文字列" *.txt
- fc /n a.txt b.txt
- tree /f
- netstat -ano | findstr ":80"
- ipconfig
- for %i in (1,2,3) do ping 192.168.0.%i
- route -p ADD 相手セグメントIP MASK マスク 自セグメントIP
- nslookup 対象IPまたはドメイン名
これら10個のコマンドを知っておけば,いざという時にかゆい所に手が届くようになるだろう。
少なくとも,コマンドプロンプト(MS-DOS)でできる基礎事項は,まあ把握した事になる。
なお,PATHの設定はやはりコマンドプロンプトでなくても可能なので省いた。
補足して,ショートカットキーなど操作上の細かいTipsを挙げれば,
キー系
- コマンドプロンプトを開きたい際には,Windows + Rキーでcmdと入力すれば早い(本当は右クリックメニューにもクイック起動にも追加しておくことが望ましいのだが)
- 長いファイル名入力はTABキーで補完
- 過去に入力したコマンドの履歴はF7キーで閲覧
- 入力中の文字は,Escキーで全削除して行頭に戻れる
コマンド系
- ディレクトリ間の移動は cd だが,ドライブ間の移動だけは直接 D: のようにcdを付けないで入力
- copy con temp.txt で標準入力からテキストファイルを作れる(Ctrl+Zで終了)
等がある。
関連する記事:
ネットワーク接続が切れたら,自動的に再接続してくれるバッチ (WiFiの電波が弱くても,自動で無線LANにつなぎなおす)
http://language-and-engineering.hatenablog.jp/entry/20140918/BATWifiNetworkCo...
コマンドラインでメール送信する方法 (WindowsのバッチでSMTP通信)
http://language-and-engineering.hatenablog.jp/entry/20100913/p1
ネットワーク技術の業務スキルレベル 判別表 (5段階)
http://language-and-engineering.hatenablog.jp/entry/20110827/p1
「スタートアップ」に,仕事をさせよう (朝,出社するだけで仕事が進む仕組み作り)
http://language-and-engineering.hatenablog.jp/entry/20100929/p1