SG3_UTILS_JSON(8) SG3_UTILS SG3_UTILS_JSON(8)

sg3_utils_json - خروجی JSON برای برخی از ابزارهای کاربردی sg3_utils

sg_* --json[=JO] [--js-file=JFN] [OTHER_OPTIONS] [DEVICE]

بسته sg3_utils مجموعه‌ای از ابزارهای کاربردی است که دستورات SCSI را از طریق رابط عبور مستقیم (pass-through) ارائه‌شده توسط سیستم‌عامل میزبان به DEVICE مربوطه ارسال می‌کنند. برخی ابزارها، به‌ویژه آن‌هایی که داده‌های ساختاریافته بازگردانده‌شده توسط دستورات SCSI را رمزگشایی می‌کنند (مانند sg_vpd)، می‌توانند به‌صورت اختیاری به‌جای خروجی متن ساده و معمولی، خروجی JSON تولید کنند. حالت پیش‌فرض همچنان خروجی متن ساده است.

قالب نشانه‌گذاری شیء جاوااسکریپت (JSON) یک قالب پرونده استاندارد باز است که می‌تواند برای تبادل داده بین برنامه‌ها و همچنین در بستر شبکه استفاده شود. به https://en.wikipedia.org/wiki/JSON مراجعه کنید. JSON گونه‌های متفاوتی دارد و این پروژه از پیاده‌سازی C کتابخانه json-builder موجود در https://github.com/json-parser/json-builder استفاده می‌کند که چهار نوع داده ساده JSON شامل رشته (string)، عدد صحیح (integer)، بولی (boolean) و تهی (null) را پیاده‌سازی می‌کند. انواع داده دیگر آن شیء JSON و آرایه JSON هستند.

این پروژه از شیوه نام‌گذاری 'snake_case' برای نام‌های اشیای JSON استفاده می‌کند: همگی با حروف کوچک (ASCII) یا ارقام عددی همراه با خط زیرین (underscore) برای اتصال واژه‌ها (مانند "starting_lba"). نباید نویسه زیرخط در ابتدا یا انتهای نام‌ها وجود داشته باشد. زیرخط‌های تکراری به یک زیرخط تکی خلاصه می‌شوند. کتابخانه json-builder از مجوز SPDX-License-Identifier: BSD-2-Clause استفاده می‌کند که مشابه مجوز اکثریت ابزارهای موجود در بسته sg3_utils است.

کتابخانه json-builder نسبتاً سبک‌وزن است (۷۰۰ خط کد C) و کاملاً درون کتابخانه sg3_utils «پنهان» شده است، به‌طوری که رابط توابع و انواع داده‌های آن (به‌طور مستقیم) در دسترس ابزارهای بسته sg3_utils قرار ندارد. به همین دلیل رابط json-builder (فایلی به نام sg_json_builder.h) در دایرکتوری lib قرار دارد و نه در دایرکتوری include. همان‌طور که در گیت‌هاب ارائه شده است، json-builder چند فایل هدر مشترک با همتای خود json-parser دارد. نویسنده هدر json-builder را اصلاح کرده تا نیازمندی‌های هدر json-parser را در بر گیرد تا تنها سازنده (builder) ساخته شود و نه پارسر (parser). پارسر بعداً می‌تواند افزوده شود، اما در حال حاضر نیازی به آن دیده نمی‌شود.

رابط کاربری قابلیت‌های JSON در بسته sg3_utils تا حد زیادی بر پایه کارهای کریستین فرانک (Christian Franke) و دیگران در ابزار smartctl پیاده‌سازی شده است؛ ابزاری از بسته smartmontools که برای دریافت اطلاعات S.M.A.R.T. از دیسک‌ها (و دیگر دستگاه‌های ذخیره‌سازی) به کار می‌رود.

