{"id":319,"date":"2014-04-21T16:57:07","date_gmt":"2014-04-21T15:57:07","guid":{"rendered":"https:\/\/stevepedwards.today\/DebianAdmin\/?p=319"},"modified":"2025-07-07T23:58:11","modified_gmt":"2025-07-08T04:58:11","slug":"william-shotts-sysinfo-html-creator-script","status":"publish","type":"post","link":"https:\/\/stevepedwards.today\/DebianAdmin\/william-shotts-sysinfo-html-creator-script\/","title":{"rendered":"William Shotts SysInfo.html Creator Script"},"content":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_319\" class=\"pvc_stats all  \" data-element-id=\"319\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>After reading a lot of William Shott\u00b4s free TLCL.pdf here:<\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/TLCL-13.07.pdf\">TLCL-13.07.pdf<\/a><\/p>\n<p>I finally found a working (but incomplete) version of the script that produces an html page of the system status for the parameters he programmed in this BASH script lesson from his book and blog page here:<br \/>\n<a href=\"https:\/\/linuxcommand.org\/lc3_wss0120.php\" target=\"_blank\" rel=\"noopener\">https:\/\/linuxcommand.org\/lc3_wss0120.php<\/a><br \/>\nIt looks like this:<\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-165547.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-165547-1024x640.png\" alt=\"Screenshot from 2014-04-21 16:55:47.png\" width=\"590\" height=\"368\" \/><\/a><\/p>\n<p>The slightly amended script -(I changed the output dir to my \/home Documents folder, as it didn't seems to appear in \/root) - that produced it is here:<br \/>\n--<br \/>\n#!\/bin\/bash<\/p>\n<p># sysinfo_page - A script to produce a system information HTML file<\/p>\n<p>## Constants<\/p>\n<p>TITLE=\"System Information for $HOSTNAME\"<br \/>\nRIGHT_NOW=$(date +\"%x %r %Z\")<br \/>\nTIME_STAMP=\"Updated on $RIGHT_NOW by $USER\"<\/p>\n<p>## Functions<\/p>\n<p>system_info()<br \/>\n{<br \/>\necho \"<\/p>\n<h2>System release info<\/h2>\n<p>\"<br \/>\necho \"<\/p>\n<p>Function not yet implemented<\/p>\n<p>\"<\/p>\n<p>} # end of system_info<\/p>\n<p>show_uptime()<br \/>\n{<br \/>\necho \"<\/p>\n<h2>System uptime<\/h2>\n<p>\"<br \/>\necho \"<\/p>\n<pre>\"\r\n    uptime\r\n    echo \"<\/pre>\n<p>\"<\/p>\n<p>} # end of show_uptime<\/p>\n<p>drive_space()<br \/>\n{<br \/>\necho \"<\/p>\n<h2>Filesystem space<\/h2>\n<p>\"<br \/>\necho \"<\/p>\n<pre>\"\r\n    df\r\n    echo \"<\/pre>\n<p>\"<\/p>\n<p>} # end of drive_space<\/p>\n<p>home_space()<br \/>\n{<br \/>\n# Only the superuser can get this information<\/p>\n<p>if [ \"$(id -u)\" = \"0\" ]; then<br \/>\necho \"<\/p>\n<h2>Home directory space by user<\/h2>\n<p>\"<br \/>\necho \"<\/p>\n<pre>\"\r\n   echo \"Bytes Directory\"\r\n   du -s \/home\/* | sort -nr\r\n   echo \"<\/pre>\n<p>\"<br \/>\nfi<\/p>\n<p>} # end of home_space<\/p>\n<p>write_page()<br \/>\n{<br \/>\ncat &lt; &lt;- _EOF_<\/p>\n<p>$TITLE<\/p>\n<h1>$TITLE<\/h1>\n<p>$TIME_STAMP<\/p>\n<p>$(system_info)<br \/>\n$(show_uptime)<br \/>\n$(drive_space)<br \/>\n$(home_space)<\/p>\n<p>_EOF_<\/p>\n<p>}<\/p>\n<p>usage()<br \/>\n{<br \/>\necho \"usage: sysinfo_page [[[-f file ] [-i]] | [-h]]\"<br \/>\n}<\/p>\n<p>## Main<\/p>\n<p>interactive=<br \/>\nfilename=\/home\/stevee\/Documents\/sysinfo_page.html<\/p>\n<p>while [ \"$1\" != \"\" ]; do<br \/>\ncase $1 in<br \/>\n-f | --file ) shift<br \/>\nfilename=$1<br \/>\n;;<br \/>\n-i | --interactive ) interactive=1<br \/>\n;;<br \/>\n-h | --help ) usage<br \/>\nexit<br \/>\n;;<br \/>\n* ) usage<br \/>\nexit 1<br \/>\nesac<br \/>\nshift<br \/>\ndone<\/p>\n<p># Test code to verify command line processing<\/p>\n<p>if [ \"$interactive\" = \"1\" ]; then<br \/>\necho \"interactive is on\"<br \/>\nelse<br \/>\necho \"interactive is off\"<br \/>\nfi<br \/>\necho \"output file = $filename\"<\/p>\n<p># Write page (comment out until testing is complete)<\/p>\n<p>write_page &gt; $filename<\/p>\n<p>---<\/p>\n<p>You can continue to add functionality (and fix Sys Release section with uname -a) if you can follow his lesson, if you are a budding programmer of course...<br \/>\nHe didn't end the book with a final finished, tested script to just copy and try, so I lost the plot with it all in the end.<\/p>\n<p>&nbsp;<\/p>\n<p>------<\/p>\n<p>A little later...<\/p>\n<p>I added some more commands to this script for 2 different PCs which was interesting because of different hard drives and ports open.<\/p>\n<p>Add a suitable command, but remember to add each new command section's function at the bottom also. I added drive temp, open ports and users functions to it like this:<\/p>\n<p>------------<\/p>\n<p>drive_temp_Celsius()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Hard Drive Temps sda, sdb&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nsmartctl -x \/dev\/sda | grep Celsius; smartctl -x \/dev\/sdb | grep Celsius<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of drive_temp_Celsius<\/p>\n<p>open_ports()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Open Ports&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nnmap 127.0.0.1<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of open_ports<\/p>\n<p>active_users()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Active Users&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nw<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of active_users<\/p>\n<p>------<\/p>\n<p>$(drive_temp_Celsius)<br \/>\n$(open_ports)<br \/>\n$(active_users)<\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-194026.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-326 aligncenter\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-194026-1024x640.png\" alt=\"Screenshot from 2014-04-21 19:40:26.png\" width=\"590\" height=\"368\" \/><\/a><\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-194203.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-327 aligncenter\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/Screenshot-from-2014-04-21-194203-1024x640.png\" alt=\"Screenshot from 2014-04-21 19:42:03.png\" width=\"590\" height=\"368\" \/><\/a><\/p>\n<p>A useful exercise for a beginner script writer I guess.<\/p>\n<p>Lets sort out that finished badly formatted script above - here's a nearly complete\u00a0version that works in Mint - with both Will and my additions:<\/p>\n<p>*********<\/p>\n<p>#!\/bin\/bash<\/p>\n<p># sysinfo_page - A script to produce a system information HTML file<\/p>\n<p>## Constants<\/p>\n<p><strong>HOSTNAME=$(\/bin\/hostname) #Mint addition<\/strong><br \/>\n<strong>TITLE=\"System Information for $HOSTNAME\"<\/strong><br \/>\nRIGHT_NOW=$(date +\"%x %r %Z\")<br \/>\nTIME_STAMP=\"Updated on $RIGHT_NOW by $USER\"<\/p>\n<p>&nbsp;<\/p>\n<p>## Functions<\/p>\n<p>system_info()<br \/>\n{<br \/>\necho \"&lt;h2&gt;System release info&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;<\/p>\n<p>uname -a<\/p>\n<p>&lt;\/pre&gt;\"<\/p>\n<p>} # end of system_info<br \/>\nshow_uptime()<br \/>\n{<br \/>\necho \"&lt;h2&gt;System uptime&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;<\/p>\n<p>uptime<\/p>\n<p>echo \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of show_uptime<\/p>\n<p>drive_space()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Filesystem space&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\ndf<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of drive_space<\/p>\n<p>drive_temp_Celsius()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Hard Drive Temps&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nhddtemp\u00a0\/dev\/sda ; hddtemp \/dev\/sdb<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of drive_temp_Celsius<\/p>\n<p>open_ports()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Open Ports&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nnmap 127.0.0.1<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of open_ports<\/p>\n<p>active_users()<br \/>\n{<br \/>\necho \"&lt;h2&gt;Active Users&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\nw<br \/>\necho \"&lt;\/pre&gt;\"<\/p>\n<p>} # end of active_users<\/p>\n<p>home_space()<br \/>\n{<br \/>\n# Only the superuser can get this information so script has to be run as root<\/p>\n<p>if [ \"$(id -u)\" = \"0\" ]; then<br \/>\necho \"&lt;h2&gt;Home directory space by user&lt;\/h2&gt;\"<br \/>\necho \"&lt;pre&gt;\"<br \/>\necho \"Bytes Directory\";<br \/>\n<strong>du -csBG\u00a0\/home\/* | sort -nr<\/strong><br \/>\necho \"&lt;\/pre&gt;\"<br \/>\nfi<\/p>\n<p>} # end of home_space<\/p>\n<p>write_page()<\/p>\n<p>{<br \/>\ncat &lt;&lt;- _EOF_<br \/>\n&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;title&gt;$TITLE&lt;\/title&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;h1&gt;$TITLE&lt;\/h1&gt;<br \/>\n&lt;p&gt;$TIME_STAMP&lt;\/p&gt;<br \/>\n$(system_info)<br \/>\n$(show_uptime)<br \/>\n$(drive_space)<br \/>\n$(home_space)<br \/>\n$(drive_temp_Celsius)<br \/>\n$(open_ports)<br \/>\n$(active_users)<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n_EOF_<\/p>\n<p>}<\/p>\n<p>usage()<br \/>\n{<br \/>\necho \"usage: sysinfo_page [[[-f file ] [-i]] | [-h]]\"<br \/>\n}<br \/>\n## Main<\/p>\n<p>interactive=<br \/>\nfilename=\/home\/stevee\/Documents\/sysinfo_page.html<\/p>\n<p>while [ \"$1\" != \"\" ]; do<br \/>\ncase $1 in<br \/>\n-f | --file ) shift<br \/>\nfilename=$1<br \/>\n;;<br \/>\n-i | --interactive ) interactive=1<br \/>\n;;<br \/>\n-h | --help ) usage<br \/>\nexit<br \/>\n;;<br \/>\n* ) usage<br \/>\nexit 1<br \/>\nesac<br \/>\nshift<br \/>\ndone<br \/>\n# Test code to verify command line processing<\/p>\n<p>if [ \"$interactive\" = \"1\" ]; then<br \/>\necho \"interactive is on\"<br \/>\nelse<br \/>\necho \"interactive is off\"<br \/>\nfi<br \/>\necho \"output file = $filename\"<br \/>\n# Write page (comment out until testing is complete)<\/p>\n<p>write_page &gt; $filename<\/p>\n<p>--------<\/p>\n<p>Of course, the main problem with this is that it is a static \"snapshot\" - so to see ongoing system changes you have to re-run the shell script each time to re-write the html page, then F5 refresh your browser also.<\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/sysinfo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3898\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/sysinfo.png\" alt=\"sysinfo.png\" width=\"839\" height=\"472\" \/><\/a><\/p>\n<p>Hmm...You could write\/add a for loop to re-run the script it every 10 secs say? then add:<\/p>\n<p>?refresh=10<\/p>\n<p>appended to the browser window....<\/p>\n<p>I got round this by running a crontab every hour for root:<\/p>\n<p><span style=\"color: #ff0000;\">00 * * * * sh \/var\/www\/sysinfo\/sysinfo.sh<\/span><\/p>\n<p>Also, just noticed that $HOSTNAME doesn't work in Mint without being defined first; and hddtemp is quicker\u00a0than installing smartmontools:<\/p>\n<h5>Constants<\/h5>\n<h5>RIGHT_NOW=$(date +\"%x %r %Z\")<br \/>\nTIME_STAMP=\"Updated on $RIGHT_NOW by $USER\"<br \/>\nHOSTNAME=$(\/bin\/hostname)<br \/>\nTITLE=\"System Information for $HOSTNAME\"<\/h5>\n<p>OK, after research, you would have to have this file as an index.html type\/server page in Apache, and point the file creation directory at the same place to re-write the file, say in \/var\/www\/html, because ?refresh=x in a browser does not work for a samba file share, only for a web page. As root, you can use:<\/p>\n<p><span style=\"color: #0000ff;\"> watch -n10 sh sysinfo.sh\u00a0<\/span><\/p>\n<p>to re-write the file every 10 secs...to e.g.:<\/p>\n<p><span style=\"color: #0000ff;\">mkdir\u00a0\/var\/www\/sysinfo<\/span><\/p>\n<p><span style=\"color: #0000ff;\">chown -R www-data:root \/var\/www\/sysinfo<\/span><\/p>\n<p>change this to:<\/p>\n<p><span style=\"color: #ff0000;\">\u00a0interactive=<\/span><br \/>\n<span style=\"color: #ff0000;\">filename=\/var\/www\/sysinfo\/sysinfo_page.html<\/span><\/p>\n<p>Add another alias to the apache default.000:<\/p>\n<p><span style=\"color: #ff0000;\">&lt;VirtualHost&gt;<\/span><\/p>\n<p><span style=\"color: #ff0000;\">Alias \/sysinfo \/var\/www\/sysinfo\/sysinfo_page.html<\/span><br \/>\n<span style=\"color: #ff0000;\"> &lt;Directory \/var\/www\/sysinfo&gt;<\/span><br \/>\n<span style=\"color: #ff0000;\"> AuthType basic<\/span><br \/>\n<span style=\"color: #ff0000;\"> AuthName \"stevee\"<\/span><br \/>\n<span style=\"color: #ff0000;\"> AuthUserFile \/etc\/apache2\/users.basic<\/span><br \/>\n<span style=\"color: #ff0000;\"> Require valid-user<\/span><br \/>\n<span style=\"color: #ff0000;\"> &lt;\/Directory&gt;<\/span><br \/>\n<span style=\"color: #ff0000;\">&lt;\/VirtualHost&gt;<\/span><\/p>\n<p>If I have lost you, it's because I'm adding to this Post 2 years later, so read the WEBDAV Post if the above Alias section is confusing...anyway..still won't refresh...only with F5. I guess if you are just occasionally monitoring the server you could set a root cron job every hour...? You can also look at colourising the headings e.g. \"&lt;font color=red&gt;System release info&lt;\/font&gt;&lt;\/h2&gt;\"<\/p>\n<p><a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/sysinfocolor.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3919\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/uploads\/2014\/04\/sysinfocolor.png\" alt=\"sysinfocolor.png\" width=\"1366\" height=\"768\" \/><\/a><\/p>\n<p>Another little range addition as a \/dev[x-x] catchall for any PC as if not present it is ignored with STDERR from going to the page:<\/p>\n<p><span style=\"color: #0000ff;\">sudo hddtemp \/dev\/sd<strong>[a-h]<\/strong><\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sda: ST3160212ACE: 32\u00b0C<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sdb: Generic USB SD Reader: S.M.A.R.T. not available<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sdc: Generic USB CF Reader: S.M.A.R.T. not available<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sdd: Generic USB SM Reader: S.M.A.R.T. not available<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sde: Generic USB MS Reader: S.M.A.R.T. not available<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sdf: WDC WD3200AAKS-75VYA0: 41\u00b0C<\/span><br \/>\n<span style=\"color: #ff0000;\">\/dev\/sdg: ST3500312CS: 36\u00b0C<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_319\" class=\"pvc_stats all  \" data-element-id=\"319\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>After reading a lot of William Shott\u00b4s free TLCL.pdf here: TLCL-13.07.pdf I finally found a working (but incomplete) version of the script that produces an html page of the system status for the parameters he programmed in this BASH script lesson from his book and blog page here: https:\/\/linuxcommand.org\/lc3_wss0120.php It looks like this: The slightly <a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/william-shotts-sysinfo-html-creator-script\/\" class=\"more-link\">...<span class=\"screen-reader-text\">\u00a0 William Shotts SysInfo.html Creator Script<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"a3_pvc":{"activated":true,"total_views":3,"today_views":0},"_links":{"self":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/comments?post=319"}],"version-history":[{"count":1,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":10604,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/319\/revisions\/10604"}],"wp:attachment":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/media?parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/categories?post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/tags?post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}