| MOSQUITTO_SUB(1) | Commands | MOSQUITTO_SUB(1) |
نام (NAME)
mosquitto_sub - کلاینت پروتکل MQTT نسخههای ۵، ۳.۱.۱ و ۳.۱ برای اشتراک در موضوعات
خلاصه دستور (SYNOPSIS)
mosquitto_sub [options] {-t message-topic... | -U unsubscribe-topic...}
options:
[auth-options] [connection-options] [misc-options] [mqtt-options]
[output-options] [tls-certificate-options | tls-psk-options]
auth-options:
[-u username] [-P password]
connection-options:
{[-h hostname] [--unix socket path] [-p port-number]
| -L URL }
[-A bind-address] [--nodelay] [-S]
[--ws] [--proxy socks-url]
misc-options:
[-E] [-o config-file]
[-W message-processing-timeout]
mqtt-options:
[-c]
[-D command identifier value]
[-i client-id]
[-I client-id-prefix]
[-k keepalive-time]
[-q message-QoS] [--retain-as-published]
[--retain-handling always | new | never]
[-V protocol-version]
[-x session-expiry-interval]
[--will-topic topic [--will-payload payload] [--will-qos qos] [--will-retain]]
output-options:
[-d] [-C msg-count] [--message-rate]
[-N] [--pretty] [--random-filter chance]
[--remove-retained] [-R | --retained-only]
[--quiet] [-T filter-out...] [-v]
[-w | --watch]
tls-certificate-options:
[--no-tls]
{--cafile file | --capath dir}
[--tls-use-os-certs]
[--cert file] [--key file]
[--ciphers ciphers] [--insecure]
[--tls-alpn protocol]
[--tls-keylog file]
[--tls-version version]
[--tls-engine engine]
[--keyform {pem | engine}]
[--tls-engine-kpass-sha1 kpass-sha1]
tls-psk-options:
--psk hex-key
--psk-identity identity
[--ciphers ciphers]
[--tls-version version]
mosquitto_sub [--help]
توضیحات (DESCRIPTION)
mosquitto_sub یک کلاینت ساده برای پروتکل MQTT نسخه ۵، ۳.۱.۱ و ۳.۱ است که در موضوعات (topics) مشترک میشود و پیامهای دریافتی را چاپ میکند.
علاوه بر اشتراک در موضوعات، mosquitto_sub میتواند پیامهای دریافتی را فیلتر کند تا چاپ نشوند (به گزینه -T مراجعه کنید) یا از موضوعات لغو اشتراک کند (به گزینه -U مراجعه کنید). لغو اشتراک از موضوعات برای کلاینتهایی که با غیرفعال بودن نشست تمیز (clean session) متصل میشوند کاربرد دارد.
اتصالات رمزنگاریشده (ENCRYPTED CONNECTIONS)
این کلاینت از اتصالات رمزنگاریشده با TLS پشتیبانی میکند. اکیداً توصیه میشود برای هرگونه کاربردی فراتر از سادهترین تنظیمات، از یک اتصال رمزنگاریشده استفاده کنید.
جهت فعالسازی اتصالات TLS هنگام استفاده از گواهیهای x509، میتوان یکی از گزینههای --cafile یا --capath را مشخص کرد.
همچنین، در صورتی که از گزینه -p 8883 استفاده شود، گواهیهای ارائهشده توسط سیستمعامل بارگذاری خواهند شد و نیازی به هیچیک از گزینههای --cafile یا --capath نخواهد بود.
برای فعالسازی اتصالات TLS در صورت استفاده از TLS-PSK، باید از گزینههای --psk و --psk-identity استفاده کنید.
گزینهها (OPTIONS)
سه روش برای ارائه گزینهها به mosquitto_sub وجود دارد: فایل پیکربندی پیشفرض، یک فایل پیکربندی مشخصشده، یا گزینهها در خط فرمان.
فایل پیکربندی پیشفرض (Default Config File)
فایل پیکربندی پیشفرض در مسیر $XDG_CONFIG_HOME/mosquitto_sub یا $HOME/.config/mosquitto_sub در سیستمهای سازگار با POSIX، یا در مسیر %USERPROFILE%\mosquitto_sub در سیستمهای ویندوز قرار دارد.
محتوای فایل پیکربندی باید شامل گزینهها باشد، هر گزینه در یک خط به صورت: -option value. اگر گزینهها در خط فرمان نیز مشخص شوند، آن گزینهها مقادیر تعیینشده در فایل پیکربندی را بازنویسی خواهند کرد. استثنای این قاعده گزینههای نوع پیام هستند که تنها یکی از آنها میتواند مشخص شود. همچنین توجه داشته باشید که در حال حاضر برخی گزینهها را نمیتوان نفی کرد، مانند -S. گزینههای رمزنگاری TLS را میتوان با گزینه --no-tls غیرفعال کرد.
خطوطی از فایل پیکربندی که با نویسه # شروع میشوند به عنوان توضیحات در نظر گرفته شده و پردازش نمیشوند.
پیشنهاد میشود فایلهای پیکربندی عمدتاً برای اهداف احراز هویت به کار روند. استفاده از فایل پیکربندی امکان احراز هویت را بدون نیاز به نمایش نام کاربری و گذرواژه در خط فرمان فراهم میکند.
فایل پیکربندی (Config File)
از نسخه ۲.۱ در دسترس است.
یک فایل پیکربندی را میتوان با گزینه -o config-file در خط فرمان مشخص کرد. در صورت استفاده از گزینه -o فایل پیکربندی پیشفرض بارگذاری نخواهد شد.
قالب آن همانند فایل پیکربندی پیشفرض است.
فهرست گزینهها (The options)
-A
-c, --disable-clean-session
هنگامی که یک نشست روی کارگزار پایدار بماند، اشتراکهای کلاینت پس از قطع اتصال حفظ میشوند و پیامهای بعدی با سطوح کیفیتی QoS 1 و QoS 2 که برسند ذخیره میگردند. زمانی که کلاینت دوباره متصل شود و نشست را پاک نکند، تمامی پیامهای صفبندیشده را دریافت خواهد کرد.
در صورت استفاده از این گزینه، شناسه کلاینت باید به صورت دستی با --id تنظیم شود.
--cafile
همچنین ببینید: --capath
--capath
برای کارکرد صحیح --capath باید پسوند فایلهای گواهی «.crt» باشد و هر بار که گواهی جدیدی اضافه یا حذف میکنید، دستور «openssl rehash <path to capath>» را اجرا نمایید.
همچنین ببینید: --cafile
--cert
همچنین ببینید: --key و بخش «اتصالات رمزنگاریشده».
--ciphers
-C
برای چاپ تنها اولین دسته از پیامهای تازه (یعنی پیامهایی که پرچم retain برای آنها تنظیم نشده است)، این گزینه را با -R یا --retain-handling never ترکیب کنید، یا برای فیلتر کردن موضوعات پردازششده از ترکیب آن با -T استفاده نمایید.
-d, --debug
-D, --property
-D command identifier value
-D command identifier name value
command شناسه دستور یا بسته MQTT است و میتواند یکی از مقادیر CONNECT، PUBLISH، PUBACK، PUBREC، PUBCOMP، SUBSCRIBE، UNSUBSCRIBE، DISCONNECT، AUTH یا WILL باشد. ویژگیهای در دسترس برای هر دستور در بخش ویژگیها فهرست شدهاند.
identifier نام ویژگی مورد نظر برای افزودن است. این نام مطابق مشخصات استاندارد است، اما خط تیره «-» به عنوان جداکننده کلمات به کار میرود؛ به عنوان مثال: payload-format-indicator. جزئیات بیشتر در بخش ویژگیها آمده است.
value مقدار ویژگی مورد نظر است که نوع داده آن وابسته به همان ویژگی مشخص است.
name فقط برای ویژگی user-property به عنوان اولین رشته از جفترشتهها به کار میرود. در این حالت، value رشته دوم جفت خواهد بود.
-E
-F
این گزینه بر گزینه -v ارجحیت دارد و آن را بازنویسی میکند، اما گزینه -N را بازنویسی نمیکند.
--help
-h, --host
-i, --id
-I, --id-prefix
--insecure
-k, --keepalive
--key
همچنین ببینید: --cert و بخش «اتصالات رمزنگاریشده».
--keyform
همچنین ببینید: --tls-engine.
-L, --url
بسته به طرح نشانی (scheme)، پورت پیشفرض مقادیر متفاوتی خواهد داشت: mqtt:// - 1883، mqtts:// - 8883، ws:// - 80، wss:// - 443.
--message-rate
به جای چاپ پیامهای دریافتی، تعداد پیامهای دریافتی را در بازههای زمانی یک ثانیهای چاپ میکند. هنگام فعال بودن این گزینه، سایر گزینههای مربوط به قالببندی خروجی معتبر نخواهند بود.
-N
--nodelay
--no-tls
غیرفعالسازی کامل استفاده از رمزنگاری TLS. این گزینه زمانی کاربرد دارد که گزینههای TLS را در یک فایل پیکربندی تعیین کردهاید اما قصد دارید آن گزینهها را موقتاً غیرفعال کنید. همچنین استفاده خودکار از TLS را هنگام اتصال به پورت 8883 متوقف میسازد.
-o config-file
بارگذاری گزینهها از یک فایل پیکربندی. بخشهای «فایل پیکربندی پیشفرض» و «فایل پیکربندی» در ابتدای بخش گزینهها را مشاهده کنید.
-p, --port
-P, --pw
همچنین گزینه --username را مشاهده کنید.
--pretty
--proxy
اگر نام کاربری داده نشود، هیچ تلاشی برای احراز هویت انجام نمیشود. اگر پورت داده نشود، مقدار پیشفرض ۱۰۸۰ استفاده میشود.
اگر میزبان به صورت نشانی IPv6 داده شود، باید درون کروشه قرار گیرد؛ مانند socks5h://[::1]:1080. توجه داشته باشید که کروشهها در برخی پوستهها معنی خاصی دارند، بنابراین ممکن است لازم باشد نشانی پروکسی داخل نقلقول تکی یا دوتایی قرار گیرد.
نسخههای بیشتری از SOCKS ممکن است در آینده بسته به تقاضا اضافه شوند و از پیشوندهای پروتکل متفاوتی استفاده کنند، همانطور که در curl(1) توضیح داده شده است.
--psk
--psk-identity
-q, --qos
سطح کیفیت خدمات برای تمام موضوعاتی که در یک نمونه واحد از این کلاینت مشترک شدهاند اعمال میشود.
--quiet
-R
همچنین ببینید: --retain-handling.
--random-filter
--remove-retained
مثال ۱. پاک کردن تمام پیامهای نگهداریشده روی سرور (به فرض داشتن دسترسی لازم برای این کار) و سپس خروج:
mosquitto_sub -t '#' --remove-retained --retained-only
مثال ۲. پاک کردن تمام یک درخت موضوعی به استثنای یک موضوع واحد:
mosquitto_sub -t 'bbc/#' -T bbc/bbc1 --remove-retained
--retained-only
--retain-as-published
این گزینه برای کلاینتهای پروتکل MQTT نسخههای v3.1 و v3.1.1 معتبر نیست.
--retain-handling always | new | never
استفاده از این گزینه برای کنترل نحوه مدیریت پیامهای نگهداریشده هنگام برقراری اشتراک است. این گزینه مشخص میکند که تحت چه شرایطی پیامهای نگهداریشده موجود در هنگام ایجاد اشتراک به کلاینت تحویل داده شوند.
-S
-t, --topic
این گزینه را میتوان برای اشتراک در چندین موضوع تکرار کرد.
-T, --filter-out
برای مثال، اشتراک در شاخه BBC، ولی عدم چاپ خروجیهای مربوط به Radio 3:
این گزینه را میتوان برای فیلتر کردن چندین موضوع یا شاخه موضوعی تکرار کرد.
--tls-alpn
--tls-engine
همچنین ببینید: --keyform.
--tls-engine-kpass-sha1
همچنین ببینید: --tls-engine.
--tls-keylog file
ثبت گزارش اطلاعات اتصال TLS در file. این گزینه به ابزارهایی مانند tcpdump، wireshark و mqttshark امکان رمزگشایی ترافیک TLS و بررسی ترافیک MQTT را میدهد. در Wireshark این کار با تنظیم گزینه (Pre)-Master-Secret log filename برای پروتکل Transport Layer Security قابل انجام است.
این گزینه فقط باید برای اشکالزدایی استفاده شود و هرگز نباید در محیط عملیاتی به کار رود.
--tls-use-os-certs
--tls-version
-u, --username
همچنین آرگومان --pw را مشاهده کنید.
--unix
برای پیکربندی Mosquitto جهت گوش دادن روی سوکت یونیکس، گزینه socket_domain در mosquitto.conf(5) را بررسی کنید.
-U, --unsubscribe
در صورت استفاده همزمان با --topic اشتراکها پیش از لغو اشتراکها پردازش خواهند شد.
توجه داشته باشید که تنها لغو اشتراک از اشتراکهایی که قبلاً ثبت شدهاند امکانپذیر است. ایجاد شکاف یا استثنا در اشتراکهای با نویسه عام (wildcard) ممکن نیست. برای مثال، اشتراک در sensors/# و سپس لغو اشتراک از sensors/+/temperature به شکلی که در زیر نشان داده شده، همچنان باعث تحویل پیامهای منطبق با sensors/+/temperature به کلاینت خواهد شد:
همچنین توجه داشته باشید از آنجا که پیامهای نگهداریشده بلافاصله پس از دریافت دستور SUBSCRIBE توسط کارگزار منتشر میشوند، اشتراک و لغو اشتراک در همان موضوع ممکن است منجر به دریافت پیامها توسط کلاینت شود.
این گزینه را میتوان برای لغو اشتراک از چندین موضوع تکرار کرد.
-v, --verbose
همچنین ببینید: -F.
-V, --protocol-version
-W
-w, --watch
پیامها بر روی شماره خط ثابتی بر اساس موضوع و ترتیبی که موضوعات دریافت میشوند چاپ خواهند شد. این ویژگی برای نظارت بر چندین موضوع که دارای محتوای تکخطی هستند مفید است. اگر تعداد موضوعات بیش از تعداد خطوط ترمینال باشد یا محتوای پیام بیش از یک خط را اشغال کند، رفتارهای پیشبینینشدهای رخ خواهد داد. این گزینه را میتوان همراه با سایر گزینههای خروجی مانند -F استفاده کرد.
نیازمند پشتیبانی از کدهای گریز ANSI در ترمینال است.
--will-payload
--will-qos
--will-retain
--will-topic
--ws
-x
اگر نشست با استفاده از -x یا -c طوری تنظیم شود که هرگز منقضی نشود، باید شناسه کلاینت مشخص گردد.
قالب خروجی (OUTPUT FORMAT)
سه روش برای قالببندی خروجی چاپشده وجود دارد. در تمام حالتها، به ازای هر پیام دریافتی یک نویسه خط جدید (newline) اضافه میشود مگر اینکه آرگومان -N تعیین شده باشد.
قالب «فقط بدنه» (Payload-only) حالت پیشفرض خروجی است و بدنه پیام را دقیقاً همانطور که دریافت شده است چاپ میکند.
حالت پرحجم (Verbose) با -v فعال میشود و موضوع و بدنه پیام را با یک فاصله (space) میان آنها چاپ میکند.
گزینه پایانی، خروجی قالببندیشده است که به کاربر اجازه میدهد قالب خروجی سفارشی تعریف کند. این رفتار با گزینه -F format-string کنترل میشود. رشته قالب، یک رشته متنی آزاد است که در آن دنبالههای تفسیرشده با پارامترهای مختلف جایگزین میشوند. دنبالههای تفسیرشده در دسترس در زیر توضیح داده شدهاند.
سه نویسه برای شروع یک دنباله تفسیرشده به کار میروند: %، @ و \. دنبالههایی که با % شروع میشوند یا پارامترهای مربوط به پیام MQTT در حال چاپ هستند، یا دنبالههای کمکی هستند که به عنوان مثال نیاز به نوشتن رشتههای طولانی قالب تاریخ را برطرف میکنند. دنبالههایی که با @ شروع میشوند به تابع strftime(3) ارسال میگردند (با جایگزین شدن @ با % - توجه داشته باشید که تنها نویسه بلافاصله پس از @ به strftime ارسال میشود). این امکان ساخت انواع مختلفی از خروجیهای مبتنی بر زمان را فراهم میکند. گزینههای خروجی strftime از پلتفرمی به پلتفرم دیگر متفاوت است، بنابراین گزینههای در دسترس پلتفرم خود را بررسی کنید. یک افزونه برای strftime ارائه شده است که @N میباشد و میتوان از آن برای دریافت تعداد نانوثانیههای سپریشده در ثانیه جاری استفاده کرد. دقت این گزینه بسته به پلتفرم متفاوت است. نویسه دنباله پایانی \ است که برای وارد کردن برخی نویسهها استفاده میشود که در غیر این صورت وارد کردن آنها دشوار خواهد بود.
نویسههای پرچم (Flag characters)
پارامترهای %A، %C، %d، %E، %F، %f، %I، %l، %m، %p، %R، %S، %t، %x و %X میتوانند پرچمهای اختیاری بلافاصله پس از نویسه % داشته باشند.
0
-
عرض فیلد (Field width)
برخی از پارامترهای مربوط به MQTT را میتوان با گزینهای برای تنظیم عرض فیلد آنها به روشی مشابه با قالبهای معمول سبک printf قالببندی کرد، یعنی این مقدار حداقل عرض را هنگام چاپ این پارامتر تعیین میکند. اگر طول خروجی کمتر از این عرض باشد، فیلد برای رسیدن به این عرض پر میشود. این مورد برای گزینههای %A، %C، %d، %E، %F، %f، %I، %l، %m، %p، %R، %S، %t، %x و %X اعمال میشود.
برای مثال %10t حداقل عرض فیلد موضوع را روی ۱۰ نویسه تنظیم میکند.
حداکثر عرض (Maximum width)
برخی از پارامترهای مربوط به MQTT را میتوان با گزینهای برای تعیین حداکثر عرض فیلد به شیوهای مشابه قالبهای سبک printf قالببندی کرد، به عنوان مثال %.20t برای حداکثر عرض ۲۰ نویسه. این مورد برای گزینههای %C، %I، %R و %t اعمال میشود.
برای مثال %10.10t حداقل عرض فیلد موضوع را روی ۱۰ نویسه و حداکثر عرض آن را روی ۱۰ نویسه تنظیم میکند، یعنی فیلد همیشه دقیقاً دارای طول ۱۰ نویسه خواهد بود.
عرض فیلد دودویی هگزادسیمال (Hexadecimal binary field width)
پارامترهای %x و %X به طور پیشفرض بدنه پیام را به صورت یک رشته هگزادسیمال واحد خروجی میدهند. همچنین امکان تقسیم بدنه هگزادسیمال به فیلدهایی با طول دلخواهی از نیمبایتها (nibbles) وجود دارد. برای مثال، %.2x بدنه را به مقادیر دو نیمبایتی (یک بایتی) جداشده با فاصله تقسیم میکند و ممکن است خروجیای مانند 18 83 تولید کند.
نویسه جداکننده به طور پیشفرض فاصله است، اما میتوان آن را با افزودن یکی از نویسههای !"#$&'()*+,-./:;<=>?@[\]^_`{|}~ پس از عرض فیلد دودویی تغییر داد. برای مثال %.2:x ممکن است خروجیای مانند 18:83 تولید کند.
ملاحظات چاپ اعداد ممیز شناور (Floating point number printing consideration)
قالب خروجی فقط از استاندارد ممیز شناور IEEE 754 مطابق آنچه در پیوست F از ISO/IEC 9899:1999 شرح داده شده پشتیبانی میکند. اگر پلتفرم منتشرکننده از استاندارد نمایش ممیز شناور دیگری غیر از IEEE 754 استفاده میکند از %f یا %d استفاده نکنید، در غیر این صورت دادههای نامعتبر دریافت خواهید کرد. اگر مطمئن نیستید پلتفرم شما از چه نمایشی برای ممیز شناور استفاده میکند، به احتمال بسیار زیاد IEEE 754 است. اگر مقادیر ناقص یا غیرمنتظرهای دریافت کردید، بررسی کنید که آیا عدد ممیز شناور در بدنه پیام ارسالی از منتشرکننده با IEEE 754 کدگذاری شده است یا خیر.
اگر قصد چاپ اعداد اعشاری شناور را دارید، اطمینان حاصل کنید که تنها در موضوعاتی مشترک میشوید که صرفاً مقادیر ممیز شناور قالببندیشده با IEEE 754 ارسال میکنند. پردازش در مورد اعداد ممیز شناور بسیار سختگیرانه است و اگر دادهای دریافت شود که عدد ممیز شناور نباشد، یک پیام خطا چاپ خواهد شد.
پارامترهای مربوط به MQTT (MQTT related parameters)
دنبالههای کمکی (Helpers)
اگر بدنه پیام JSON معتبر نباشد، پیام خطای "Error: Message payload is not valid JSON on topic <topic>" در stderr چاپ خواهد شد.
پارامترهای مربوط به زمان (Time related parameters)
نویسههای گریز (Escape characters)
وصیتنامهها (WILLS)
کلاینت میتواند پیامی را نزد کارگزار ثبت کند تا در صورت قطع اتصال غیرمنتظره، به صورت خودکار ارسال شود. برای اطلاعات بیشتر به mqtt(7) مراجعه کنید.
حداقل نیاز برای این ویژگی، استفاده از --will-topic جهت تعیین موضوعی است که پیام وصیت باید روی آن ارسال شود. این کار منجر به ارسال پیامی با طول صفر، بدون نگهداری (non-retained) و با سطح QoS 0 خواهد شد.
از آرگومانهای --will-retain، --will-payload و --will-qos برای تغییر سایر پارامترهای وصیت استفاده کنید.
ویژگیها (PROPERTIES)
گزینه -D / --property امکان افزودن ویژگیها را در مراحل مختلف اجرای mosquitto_sub فراهم میکند. ویژگیهای پشتیبانیشده برای هر دستور به شرح زیر است:
اتصال (Connect)
اشتراک (Subscribe)
لغو اشتراک (Unsubscribe)
قطع اتصال (Disconnect)
ویژگیهای وصیت (Will properties)
وضعیت خروج (EXIT STATUS)
در صورت موفقیت مقدار صفر و در صورت بروز خطا مقداری غیر صفر بازگردانده میشود. اگر اتصال توسط کارگزار در سطح MQTT رد شود، کد خروج همان کد دلیل CONNACK خواهد بود. در صورت بروز هر خطای دیگری، کد خروج مقدار بازگشتی libmosquitto است.
کدهای CONNACK در MQTT نسخه v3.1.1:
کدهای CONNACK در MQTT نسخه v5:
سایر کدها (Other codes):
مثالها (EXAMPLES)
توجه داشته باشید که این موارد صرفاً مثال هستند - اگر دستورات را همانطور که نشان داده شده است اجرا کنید، اشتراکها برقرار خواهند شد، اما برای دریافت هرگونه پیام باید چیزی در حال انتشار پیام روی آن موضوعات باشد.
اشتراک در اطلاعات دما روی localhost با کیفیت خدمات QoS 1:
اشتراک در بهروزرسانیهای دمای دیسک سخت روی چندین ماشین/دیسک سخت. این دستور انتظار دارد هر ماشین دمای دیسک سخت خود را روی موضوع sensors/machines/HOSTNAME/temperature/HD_NAME منتشر کند:
اشتراک در تمام پیامهای وضعیت کارگزار:
تعیین قالب خروجی به صورت "ISO-8601 date : topic : payload in hex":
تعیین قالب خروجی به صورت "seconds since epoch.nanoseconds : retained flag : qos : mid : payload length":
خروجی موضوع و بدنه پیام، با رنگبندی در ترمینالهایی که پشتیبانی میکنند:
فایلها (FILES)
$XDG_CONFIG_HOME/mosquitto_sub, $HOME/.config/mosquitto_sub, $HOME/snap/mosquitto/current/.config/mosquitto_sub (برای نسخههای نصبشده از طریق snap)
اشکالات (BUGS)
اطلاعات مربوط به اشکالات mosquitto را میتوانید در نشانی زیر بیابید: https://github.com/eclipse-mosquitto/mosquitto/issues
همچنین ببینید (SEE ALSO)
mosquitto(7), mqtt(7), mosquitto_pub(1), mosquitto_rr(1), mosquitto(8), libmosquitto(3), mosquitto-tls(7)
نویسنده (AUTHOR)
Roger Light <roger@atchoo.org>
| 04/03/2026 | Mosquitto Project |