این صفحه راهنما به بررسی گزینه‌های خط فرمان --json[=JO] و --js-file=JFN می‌پردازد. توجه داشته باشید که آرگومان گزینه --json خودش اختیاری است. در شکل کوتاه‌تر، گزینه --json می‌تواند -j یا -J باشد (در صورتی که قبلاً استفاده نشده باشد، حروف کوچک ترجیح داده می‌شود). شکل کوتاه‌تر نیز می‌تواند آرگومان بگیرد اما پیش از آرگومان JO باید علامت "=" بدون هیچ فاصله‌ای در طرفین آن قرار گیرد.

در این صفحه راهنما دقت خاصی در استفاده از نقل‌قول‌ها صورت گرفته است؛ نقل‌قول دوتایی (گیومه) پیرامون نام اشیای JSON استفاده شده و نقل‌قول تکی برای سایر کاربردها به کار رفته است.

متغیر محیطی SG3_UTILS_JSON_OPTS به کاربر اجازه می‌دهد مقادیر پیش‌فرض تنظیمات JO را بازنویسی (override) کند. این تنظیمات را می‌توان مجدداً توسط گزینه خط فرمان --json[=JO] بازنویسی کرد. اگر رشته اختصاص‌یافته به SG3_UTILS_JSON_OPTS قابل تجزیه نباشد، پیام خطای زیر به خروجی خطای استاندارد (stderr) ارسال می‌شود:

از آنجا که آرگومان گزینه --json[=JO] اختیاری است، در شکل کوتاه نمی‌توان فاصله‌ای بین گزینه و آرگومان آن قرار داد.

JO رشته‌ای از صفر یا چند نویسه است که ترتیب آن‌ها به‌جز نویسه‌های نقیض (استفاده از '-' ترجیح دارد) اهمیتی ندارد. نویسه نقیض باید دقیقاً پیش از ویژگی (بولی) که وضعیت آن را تغییر می‌دهد قرار گیرد.
در شکل کوتاه، اگر حرف گزینه به جز -j باشد (چنانچه آن حرف قبلاً استفاده شده باشد؛ گزینه بعدی ترجیحی -J است). برای نمونه، ابزار sg_ses از -j برای عملیات 'join' استفاده می‌کند. همچنین از آنجا که آرگومان گزینه شکل کوتاه اختیاری است، در صورت درج آرگومان نباید هیچ فاصله‌ای میان گزینه کوتاه، علامت "=" و JO وجود داشته باشد. چند مثال از شکل کوتاه: '-jl' درخواست خروجی JSON (بدون آرگومان گزینه) به‌همراه معنای گزینه کوتاه '-l' در ابزار فراخوانی‌شده است؛ '-j=h' درخواست خروجی JSON همراه با نمایش برخی از اعداد صحیح به‌صورت رشته‌های هگزادسیمال در JSON است.
خروجی در قالب JSON خواهد بود و به فایلی با نام JFN ارسال می‌شود. اگر آن فایل وجود داشته باشد، محتوای قبلی آن بازنویسی و کوتاه (truncate) خواهد شد. به‌طور پیش‌فرض، خروجی JSON به خروجی استاندارد (stdout) ارسال می‌شود.
هنگام استفاده از این گزینه، گزینه --json[=JO] به‌طور ضمنی در نظر گرفته می‌شود و نیازی به درج آن نیست. با این حال، ممکن است همچنان برای تغییر پارامتر JO به مقادیر غیرپیش‌فرض، به گزینه --json[=JO] نیاز باشد.
اگر گزینه کوتاه -J پیش‌تر استفاده شده باشد، ممکن است حرف دیگری جایگزین آن شود.

هر رشته JO از صفر یا چند مورد از نویسه‌های کنترلی JSON زیر تشکیل شده است:

