SG_OPCODES(8)
π SG_OPCODES(8) π
Okay bestie, meet sg_opcodes, straight outta the SG3_UTILS crew β she reports supported SCSI commands or task management functions, and sheβs lowkey iconic at it. π«Ά
π NAME π
sg_opcodes β report supported SCSI commands or task management functions β¨
π SYNOPSIS π
sg_opcodes [--alpha] [--compact] [--enumerate] [--help] [--hex]
[--inhex=FN] [--json[=JO]] [--js-file=JFN] [--mask] [--mlu]
[--no-inquiry] [--opcode=OP[,SA]] [--pdt=DT] [--raw] [--rctd] [--repd]
[--rep-opts=RO] [--sa=SA] [--tmf] [--unsorted] [--verbose] [--version]
DEVICE
sg_opcodes [-a] [-c] [-e] [-H] [-i=FN] [-j] [-m] [-M] [-n] [-o=OP]
[-p=DT] [-q] [-R] [-s=SA] [-t] [-u] [-v] [-V] [-?] DEVICE
π¦ DESCRIPTION π¦
So hereβs the tea: this utility sends a SCSI REPORT SUPPORTED OPERATION CODES (RSOC) or a REPORT SUPPORTED TASK MANAGEMENT FUNCTIONS (RSTMF) command to the DEVICE, and then outputs the response. π
The default action is to report supported operation codes. In this mode it will either list all supported commands or give detailed information on a specific command identified by the --opcode=OP option (perhaps with additional information from the --sa=SA option). β¨
The name of a SCSI command depends on its peripheral device type (e.g. a disk). The RSOC and RSTMF commands are not supported in the MMC command set for CD and DVD devices. This utility does an INQUIRY to obtain the peripheral device type and prints out the vendor, product and revision strings. π¦
A similar facility to query supported operation codes previously was available via the CmdDt bit in the SCSI INQUIRY command (see sg_inq(8)). However that facility was made obsolete and replaced by the RSOC command in SPC-3 (revision 4) during February 2002. β
This utility supports two command line syntaxes, the preferred one is shown first in the synopsis and explained in this section. A later section on the old command line syntax outlines the second group of options. π
β¨ OPTIONS β¨
Quick housekeeping bestie: arguments to long options are mandatory for short options as well. iykyk π
-a,--alphaβ okay so when all supported commands are being listed, there is no requirement for the device server (i.e. theDEVICE) to sort the list of commands. When this option is given, the list of supported commands is sorted by name (alphabetically). And when this option and the--unsortedoption are both not given, then the list of supported commands is sorted numerically (first by operation code and then by service action). Pick your fighter π-c,--compactβ some command names, especially those associated with some service actions, are getting longer (they're giving main character energy and taking up space π). This may cause line wrap in the one line per command mode on some terminals. When this option is given, the opcode and service action fields are combined into a single field with the service action, prefixed by a comma shown directly after the opcode. If there is no service action associated with the command, then the comma and the service action are not shown after the opcode. Also the CDB size field is not shown when this option is given. Snip snip βοΈ-e,--enumerateβ this option prints the name of the SCSI command based on the given opcode, peripheral device type and optionally the service action. If given,DEVICEis ignored. The opcode, peripheral device type and service action default to zero if not given. Thus if this option is the only option given, then"Test Unit ready"is output, since its opcode is 0, it has no service action, and it is common to all peripheral device types since it is defined in the SCSI Primary Commands (SPC) standard(s). Literally the default-est default to ever default π¦-h,--helpβ outputs the usage message summarizing command line options then exits. IgnoresDEVICEif given. Your little helper π«Ά-H,--hexβ outputs the response in ASCII hexadecimal to stdout. When used once or twice, each line starts with a relative (hex) address starting at 0 on the first hex line output. The difference is: when used twice, the hexadecimal bytes are rendered in ASCII at the right of each line, and non-printable characters are replaced by.. When used three or more times, there is no leading relative address on each line. This output is suitable for being redirected to a file which can later be given to the--inhex=FNoption. Hex hex hex, the more the merrier π-i,--inhex=FNβ whereFNis a file name whose contents are assumed to be ASCII hexadecimal. IfDEVICEis also given thenDEVICEis ignored, a warning is issued and the utility continues, decoding the file namedFN. See the"HEX, BINARY AND JSON FORMATS"section in thesg3_utilsmanpage for more information. If the--rawoption is also given, then the contents ofFNare treated as binary. π-j[=JO],--json[=JO]β output is in JSON format instead of plain text form. Note that arguments to the short and long form are themselves optional and if present start with=and no whitespace is permitted around that=. See thesg3_utils_jsonmanpage or use'?'forJOto get a summary. JSON girlies rise π-J,--js-file=JFNβ output is in JSON format and it is sent to a file namedJFN. If that file exists then it is truncated. By default, the JSON output is sent to stdout. When this option is given, the--json[=JO]option is implied and need not be given. The--json[=JO]option may still be needed to set theJOparameter to non-default values. File it away π-m,--maskβ additionally prints out the cdb mask in hex. So a 12 byte cdb will have a 12 byte hexadecimal mask. If the hexadecimal is expanded (mentally) to binary, then a"1"means the corresponding position in the cdb may be set. And a"0"means the corresponding position in the cdb must not be set. For"0"mask positions that a user tries to set in a cdb, the device may either ignore it or report an error, typically with a sense key of"illegal request". Don't test it, bestie π-M,--mluβ additionally prints out an indication (0 or 1) whether the command effects all logical units in the containing target. MLU (Multiple Logical Units) is a bit in the RSOC response introduced by proposal18-045r1(and possibly inspc5r20). Without the option, the default output format which lists all opcodes does not include a MLU indication. πΈ-n,--no-inquiryβ prior to calling a SCSI RSOC or a RSTMF command, a SCSI INQUIRY command is performed. The reason is to determine the peripheral device type (pdt) of theDEVICEas this is helpful in translating operation codes to the command names. By default this utility prints a summary of INQUIRY command response on stdout. If this option (or the--rawoption) is given then that summary is not printed on stdout. Quiet mode activated π€«-O,--oldβ switch to older style options. Please use as first option. Retro vibes β¨-o,--opcode=OP[,SA]β theDEVICEwill be queried for the given operation code (i.e. theOPvalue) which is the first byte of a SCSI command. Optionally, if aSAvalue is given, it will be used as that SCSI command's service action. Note thatOPandOP,0are not the same thing, as SCSI does allow the service action to be 0 (but not in this command).OPandSAare decimal unless prefixed by"0x"or they have a trailing"h".OPshould be in the range 0 to 255 (0xff) inclusive.SAshould be in the range 0 to 65535 (0xffff) inclusive. When this option is not given then all available SCSI commands supported by the The--rep-opts=ROoption, if given, overrides any decisions implied in the previous paragraph about the setting of REPORTING OPTIONS field in the RSOC command. π (yes that sentence really does just trail off like that, I don't make the rules)-p,--pdt=DTβ whereDTis the peripheral device type. This is used together with the--enumerateto differentiate when a command opcode (and perhaps service action) is shared by multiple device types. Numerical values between-1and31(inclusive) may be used where-1implies what is in SPC. Names like'tape','disk'and'processor'may also be given. This option may also be used with the--no-inquiryoption to suppress this utility doing an INQUIRY command, since the main reason for doing that is to find the peripheral device type of theDEVICE. π§-r,--rawβ output response in binary (to stdout) unless the--inhex=FNoption is also given. In that case the input file name (FN) is decoded as binary (and the output is not in binary (but may be hex)). Plot twist π₯-R,--rctdβ set report command timeout descriptor (RCTD) bit in the cdb. The response may or may not contain command timeout descriptors. If available they are output. If supported there are two values: a nominal command timeout and a recommended command timeout. Both have units of seconds. A value of zero means that no timeout is indicated and this is shown in the corresponding decoded output as"-". β-q,--repdβ set read extended parameter data (REPD) bit in the report task management functions cdb. 16 bytes rather than the default 4 bytes expected in the response. This was added in SPC-4 (revision26). π¦-Q,--rep-opts=ROβROis the reporting options field value that is placed in RSOC command (cdb). If this option is not given and the--opcode=OP[,SA]option is also not given thenROdefaults to0. All supported commands are listed whenROis0. π-s,--sa=SAβ theDEVICEwill be queried for a command with the given service action (i.e. theSAvalue). Used in conjunction with the--opcode=OPoption. If this option is not given,--opcode=OPis given and the command in question does have a service action, then a value of0will be assumed.SAis decimal and expected to be in the range 0 to 65535 (0xffff) inclusive. πΊ-t,--tmfβ list supported task management functions. This is done with the SCSI REPORT SUPPORTED TASK MANAGEMENT FUNCTIONS command. When this option is chosen the--alpha,--opcode=OP,--rctd,--sa=SAand--unsortedoptions are ignored. Sorry not sorry, those options are getting sidelined π-u,--unsortedβ when all supported commands are being listed there is no requirement for the device server (i.e. theDEVICE) to sort the list of commands. When this option is given the list of supported commands is in the order given by theDEVICE. When this option is not given the supported commands are sorted numerically (first by operation code and then by service action). Chaos order, on purpose π-v,--verboseβ increase level of verbosity. Can be used multiple times. Go off, stack it π£οΈ-V,--versionβ print out version string then exit. π
π«Ά NOTES π«Ά
As of SPC-5 revision 8 the recognized task management functions are: abort set, abort task set, clear ACA, clear task set, logical unit reset, query task, query asynchronous event, query task set, and I_T nexus reset. In SPC-4 revision 26 target reset and wakeup task management functions were made obsolete. rip to those two, they had a good run π
In the 2.4 series of Linux kernels the DEVICE must be a SCSI generic (sg) device. In the 2.6 series block devices (e.g. SCSI disks and DVD drives) can also be specified. For example "sg_opcodes /dev/sda" will work in the 2.6 series kernels. Glow up fr fr π
π EXIT STATUS π
The exit status of sg_opcodes is 0 when it is successful. Otherwise see the sg3_utils(8) man page. Slay β
π OLDER COMMAND LINE OPTIONS π
okay bestie, history lesson real quick: prior to sg3_utils version 1.23, the options in this section were literally the only ones available. Since then, this utility defaults to the newer command line options, and you can override that by using --old (or -O) as the first option. See the ENVIRONMENT VARIABLES section for another way to force the use of these older command line options. slay.
-aβ sort command alphabetically. Equivalent to--alphain the main description.-cβ see the--compactoption above.-eβ see the--enumerateoption above.-Hβ see the--hexoption above.-mβ see the--maskoption above.-nβ don't print a summary of the SCSI INQUIRY response onstdout.-N,--newβ switch to the newer style options.-o=OPβ theDEVICEwill be queried for the given operation code (i.e.OP), which is the first byte of a SCSI command.OPis hexadecimal and expected to be in the range0toffinclusive. When this option is not given, then all available SCSI commands supported by theDEVICEare listed.-p=DTβ see the--pdt=DToption above.-qβ set the read extended parameter data (REPD) bit in report TMF cdb. Equivalent to--repdin the main description.-Rβ set the report command timeout descriptor (RCTD) bit in cdb. Equivalent to--rctdin the main description.-s=SAβ theDEVICEwill be queried for a command with the given service action (i.e.SA). Used in conjunction with the-o=OPoption. If this option is not given,-o=OPis given, and the command in question does have a service action, then a value of0will be assumed.SAis hexadecimal and expected to be in the range0toffffinclusive.-tβ list supported task management functions. Equivalent to--tmfin the main description.-uβ output all supported commands in the order given byDEVICE. Equivalent to--unsortedin the main description.-vβ increase level of verbosity. Can be used multiple times.-Vβ print out version string then exit.-?β output usage message. Ignore all other parameters.
β¨ EXAMPLES β¨
The examples in this page use Linux device names. For suitable device names in other supported Operating Systems, see the sg3_utils(8) man page. no cap, this is the practical part π«Ά
To see the information about a specific command, give its operation code to the --op= option. A command line invocation is shown first, followed by a typical response:
# sg_opcodes --op=93h /dev/sdb
Opcode=0x93
Command_name: Write same(16)
Command supported [conforming to SCSI standard]
Usage data: 93 e2 00 00 00 00 ff ff ff ff 00 00 ff ff 00 00
The next example shows the supported task management functions:
# sg_opcodes --tmf -n /dev/sdb
Task Management Functions supported by device:
Abort task
Abort task set
Clear ACA
Clear task set
Logical unit reset
Query task
Enumerate can be used to look up a SCSI command name in the absence of a device that supports that command. The opcode and service action (if required) should be supplied:
# sg_opcodes --enumerate --op=0x9b,0xa
SCSI command:
Read buffer(16), read data from echo buffer
π ENVIRONMENT VARIABLES π
Since sg3_utils version 1.23, the environment variable SG3_UTILS_OLD_OPTS can be given. When it is present, this utility will expect the older command line options. So the presence of this environment variable is equivalent to using --old (or -O) as the first command line option. iykyk π«
π AUTHOR π
Written by Douglas Gilbert. icon behavior, honestly.
π REPORTING BUGS π
Report bugs to <dgilbert at interlog dot com>.
Β©οΈ COPYRIGHT Β©οΈ
Copyright Β© 2004-2023 Douglas Gilbert
This software is distributed under the GPL version 2. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
π SEE ALSO π
sg_inq,sg3_utils_json(sg3_utils)
And that's the whole vibe: this page ships with sg3_utils-1.49, dated October 2023, and it's literally SG_OPCODES(8). go query something cute, bestie π
π¦ where this page comes from
- arch rolling: sg3_utils 1.49-1 Β· GPL-2.0-or-later AND BSD-2-Clause
- nixpkgs unstable: sg3_utils 1.49
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms