Bash cung cấp các thiết bị giả mà bạn có thể quen thuộc như /dev/null
. Tuy nhiên, có những thiết bị khác như /dev/tcp
và /dev/udp
để kiểm tra các kết nối mạng mà bạn cũng có thể sử dụng từ trong các tập lệnh Bash.
đoạn trích từ trang của Bash
Bash xử lý một số tên tệp đặc biệt khi chúng được sử dụng trong các chuyển hướng, như được mô tả trong bảng sau:
/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.
Thí dụ
Đây là tôi đang kiểm tra kết nối đến một máy chủ lưu trữ trong miền của tôi có tên skinner và xem liệu tôi có thể kết nối với cổng 22 không.
LƯU Ý: Cổng 22 dành cho SSH, cho telnet sử dụng cổng 23.
$ echo > /dev/tcp/skinner/22 && echo "it's up" || echo "it's down"
it's up
Tuyệt vời vì vậy hãy thử một cổng không:
$ 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
Vâng, nó hoạt động, nhưng đó là đầu ra cực kỳ xấu xí. Không phải lo lắng. Bạn có thể chạy echo > /dev/tcp/...
trong một mạng con và chuyển hướng tất cả đầu ra /dev/null
để dọn sạch nó một chút. Đây là mẫu bạn có thể sử dụng trong tập lệnh shell của mình:
$ (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