0
در صورت چاپ زیباسازی‌شده (pretty printing) خروجی JSON، فرورفتگی را به ۲ فاصله تنظیم می‌کند.
2
در صورت چاپ زیباسازی‌شده خروجی JSON، فرورفتگی را به ۲ فاصله تنظیم می‌کند.
4
در صورت چاپ زیباسازی‌شده خروجی JSON، فرورفتگی را به ۴ فاصله تنظیم می‌کند.
این مقدار پیش‌فرض فرورفتگی تب برای چاپ زیبای JSON است.
8
در صورت چاپ زیباسازی‌شده خروجی JSON، فرورفتگی را به ۸ فاصله تنظیم می‌کند.
-
نویسه نقیض. مفهوم (بولی) نویسه کنترلی بعدی را معکوس می‌کند.
یک نویسه کنترلی بولی برای وضعیت خروج ("exit status"). در صورت فعال بودن، فیلد "exit status" در انتهای خروجی JSON قرار می‌گیرد. مقدار عددی صحیح این فیلد همان مقدار وضعیت خروج یونیکس است که هنگام خروج ابزار به سیستم‌عامل بازگردانده می‌شود. مقدار 0 نشان‌دهنده خروج موفقیت‌آمیز است (هیچ خطایی شناسایی نشده است).
این نویسه کنترلی بولی به‌طور پیش‌فرض روشن (true) است.
یک نویسه کنترلی بولی برای حالت شانزده‌شانزدهی ('hexadecimal'). بسیاری از مقادیر مرتبط با SCSI بهتر است (یا دست‌کم از نظر تاریخی معمول است) که در مبنای ۱۶ دیده شوند، در حالی که خروجی JSON اعداد صحیح ده‌دهی (با حداکثر اندازه مفروض ۶۴ بیت علامت‌دار) را ترجیح می‌دهد. حداکثر اندازه بیشتر فیلدهای SCSI معادل ۶۴ بیت _بدون علامت_ است. همچنین برخی از فیلدهای SCSI ماسک‌هایی هستند که در مبنای ۱۶ بهتر دیده می‌شوند. هنگامی که این نویسه کنترلی فعال باشد، بیشتر فیلدهای (غیربدیهی) که مقدار عددی صحیح دارند، در عوض یک زیرشیء دریافت می‌کنند که دست‌کم شامل یک فیلد "i" با مقدار صحیح و یک فیلد "hex" با مقدار هگز متناظر در قالب یک رشته JSON است. این رشته هگزادسیمال فاقد تزئینات هگز است (نه پیشوند '0x' دارد و نه پسوند 'h').
این نویسه کنترلی بولی به‌طور پیش‌فرض خاموش (false) است.
یک نویسه کنترلی بولی برای کنترل دقیق‌تر خروجی‌های JSON فاقد زیباسازی. اگر نویسه کنترلی 'p' روشن (true) باشد، این گزینه هیچ اثری ندارد.
اگر نویسه کنترلی 'p' خاموش (false) باشد و این نویسه کنترلی نیز خاموش (false) باشد، خروجی تک‌خطی JSON حاوی چند فاصله برای خوانایی بهتر خواهد بود. اما اگر نویسه کنترلی 'p' خاموش (false) و این نویسه کنترلی روشن (true) باشد، خروجی تک‌خطی JSON به‌صورت فشرده ('packed') تولید شده و تمام فاصله‌های غیرضروری حذف می‌شوند.
این نویسه کنترلی بولی به‌طور پیش‌فرض خاموش (false) است.
نویسه کنترلی بولی برای تعیین خروجی فیلدهای آغازین (lead-in). فیلدهای آغازین در ابتدای خروجی JSON قرار دارند و شامل زیربخش‌های "json_format_version" و "utility_invoked" هستند. زیرشیء "utility_invoked" شامل فیلدهای رشته‌ای "name"، "version_date" و یک آرایه JSON به نام "argv" است که برای هر یک از آرگومان‌های خط فرمان یک ورودی دارد. اگر نویسه کنترلی o نیز فعال باشد، در صورت موجود بودن، خروجی غیر JSON (یعنی شکل اصلی و 'متن ساده') در آرایه‌ای به نام "plain_text_output" با یک عنصر به ازای هر خط از خروجی 'معمولی' قرار می‌گیرد.
این نویسه کنترلی بولی به‌طور پیش‌فرض روشن (true) است.
نویسه کنترلی بولی برای "name_extra". برای ارائه اطلاعات تکمیلی درباره نامی که زیرشیء آن است به کار می‌رود. رایج‌ترین کاربرد آن نگارش نام کامل کلمات اختصاری است (مانند نام T10 مثل 'SKSV' به 'Sense Key Specific Valid'). کاربرد دیگر آن اشاره به منسوخ شدن یک فیلد T10 و تعیین استانداردی از T10 است که این فیلد برای نخستین بار در آن منسوخ شده است. همچنین اگر مقدار فیلد نام‌برده یک کمیت فیزیکی با واحد نامشخص باشد (مانند مهلت زمانی)، "name_extra" می‌تواند آن را مشخص کند (مانند 'unit: millisecond'). تنها برخی از فیلدها داده‌های مرتبط با "name_extra" دارند.
این نویسه کنترلی بولی به‌طور پیش‌فرض خاموش (false) است.
نویسه کنترلی بولی برای کنترل قرارگیری خطوط خروجی معمولی (غیر JSON) در یک آرایه JSON (یک عنصر به ازای هر خط از خروجی معمولی) درون موضوع utility_invoked (به نویسه کنترلی l مراجعه کنید). نام این آرایه "plain_text_output" است. این نویسه کنترلی حتی در صورت نقیض شدن نویسه کنترلی فیلدهای آغازین (l) فعال می‌ماند.
این نویسه کنترلی بولی به‌طور پیش‌فرض خاموش (false) است.
این نویسه کنترلی بولی تعیین می‌کند که خروجی JSON به‌صورت «زیباسازی‌شده» (pretty printed) چاپ شود یا به‌صورت جریانی فشرده‌تر ارسال گردد که برای انتقال کارآمدتر روی کانال‌های ارتباطی مناسب است.
شکل خروجی زیباسازی‌شده دارای یک نام JSON همراه با مقدار عددی، رشته‌ای یا بولی مربوطه در هر خط است؛ و برای هر عنصر آرایه نیز یک خط اختصاص می‌دهد. اشیا و آرایه‌های JSON که مقداری از نوع شیء JSON دارند، نامشان در خطی جداگانه قرار می‌گیرد. این خطوط با مقدار فعلی تنظیمات تب دندانه‌گذاری می‌شوند تا سطح تو در تویی مشخص شود. در اصل شکل زیباسازی‌شده برای خواندن انسان طراحی شده است.
دو شکل خروجی بدون زیباسازی وجود دارد؛ به نویسه کنترلی فشرده‌سازی ['k'] مراجعه کنید.
این نویسه کنترلی بولی به‌طور پیش‌فرض روشن (true) است.
این نویسه کنترلی بولی تعیین می‌کند مقادیری از فیلدهای T10 که دارای معنای تعریف‌شده هستند، همراه با یک زیرشیء JSON افزوده که معمولاً "meaning" نام دارد تفکیک شوند یا خیر. هنگامی که فعال باشد، نام فیلد دارای زیرشیئی خواهد بود که دست‌کم شامل یک فیلد "i" با مقدار عددی صحیح فیلد و یک شیء رشته‌ای JSON (معمولاً با نام "meaning") است که با معنای تعریف‌شده توسط T10 برای مقدار فیلد "i" تطابق دارد.
این نویسه کنترلی بولی به‌طور پیش‌فرض روشن (true) است.
یک نویسه کنترلی عددی صحیح است که میزان خروجی اشکال‌زدایی (debug) را کنترل می‌کند. می‌توان آن را چندین بار تکرار کرد تا سطح پرگویی (verbosity) اشکال‌زدایی JSON در خروجی افزایش یابد.
توجه داشته باشید که این نویسه کنترلی پرگویی مختص خروجی JSON است، در حالی که گزینه --verbose (شکل کوتاه: -v که اغلب تکرار می‌شود: -vvv) که اکثر ابزارها از آن پشتیبانی می‌کنند، کاربرد عمومی‌تری دارد.
این نویسه کنترلی عدد صحیح به‌طور پیش‌فرض روی 0 تنظیم شده است.

