On Fri, Mar 24, 2017, at 06:21, Tim Bradshaw wrote:
And if, for instance, I have a regular need to
enumerate various
properties of the avatars of the PCI devices in the filesystem, I might
decide to write a program which does that, rather than patching together
some arcane mass of cat | sed |awk each time (if even the contents of the
avatars isn't some awful binary blob, which I think it should not be but
whether that's a Unixism or not I am not sure).
If you think parsing a binary blob can't be done in a shell script,
you're not trying hard enough. Relevant tools include dd [with the seek
and skip], od, head and tail [in byte count mode of course]. For
creating binary data, printf is sufficient.
If you think that parsing a binary blob *shouldn't* be done in a shell
script, and the suggestion is absolutely horrifying, you're of course
correct.
(None of this is meant to imply that systems which
have such commands
have got this right -- I completely agree that they should present things
in the filesystem -- just that they could have got it right and the
command might still exist.)
List of files opened by lspci:
/sys/bus/pci/devices
/sys/bus/pci/devices/{each
subdirectory}/{resource,irq,vendor,device,class}
/sys/bus/pci/devices/{each subdirectory}/{config,label}
/sys/bus/pci/slots
/usr/share/misc/pci.ids{.gz,}
/etc/passwd and various other files that libc's "nsswitch" getpw* is to
blame for, to locate the home directory for the following
~/.pciids-cache
/etc/udev/udev.conf
{various directories}/hwdb.bin
Honestly I'm not sure how anyone can be aware of how extensive Linux's
/proc and /sys filesystems are and assume that tools like lspci etc are
doing anything but collating data found in them.
The content of all of those files [well, all the /proc ones that are
actually device avatars - i suspect hwdb.bin is not] is textual (often a
single hexadecimal constant), and it's therefore probably possible to
write it in sh and awk if you had to. But what's wrong with C?