Linux の運用と保守で netstat の代わりに ss コマンドを使用する方法

Linux の運用と保守で netstat の代わりに ss コマンドを使用する方法

序文

Linux サーバーを操作および管理するときに、最もよく使用されるコマンドの 1 つが netstat です。このコマンドは、現在のサーバー上のどのプロセスがポートをリッスンしているかを確認するためによく使用します。主に、ネットワーク サービスの動作状態を診断するために使用されます。

しかし、最近、新しい Ubuntu ディストリビューションをインストールしたときに、netstat がデフォルトでインストールされていないことに気付きました。これは非常に奇妙に感じたので、手動でインストールした後、man ページには netstat コマンドが非推奨になっており、代わりに ss コマンドを使用することが推奨されていることが示されていました。

このプログラムはほとんど廃止されています。netstat の代替は ss です。netstat -r の代替は ip route です。netstat -i の代替は ip -s link です。netstat -g の代替は ip maddr です。

netstat マニュアルページ

netstatの使用法

netstat には非常に多くのパラメータがあります。私は通常、それらのパラメータを組み合わせて使用​​するので、後でこれらのパラメータを使用した理由を思い出せません。

ネットスタット -npl

結果は次のようになります:

アクティブなインターネット接続(サーバーのみ)
プロトコル 受信Q 送信Q ローカルアドレス 外部アドレス 状態 PID/プログラム名
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 655/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* 890/sshdをリッスン
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 30790/cupsd
tcp 0 0 0.0.0.0:18025 0.0.0.0:* LISTEN 890/sshd
tcp6 0 0 :::22 :::* 890/sshdを聴く
tcp6 0 0 ::1:631 :::* 30790/cupsdを聴く
tcp6 0 0 :::9090 :::* 15415/./prometheus を聴く
tcp6 0 0 :::18025 :::* 890/sshdを聴く
udp 0 0 127.0.0.53:53 0.0.0.0:* 655/systemd-resolve
udp 0 0 0.0.0.0:631 0.0.0.0:* 30792/cups-ブラウズ
udp 0 0 0.0.0.0:5353 0.0.0.0:* 757/avahi-daemon: r
udp 0 0 0.0.0.0:42360 0.0.0.0:* 757/avahi-daemon: r
udp6 0 0 :::58232 :::* 757/avahiデーモン: r
udp6 0 0 :::5353 :::* 757/avahiデーモン: r
アクティブな UNIX ドメイン ソケット (サーバーのみ)
Proto RefCnt フラグ タイプ 状態 I-Node PID/プログラム名 パス
unix 2 [ ACC ] ストリームリスニング 35116 1304/gnome-session- @/tmp/.ICE-unix/1304
unix 2 [ ACC ] SEQPACKET LISTENING 1448 1/init /run/udev/control
unix 2 [ ACC ] ストリームリスニング 34277 1270/systemd /run/user/1000/systemd/private
unix 2 [ ACC ] ストリームリスニング 34282 1270/systemd /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] ストリームリスニング 33510 1270/systemd /run/user/1000/gnupg/S.gpg-agent
unix 2 [ ACC ] ストリームリスニング 33511 1270/systemd /run/user/1000/pulse/native
unix 2 [ ACC ] ストリームリスニング 33512 1270/systemd /run/user/1000/gnupg/S.gpg-agent.extra

最もよく使用されるコマンドの組み合わせはこれです。表示される結果には 2 つの段落があります。最初の段落には TCP/UDP プロトコルのリスニング ステータスが表示され、2 番目の段落には socks ファイルのリスニング ステータスが表示されます。パラメータ n は IP アドレスをデジタル形式で表示することを意味します。そうでない場合は、ホスト名またはドメイン名が表示されます。パラメータ p はプロセス名を表示することを意味します (表示されない場合もあります)。l の意味は、LISTENING 状態のソケットに焦点を合わせることです。

上記のコマンドを実行すると、システムで開いているソケットがすべて表示されます。ネットワーク サービスを開始したり、ポートを開くネットワーク サービスを開発したりする場合は、このコマンドを使用して開いたポートを確認できるはずです。表示されない場合は、ポートが正しく開かれていないことを意味します。理由を確認する必要があります。したがって、これは非常に便利なデバッグ コマンドです。

ssの使用法

上記は、netstat の最も基本的な使用方法を紹介したものです。もちろん、他にも多くの使用方法がありますが、今は省略します。netstat の代わりに ss コマンドを使用する場合、同様の効果を得るにはどうすればよいでしょうか。

ss-atlp

これは私が自分で考え出したパラメータの組み合わせです。まだうまく暗唱できず、毎回ドキュメントを確認する必要があります。

状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート
LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:* ユーザー:(("systemd-resolve",pid=655,fd=13))
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* ユーザー:(("sshd",pid=890,fd=5))
LISTEN 0 5 127.0.0.1:ipp 0.0.0.0:* ユーザー:(("cupsd",pid=30790,fd=7))
LISTEN 0 128 0.0.0.0:18025 0.0.0.0:* ユーザー:(("sshd",pid=890,fd=3))
LISTEN 0 128 [::]:ssh [::]:* ユーザー:(("sshd",pid=890,fd=6))
LISTEN 0 5 [::1]:ipp [::]:* ユーザー:(("cupsd",pid=30790,fd=6))
LISTEN 0 128 *:9090 *:* ユーザー:(("prometheus",pid=15415,fd=3))
LISTEN 0 128 [::]:18025 [::]:* ユーザー:(("sshd",pid=890,fd=4))

これは ss コマンドによって表示される結果です。形式は netstat とは大きく異なり、netstat コマンドほどコンパクトで直感的ではないことがわかります。これが多くの人々がこの命令を批判した理由の一つです。もちろん、この批判を批判する人たちは、人々は単に習慣に固執していて、前進する気がないのだと考えています。もちろん、こう言うのは間違っています。Charles を例に挙げましょう。私は 2010 年に仕事を始めたときに netstat コマンドを学びましたが、10 年近く使い続けており、一度も変更していません。もちろん、とても気に入っています。

もちろん、外国人がssコマンドの名前が良くないと言う理由もあります。実際、ssはソケット統計を意味する可能性があります。略語の後には2文字しかないため、関連付けが容易ではなく、netstatほど直感的ではありません。もちろんこれは私の説明に過ぎず、外国人が文句を言う理由にはなりません。彼らが文句を言うのは、SS と言えばヒトラーを思い出すからです。信じられないでしょう?私は1980年代に生まれました。私の世代の人には、このことについて何の印象もありません。重要なのは、私たちが主に中国語を話していることです。人々はSSを見ると、はしごを思い浮かべるでしょうが、ヒトラーを思い浮かべる人はいないでしょう。この偉大なナチスは、以前はSS特別機動部隊と呼ばれ、後に武装SSと改名された軍隊を持っていました。ドイツ語の略称はSSです。

では、早速いくつかのパラメータについて説明しましょう。a パラメータはすべてを表示することを意味し、t パラメータは TCP プロトコルを表示することを意味し、l は LISTENING 状態を表し、p はプロセス情報を表します。上記の表から、p パラメータによって出力される情報は、netstat ほど簡潔に整理されていないことがわかります。しかし、プロセス名、PID、FD が表示されるので、より完全です。しかし、二重括弧、キー/値の形式、引用符があるため、見た目が乱雑になります。もちろん、いくつかのコマンドを使用してフォーマットすることもできますが、それでも面倒です。

交換の理由は何ですか?

おそらくこれが私が最も興味を持っていることです。しかし、ネットでいろいろ情報を検索してみましたが、基本的には曖昧なものでした。これもまた私を少し無力にさせます。

一般的に、メイン パッケージは net-tools パッケージであり、これが iproute パッケージに置き換えられることがわかります。理由はおそらく次のとおりです: 1. このパッケージは古すぎます。2. このパッケージは多くの新しいカーネル機能をサポートしていません (どの機能かは示されていません)。インターフェイスは十分に最適化されておらず、使いにくいです (コマンド ラインに適していません)。3. net-tools の ifconfig には多くの欠点があります。4. 今後は net-tools をメンテナンスしたくありません。

Luk Claes と私は、net-tools の現在のメンテナーとして、その将来について考えてきました。net-tools は長年 Debian やその他の Linux ベースのディストリビューションの中核を担ってきましたが、時代遅れになりつつあります。

Linux カーネルの最新機能の多くをサポートしておらず、インターフェースは最適とは程遠く、自動化で使用するのは困難です。また、ここ数年はあまり人気がありません。

一方、2.2 カーネル ラインあたりで導入された iproute スイートは、はるかに優れた一貫性のあるインターフェイスを備え、より強力であり、ほぼ 10 年前のものであるため、テストされていないと言う人はいないでしょう。

