बैश छद्म डिवाइस प्रदान करता है जो आप इस तरह से परिचित हैं /dev/null
। हालाँकि अन्य डिवाइस हैं जैसे कि /dev/tcp
और /dev/udp
नेटवर्क कनेक्शन के परीक्षण के लिए, जिसे आप बैश स्क्रिप्ट के भीतर से भी उपयोग कर सकते हैं।
बैश के मैन पेज से अंश
बैश कई फाइलनामों को विशेष रूप से संभालता है, जब उनका उपयोग पुनर्निर्देशन में किया जाता है, जैसा कि निम्नलिखित तालिका में वर्णित है:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a UDP connection to the corresponding socket.
उदाहरण
यहां मैं अपने डोमेन में स्किनर नाम के होस्ट से कनेक्शन का परीक्षण कर रहा हूं और यह देख रहा हूं कि क्या मैं इसके पोर्ट 22 से जुड़ सकता हूं।
नोट: पोर्ट 22 एसएसएच के लिए है, टेलनेट उपयोग पोर्ट 23 के लिए।
$ echo > /dev/tcp/skinner/22 && echo "it's up" || echo "it's down"
it's up
महान तो चलो एक गैर बंदरगाह की कोशिश:
$ echo > /dev/tcp/skinner/223 && echo "it's up" || echo "it's down"
bash: connect: Connection refused
bash: /dev/tcp/skinner/223: Connection refused
it's down
ठीक है कि काम करता है, लेकिन यह भयानक बदसूरत उत्पादन है। कोइ चिंता नहीं। आप echo > /dev/tcp/...
एक सबशेल में चला सकते हैं और /dev/null
इसे थोड़ा साफ करने के लिए सभी आउटपुट को रीडायरेक्ट कर सकते हैं । यहां वह पैटर्न है जिसका उपयोग आप अपनी शेल स्क्रिप्ट में कर सकते हैं:
$ (echo > /dev/tcp/skinner/22) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's up
$ (echo > /dev/tcp/skinner/223) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's down