حالت پیش‌فرض برای تمامی ابزارهایی که از گزینه --json پشتیبانی می‌کنند یکسان باقی می‌ماند؛ بدین معنی که اطلاعات رمزگشایی‌شده به‌صورت متن ساده به stdout ارسال می‌شود. خطاها به stderr گزارش می‌شوند و ممکن است سبب توقف زودهنگام ابزار شوند (مانند خطای نحوی گزینه‌های خط فرمان).

هنگامی که گزینه --json داده شود و خطایی شناسایی نگردد، به‌طور معمول تنها خروجی JSON به stdout ارسال می‌شود. هم‌زمان با تجزیه پاسخ SCSI، یک نمایش درختی از JSON در حافظه ساخته می‌شود. پس از انجام تمامی عملیات دیگر (شاید به استثنای گزارش نهایی وضعیت خروج)، این درخت JSON در stdout تخلیه ('dumped') می‌شود. این بدان معناست که در صورت وجود هرگونه خروجی غیر JSON ارسالی به stdout، آن خروجی _پیش از_ خروجی JSON ظاهر خواهد شد.

اگر نویسه کنترلی 'o' در آرگومان JO برای گزینه --json وجود داشته باشد، خروجی متن ساده قبلی درون یک آرایه JSON به نام "plain_text_output" در شیء JSON به نام "utility_invoked" قرار می‌گیرد. هر خط از خروجی متن ساده پیشین، در عنصری مجزا از آرایه JSON قرار می‌گیرد.

