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コンポーネントが相互に値を転送する方法の詳細な説明

推薦する

Vue3のサンドボックスの仕組みの詳しい説明

目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する序文vue3サンドボックスには主...

モバイルウェブサイトの開発に関するいくつかの結論

ウェブサイトのモバイル版には、少なくともいくつかの基本機能が必要です。 1. ページの適用性の問題:...

TypeScript をインストール、使用、自動コンパイルする方法に関するチュートリアル

1. TypeScriptの紹介前回の記事ではTypeScriptのインストール、使い方、自動コンパ...

CSS 使用のヒントのまとめ

最近、ブログのアップグレードを始めました。テンプレートを変更する過程で、CSS スタイルシートを書き...

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

jQueryで劇場の座席選択と予約の効果を実現

jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...

Vue の img の src 画像アドレスの動的スプライシングの問題について

Vue での img の動的スプライシングを見てみましょう。src 画像アドレス、具体的な内容は次の...

Python ベースの MySQL レプリケーション ツールの詳細な説明

目次1. はじめに2回目の練習2.1 インストールと設定2.2 コアクラスの紹介2.3 使い方は? ...

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

CSSポジションの5つの異なる値の使い方の詳細な説明

位置プロパティposition プロパティは、要素に使用する配置方法のタイプ (静的、相対的、固定、...

PHP で JSON バックスラッシュを削除する例

1. 「stripslashes($_POST['json']);」メソッドを使用し...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

DockerでRedisを使用するための詳細な手順

1. はじめにこの記事では、Docker を使用して Redis を探索する方法を説明します。 Do...

seata docker 高可用性デプロイメントの詳細な紹介

バージョン1.4.2公式ドキュメントドッカーハブ起動する環境変数SEATA_CONFIG_NAMEを...

JavaScript の基礎におけるデータ型の詳細な説明

目次1. データ型1.1 なぜデータ型が必要なのか? 1.2 変数のデータ型1.3 データ型の分類2...