ব্লগে ফিরুন

ss vs netstat: কোন Linux পোর্ট কমান্ড ব্যবহার করবেন

৫ সেপ্টেম্বর, ২০২৬

ss ব্যবহার করুন — প্রতিটি আধুনিক Linux ডিস্ট্রোতে এটাই বর্তমান স্ট্যান্ডার্ড, আর netstat সেখানে লিগ্যাসি। Ubuntu, Fedora আর Debian-এ netstat বাইনারি এখন ঐচ্ছিক net-tools প্যাকেজে চলে যায়, অথচ ss বিল্ট-ইন iproute2-র অংশ, সব জায়গাতেই ইনস্টল করা। ব্যস্ত সার্ভারে ss দ্রুতও — _/proc_ ফাইলে-ফাইলে হাঁটার বদলে কার্নেল থেকে সরাসরি socket statistics পড়ে। ধরা শুধু সিনট্যাক্স: -tulpn সব জায়গায় এক অর্থ করে না, তাই এই গাইডে হুবহু ফ্ল্যাগ ম্যাপিং, মুখস্থ রাখার মতো কমান্ড, আর ভোর রাতের ইনসিডেন্টের মাঝখানে যে প্রশ্নগুলো ওঠে তার উত্তর।

netstat কি deprecated?

Linux-এ কার্যত হ্যাঁ। net-tools প্যাকেজ — যার ভেতরে netstat, ifconfig আর route — বছরের পর বছর আধুনিক কার্নেল ফিচারের সাথে তাল মেলায়নি, আর কোনো বড় ডিস্ট্রিবিউশনে ডিফল্টে ইনস্টলই হয় না। এটা এখনো আছে, এখনো চলে, আনইনস্টলের কিছু নেই, কিন্তু নতুন ফিচার আসে শুধু iproute2-তে (ss আর ip-র পেছনের প্যাকেজ)।

বাস্তব তিনটা ফল:

  1. নতুন ইনস্টলে নেই। ডিফল্ট Ubuntu 24.04 বা Fedora সার্ভারে হাতে net-tools ইনস্টল না করা পর্যন্ত netstat নেই। এজন্যই এত মানুষ netstat সমতুল্য কমান্ড খোঁজে — বাইনারিটা সরলভাবে অদৃশ্য।
  2. আধুনিক socket তথ্য নেই। netstat TCP fast open, subflow-লেভেল socket stats, cgroup socket attribution-এর মতো ফিচারের আগের প্রজন্মের। ss এগুলো স্থানীয়ভাবেই রিপোর্ট করে।
  3. Windows-এর ব্যতিক্রম। Windows-এ netstat জেগে আছে — netstat -ano সেখানে PID-কে লিসেন করা পোর্টের সাথে মেলানোর স্ট্যান্ডার্ড উপায়ই। Deprecated গল্পটা শুধু Linux-এর।

Linux-এ ss কমান্ডটা কী?

ss মানে “socket statistics”। এটি প্রতিটি TCP, UDP ও Unix socket-এর কার্নেল-দৃষ্টিটা ঢেলে দেয়: স্টেট, অ্যাড্রেস, পোর্ট, প্রসেস, টাইমার, কিউ-ডেপথ। কাজের ঘোড়া এই রূপটা:

# লিসেন করা সবকিছু, মালিক প্রসেসসহ
sudo ss -tulpn

ফ্ল্যাগে ফ্ল্যাগে পড়লে: TCP (-t), UDP (-u), শুধু লিসেন করা socket (-l), প্রসেস দেখাও (-p), সংখ্যায় আউটপুট — DNS লুকআপ নয় (-n)। -p-র জন্য sudo দরকার: root ছাড়া পোর্ট দেখেন কিন্তু নিজের নয় এমন socket-এর প্রসেস নাম পান না।

আরও দুটো one-liner, বেশিরভাগ কাজ এটুকুতেই ওঠে:

# পোর্ট 443 থেকে/তে established সব সংযোগ, প্রসেসসহ
sudo ss -tnp 'sport = :443 or dport = :443'

# সারসংক্ষেপ টেবিল: প্রতিটি স্টেটে কত socket
ss -s

এই ফিল্টার সিনট্যাক্স netstat-এর grep-এ-আল্লাহ-ভরসা পদ্ধতির ওপর সত্যিকারের উন্নতি — এটা কার্নেলের ভেতরেই চলে, তাই টেক্সট-ম্যাচ নয়, হুবহু।

কোন পোর্ট কোন প্রসেস ব্যবহার করছে কীভাবে দেখবেন?

দুটো টুলের কাছেই যাওয়ার সবচেয়ে সাধারণ কারণ এটাই। ss দিয়ে:

sudo ss -ltnp 'sport = :8080'

ডেভ সার্ভার চলা একটা মেশিনের নমুনা আউটপুট:

State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       511     *:8080              *:*               users:(("node",pid=214113,fd=18))

users:(...) ফিল্ডটাই প্রসেস নাম আর PID সরাসরি দিয়ে দেয় — দ্বিতীয় কমান্ড লাগে না। পোর্ট ব্যস্ত অথচ কোনো প্রসেস না দেখালে সাধারণত অন্য একটা network namespace-এর (একটা কন্টেইনার) হাতে থাকা socket দেখছেন। হোস্ট থেকে sudo ss -ltnp চালিয়ে খালি প্রসেস-কলামওয়ালা পোর্টটা খুঁজুন, তারপর docker ps দিয়ে মেলান বা nsenter দিয়ে কন্টেইনারের namespace-এ ঢুকুন।