یک درخت JSON همگام با تجزیه داده‌های دریافتی از دستگاه SCSI توسط ابزار (مانند تجزیه یک صفحه VPD توسط sg_vpd پس از اجرای دستور SCSI INQUIRY) در حافظه ساخته می‌شود. 'لیست'های SCSI به آرایه‌های نام‌دار JSON تبدیل می‌شوند (برای نمونه در صفحه شناسایی دستگاه VPD یک 'Designation descriptor list' وجود دارد که به یک آرایه JSON با نام "designation_descriptor_list" تبدیل می‌شود).

در پایان کار ابزار، اندازه درخت JSON با در نظر گرفتن نوع خروجی (یعنی زیباسازی‌شده، تک‌خطی یا تک‌خطی فشرده) «سنجیده» می‌شود. برای خروجی زیباسازی‌شده JSON، اندازه هر فرورفتگی با تعداد فاصله‌ها (یعنی عرض تب) نیز مشخص می‌شود. سپس خروجی JSON به یک رشته واحد زبان C تبدیل شده و به stdout فرستاده می‌شود. اگر یک نویسه NULL (صفر اسکی و پایان‌دهنده رشته در C) به هر طریقی وارد فیلدی شود که (مطابق مشخصات) باید با فاصله پر شده باشد، خروجی JSON ممکن است ناقص یا بریده‌شده به نظر برسد.

توجه داشته باشید که این نوع پردازش JSON بدین معناست که اگر اجرای یک ابزار به هر دلیلی لغو شود، هیچ خروجی JSON ظاهر نخواهد شد. در پردازش معمول خروجی متن ساده، در چنین شرایط نامناسبی ممکن است بخشی از خروجی پیش از لغو ابزار ظاهر شود.

به‌طور کلی، خروجی JSON تولیدشده توسط این بسته، فیلدهای ۱ بیتی SCSI را به‌صورت مقدار عددی 0 (برای false) و 1 (برای true) نمایش می‌دهد. این امر از رسوم سنتی SCSI پیروی می‌کند که پیش از کاربرد گسترده نوع بولی رایج بوده است. همچنین فیلدهای رزروشده SCSI به‌صورت مقدار عددی صحیح 0 چاپ می‌شوند. توسعه‌های دستورات SCSI و توصیف‌گرهای داده مرتبط معمولاً از بخش‌هایی از دستورات یا توصیف‌گرهای داده استفاده می‌کنند که پیش‌تر رزرو شده بودند.