したがって、私たちの計画は、net-tools を完全に iproute に置き換えることです。おそらく、他のディストリビューションがそれに続く道筋を示すことになるでしょう。もちろん、ほとんどの人やツールは、由緒ある古いインターフェースを使用し、覚えているので、最初のステップは、net-tools との互換性を保つようにラッパーを作成することです。

同時に、net-tools を使用するほとんどのパッケージは、代わりに iproute を使用するようにパッチを当てるべきであり、その他のパッケージはしばらくの間ラッパーを引き続き使用できると考えています。ifupdown パッケージが最初の候補であることは明らかですが、iproute を使用するバージョンは 2007 年から試験的に利用可能になっているようです。

https://serverfault.com/questions/633087/ifconfig の Linux での廃止に関する記述はどこにありますか?

原理レベルからの分析もあります。現在の netstat コマンドと ifconfig コマンドはどちらも、/proc ディレクトリ内の仮想ファイルの読み取りと書き込みによってタスクを完了します。これは小規模ビジネス システムでは問題ありませんが、大規模システムではシステム パフォーマンスに悪影響を与える可能性があります。対照的に、 ss コマンドと ip コマンドは Linux カーネルの netlink ソケット機能を使用します。根本的な違いがあります。古いコマンドは新しい原則を使用して書き直すことができますが、主にさまざまなプログラマー グループ間の政治的な問題のため、実際にそうする人はいません。誰もが同意しません...

もちろん、もっと深い理由があります。このようなデバッグ コマンドを使用するのは、本質的にカーネルの状態を知りたいからです。実際、カーネルはネットワーク モジュールの原理全体を変更しました。一方で、以前と同じように情報を表示するコマンドも必要です。表示レベルの形式は実際の原理から外れています。したがって、長期的には、これら 2 つのコマンドを置き換えることは避けられません。

結論は

テクノロジーに携わる私たちも、時代の流れに遅れずについていく必要があります。以前のコマンドは馴染みがあり、使いやすく、忘れられないものですが、それでも新しいコマンドを学び続ける必要があります。多くのディストリビューションでは、net-tools パッケージがデフォルトで付属しなくなりました。手動でインストールすることはできますが、その理由は非常に明確です。一方、テクノロジーの分野で働くときは、頭が硬直しないように注意し、新しいものに対する好奇心と熱意を持ち続けなければなりません。

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux netstat コマンドの詳細な説明 (上級面接では必須)
  • Linux における netstat コマンドの一般的な使用例
  • Linux netstatコマンドの詳細な説明
  • Linux netstat コマンドを使用して同時接続数を表示する方法
  • Linux netstatコマンドの詳細な分析
  • Linuxでnetstatを使用してネットワークステータスとポートステータスを表示する
  • Linux netstatコマンドの詳細な説明

<<:  MySQL のデータ統計に関するヒント

>>:  Vueコンポーネントが相互に値を転送する方法の詳細な説明

推薦する

MySQL SQL文を最適化するためのヒント

十分に最適化されていない、またはパフォーマンスが極端に低い SQL ステートメントに直面した場合、通...

Vueプロジェクトでよく使われる実践的なスキルのまとめ

目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...

js Promise同時制御メソッド

目次質問背景アイデアと実装質問次のように、同時実行 Promise の数を制御するメソッドを記述する...

雨滴効果を実現する JavaScript キャンバス

この記事では、雨滴効果を実現するためのJavaScriptキャンバスの具体的なコードを参考までに紹介...

MySQL インデックスの設計と最適化の方法

目次インデックスとは何ですか?左端のプレフィックス一致の原則key_lenの計算方法インデックスの最...

htmlダウンロード機能の詳しい説明

新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Tomcat を使用して IntelliJ IDEA によってデプロイされたプロジェクトの場所はどこですか?

IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...

JS でシンプルな画像カルーセル効果を実現

この記事では、シンプルな画像カルーセル効果を実現するためのJSの具体的なコードを参考までに紹介します...

ネイティブ JS カプセル化 vue タブ切り替え効果

この記事の例では、ネイティブJSカプセル化vueタブ切り替えの具体的なコードを参考までに共有していま...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

Python MySQL データベース テーブルの変更とクエリ

Python は MySQL に接続してデータベース テーブルを変更およびクエリします。 pytho...

Navicat の MySQL へのリモート接続が遅い理由の詳細な説明

最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...

キャンバスでPS消しゴムスクラッチカードの効果を実現するためのJSの使用方法の詳細な説明

目次効果のデモンストレーション:メインJSコード実装 <div class="box...