ডেডিকেটেড টুল পছন্দ? sudo lsof -i :8080 -sTCP:LISTEN একই কাজ করে আর macOS ও বেশিরভাগ BSD-তে হুবহু চলে — এজন্যই runbook-গুলোতে টিকে আছে। তবে Linux-এ ss তো এমনিতেই আছে।

ss আর netstat-এর পার্থক্য কী?

একই কাজ, ভেতরের প্লাম্বিং আলাদা: netstat ইউজারস্পেসে _proc/net/tcp_ ঘেঁটে, ss netlink দিয়ে কার্নেলকে সরাসরি জিজ্ঞেস করে — এজন্যই 50k খোলা socket-এর সার্ভারে ss মিলিসেকেন্ডে ফেরে, netstat ফেরে না। রোজকার ব্যবহারে পার্থক্যটা ফ্ল্যাগে। এই ম্যাপিংটা মনিটরে টেপ মেরে রাখার মতো:

আপনি চানnetstatss
লিসেন করা TCP পোর্ট + প্রসেসnetstat -tlpnss -tlpn
সব TCP + UDP সংযোগnetstat -tulpnass -tulpna
রাউটিং টেবিলnetstat -rip route
ইন্টারফেস স্ট্যাটিসটিক্সnetstat -iip -s link
কার্নেল socket সারসংক্ষেপss -s
কার্নেলে পোর্ট ফিল্টারss -tnp 'sport = :22'

খেয়াল করুন, প্রথম দুই সারি হুবহু এক: কাকতালে ss-এর ছোট ফ্ল্যাগগুলো সাধারণ কেসে netstat-এর সাথে মিলে যায়, তাই মাংসপেশির স্মৃতির বেশিরভাগই বদলের পরেও টেকে। নিচের সারিগুলোই যেখানে netstat-এর কাছে উত্তর নেই — রাউটিং আর ইন্টারফেসের কাজ ip কমান্ডে চলে গেছে, আর সারসংক্ষেপ/ফিল্টার সারি শুধু ss-তেই আছে।

netstat এখনো কখন ব্যবহার করবেন?

দুটো সৎ কেস। এক, পোর্টেবিলিটি: Linux, AIX বা পুরোনো BSD বক্সের মিশ্র ফ্লিটে netstat-ই সেই এক সিনট্যাক্স, যা সব জায়গায় আছে। দুই, পুরোনো runbook-গুলোতে মাংসপেশির স্মৃতির ধারাবাহিকতা — runbook যদি বলে netstat -tlpn আর বক্সে net-tools ইনস্টল থাকে, তবে সেটা এখনো ঠিকঠাক চলে।

নইলে ডিফল্ট ss, আর runbook আপডেট করুন। সার্ভারে ওই runbook নতুন করে লেখার সময় কাজে লাগে journalctl cheat sheet — যে সার্ভিস চালুই হচ্ছে না তা ডায়াগনোজে পোর্ট চেকের সাথে স্বাভাবিকভাবেই জোড়া লাগে: /en/blog/2026-09-02/journalctl-cheat-sheet

ss কমান্ড পাওয়া যায় না কেন?

কারণ আপনি হয় খুব পুরোনো কোনো ডিস্ট্রোতে (2007-এর আগের যুগ, iproute2 স্ট্যান্ডার্ড হওয়ার আগে), নয়তো — অনেক বেশি সম্ভাবনা এটাই — Linux-এ আসলেই নেই। ss macOS কমান্ড নয়; macOS-এ lsof আর netstat আছে, ss নেই। বেশিরভাগ BSD-তেও তা-ই। Windows-এ netstat -ano বা PowerShell-এর Get-NetTCPConnection ব্যবহার করুন।

সত্যিই Linux-এ আছেন আর ss নেই? iproute2 ইনস্টল করুন:

sudo apt install iproute2    # Debian/Ubuntu
sudo dnf install iproute2    # Fedora/RHEL

30 সেকেন্ডের উত্তর

Linux-এ সময় যাই হোক, netstat-এর বদলে ss: আগেই ইনস্টল করা, দ্রুত, আর কার্নেলের ভেতরে ফিল্টার করতে পারে। netstat -tlpn হয়ে যায় ss -tlpn, প্রসেস-খোঁজা হয়ে যায় sudo ss -ltnp 'sport = :PORT', আর রাউটিং টেবিলের ঘর এখন ip route। ক্রস-প্ল্যাটফর্ম স্ক্রিপ্ট আর পুরোনো মাংসপেশির স্মৃতির জন্য netstat রাখুন; ফ্ল্যাগ ম্যাপিংটার জন্য এই পাতা রাখুন।

— mrsaynothing

— mrsaynothing

AI, Linux ও self-hosting নিয়ে ফিল্ড নোটস।

পোস্টটি নিয়ে dev.to-তে আলোচনা করুন dev.to ↗

পরের হাউ-টু ইমেইলে পান

প্রতি পোস্টে একটি ইমেইল। সমাধান করুন, এগিয়ে যান।

self-hosted · কোনো তৃতীয় পক্ষ নেই · এক ক্লিকে আনসাবস্ক্রাইব

এটা কী?

Best Local LLM for Coding: 8GB থেকে 24GB VRAM পছন্দ

লেখাগুলো ভালো লাগছে? এমন জিনিস বানানোই আমার পেশা। আমাকে নিন