همان‌طور که در بالا اشاره شد، خروجی پیش‌فرض به‌صورت متن ساده با کدگذاری اسکی ۷ بیتی است. گزینه --json[=JO] به‌گونه‌ای طراحی شده که جایگزینی برای آن قالب متن ساده باشد. قالب‌های خروجی جایگزین دیگری نیز وجود دارند، مانند خروجی پاسخ به‌صورت دنباله‌ای از بایت‌های هگزادسیمال یا خروجی باینری خام ('raw')؛ هر دوی این موارد بر گزینه --json[=JO] اولویت دارند. سایر قالب‌های خروجی تخصصی (مانند 'sg_inq --export') نیز معمولاً بر خروجی JSON اولویت خواهند داشت.

هنگامی که گزینه --raw همراه با گزینه --inhex=FN استفاده شود، فقط داده‌های ورودی به ابزار به‌صورت باینری تفسیر می‌شوند؛ بنابراین قالب خروجی به‌طور پیش‌فرض به شکل متن ساده باقی می‌ماند و در صورت استفاده هم‌زمان از گزینه --json[=JO] می‌تواند به خروجی JSON تغییر یابد.

معمولاً تنها یک فرمت خروجی JSON وجود دارد، بنابراین گزینه‌هایی مانند --brief و --quiet در خروجی JSON نادیده گرفته می‌شوند. در برخی موارد (مانند 'sg_inq --descriptors') خروجی JSON گسترش می‌ابد.

هیچ تطابق کاملی میان نحوه نام‌گذاری دستورات، فیلدها، اشیا و فایل‌ها در این سیستم‌ها وجود ندارد. تاریخچه SCSI به دورانی بازمی‌گردد که هنوز مجموعه‌های نویسه ۶ بیتی بدون حروف کوچک در حال استفاده بودند! بنابراین نام دستورات و فیلدهای SCSI همگی با حروف بزرگ نوشته شده و از فاصله به‌عنوان جداکننده استفاده می‌کنند. در مقابل، JSON شیوه "CamelCase" را با بزرگ نوشتن حرف نخست هر کلمه ترجیح می‌دهد تا نیازی به فاصله به‌عنوان جداکننده نباشد. بسیاری از پیاده‌سازی‌های JSON (مانند این پروژه) اولویت پیشنهادی JSON را نادیده گرفته و شیوه "snake_case" را برمی‌گزینند. چرا این‌گونه است؟ زیرا بیشتر شبه‌سیستم‌فایل‌های مبتنی بر یونیکس از حروف کوچک استفاده می‌کنند. افزون بر این، وجود فاصله در نام فایل‌ها هنگام استفاده از دستورات پایه و اسکریپت‌نویسی یونیکس پیچیدگی مضاعف ایجاد می‌کند، لذا بهتر است از آن اجتناب شود.

در لینوکس، sysfs یک شبه‌سیستم‌فایل بسیار مهم برای تبادل بلادرنگ اطلاعات میان درایورهای سخت‌افزاری و فضای کاربری است. ابزارهایی مانند lsblk و lsscsi به استخراج داده از sysfs می‌پردازند. اکثریت قاطع نام پرونده‌ها در sysfs از "snake_case" استفاده می‌کنند، اگرچه استثناهایی معدود شامل ':' و حتی فاصله‌های تعبیه‌شده نیز وجود دارند. همچنین شایان ذکر است که نام دستورات کاربری یونیکس، دستورات سیستمی و کتابخانه‌ها هیچ فاصله تعبیه‌شده‌ای ندارند و استفاده از حروف بزرگ در آن‌ها بسیار نادر است.

موضوع دیگر حساسیت به بزرگی و کوچکی حروف است: "CamelCase" و "camelcase" نام‌هایی گیج‌کننده هستند که در بیشتر سیستم‌فایل‌های یونیکس به پرونده‌های متفاوتی اشاره دارند، اما در سیستم‌فایل‌های ویندوز مانند FAT و NTFS به همان فایل اشاره می‌کنند. با اضافه شدن احتمال نویسه‌های غیر اسکی یونیکد، جستجوی نام منطبق در یک شیء JSON می‌توانست به کابوسی تبدیل شود.

بنابراین انتخاب نام اشیای JSON به‌صورت رشته‌ای از نویسه‌های محدود به حروف کوچک الفبای اسکی، ارقام و زیرخط (تنها ۲۶+۱۰+۱ نویسه مجاز مختلف) یک مصالحه است. این مصالحه به نفع سادگی جستجو تمام می‌شود و در عوض آزادی عمل در نام‌گذاری اشیا را محدود می‌کند. این شیوه از رسوم نام‌گذاری فایل در یونیکس (لینوکس) پیروی می‌کند.

همچنین ذکر این نکته حائز اهمیت است که تمامی ابزارهای این بسته از UTF-8 استفاده می‌کنند. اگر داده‌های دریافت شده از سیستم دیگر دارای قالب UTF-16 یا UTF-32 باشند، می‌توان آن‌ها را با ابزار iconv به UTF-8 تبدیل کرد.

هیچ تلاشی برای ترجمه پیام‌های خطا به فرمت JSON صورت نگرفته است، به‌جز شیء پایانی "exit_status" در JSON که در آن مقدار 0 به معنای 'عدم وجود خطا' است. مقادیر وضعیت خروج که نشان‌دهنده بروز خطا هستند در محدوده ۱ تا ۲۵۵ قرار دارند.

ابزار sg_decode_sense در صورت درخواست، داده‌های سنس (sense data) اسکازی را به قالب JSON تجزیه می‌کند. بنابراین اگر ابزار دیگری با گزارش داده سنس متوقف شود (که معمولاً هنگام استفاده از گزینه --verbose مشاهده می‌شود)، می‌توان آن داده سنس (به‌صورت بایت‌های هگز) را کپی کرده و در خط فرمان پس از 'sg_decode_sense -j ' جای‌گذاری کرد تا آن داده‌های سنس به قالب JSON نمایش داده شوند.

در غیر این صورت، چنانچه هنگام انتخاب خروجی JSON خطایی شناسایی شود، پیام خطا به‌صورت متن ساده به stderr فرستاده می‌شود. معمولاً به محض شناسایی خطا، ابزار ابتدا درخت حافظه‌ای JSON را مطابق آنچه گفته شد تخلیه کرده و با ثبت یک وضعیت خروج غیرصفر خاتمه می‌یابد. خروجی JSON ساختار درستی خواهد داشت، اما تمامی فیلدها یا عناصر فهرستی که پس از نقطه شناسایی خطا قرار داشته‌اند، در خروجی وجود نخواهند داشت.

به‌طور خلاصه، هنگام انتخاب خروجی JSON و بروز خطا، هر ابزار درست همانند زمانی که خروجی JSON انتخاب نشده باشد، به پردازش خطا می‌پردازد. در بیشتر موارد، پیام‌های خطا در قالب متن ساده به stderr ارسال می‌شوند.

نوشته‌شده توسط Douglas Gilbert. برخی ابزارها توسط دیگران مشارکت داده شده‌اند؛ پرونده CREDITS و پرونده‌های سورس جداگانه (در پوشه 'src') را ببینید.

گزارش باگ‌ها به <dgilbert at interlog dot com>.

حق نشر © 2022-2026 Douglas Gilbert
این نرم‌افزار تحت مجوز GPL نسخه ۲ یا مجوز BSD-2-Clause توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب با یک هدف خاص.

iconv(1), lsblk(8), lsscsi(lsscsi), sg3_utils(sg3_utils), smartctl(smartmontools)

2026-07-18 sg3_utils-1.49