<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://reboil.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Baltakatei</id>
	<title>Reboil - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://reboil.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Baltakatei"/>
	<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/Special:Contributions/Baltakatei"/>
	<updated>2026-06-10T12:21:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.13</generator>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=2026-06&amp;diff=198211</id>
		<title>2026-06</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=2026-06&amp;diff=198211"/>
		<updated>2026-06-09T22:29:40Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: /* 2026-06-09 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Journal for [[2026]]-06. Preceded by [[2026-05]]. Followed by [[2026-07]]. &lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
&lt;br /&gt;
==2026-06-01==&lt;br /&gt;
2026-W23-1, 2026-152, Mon&lt;br /&gt;
&lt;br /&gt;
==2026-06-02==&lt;br /&gt;
2026-W23-2, 2026-153, Tue&lt;br /&gt;
&lt;br /&gt;
==2026-06-03==&lt;br /&gt;
2026-W23-3, 2026-154, Wed&lt;br /&gt;
&lt;br /&gt;
==2026-06-04==&lt;br /&gt;
2026-W23-4, 2026-155, Thu&lt;br /&gt;
&lt;br /&gt;
==2026-06-05==&lt;br /&gt;
2026-W23-5, 2026-156, Fri&lt;br /&gt;
&lt;br /&gt;
==2026-06-06==&lt;br /&gt;
2026-W23-6, 2026-157, Sat&lt;br /&gt;
&lt;br /&gt;
==2026-06-07==&lt;br /&gt;
2026-W23-7, 2026-158, Sun&lt;br /&gt;
&lt;br /&gt;
==2026-06-08==&lt;br /&gt;
2026-W24-1, 2026-159, Mon&lt;br /&gt;
&lt;br /&gt;
==2026-06-09==&lt;br /&gt;
2026-W24-2, 2026-160, Tue&lt;br /&gt;
&lt;br /&gt;
{{jel|tz=America/Los_Angeles}} Created [[:Template:je]] and [[:Template:jel]] for facilitating journal entry.&lt;br /&gt;
&lt;br /&gt;
==2026-06-10==&lt;br /&gt;
2026-W24-3, 2026-161, Wed&lt;br /&gt;
&lt;br /&gt;
==2026-06-11==&lt;br /&gt;
2026-W24-4, 2026-162, Thu&lt;br /&gt;
&lt;br /&gt;
==2026-06-12==&lt;br /&gt;
2026-W24-5, 2026-163, Fri&lt;br /&gt;
&lt;br /&gt;
==2026-06-13==&lt;br /&gt;
2026-W24-6, 2026-164, Sat&lt;br /&gt;
&lt;br /&gt;
==2026-06-14==&lt;br /&gt;
2026-W24-7, 2026-165, Sun&lt;br /&gt;
&lt;br /&gt;
==2026-06-15==&lt;br /&gt;
2026-W25-1, 2026-166, Mon&lt;br /&gt;
&lt;br /&gt;
==2026-06-16==&lt;br /&gt;
2026-W25-2, 2026-167, Tue&lt;br /&gt;
&lt;br /&gt;
==2026-06-17==&lt;br /&gt;
2026-W25-3, 2026-168, Wed&lt;br /&gt;
&lt;br /&gt;
==2026-06-18==&lt;br /&gt;
2026-W25-4, 2026-169, Thu&lt;br /&gt;
&lt;br /&gt;
==2026-06-19==&lt;br /&gt;
2026-W25-5, 2026-170, Fri&lt;br /&gt;
&lt;br /&gt;
==2026-06-20==&lt;br /&gt;
2026-W25-6, 2026-171, Sat&lt;br /&gt;
&lt;br /&gt;
==2026-06-21==&lt;br /&gt;
2026-W25-7, 2026-172, Sun&lt;br /&gt;
&lt;br /&gt;
==2026-06-22==&lt;br /&gt;
2026-W26-1, 2026-173, Mon&lt;br /&gt;
&lt;br /&gt;
==2026-06-23==&lt;br /&gt;
2026-W26-2, 2026-174, Tue&lt;br /&gt;
&lt;br /&gt;
==2026-06-24==&lt;br /&gt;
2026-W26-3, 2026-175, Wed&lt;br /&gt;
&lt;br /&gt;
==2026-06-25==&lt;br /&gt;
2026-W26-4, 2026-176, Thu&lt;br /&gt;
&lt;br /&gt;
==2026-06-26==&lt;br /&gt;
2026-W26-5, 2026-177, Fri&lt;br /&gt;
&lt;br /&gt;
==2026-06-27==&lt;br /&gt;
2026-W26-6, 2026-178, Sat&lt;br /&gt;
&lt;br /&gt;
==2026-06-28==&lt;br /&gt;
2026-W26-7, 2026-179, Sun&lt;br /&gt;
&lt;br /&gt;
==2026-06-29==&lt;br /&gt;
2026-W27-1, 2026-180, Mon&lt;br /&gt;
&lt;br /&gt;
==2026-06-30==&lt;br /&gt;
2026-W27-2, 2026-181, Tue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==Ext. Links==&lt;br /&gt;
&lt;br /&gt;
[[Category:Journals by month]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Template:Jel&amp;diff=198210</id>
		<title>Template:Jel</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Template:Jel&amp;diff=198210"/>
		<updated>2026-06-09T22:28:28Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: v1.0.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This template renders a journal-entry line from an ISO 8601 local timestamp. It is normally written by [[:Template:je]] substitution, not by hand.&lt;br /&gt;
&lt;br /&gt;
==Template stats==&lt;br /&gt;
* Name: Template:jel&lt;br /&gt;
* Date created: [[2026-06-09]]T21:38+00&lt;br /&gt;
* Date modified: [[2026-06-09]]T22:12+00&lt;br /&gt;
* Version: 1.0.3&lt;br /&gt;
* Depends:&lt;br /&gt;
** [https://www.mediawiki.org/wiki/Extension:ParserFunctions Extension:ParserFunctions]&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{jel|t=2026-07-05T14:19:19-07|1=Got onto plane at PDX.}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
renders as:&lt;br /&gt;
* '''14:19-07 (21:19+00)''': Got onto plane at PDX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; must be fixed-width ISO 8601 with seconds: &amp;lt;code&amp;gt;YYYY-MM-DDTHH:MM:SS±hh&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;±hh:mm&amp;lt;/code&amp;gt;. An invalid &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; renders the raw value as an inline error marker.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[:Template:je]]&lt;br /&gt;
&lt;br /&gt;
TEMPLATE BEGINS BELOW:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;* '''&amp;lt;span title=&amp;quot;{{{t|}}}&amp;quot; style=&amp;quot;cursor:help; border-bottom:1px dotted;&amp;quot;&amp;gt;{{#iferror:{{#time:H:i|{{padleft:|16|{{{t|}}}}}}}{{#ifexpr:{{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}&amp;lt;0|-|+}}{{#ifexpr:(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}) mod 3600)&amp;gt;0|{{padleft:{{#expr:floor(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}})/3600)}}|2|0}}:{{padleft:{{#expr:floor((abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}) mod 3600)/60)}}|2|0}}|{{padleft:{{#expr:floor(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}})/3600)}}|2|0}}}} ({{#time:H:i|@{{#time:U|{{{t|}}}}}}}+00)|''t={{{t|}}}?''}}&amp;lt;/span&amp;gt;''': {{{1|}}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Baltakatei templates]]&lt;br /&gt;
[[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Template:Jel&amp;diff=198209</id>
		<title>Template:Jel</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Template:Jel&amp;diff=198209"/>
		<updated>2026-06-09T22:08:59Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot;This template renders a journal-entry line from an ISO 8601 local timestamp. It is normally written by :Template:je substitution, not by hand.  ==Template stats== * Name:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This template renders a journal-entry line from an ISO 8601 local timestamp. It is normally written by [[:Template:je]] substitution, not by hand.&lt;br /&gt;
&lt;br /&gt;
==Template stats==&lt;br /&gt;
* Name: Template:jel&lt;br /&gt;
* Date created: [[2026-06-09]]T21:38+00&lt;br /&gt;
* Date modified: [[2026-06-09]]T21:55+00&lt;br /&gt;
* Version: 1.0.2&lt;br /&gt;
* Depends:&lt;br /&gt;
** [https://www.mediawiki.org/wiki/Extension:ParserFunctions Extension:ParserFunctions]&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{jel|t=2026-07-05T14:19:19-07|1=Got onto plane at PDX.}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
renders as:&lt;br /&gt;
* '''14:19-07 (21:19+00)''': Got onto plane at PDX.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; must be fixed-width ISO 8601 with seconds: &amp;lt;code&amp;gt;YYYY-MM-DDTHH:MM:SS±hh&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;±hh:mm&amp;lt;/code&amp;gt;. An invalid &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; renders the raw value as an inline error marker.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[:Template:je]]&lt;br /&gt;
&lt;br /&gt;
TEMPLATE BEGINS BELOW:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;* '''{{#iferror:{{#time:H:i|{{padleft:|16|{{{t|}}}}}}}{{#ifexpr:{{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}&amp;lt;0|-|+}}{{#ifexpr:(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}) mod 3600)&amp;gt;0|{{padleft:{{#expr:floor(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}})/3600)}}|2|0}}:{{padleft:{{#expr:floor((abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}}) mod 3600)/60)}}|2|0}}|{{padleft:{{#expr:floor(abs({{#time:U|{{padleft:|19|{{{t|}}}}}}}-{{#time:U|{{{t|}}}}})/3600)}}|2|0}}}} ({{#time:H:i|@{{#time:U|{{{t|}}}}}}}+00)|''t={{{t|}}}?''}}''': {{{1|}}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Baltakatei templates]]&lt;br /&gt;
[[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Template:Je&amp;diff=198208</id>
		<title>Template:Je</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Template:Je&amp;diff=198208"/>
		<updated>2026-06-09T22:08:52Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot;This template bakes a journal-entry line into wikicode as a :Template:jel call carrying a full ISO 8601 local timestamp. Use only via substitution: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:j...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This template bakes a journal-entry line into wikicode as a [[:Template:jel]] call carrying a full ISO 8601 local timestamp. Use only via substitution: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:je|tz=America/Los_Angeles|1=foo}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Template stats==&lt;br /&gt;
* Name: Template:je&lt;br /&gt;
* Date created: [[2026-06-09]]T20:14+00&lt;br /&gt;
* Date modified: [[2026-06-09]]T21:30+00&lt;br /&gt;
* Version: 3.0.2&lt;br /&gt;
* Depends:&lt;br /&gt;
** [https://www.mediawiki.org/wiki/Extension:ParserFunctions Extension:ParserFunctions]&lt;br /&gt;
** [[:Template:jel]] v1.0.2&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:je|tz=America/Los_Angeles|1=Got onto plane at PDX.}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
saves, e.g.:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{jel|t=2026-07-05T14:19:19-07|1=Got onto plane at PDX.}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt; accepts PHP timezone identifiers ([https://www.php.net/timezones list]). If omitted or invalid, &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; falls back to UTC (&amp;lt;code&amp;gt;+00&amp;lt;/code&amp;gt;). Do not pass relative offsets like &amp;lt;code&amp;gt;-7 hours&amp;lt;/code&amp;gt;; the inversion arithmetic assumes identifier re-tagging semantics and a relative offset will bake the wrong sign.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[:Template:jel]]&lt;br /&gt;
&lt;br /&gt;
TEMPLATE BEGINS BELOW:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{jel|t={{safesubst:&amp;lt;noinclude /&amp;gt;#iferror:{{safesubst:&amp;lt;noinclude /&amp;gt;#time:Y-m-d\TH:i:s|@{{safesubst:&amp;lt;noinclude /&amp;gt;#expr:{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}+(({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900}}}}{{safesubst:&amp;lt;noinclude /&amp;gt;#ifexpr:(({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900&amp;lt;0|-|+}}{{safesubst:&amp;lt;noinclude /&amp;gt;#ifexpr:(abs((({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900) mod 3600)&amp;gt;0|{{safesubst:&amp;lt;noinclude /&amp;gt;padleft:{{safesubst:&amp;lt;noinclude /&amp;gt;#expr:floor(abs((({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900)/3600)}}|2|0}}:{{safesubst:&amp;lt;noinclude /&amp;gt;padleft:{{safesubst:&amp;lt;noinclude /&amp;gt;#expr:floor((abs((({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900) mod 3600)/60)}}|2|0}}|{{safesubst:&amp;lt;noinclude /&amp;gt;padleft:{{safesubst:&amp;lt;noinclude /&amp;gt;#expr:floor(abs((({{safesubst:&amp;lt;noinclude /&amp;gt;#time:U}}-{{safesubst:&amp;lt;noinclude /&amp;gt;#time:U|now {{{tz|UTC}}}}})/900 round 0)*900)/3600)}}|2|0}}}}|{{safesubst:&amp;lt;noinclude /&amp;gt;#time:Y-m-d\TH:i:s}}+00}}|1={{{1|}}}}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Baltakatei templates]]&lt;br /&gt;
[[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Cryptonomicon&amp;diff=198207</id>
		<title>Cryptonomicon</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Cryptonomicon&amp;diff=198207"/>
		<updated>2026-06-01T19:50:31Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Cryptonomicon''' is a 1999 speculative history novel by Neal Stephenson that discusses cryptography in the context of World War II and late 20th cent...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Cryptonomicon''' is a [[1999]] [[speculative history]] novel by [[Neal Stephenson]] that discusses [[cryptography]] in the context of [[World War II]] and late [[20th century]] economics.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Neal Stephenson]]&lt;br /&gt;
* Publication date: [[1999]]&lt;br /&gt;
&lt;br /&gt;
==Quotes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The room contains a few dozen living human bodies, each one a big sack of guts and fluids so highly compressed that it will squirt for a few yards when pierced. Each one is built around an armature of 206 bones connected to each other by notoriously fault-prone joints that are given to obnoxious creaking, grinding, and popping noises when they are in other than pristine condition. This structure is draped with throbbing steak, inflated with clenching air sacks, and pierced by a Gordian sewer filled with burbling acid and compressed gas and squirt with vile enzymes and solvents produced by the many dark, gamy nuggets of genetically programmed meat strung along its length. Slugs of dissolving food are forced down this sloppy labyrinth by serialized convulsions, decaying into gas, liquid, and solid matter which must all be regularly vented to the outside world lest the owner go toxic and drop dead. Spherical, gel-packed cameras swivel in mucus-greased ball joints. Infinite phalanxes of cilia beat back invading particles, encapsulate them in goo for later disposal. In each body a centrally located muscle flails away at an eternal, circulating torrent of pressurized gravy. And yet, despite all of this, not one of these bodies makes a single sound at any time during the sultan’s speech. It is a marvel that can only be explained by the power of brain over body, and, in turn, by the power of cultural conditioning over the brain.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=The_Expanse_(novel_series)&amp;diff=198206</id>
		<title>The Expanse (novel series)</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=The_Expanse_(novel_series)&amp;diff=198206"/>
		<updated>2026-05-14T23:13:29Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''The Expanse''' series is a set of science fiction books written under the pen name James S. A. Corey.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PA...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''The Expanse''' series is a set of [[science fiction]] books written under the pen name [[James S. A. Corey]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Titles==&lt;br /&gt;
* ''[[Leviathan Wakes]]'' (2011)&lt;br /&gt;
* ''[[Caliban's War]]'' (2012)&lt;br /&gt;
* ''[[Abbadon's Gate]]'' (2013)&lt;br /&gt;
* ''[[Cibola Burn]]'' (2014)&lt;br /&gt;
* ''[[Nemesis Games]]'' (2015)&lt;br /&gt;
* ''[[Babylon's Ashes]]'' (2016)&lt;br /&gt;
* ''[[Persepolis Rising]]'' (2017)&lt;br /&gt;
* ''[[Tiamat's Wrath]]'' (2019)&lt;br /&gt;
* ''[[Leviathan Falls]]'' (2021)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Mediawiki_notes&amp;diff=198205</id>
		<title>Mediawiki notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Mediawiki_notes&amp;diff=198205"/>
		<updated>2026-05-13T05:18:31Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: add command for exporting current XML snapshot of pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page contains notes for using [[Mediawiki]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==[[Emacs]] functions==&lt;br /&gt;
Name link to a subpage after subpage basename. (&amp;lt;code&amp;gt;[[../Chapter 1]]&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;[[../Chapter 1|Chapter 1]]&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
/\(.+\)]]&lt;br /&gt;
/\1|\1]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export/Import==&lt;br /&gt;
===Exporting===&lt;br /&gt;
To export the wikicode of a given article, one heavyweight method involves using the &amp;lt;code&amp;gt;maintenance/dumpBackup.php&amp;lt;/code&amp;gt; script to export an [[XML]] version of the target page, then parsing of the XML file with some program like [[grep]].&amp;lt;ref name=&amp;quot;mw_20230226_dumpbackup&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Manual:DumpBackup.php Manual:dumpBackup.php]”. ([[2023-02-26]]). ''mediawiki.org''. Accessed [[2023-04-13]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Export an XML file containing the current state of a wiki into the user's &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
 php /var/lib/mediawiki/maintenance/run.php dumpBackup --current --filter=namespace:0 | xz -z &amp;gt; ~/my_wiki.xml.tar.xz&lt;br /&gt;
&lt;br /&gt;
A lightweight method for exporting wikicode of a single article involves using the Mediawiki Revisions API&amp;lt;ref name=&amp;quot;mw_20220720_apirevisions&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/API:Revisions API:Revisions]”. ([[2022-07-20]]). ''mediawiki.org''. Accessed [[2023-04-13]].&amp;lt;/ref&amp;gt; Command line tools such as [[curl]] may be used to authenticate via username an dpassword in order to obtain a session cookie; then the cookie may be used to authenticate an [[HTTP]] ''GET'' request requesting from a Mediawiki instance the wikicode contents of a single page.&lt;br /&gt;
&lt;br /&gt;
: An unverified [[ChatGPT-4]] procedure is described below;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
If your MediaWiki instance requires authentication, you can use the API with login credentials to fetch the wikicode of a page. You'll need to perform a login request to obtain a login token, then use that token in a second request to complete the login process. Finally, you can use the obtained session cookies to access the content of the page with authentication.&lt;br /&gt;
&lt;br /&gt;
Here's an example using curl to perform these steps:&lt;br /&gt;
&lt;br /&gt;
1. Get a login token:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;pre style=&amp;quot;white-space: pre;&amp;gt;$ curl -c cookies.txt &amp;quot;https://your-wiki-url.example.org/w/api.php?action=query&amp;amp;meta=tokens&amp;amp;type=login&amp;amp;format=json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Replace your-wiki-url.example.org with your wiki's domain. The cookies.txt file is used to store the session cookies.&lt;br /&gt;
&lt;br /&gt;
2. Extract the login token from the JSON response:&lt;br /&gt;
&lt;br /&gt;
: You can use a tool like jq to extract the login token from the JSON response:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;pre style=&amp;quot;white-space: pre;&amp;gt;$ login_token=$(curl -c cookies.txt &amp;quot;https://your-wiki-url.example.org/w/api.php?action=query&amp;amp;meta=tokens&amp;amp;type=login&amp;amp;format=json&amp;quot; | jq -r '.query.tokens.logintoken')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Log in using your username, password, and the obtained login token:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;pre style=&amp;quot;white-space: pre;&amp;gt;$ curl -b cookies.txt -c cookies.txt -d &amp;quot;action=clientlogin&amp;amp;username=YOUR_USERNAME&amp;amp;password=YOUR_PASSWORD&amp;amp;loginreturnurl=http://your-wiki-url.example.org/&amp;amp;logintoken=$login_token&amp;amp;format=json&amp;quot; &amp;quot;https://your-wiki-url.example.org/w/api.php&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Replace YOUR_USERNAME and YOUR_PASSWORD with your MediaWiki account's username and password.&lt;br /&gt;
&lt;br /&gt;
4. Fetch the wikicode of a page with authentication:&lt;br /&gt;
&lt;br /&gt;
: Use the session cookies stored in cookies.txt to access the content of the page:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;pre style=&amp;quot;white-space: pre;&amp;gt;$ curl -b cookies.txt &amp;quot;https://your-wiki-url.example.org/w/api.php?action=query&amp;amp;prop=revisions&amp;amp;titles=Example_Page&amp;amp;rvprop=content&amp;amp;format=json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Extract the wikicode content from the JSON response:&lt;br /&gt;
&lt;br /&gt;
: As before, you can use a tool like jq to extract the wikicode from the JSON response:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;pre style=&amp;quot;white-space: pre;&amp;gt;$ curl -b cookies.txt &amp;quot;https://your-wiki-url.example.org/w/api.php?action=query&amp;amp;prop=revisions&amp;amp;titles=Example_Page&amp;amp;rvprop=content&amp;amp;format=json&amp;quot; | jq -r '.query.pages[].revisions[0][&amp;quot;*&amp;quot;]' &amp;gt; example_page_wikicode.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This process allows you to authenticate with your MediaWiki instance and fetch the wikicode of a page, which can then be processed using your external script. After editing, you can import the modified content back into your MediaWiki installation using the API or other methods, like the importTextFiles.php script mentioned earlier.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Importing===&lt;br /&gt;
Import text files (see [[2022-09-01]] example).&amp;lt;ref name=&amp;quot;mw_20210503_importtextfiles&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Manual:ImportTextFiles.php Manual:importTextFiles.php]”. ([[2021-05-03]]). ''mediawiki.com''. Accessed [[2023-04-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ cd /var/lib/mediawiki/maintenance  # NOTE: May need to be `root` or `www-data`&lt;br /&gt;
 $ find ./wikicode/ -type f | parallel php importTextFiles.php -u DebianUser --bot '{}'&lt;br /&gt;
&lt;br /&gt;
: Note: do not use [[Combining character|combining]] [[diacritical marks]] in article names. For example, use “á” (U+00E1) instead of “á” (U+0061 U+0301).&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
===Labeled Section Transclusion===&lt;br /&gt;
Mark a selection for transclusion.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;section begin=&amp;quot;chapter1&amp;quot; /&amp;gt;this is a chapter 1&amp;lt;section end=&amp;quot;chapter1&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transclude a marked selection.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{#lst:articleX|chapter1}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transclude a section by section title.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{#lsth:articleX|sectionX}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transclude a marked selection in a subpage.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{#lst:{{PAGENAME}}/subpageX|chapter1}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transclude a section by section title in a subpage.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{#lsth:{{PAGENAME}}/subpageX|sectionX}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Formatting==&lt;br /&gt;
See the [[Mediawiki]] reference pages:&lt;br /&gt;
* https://www.mediawiki.org/wiki/Help:Formatting&lt;br /&gt;
* https://en.wikipedia.org/wiki/Help:Advanced_text_formatting&lt;br /&gt;
&lt;br /&gt;
==Small-caps==&lt;br /&gt;
Basic.{{bkc|[[2025-03-19]]: See [https://www.mediawiki.org/wiki/Help:Wikitext_examples link]. }}&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;John Doe&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;John Doe&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combine with other &amp;lt;code&amp;gt;&amp;amp;lt;div&amp;amp;gt;&amp;lt;/code&amp;gt; styles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-variant:small-caps; text-align: right;&amp;quot;&amp;gt;John Doe&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-variant:small-caps; text-align: right;&amp;quot;&amp;gt;John Doe&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Collapsible elements===&lt;br /&gt;
A simple collapsible text box.&amp;lt;ref group=cmt&amp;gt;{{bk}}: [[2024-07-07]]: See [https://www.mediawiki.org/wiki/Manual:Collapsible_elements#Simple link]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible&amp;quot; style=&amp;quot;width:400px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
This text is collapsible. {{Lorem}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed-width===&lt;br /&gt;
Make short strings fixed-width with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tags. For example, &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; becomes:&lt;br /&gt;
: &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make glyphs in multiple lines fixed-width by inserting a single space before each line.&lt;br /&gt;
 ....o.......o.......o....&lt;br /&gt;
 ..o...o...o...o...o...o..&lt;br /&gt;
 o.......o.......o.......o&lt;br /&gt;
 ..o...o...o...o...o...o..&lt;br /&gt;
 ....o.......o.......o....&lt;br /&gt;
&lt;br /&gt;
Disable wrap of fixed-width lines via &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;foo&amp;lt;/pre&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tags.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;===================================================================================================================================&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fonts===&lt;br /&gt;
For SVG fonts supported on [[Wikimedia Commons]] servers, see [https://commons.wikimedia.org/wiki/Help:SVG/wuu#Fonts,_text this page].&lt;br /&gt;
&lt;br /&gt;
Increase size with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tags.&lt;br /&gt;
: &amp;lt;nowiki&amp;gt;&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;Ł&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:: Renders as: &amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;Ł&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Headings===&lt;br /&gt;
====Table of Contents====&lt;br /&gt;
Inhibit the table of contents section by inserting &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;__NOTOC__&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; anywhere on the page.&amp;lt;ref name=&amp;quot;mw_2023_toc&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Manual:Table_of_contents Manual:Table of contents]”.  (n.d.).  ''[[mediawiki.org]]''.  Accessed [[2023-07-19]].  [https://web.archive.org/web/20230624130917/https://www.mediawiki.org/wiki/Manual:Table_of_contents Archived] on [[2023-06-24]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manually place the table of contents by inserting &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;__TOC__&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; in the desired location on the page.&amp;lt;ref name=&amp;quot;mw_2023_toc&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Force the creation of a table of contents despite a low count of headings by inserting &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;__FORCETOC__&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;mw_2023_toc&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HTML===&lt;br /&gt;
''See [[HTML notes]]''&lt;br /&gt;
&lt;br /&gt;
Since Mediawiki is based on [[HTML]], some characters may not appear correctly if pasted directly into wikicode. [[Ampersand]] (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) is one of those.&amp;lt;ref name=&amp;quot;whatwg_20230720_htmlnamedcharrefs&amp;quot;&amp;gt;“[https://html.spec.whatwg.org/multipage/named-characters.html Named character references]”.  ([[2023-07-20]]).  ''[[WHATWG]]''.  Accessed [[2023-07-23]].  [https://web.archive.org/web/20230717122858/https://html.spec.whatwg.org/multipage/named-characters.html Archived] from the original on [[2023-07-17]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To insert a literal ampersand, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;amp;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (ampersand, latin small letter a, latin small letter m, latin small letter p, semicolon).&lt;br /&gt;
&lt;br /&gt;
To insert literal less-than and greater-than symbols, (such as within a &amp;lt;code&amp;gt;&amp;amp;lt;pre&amp;amp;gt;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;amp;lt;code&amp;amp;gt;&amp;lt;/code&amp;gt; tag), use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;lt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
To insert square brackets, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;lbrack;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;rbrack;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;#91;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;#93;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To insert a literal vertical bar, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;amp;verbar;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;&amp;amp;verbar;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;lt;nowiki&amp;amp;gt;|&amp;amp;lt;/nowiki&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; also works.&lt;br /&gt;
&lt;br /&gt;
To insert an anchor tag, use [[:Template:anchor]] or &amp;lt;code&amp;gt;&amp;amp;lt;span id=&amp;quot;NameOfAnchorHere&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;/code&amp;gt; (e.g. So tacking &amp;lt;code&amp;gt;#NameOfAnchorHere&amp;lt;/code&amp;gt; to the end of a URL jumps a web browser to the anchor tag.).&lt;br /&gt;
&lt;br /&gt;
===Lists===&lt;br /&gt;
Create nested lists with different format&amp;lt;ref group=fn&amp;gt;See https://www.mediawiki.org/wiki/Help:Lists#Per_list .&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; By the law of force&lt;br /&gt;
  &amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt; By surrender or capture in war &amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt; By being the victim of raiding or kidnapping &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
 &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; As legal punishment for crimes (including debt) &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Through paternal authority (a father’s sale of his children) &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Through the voluntary sale of one’s self4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ordered lists can have custom numberings assigned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Part 1&lt;br /&gt;
    &amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Satu&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Dua&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Tiga&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;  &lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Part 2&lt;br /&gt;
    &amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Empat&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;    &lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This renders as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Part 1&lt;br /&gt;
    &amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Satu&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Dua&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Tiga&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;  &lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Part 2&lt;br /&gt;
    &amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Empat&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;    &lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create multiple columns of a list.&amp;lt;ref name=&amp;quot;mw_20230325_multicolumnlist&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Help:Lists#Multi-column_lists ]”.  ([[2023-03-25]]).  ''[[mediawiki.org]]''.  Accessed [[2023-07-16]].  [https://web.archive.org/web/20230705063041/https://www.mediawiki.org/wiki/Help:Lists#Multi-column_lists Archived] from the original on [[2023-07-05]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;amp;gt;&lt;br /&gt;
 * apple&lt;br /&gt;
 * carpet&lt;br /&gt;
 * geography&lt;br /&gt;
 * mountain&lt;br /&gt;
 * nowhere&lt;br /&gt;
 * postage&lt;br /&gt;
 * ragged&lt;br /&gt;
 * toast&lt;br /&gt;
 &amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
: yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* apple&lt;br /&gt;
* carpet&lt;br /&gt;
* geography&lt;br /&gt;
* mountain&lt;br /&gt;
* nowhere&lt;br /&gt;
* postage&lt;br /&gt;
* ragged&lt;br /&gt;
* toast&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unicode===&lt;br /&gt;
''See https://meta.wikimedia.org/wiki/Help:Special_characters ''&lt;br /&gt;
&lt;br /&gt;
==Tables==&lt;br /&gt;
A basic table ([https://www.mediawiki.org/wiki/Help:Tables ref]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Header text !! Header text !! Header text&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A basic sortable table ([https://www.mediawiki.org/wiki/Help:Tables ref]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Header text !! Header text !! Header text&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A table with padding.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | '''''AGLAIA''''' || style=&amp;quot;padding: 10px;&amp;quot; | '''''BRILLIANCE'''''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | '''''EUPHROSYNE''''' || style=&amp;quot;padding: 10px;&amp;quot; | '''''JOY'''''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | '''''THALIA''''' || style=&amp;quot;padding: 10px;&amp;quot; | '''''BLOOM'''''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A collapsed table. ([https://www.mediawiki.org/wiki/Manual:Collapsible_elements ref])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pub. date&lt;br /&gt;
! Title&lt;br /&gt;
! Authors&lt;br /&gt;
! ISBN&lt;br /&gt;
|-&lt;br /&gt;
| [[2021-01-20]]&lt;br /&gt;
| [[#Selfcare]]&lt;br /&gt;
| [[Annalee Newitz]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A table with cells with different alignments.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:left;&amp;quot; | A&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:center;&amp;quot; | B&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:right;&amp;quot; | C&lt;br /&gt;
|- style=&amp;quot;vertical-align:middle;&amp;quot;&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:left;&amp;quot; | D&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:center;&amp;quot; | E&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:right;&amp;quot; | F&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:left;&amp;quot; | G&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:center;&amp;quot; | H&lt;br /&gt;
| style=&amp;quot;height:100px; width:100px; text-align:right;&amp;quot; | I&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A table with irregular merged rows and columns.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Table with merged rows and columns&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c1&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c2&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c3&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | r1,c4-5&lt;br /&gt;
|-&lt;br /&gt;
! r2,c4&lt;br /&gt;
! r2,c5&lt;br /&gt;
|-&lt;br /&gt;
| r3,c1&lt;br /&gt;
| r3,c2&lt;br /&gt;
| r3,c3&lt;br /&gt;
| r3,c4&lt;br /&gt;
| r3,c5&lt;br /&gt;
|-&lt;br /&gt;
| r4,c1&lt;br /&gt;
| r4,c2&lt;br /&gt;
| r4,c3&lt;br /&gt;
| r4,c4&lt;br /&gt;
| r4,c5&lt;br /&gt;
|-&lt;br /&gt;
| r5,c1&lt;br /&gt;
| r5,c2&lt;br /&gt;
| r5,c3&lt;br /&gt;
| r5,c4&lt;br /&gt;
| r5,c5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Table with merged rows and columns&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c1&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c2&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | r1-2,c3&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | r1,c4-5&lt;br /&gt;
|-&lt;br /&gt;
! r2,c4&lt;br /&gt;
! r2,c5&lt;br /&gt;
|-&lt;br /&gt;
| r3,c1&lt;br /&gt;
| r3,c2&lt;br /&gt;
| r3,c3&lt;br /&gt;
| r3,c4&lt;br /&gt;
| r3,c5&lt;br /&gt;
|-&lt;br /&gt;
| r4,c1&lt;br /&gt;
| r4,c2&lt;br /&gt;
| r4,c3&lt;br /&gt;
| r4,c4&lt;br /&gt;
| r4,c5&lt;br /&gt;
|-&lt;br /&gt;
| r5,c1&lt;br /&gt;
| r5,c2&lt;br /&gt;
| r5,c3&lt;br /&gt;
| r5,c4&lt;br /&gt;
| r5,c5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Table with combined cells and columns&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ 6x6 table with irregular headers&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 colspan=2 | r1-2,c1-2&lt;br /&gt;
! colspan=4 | r1,c3-6&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 | r2,c3-4&lt;br /&gt;
! colspan=2 | r2,c5-6&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 | r3-4,c1&lt;br /&gt;
! rowspan=2 | r3-4,c2&lt;br /&gt;
! colspan=2 | r3,c3-4&lt;br /&gt;
! r3,c5&lt;br /&gt;
! r3,c6&lt;br /&gt;
|-&lt;br /&gt;
! r4,c3&lt;br /&gt;
! r4,c4&lt;br /&gt;
! r4,c5&lt;br /&gt;
! r4,c6&lt;br /&gt;
|-&lt;br /&gt;
| r5,c1&lt;br /&gt;
| r5,c2&lt;br /&gt;
| r5,c3&lt;br /&gt;
| r5,c4&lt;br /&gt;
| r5,c5&lt;br /&gt;
| r5,c6&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ 6x6 table with irregular headers&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 colspan=2 | r1-2,c1-2&lt;br /&gt;
! colspan=4 | r1,c3-6&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 | r2,c3-4&lt;br /&gt;
! colspan=2 | r2,c5-6&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 | r3-4,c1&lt;br /&gt;
! rowspan=2 | r3-4,c2&lt;br /&gt;
! colspan=2 | r3,c3-4&lt;br /&gt;
! r3,c5&lt;br /&gt;
! r3,c6&lt;br /&gt;
|-&lt;br /&gt;
! r4,c3&lt;br /&gt;
! r4,c4&lt;br /&gt;
! r4,c5&lt;br /&gt;
! r4,c6&lt;br /&gt;
|-&lt;br /&gt;
| r5,c1&lt;br /&gt;
| r5,c2&lt;br /&gt;
| r5,c3&lt;br /&gt;
| r5,c4&lt;br /&gt;
| r5,c5&lt;br /&gt;
| r5,c6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Templates==&lt;br /&gt;
===Transclusion===&lt;br /&gt;
''See https://www.mediawiki.org/wiki/Help:Transclusion''&lt;br /&gt;
&lt;br /&gt;
===Substitution===&lt;br /&gt;
''See https://www.mediawiki.org/wiki/Help:Substitution''&lt;br /&gt;
&lt;br /&gt;
Another page may be substituted into another using a one-time template syntax that replaces the template with the target page.&amp;lt;ref name=&amp;quot;mw_20220410_substitution&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Help:Substitution Help:Substitution]”. ([[2022-04-10]]). ''mediawiki.org''. Accessed [[2023-04-08]].&amp;lt;/ref&amp;gt; For example, by inserting the double curly-brace code snippet &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:FULLPAGENAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, the wikicode of the article &amp;lt;code&amp;gt;FULLPAGENAME&amp;lt;/code&amp;gt; will be inserted in place of the snippet.&lt;br /&gt;
&lt;br /&gt;
When using [[Extension:ParserFunctions]] substitutions within an [[Extension:Cite]] &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag, one must use the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#tag:…}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; pattern. See [https://www.mediawiki.org/wiki/Help:Cite#Substitution_and_embedded_parser_functions link].&lt;br /&gt;
: The following in a Mediawiki template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;ref group=cmt&amp;gt;Comment: {{{1|}}}&amp;lt;/ref&amp;gt;&amp;lt;/onlyinclude&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: should instead be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;onlyinclude&amp;gt;{{#tag:ref|Comment: {{{1|}}}|group=cmt}}&amp;lt;/onlyinclude&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
''See https://www.mediawiki.org/wiki/Manual:Upgrading''&lt;br /&gt;
&lt;br /&gt;
A mechanism for updating via a webUI exists at &amp;lt;code&amp;gt;/mw-config/&amp;lt;/code&amp;gt;. For example, if your wiki is at &amp;lt;/code&amp;gt;http://example.org/w/index.php&amp;lt;/code&amp;gt;, then navigate to &amp;lt;/code&amp;gt;http://example.org/w/mw-config/&amp;lt;/code&amp;gt;. &amp;lt;ref name=&amp;quot;mw_2023_upgrading&amp;quot;&amp;gt;“[https://www.mediawiki.org/wiki/Manual:Upgrading Manual:Upgrading]”. (n.d.). ''mediawiki.org''. Accessed [[2023-06-13]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Special pages==&lt;br /&gt;
; [[MediaWiki:Copyright]]&lt;br /&gt;
: A wiki-specific page containing copyright information to be displayed in the footer of every page. See also: https://www.mediawiki.org/wiki/Manual:$wgRightsText&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[HTML notes]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198204</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198204"/>
		<updated>2026-05-12T02:35:30Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
* Author: [[Steven Baltakatei Sandoval]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Baltakateiʼs most used command-line programs are (as of [[2026-05]]):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ {{Anchor|usage}}Baltakateiʼs CLI usage distribution&lt;br /&gt;
|-&lt;br /&gt;
! command !! count !! does what&lt;br /&gt;
|-&lt;br /&gt;
| [[#ls|ls]]&lt;br /&gt;
| 13000&lt;br /&gt;
| list directory contents&lt;br /&gt;
|-&lt;br /&gt;
| [[#cd|cd]]&lt;br /&gt;
| 9000&lt;br /&gt;
| change directory&lt;br /&gt;
|-&lt;br /&gt;
| exit&lt;br /&gt;
| 5600&lt;br /&gt;
| (built-in) close terminal window&lt;br /&gt;
|-&lt;br /&gt;
| [[#find|find]]&lt;br /&gt;
| 5100&lt;br /&gt;
| Search file system by file name, size, age, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[#emacs|emacs]]&lt;br /&gt;
| 2900&lt;br /&gt;
| Edit text files.&lt;br /&gt;
|-&lt;br /&gt;
| history&lt;br /&gt;
| 2300&lt;br /&gt;
| (built-in) View command history. Often searched via &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;$ history | grep&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[#locate|locate]]&lt;br /&gt;
| 2200&lt;br /&gt;
| Search file system by file name via daily index for speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[#cat|cat]]&lt;br /&gt;
| 2000&lt;br /&gt;
| Concatenate text files. Often with command pipe line (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cat | grep | sed&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| [[#grep|grep]]&lt;br /&gt;
| 1200&lt;br /&gt;
| Search file internals through [[regular expression]]s.&lt;br /&gt;
|-&lt;br /&gt;
| [[#mkdir|mkdir]]&lt;br /&gt;
| 1100&lt;br /&gt;
| Create directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rm|rm]]&lt;br /&gt;
| 1100&lt;br /&gt;
| Delete file or directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#man|man]]&lt;br /&gt;
| 1100&lt;br /&gt;
| View manual for a commandʼs package (e.g. &amp;lt;code&amp;gt;man grep&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| while&lt;br /&gt;
| 1000&lt;br /&gt;
| (built-in) Initiate while loop&lt;br /&gt;
|-&lt;br /&gt;
| time&lt;br /&gt;
| 900&lt;br /&gt;
| Measure time used until a command completes. (shell keyword)&lt;br /&gt;
|-&lt;br /&gt;
| [[#mv|mv]]&lt;br /&gt;
| 800&lt;br /&gt;
| Move a file or directory.&lt;br /&gt;
|-&lt;br /&gt;
| echo&lt;br /&gt;
| 700&lt;br /&gt;
| (built-in) Print text to the shell.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ps|ps]]&lt;br /&gt;
| 700&lt;br /&gt;
| List process info. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ps aux | grep bash&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#less|less]]&lt;br /&gt;
| 700&lt;br /&gt;
| Display text file or stream with scroll capability.&lt;br /&gt;
|-&lt;br /&gt;
| [[#sudo|sudo]]&lt;br /&gt;
| 600&lt;br /&gt;
| Perform next command as superuser.&lt;br /&gt;
|-&lt;br /&gt;
| [[#bash|bash]]&lt;br /&gt;
| 600&lt;br /&gt;
| Manually execute a Bash script file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#du|du]]&lt;br /&gt;
| 600&lt;br /&gt;
| Display disk usage.&lt;br /&gt;
|-&lt;br /&gt;
| [[#cp|cp]]&lt;br /&gt;
| 600&lt;br /&gt;
| Copy a file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#clear|clear]]&lt;br /&gt;
| 500&lt;br /&gt;
| Clear shell's dislayed text. Comparable to &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[#printf|printf]]&lt;br /&gt;
| 500&lt;br /&gt;
| Print text with customized format.&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| 400&lt;br /&gt;
| (built-in) Tell how text will be interpreted by shell (e.g. alias, executable)&lt;br /&gt;
|-&lt;br /&gt;
| [[#mpv|mpv]]&lt;br /&gt;
| 400&lt;br /&gt;
| Play audio or video.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rsync|rsync]]&lt;br /&gt;
| 400&lt;br /&gt;
| Move, copy, or synchronize files and/or directories.&lt;br /&gt;
|-&lt;br /&gt;
| [[BK-2020-03#bkdatev|bkdatev]]&lt;br /&gt;
| 300&lt;br /&gt;
| Display or parse date and time information for specific time zones. ([[BK-2020-03]]: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/master/user/bkdatev?ref_type=heads gitlab]).&lt;br /&gt;
|-&lt;br /&gt;
| [[#watch|watch]]&lt;br /&gt;
| 300&lt;br /&gt;
| Repeatedly perform a command and highlight changes in stdout. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;watch -d -n1 df -B1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#seq|seq]]&lt;br /&gt;
| 300&lt;br /&gt;
| Print a sequence of integer values.&lt;br /&gt;
|-&lt;br /&gt;
| [[#git|git]]&lt;br /&gt;
| 300&lt;br /&gt;
| Version control a repository of files.&lt;br /&gt;
|-&lt;br /&gt;
| for&lt;br /&gt;
| 300&lt;br /&gt;
| (built-in) Starting a loop to execute a command set repeatedly.&lt;br /&gt;
|-&lt;br /&gt;
| [[#date|date]]&lt;br /&gt;
| 300&lt;br /&gt;
| Display or parse date and time information.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rmdir|rmdir]]&lt;br /&gt;
| 300&lt;br /&gt;
| Remove an empty directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ffmpeg|ffmpeg]]&lt;br /&gt;
| 300&lt;br /&gt;
| Create or modify video file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ssh|ssh]]&lt;br /&gt;
| 200&lt;br /&gt;
| Create remote shell session.&lt;br /&gt;
|-&lt;br /&gt;
| [[#readlink|readlink]]&lt;br /&gt;
| 200&lt;br /&gt;
| Resolve a symbolic link. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;$ readlink -f some_symlink&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[#apt|apt]]&lt;br /&gt;
| 200&lt;br /&gt;
| Update or install software.&lt;br /&gt;
|-&lt;br /&gt;
| [[#jdupes|jdupes]]&lt;br /&gt;
| 200&lt;br /&gt;
| Deduplicate files.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ln|ln]]&lt;br /&gt;
| 200&lt;br /&gt;
| Create or modify symbolic links.&lt;br /&gt;
|-&lt;br /&gt;
| [[#pwd|pwd]]&lt;br /&gt;
| 200&lt;br /&gt;
| Print the shellʼs current working directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#reset|reset]]&lt;br /&gt;
| 200&lt;br /&gt;
| Reïnitialize shell display. (e.g. clear bugs from displaying raw binary data)&lt;br /&gt;
|-&lt;br /&gt;
| [[#shellcheck|shellcheck]]&lt;br /&gt;
| 200&lt;br /&gt;
| [[Lint (software)|Delint]] a shell script.&lt;br /&gt;
|-&lt;br /&gt;
| [[#chmod|chmod]]&lt;br /&gt;
| 200&lt;br /&gt;
| Modify file permissions.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ffprobe|ffprobe]]&lt;br /&gt;
| 200&lt;br /&gt;
| View audio or video file metadata.&lt;br /&gt;
|-&lt;br /&gt;
| [[#exiftool|exiftool]]&lt;br /&gt;
| 100&lt;br /&gt;
| View or modify photograph file data.&lt;br /&gt;
|-&lt;br /&gt;
| [[#file|file]]&lt;br /&gt;
| 100&lt;br /&gt;
| Classify file type. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file /bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; )&lt;br /&gt;
|-&lt;br /&gt;
| [[#top|top]]&lt;br /&gt;
| 100&lt;br /&gt;
| List processes by CPU usage and other characteristics.&lt;br /&gt;
|-&lt;br /&gt;
| [[#df|df]]&lt;br /&gt;
| 100&lt;br /&gt;
| List disk usage. (e.g. in bytes: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;df -B1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#sumdir|sumdir]]&lt;br /&gt;
| 100&lt;br /&gt;
| Generate or verify list of cryptographic digests of files. ([https://github.com/monking/shell-utilities/blob/main/sumdir monking custom script])&lt;br /&gt;
|-&lt;br /&gt;
| [[#shuf|shuf]]&lt;br /&gt;
| 100&lt;br /&gt;
| Generate random integers from &amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
=== Linux kernel stuff ===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[ansi2txt]] ===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== apt ===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
=== base64 ===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[bash]] ===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Quotation rules ====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
==== Bash input/output ====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
==== Bash job management ====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
==== Bash string manipulation ====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
==== Array manipulation ====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
==== Iteration statements ====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[bc]] ===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
=== brew ===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
=== calibredb ===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
=== cat ===&lt;br /&gt;
Concatenate file.&lt;br /&gt;
 $ cat file1.txt file2.txt&lt;br /&gt;
&lt;br /&gt;
Print contents of &amp;lt;code&amp;gt;file1.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cat file.txt&lt;br /&gt;
&lt;br /&gt;
=== cd ===&lt;br /&gt;
Change working directory to home directory.&lt;br /&gt;
 $ cd ~/&lt;br /&gt;
&lt;br /&gt;
Change working directory to parent directory.&lt;br /&gt;
 $ cd ../&lt;br /&gt;
&lt;br /&gt;
Change working directory to &amp;lt;code&amp;gt;~/Documents&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cd ~/Documents&lt;br /&gt;
&lt;br /&gt;
=== chmod ===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
=== choom ===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
=== chown ===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
=== [[chrony]] ===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
Clear terminal screen.&lt;br /&gt;
&lt;br /&gt;
 $ clear&lt;br /&gt;
&lt;br /&gt;
=== convert ===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
=== column ===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
=== cp ===&lt;br /&gt;
Copy a file or directory.&lt;br /&gt;
&lt;br /&gt;
Copy a file.&lt;br /&gt;
 $ cp some_file some_file_copy&lt;br /&gt;
&lt;br /&gt;
Copy a directory and its contents.&lt;br /&gt;
 $ cp -r some_dir some_dir_copy&lt;br /&gt;
&lt;br /&gt;
=== [[cron|crontab]] ===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cryptsetup ===&lt;br /&gt;
==== Get details on a volume encrypted with LUKS ====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
=== cut ===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
=== [[date]] ===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. [[POSIX]] seconds since [[1970-01-01]].).&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print actual seconds since [[1970-01-01]]. (requires [https://packages.debian.org/trixie/tzdata-legacy tzdata-legacy])&amp;lt;ref name=&amp;quot;ken_20160303_right-tz&amp;quot;&amp;gt;[https://kenta.blogspot.com/ Ken].  ([[2016-03-03]]).  “[https://kenta.blogspot.com/2016/03/sqfzcxay-understanding-right-time-zone.html [sqfzcxay] Understanding the &amp;quot;right&amp;quot; time zone database]”.  ''[[blogspot.com]]''.  Accessed [[2026-04-26]].  &amp;lt;/ref&amp;gt;{{bkc|[[2026-04-27]]: Getting the &amp;lt;code&amp;gt;/usr/share/zoneinfo/right/UTC&amp;lt;/code&amp;gt; may require running &amp;lt;code&amp;gt;$ sudo apt install tzdata-legacy&amp;lt;/code&amp;gt; on a [[Debian]]-based system. }}&lt;br /&gt;
 $ TZ=right/UTC date --date=&amp;quot;$(date --iso-8601=s)&amp;quot; +%s;&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch.&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
=== [[dd]] ===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
=== [[df]] ===&lt;br /&gt;
Display free disk space.&lt;br /&gt;
 $ df&lt;br /&gt;
&lt;br /&gt;
Display free disk space in bytes.&lt;br /&gt;
 $ df -B1&lt;br /&gt;
&lt;br /&gt;
Display free disk space in gigabytes (1024&amp;lt;rsup&amp;gt;3&amp;lt;/rsup&amp;gt; bytes)&lt;br /&gt;
 $ df -BG&lt;br /&gt;
 $ df -BGiB&lt;br /&gt;
&lt;br /&gt;
Display free disk space in gibibytes (1000&amp;lt;rsup&amp;gt;3&amp;lt;/rsup&amp;gt; bytes)&lt;br /&gt;
 $ df -BGB&lt;br /&gt;
 $ df -B1000000000&lt;br /&gt;
&lt;br /&gt;
=== [[du]] ===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
=== dig ===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
=== [[dpkg]] ===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
=== dpkg-reconfigure ===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
=== [[dstat]] ===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
=== [[dool]] ===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
=== [[emacs]] ===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
=== [[exiftool]] ===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
=== [[f3]] ===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
=== [[ffmpeg]] ===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;code&amp;gt;*.JPG&amp;lt;/code&amp;gt; files into time lapse at 60 frames per second (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;yuvj420p&amp;lt;/code&amp;gt; colors to reduce banding.&amp;lt;ref name=&amp;quot;yc_20190529_carmack-ffmpeg-color&amp;quot;&amp;gt;[[John Carmack]].  ([[2019-05-29]]).  “[https://news.ycombinator.com/item?id=20036710 Adventures with ffmpeg and color ranges]”.  ''[[ycombinator.com]]''.  Accessed [[2026-01-22]].  “&amp;lt;code&amp;gt;ffmpeg -i source.mp4 -c:v libx265 -pix_fmt yuvj420p dest.mp4&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;{{bkc|[[2026-01-22]]: Use &amp;lt;code&amp;gt;$ ffprobe DSC00123.JPG&amp;lt;/code&amp;gt; to find the color space of the input [[JPEG]] file. For example: &amp;lt;code&amp;gt;Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown)&amp;lt;/code&amp;gt; means &amp;lt;code&amp;gt;-pix_fmt yuvj422p&amp;lt;/code&amp;gt; should be the option provided to &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 26 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
&lt;br /&gt;
Export [[SNES]] [[SPC]] audio.&amp;lt;ref name=&amp;quot;&amp;quot;&amp;gt;[[Kaz Wolfe]].  ([[2017-03-28]]).  “[https://askubuntu.com/a/897694/ SPC to WAV command-line]”.  ''[[askubuntu.com]]''.  Accessed [[2026-04-13]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -i track1.spc track1.flac&lt;br /&gt;
&lt;br /&gt;
==== Quality of life ====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
==== Encode video ====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
==== Split a video file into roughly equal segments ====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
==== Combine video files into a single file ====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
==== Add subtitles to a video file ====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[file]] ===&lt;br /&gt;
Classify file type.&lt;br /&gt;
&lt;br /&gt;
Classify the file &amp;lt;code&amp;gt;myfile.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ file myfile.txt&lt;br /&gt;
&lt;br /&gt;
Classify the executable &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ file /bin/bash&lt;br /&gt;
 /bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f77b36371c214e11670c7d9d92727e9a49f626b, for GNU/Linux 3.2.0, stripped&lt;br /&gt;
&lt;br /&gt;
=== [[ffprobe]] ===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get bitrate in integer bytes.&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot;; -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 &lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
=== [[find]] ===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
=== [[gcc]] ===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== [[git]] ===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
=== [[gpg]] ===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
=== grep ===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
=== [[gs]] ===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[Regular Expressions]] ====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
=== [[gunzip]] ===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
=== [[gzip]] ===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
=== [[head]] ===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
=== [[iftop]] ===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
=== [[iotop]] ===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== [[ip]] ===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
=== [[ImageMagick]] ===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
=== [[jdupes]] ===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
=== [[journalctl]] ===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[less]] ===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
=== [[ln]] ===&lt;br /&gt;
Create symlink named &amp;lt;code&amp;gt;my_linked_dir&amp;lt;/code&amp;gt; to a directory at path &amp;lt;code&amp;gt;~/some/long/path/my_dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ ln -sfn ~/some/long/path/my_dir my_linked_dir&lt;br /&gt;
&lt;br /&gt;
=== [[locate]] ===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
=== [[ls]] ===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
=== [[lsof]] ===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
=== [[mail]] ===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
=== [[make]] ===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
=== man ===&lt;br /&gt;
Display command manual.&lt;br /&gt;
&lt;br /&gt;
Show [[Bash]] manual.&lt;br /&gt;
 $ man bash&lt;br /&gt;
&lt;br /&gt;
=== [[mkdir]] ===&lt;br /&gt;
Create an empty directory called &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir some_dir&lt;br /&gt;
&lt;br /&gt;
Create an empty subdirectory at &amp;lt;code&amp;gt;some/path/some_dir&amp;lt;/code&amp;gt;, creating all the parent subdirectories as well.&lt;br /&gt;
 $ mkdir -p some/path/some_dir&lt;br /&gt;
&lt;br /&gt;
: This is equivalent to:&lt;br /&gt;
 $ mkdir some&lt;br /&gt;
 $ mkdir some/path&lt;br /&gt;
 $ mkdir some/path/some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[mdadm]] ===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
=== mimetype ===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
=== mktemp ===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
=== [[mpv]] ===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
=== [[mv]] ===&lt;br /&gt;
Move a file or directory.&lt;br /&gt;
&lt;br /&gt;
Move file &amp;lt;code&amp;gt;some_file&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;, replacing &amp;lt;code&amp;gt;some_dir/some_file&amp;lt;/code&amp;gt; if it exists.&lt;br /&gt;
 $ mv some_file ./some_dir  # make sure 'some_dir' is not a file&lt;br /&gt;
&lt;br /&gt;
: Perform move without replacement and throwing error if so.&lt;br /&gt;
 $ mv -p some_file ./some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[neofetch]] ===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
=== [[nethogs]] ===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
=== [[notify-send]] ===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[openbox]] ===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
=== [[ots]] ===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp, running &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; on 1000 files at a time.&lt;br /&gt;
 $ din=&amp;quot;$(pwd)&amp;quot;; while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find &amp;quot;$din&amp;quot; -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 -L 1000 ots s&lt;br /&gt;
&lt;br /&gt;
=== [[pandoc]] ===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
=== [[par2]] ===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
=== [[GNU parallel|parallel]] ===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
=== paste ===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
=== pipx ===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
=== play ([[sox]]) ===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[ps]] ===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
=== [[pdftk]] ===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
=== [[pdftotext]] ===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
=== [[pgrep]] ===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
=== printf ===&lt;br /&gt;
==== GNU Coreutils ====&lt;br /&gt;
Print a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; character.&amp;lt;ref name=&amp;quot;so_20130221_printf-exclam&amp;quot;&amp;gt;[https://stackoverflow.com/users/465183/gilles-qu%c3%a9not Giles Quénot].  ([[2013-02-21]]).  “[https://stackoverflow.com/a/15011849 How to printf an exclamation mark in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2026-01-15]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;\041\n&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
==== C stdio.h ====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
=== [[readlink]] ===&lt;br /&gt;
Print canonical path of a file, resolving any symlinks. (Note: Specific to [[Debian]]/[[Ubuntu]]-like systems. For [[macOS]], see &amp;lt;code&amp;gt;[[realpath]]&amp;lt;/code&amp;gt; or [[homebrew]]ʼs &amp;lt;code&amp;gt;[[grealpath]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ readlink -f some_file&lt;br /&gt;
&lt;br /&gt;
=== [[reset]] ===&lt;br /&gt;
Reset terminal state.&lt;br /&gt;
 $ reset&lt;br /&gt;
&lt;br /&gt;
=== [[rev]] ===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find . -mindepth 1 -maxdepth 1 -type f | rev | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -mindepth 1 -maxdepth 1 -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the path.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # List and count unique lines.&lt;br /&gt;
  sort -hk1;           # Sort by line counts.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[rm]] ===&lt;br /&gt;
Delete a file named &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ rm file.txt&lt;br /&gt;
&lt;br /&gt;
Delete a directory named &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt; as well as all of its contents.&lt;br /&gt;
 $ rm -r some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[rmdir]] ===&lt;br /&gt;
Delete an empty directory.&lt;br /&gt;
 $ rmdir some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[rsync]] ===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
=== [[sed]] ===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
=== seq ===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
=== sfill ===&lt;br /&gt;
''Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Fill all available freespace by writing random noise to a file in directory &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ sfill -ll ./dir/&lt;br /&gt;
&lt;br /&gt;
=== [[shellcheck]] ===&lt;br /&gt;
Delint a shell script.&lt;br /&gt;
 $ shellcheck my_script.sh&lt;br /&gt;
&lt;br /&gt;
=== [[shuf]] ===&lt;br /&gt;
Produce random integers from &amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Print the numbers 1 through 4 in random order.&lt;br /&gt;
 $ shuf -i1-4&lt;br /&gt;
 4&lt;br /&gt;
 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Print a random number between 1 and 100.&lt;br /&gt;
 $ shuf -n1 -i1-100&lt;br /&gt;
 40&lt;br /&gt;
&lt;br /&gt;
=== [[ssh]] ===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
: Get all hostsʼ SSH fingerprints.&lt;br /&gt;
 $ ssh-keygen -lf &amp;lt;(ssh-keyscan localhost 2&amp;gt;/dev/random; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
=== [[sort]] ===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
=== [[stdbuf]] ===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[strace]] ===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
=== su ===&lt;br /&gt;
Open shell as another user (if already root) with Bash shell&lt;br /&gt;
 # whoami&lt;br /&gt;
 root&lt;br /&gt;
 # su - www-data -s /bin/bash&lt;br /&gt;
&lt;br /&gt;
=== sudo ===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
=== sumdir ===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== swapoff ===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
=== [[tail]] ===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
=== [[tar]] ===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
=== tee ===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
=== [[Tesseract (software)|tesseract]] ===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
 $ sudo apt install tesseract-ocr-osd  # orientation and script detection&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR but with an image orientation check before.&lt;br /&gt;
 $ tesseract input.jpg output -l osd+eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on all &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; files in the working with 8 CPU cores using [[GNU Parallel]].&lt;br /&gt;
 $ find . -maxdepth 1 -type f -name &amp;quot;*.jpg&amp;quot; | parallel tesseract -j8 '{}' '{.}' -l eng&lt;br /&gt;
: &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to start its search in the working directory&lt;br /&gt;
: &amp;lt;code&amp;gt;-maxdepth 1&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to only search the immediate working directory and not to recursively traverse subdirectories.&lt;br /&gt;
: &amp;lt;code&amp;gt;-type f&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to search for files&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.jpg&amp;quot;&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to case-sensitive pattern-match files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; specifies 8 CPU threads to be used. Omitting this option causes all available CPU cores to be used.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt; represents a single line received from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{.}'&amp;lt;/code&amp;gt; represents the same line but with the extension (i.e. &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;) removed.&lt;br /&gt;
&lt;br /&gt;
=== [[top (software)|top]] ===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
Run top once, printing results to stdout:&lt;br /&gt;
 $ top -n1 -b&lt;br /&gt;
&lt;br /&gt;
=== [[tr]] ===&lt;br /&gt;
Remove &amp;lt;code&amp;gt;# comments&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cat input.txt | sed -e 's/[[:blank:]]*#.*//' | tr -s '\n';&lt;br /&gt;
&lt;br /&gt;
==== Remove unwanted character sets ====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[tree (command)]] ===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
=== unar ===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
=== unzip ===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
=== [[veracrypt]] ===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
=== watch ===&lt;br /&gt;
Perform a command repeatedly and print its output.&lt;br /&gt;
&lt;br /&gt;
Print free disk space (&amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt;) in bytes (&amp;lt;code&amp;gt;-B1&amp;lt;/code&amp;gt;) every second (&amp;lt;code&amp;gt;-n1&amp;lt;/code&amp;gt;), highlighting changes &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ watch -d -n1 df -B1&lt;br /&gt;
&lt;br /&gt;
=== [[wc]] ===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
=== [[wondershaper]] ===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
=== [[yt-dlp]] ===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[xargs]] ===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== [[zip]] ===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Emacs_notes&amp;diff=198203</id>
		<title>Emacs notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Emacs_notes&amp;diff=198203"/>
		<updated>2026-05-12T02:22:55Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page contains notes for using [[Emacs]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
; downcase-region&lt;br /&gt;
: (Shortcut: &amp;lt;code&amp;gt;C-x C-l&amp;lt;/code&amp;gt;) Lowercases selected region. See also '''upcase-region'''.&lt;br /&gt;
&lt;br /&gt;
; downcase-word&lt;br /&gt;
: (Shorcut: &amp;lt;code&amp;gt;M-l&amp;lt;/code&amp;gt;) Lowercases word after point.&lt;br /&gt;
&lt;br /&gt;
; capitalize-word&lt;br /&gt;
: (Shorcut: &amp;lt;code&amp;gt;M-c&amp;lt;/code&amp;gt;) Uppercase word following point.&lt;br /&gt;
&lt;br /&gt;
; fill-paragraph&lt;br /&gt;
: (Shortcut: &amp;lt;code&amp;gt;M-q&amp;lt;/code&amp;gt;) Depending on mode, reduces column width of text to that set by &amp;lt;code&amp;gt;set-fill-column&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; query-replace&lt;br /&gt;
: Search and replace, prompting (i.e. querying) for each replacement.&lt;br /&gt;
&lt;br /&gt;
; query-replace-regexp&lt;br /&gt;
: Search and replace with [[regular expressions]]{{bkc|[[2025-01-20]]: For more on [[Emacs]]'s particular flavor of [[regular expressions]], see the [https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html manual]. }}, prompting (i.e. querying) for each replacement.&lt;br /&gt;
&lt;br /&gt;
; quoted-insert TAB&lt;br /&gt;
: (Shortcut: &amp;lt;code&amp;gt;C-q TAB&amp;lt;/code&amp;gt;) Inserts a &amp;lt;code&amp;gt;TAB&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
; revert-buffer&lt;br /&gt;
: Reload file to buffer, discarding changes to update to latest state currently written on disk.&lt;br /&gt;
&lt;br /&gt;
; set-fill-column&lt;br /&gt;
: Prompts setting the paragraph width produced by commands such as &amp;lt;code&amp;gt;fill-paragraph&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; toggle-truncate-lines&lt;br /&gt;
: Make long lines [[word wrap|wrap]] around to stay within view in a window.&lt;br /&gt;
&lt;br /&gt;
; text-scale-adjust&lt;br /&gt;
: (Shortcut: &amp;lt;code&amp;gt;C-x C-+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C-x  C-=&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;C-x C--&amp;lt;/code&amp;gt;) Increase or decrease size of text, pressing &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to adjust. Note: only effective on GUI.&lt;br /&gt;
&lt;br /&gt;
; upcase-region&lt;br /&gt;
: (Shortcut: &amp;lt;code&amp;gt;C-x C-u&amp;lt;/code&amp;gt;) Uppercases selected region. See also '''downcase-region'''.&lt;br /&gt;
&lt;br /&gt;
; upcase-word&lt;br /&gt;
: (Shorcut: &amp;lt;code&amp;gt;M-u&amp;lt;/code&amp;gt;) Uppercases word after point. See also '''downcase-word'''.&lt;br /&gt;
&lt;br /&gt;
==Modes==&lt;br /&gt;
===hs-minor-mode===&lt;br /&gt;
[https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html Reference manual].&lt;br /&gt;
&lt;br /&gt;
Shortcuts:&lt;br /&gt;
&lt;br /&gt;
* Hide current block (&amp;lt;code&amp;gt;M-x hs-hide-block&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-h&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-d&amp;lt;/code&amp;gt; (note: required for [[vg2]]'s [[LXQt]] desktop environment )&lt;br /&gt;
* Show current block (&amp;lt;code&amp;gt;M-x hs-show-block&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-s&amp;lt;/code&amp;gt;&lt;br /&gt;
* Hide all&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-M-h&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-t&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show all&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-M-s&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;C-c @ C-a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===visual-line-mode===&lt;br /&gt;
Wraps lines at word boundaries.&amp;lt;ref name=&amp;quot;so_20100719_emacs-visual-line-mode&amp;quot;&amp;gt;[https://stackoverflow.com/users/395927/kirk-kelsey Kirk Kelsey].  ([[2010-07-19]]).  “[https://stackoverflow.com/a/3282132 How can I enable line wrap on word boundaries only in Emacs?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-03-13]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 M-x visual-line-mode&lt;br /&gt;
&lt;br /&gt;
==Useful techniques==&lt;br /&gt;
Reformat footnote numbers with &amp;lt;code&amp;gt;query-replace-regexp&amp;lt;/code&amp;gt; in [[Mediawiki]] wikicode. (e.g. link to a corresponding &amp;lt;code&amp;gt;#c4n{n}&amp;lt;/code&amp;gt; anchor in a subpage at &amp;lt;code&amp;gt;&amp;amp;#91;&amp;amp;#91;../Notes&amp;amp;#93;&amp;amp;#93;&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
 M-x query-replace-regexp&lt;br /&gt;
 \([0-9]+\) &lt;br /&gt;
 &amp;lt;sup&amp;gt;[[../Notes#c4n\1|\1]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
 RET&lt;br /&gt;
&lt;br /&gt;
 M-x query-replace-regexp&lt;br /&gt;
 \([0-9]+\)$&lt;br /&gt;
 &amp;lt;sup&amp;gt;[[../Notes#c4n\1|\1]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
 RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Turn roman numeral subsection into roman numeral subsubsection via &amp;lt;code&amp;gt;query-replace-regexp&amp;lt;/code&amp;gt; using a [[Regular_expression#backreferences|backreference]]&amp;lt;ref name=&amp;quot;gnu_2025_emacs-replace-regexp&amp;quot;&amp;gt;“[https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Replace.html 17.10.2 Regexp Replacement]”.  ''[[gnu.org]]''.  Accessed [[2025-10-17]].  &amp;lt;/ref&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
^J== \([IVX]+\) ==^J&lt;br /&gt;
;; Note: the above may be composed via: C-q C-j = = \ ( [ I V X ] + \ ) = = C-q C-j RET&lt;br /&gt;
^J=== \1 ===^J&lt;br /&gt;
RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: This converts&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
== VII ==&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: into:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
=== VII ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add spaces between 3-digit number groups.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
\([0-9]\{3\}\)&lt;br /&gt;
;; Note: keystrokes: \ ( [ 0 - 9 ] \ { 3 \ } \ )&lt;br /&gt;
 \1 &lt;br /&gt;
;; Note: keystrokes: SPC \ 1 SPC&lt;br /&gt;
RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add square brackets around 3 or 4-digit number groups.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
\([0-9]\{3,4\}\)&lt;br /&gt;
;; Note: keystrokes: \ ( [ 0 - 9 ] \ { 3 , 4 \ } \ )&lt;br /&gt;
[[\1]]&lt;br /&gt;
;; Note: keystrokes: [ [ \ 1 ] ]&lt;br /&gt;
RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove square brackets around 3 or 4-digit number groups.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
\[\[\([0-9]\{3,4\}\)\]\]&lt;br /&gt;
;; Note: keystrokes: \ [ \ [ \ ( [ 0 - 9 ] \ { 3 , 4 \ } \ ) \ ] \ ]&lt;br /&gt;
[[\1]]&lt;br /&gt;
;; Note: keystrokes: [ [ \ 1 ] ]&lt;br /&gt;
RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace double square brackets with parentheses. (e.g. &amp;lt;code&amp;gt;[[&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;]]&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;((&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;))&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
[]]\{2\}&lt;br /&gt;
))&lt;br /&gt;
RET&lt;br /&gt;
M-x query-replace-regexp&lt;br /&gt;
[[]\{2\}&lt;br /&gt;
((&lt;br /&gt;
RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Emacs]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
* [https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html gnu.org manual]&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198202</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198202"/>
		<updated>2026-05-12T02:20:42Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: update according to command history as of 2026-05&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
* Author: [[Steven Baltakatei Sandoval]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Baltakateiʼs most used command-line programs are (as of [[2026-05]]):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Baltakateiʼs CLI usage distribution&lt;br /&gt;
|-&lt;br /&gt;
! command !! count !! does what&lt;br /&gt;
|-&lt;br /&gt;
| [[#ls|ls]]&lt;br /&gt;
| 13000&lt;br /&gt;
| list directory contents&lt;br /&gt;
|-&lt;br /&gt;
| [[#cd|cd]]&lt;br /&gt;
| 9000&lt;br /&gt;
| change directory&lt;br /&gt;
|-&lt;br /&gt;
| exit&lt;br /&gt;
| 5600&lt;br /&gt;
| (built-in) close terminal window&lt;br /&gt;
|-&lt;br /&gt;
| [[#find|find]]&lt;br /&gt;
| 5100&lt;br /&gt;
| Search file system by file name, size, age, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[#emacs|emacs]]&lt;br /&gt;
| 2900&lt;br /&gt;
| Edit text files.&lt;br /&gt;
|-&lt;br /&gt;
| history&lt;br /&gt;
| 2300&lt;br /&gt;
| (built-in) View command history. Often searched via &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;$ history | grep&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[#locate|locate]]&lt;br /&gt;
| 2200&lt;br /&gt;
| Search file system by file name via daily index for speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[#cat|cat]]&lt;br /&gt;
| 2000&lt;br /&gt;
| Concatenate text files. Often with command pipe line (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cat | grep | sed&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| [[#grep|grep]]&lt;br /&gt;
| 1200&lt;br /&gt;
| Search file internals through [[regular expression]]s.&lt;br /&gt;
|-&lt;br /&gt;
| [[#mkdir|mkdir]]&lt;br /&gt;
| 1100&lt;br /&gt;
| Create directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rm|rm]]&lt;br /&gt;
| 1100&lt;br /&gt;
| Delete file or directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#man|man]]&lt;br /&gt;
| 1100&lt;br /&gt;
| View manual for a commandʼs package (e.g. &amp;lt;code&amp;gt;man grep&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| while&lt;br /&gt;
| 1000&lt;br /&gt;
| (built-in) Initiate while loop&lt;br /&gt;
|-&lt;br /&gt;
| time&lt;br /&gt;
| 900&lt;br /&gt;
| Measure time used until a command completes. (shell keyword)&lt;br /&gt;
|-&lt;br /&gt;
| [[#mv|mv]]&lt;br /&gt;
| 800&lt;br /&gt;
| Move a file or directory.&lt;br /&gt;
|-&lt;br /&gt;
| echo&lt;br /&gt;
| 700&lt;br /&gt;
| (built-in) Print text to the shell.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ps|ps]]&lt;br /&gt;
| 700&lt;br /&gt;
| List process info. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ps aux | grep bash&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#less|less]]&lt;br /&gt;
| 700&lt;br /&gt;
| Display text file or stream with scroll capability.&lt;br /&gt;
|-&lt;br /&gt;
| [[#sudo|sudo]]&lt;br /&gt;
| 600&lt;br /&gt;
| Perform next command as superuser.&lt;br /&gt;
|-&lt;br /&gt;
| [[#bash|bash]]&lt;br /&gt;
| 600&lt;br /&gt;
| Manually execute a Bash script file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#du|du]]&lt;br /&gt;
| 600&lt;br /&gt;
| Display disk usage.&lt;br /&gt;
|-&lt;br /&gt;
| [[#cp|cp]]&lt;br /&gt;
| 600&lt;br /&gt;
| Copy a file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#clear|clear]]&lt;br /&gt;
| 500&lt;br /&gt;
| Clear shell's dislayed text. Comparable to &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[#printf|printf]]&lt;br /&gt;
| 500&lt;br /&gt;
| Print text with customized format.&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| 400&lt;br /&gt;
| (built-in) Tell how text will be interpreted by shell (e.g. alias, executable)&lt;br /&gt;
|-&lt;br /&gt;
| [[#mpv|mpv]]&lt;br /&gt;
| 400&lt;br /&gt;
| Play audio or video.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rsync|rsync]]&lt;br /&gt;
| 400&lt;br /&gt;
| Move, copy, or synchronize files and/or directories.&lt;br /&gt;
|-&lt;br /&gt;
| [[BK-2020-03#bkdatev|bkdatev]]&lt;br /&gt;
| 300&lt;br /&gt;
| Display or parse date and time information for specific time zones. ([[BK-2020-03]]: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/master/user/bkdatev?ref_type=heads gitlab]).&lt;br /&gt;
|-&lt;br /&gt;
| [[#watch|watch]]&lt;br /&gt;
| 300&lt;br /&gt;
| Repeatedly perform a command and highlight changes in stdout. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;watch -d -n1 df -B1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#seq|seq]]&lt;br /&gt;
| 300&lt;br /&gt;
| Print a sequence of integer values.&lt;br /&gt;
|-&lt;br /&gt;
| [[#git|git]]&lt;br /&gt;
| 300&lt;br /&gt;
| Version control a repository of files.&lt;br /&gt;
|-&lt;br /&gt;
| for&lt;br /&gt;
| 300&lt;br /&gt;
| (built-in) Starting a loop to execute a command set repeatedly.&lt;br /&gt;
|-&lt;br /&gt;
| [[#date|date]]&lt;br /&gt;
| 300&lt;br /&gt;
| Display or parse date and time information.&lt;br /&gt;
|-&lt;br /&gt;
| [[#rmdir|rmdir]]&lt;br /&gt;
| 300&lt;br /&gt;
| Remove an empty directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ffmpeg|ffmpeg]]&lt;br /&gt;
| 300&lt;br /&gt;
| Create or modify video file.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ssh|ssh]]&lt;br /&gt;
| 200&lt;br /&gt;
| Create remote shell session.&lt;br /&gt;
|-&lt;br /&gt;
| [[#readlink|readlink]]&lt;br /&gt;
| 200&lt;br /&gt;
| Resolve a symbolic link. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;$ readlink -f some_symlink&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[#apt|apt]]&lt;br /&gt;
| 200&lt;br /&gt;
| Update or install software.&lt;br /&gt;
|-&lt;br /&gt;
| [[#jdupes|jdupes]]&lt;br /&gt;
| 200&lt;br /&gt;
| Deduplicate files.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ln|ln]]&lt;br /&gt;
| 200&lt;br /&gt;
| Create or modify symbolic links.&lt;br /&gt;
|-&lt;br /&gt;
| [[#pwd|pwd]]&lt;br /&gt;
| 200&lt;br /&gt;
| Print the shellʼs current working directory.&lt;br /&gt;
|-&lt;br /&gt;
| [[#reset|reset]]&lt;br /&gt;
| 200&lt;br /&gt;
| Reïnitialize shell display. (e.g. clear bugs from displaying raw binary data)&lt;br /&gt;
|-&lt;br /&gt;
| [[#shellcheck|shellcheck]]&lt;br /&gt;
| 200&lt;br /&gt;
| [[Lint (software)|Delint]] a shell script.&lt;br /&gt;
|-&lt;br /&gt;
| [[#chmod|chmod]]&lt;br /&gt;
| 200&lt;br /&gt;
| Modify file permissions.&lt;br /&gt;
|-&lt;br /&gt;
| [[#ffprobe|ffprobe]]&lt;br /&gt;
| 200&lt;br /&gt;
| View audio or video file metadata.&lt;br /&gt;
|-&lt;br /&gt;
| [[#exiftool|exiftool]]&lt;br /&gt;
| 100&lt;br /&gt;
| View or modify photograph file data.&lt;br /&gt;
|-&lt;br /&gt;
| [[#file|file]]&lt;br /&gt;
| 100&lt;br /&gt;
| Classify file type. (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file /bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; )&lt;br /&gt;
|-&lt;br /&gt;
| [[#top|top]]&lt;br /&gt;
| 100&lt;br /&gt;
| List processes by CPU usage and other characteristics.&lt;br /&gt;
|-&lt;br /&gt;
| [[#df|df]]&lt;br /&gt;
| 100&lt;br /&gt;
| List disk usage. (e.g. in bytes: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;df -B1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| [[#sumdir|sumdir]]&lt;br /&gt;
| 100&lt;br /&gt;
| Generate or verify list of cryptographic digests of files. ([https://github.com/monking/shell-utilities/blob/main/sumdir monking custom script])&lt;br /&gt;
|-&lt;br /&gt;
| [[#shuf|shuf]]&lt;br /&gt;
| 100&lt;br /&gt;
| Generate random integers from &amp;lt;code&amp;gt;/dev/urandom&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
=== Linux kernel stuff ===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[ansi2txt]] ===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== apt ===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
=== base64 ===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[bash]] ===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Quotation rules ====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
==== Bash input/output ====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
==== Bash job management ====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
==== Bash string manipulation ====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
==== Array manipulation ====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
==== Iteration statements ====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[bc]] ===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
=== brew ===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
=== calibredb ===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
=== cat ===&lt;br /&gt;
Concatenate file.&lt;br /&gt;
 $ cat file1.txt file2.txt&lt;br /&gt;
&lt;br /&gt;
Print contents of &amp;lt;code&amp;gt;file1.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cat file.txt&lt;br /&gt;
&lt;br /&gt;
=== cd ===&lt;br /&gt;
Change working directory to home directory.&lt;br /&gt;
 $ cd ~/&lt;br /&gt;
&lt;br /&gt;
Change working directory to parent directory.&lt;br /&gt;
 $ cd ../&lt;br /&gt;
&lt;br /&gt;
Change working directory to &amp;lt;code&amp;gt;~/Documents&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cd ~/Documents&lt;br /&gt;
&lt;br /&gt;
=== chmod ===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
=== choom ===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
=== chown ===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
=== [[chrony]] ===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
=== clear ===&lt;br /&gt;
Clear terminal screen.&lt;br /&gt;
&lt;br /&gt;
 $ clear&lt;br /&gt;
&lt;br /&gt;
=== convert ===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
=== column ===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
=== cp ===&lt;br /&gt;
Copy a file or directory.&lt;br /&gt;
&lt;br /&gt;
Copy a file.&lt;br /&gt;
 $ cp some_file some_file_copy&lt;br /&gt;
&lt;br /&gt;
Copy a directory and its contents.&lt;br /&gt;
 $ cp -r some_dir some_dir_copy&lt;br /&gt;
&lt;br /&gt;
=== [[cron|crontab]] ===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cryptsetup ===&lt;br /&gt;
==== Get details on a volume encrypted with LUKS ====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
=== cut ===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
=== [[date]] ===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. [[POSIX]] seconds since [[1970-01-01]].).&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print actual seconds since [[1970-01-01]]. (requires [https://packages.debian.org/trixie/tzdata-legacy tzdata-legacy])&amp;lt;ref name=&amp;quot;ken_20160303_right-tz&amp;quot;&amp;gt;[https://kenta.blogspot.com/ Ken].  ([[2016-03-03]]).  “[https://kenta.blogspot.com/2016/03/sqfzcxay-understanding-right-time-zone.html [sqfzcxay] Understanding the &amp;quot;right&amp;quot; time zone database]”.  ''[[blogspot.com]]''.  Accessed [[2026-04-26]].  &amp;lt;/ref&amp;gt;{{bkc|[[2026-04-27]]: Getting the &amp;lt;code&amp;gt;/usr/share/zoneinfo/right/UTC&amp;lt;/code&amp;gt; may require running &amp;lt;code&amp;gt;$ sudo apt install tzdata-legacy&amp;lt;/code&amp;gt; on a [[Debian]]-based system. }}&lt;br /&gt;
 $ TZ=right/UTC date --date=&amp;quot;$(date --iso-8601=s)&amp;quot; +%s;&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch.&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
=== [[dd]] ===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
=== [[df]] ===&lt;br /&gt;
Display free disk space.&lt;br /&gt;
 $ df&lt;br /&gt;
&lt;br /&gt;
Display free disk space in bytes.&lt;br /&gt;
 $ df -B1&lt;br /&gt;
&lt;br /&gt;
Display free disk space in gigabytes (1024&amp;lt;rsup&amp;gt;3&amp;lt;/rsup&amp;gt; bytes)&lt;br /&gt;
 $ df -BG&lt;br /&gt;
 $ df -BGiB&lt;br /&gt;
&lt;br /&gt;
Display free disk space in gibibytes (1000&amp;lt;rsup&amp;gt;3&amp;lt;/rsup&amp;gt; bytes)&lt;br /&gt;
 $ df -BGB&lt;br /&gt;
 $ df -B1000000000&lt;br /&gt;
&lt;br /&gt;
=== [[du]] ===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
=== dig ===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
=== [[dpkg]] ===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
=== dpkg-reconfigure ===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
=== [[dstat]] ===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
=== [[dool]] ===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
=== [[emacs]] ===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
=== [[exiftool]] ===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
=== [[f3]] ===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
=== [[ffmpeg]] ===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;code&amp;gt;*.JPG&amp;lt;/code&amp;gt; files into time lapse at 60 frames per second (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;yuvj420p&amp;lt;/code&amp;gt; colors to reduce banding.&amp;lt;ref name=&amp;quot;yc_20190529_carmack-ffmpeg-color&amp;quot;&amp;gt;[[John Carmack]].  ([[2019-05-29]]).  “[https://news.ycombinator.com/item?id=20036710 Adventures with ffmpeg and color ranges]”.  ''[[ycombinator.com]]''.  Accessed [[2026-01-22]].  “&amp;lt;code&amp;gt;ffmpeg -i source.mp4 -c:v libx265 -pix_fmt yuvj420p dest.mp4&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;{{bkc|[[2026-01-22]]: Use &amp;lt;code&amp;gt;$ ffprobe DSC00123.JPG&amp;lt;/code&amp;gt; to find the color space of the input [[JPEG]] file. For example: &amp;lt;code&amp;gt;Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown)&amp;lt;/code&amp;gt; means &amp;lt;code&amp;gt;-pix_fmt yuvj422p&amp;lt;/code&amp;gt; should be the option provided to &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 26 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
&lt;br /&gt;
Export [[SNES]] [[SPC]] audio.&amp;lt;ref name=&amp;quot;&amp;quot;&amp;gt;[[Kaz Wolfe]].  ([[2017-03-28]]).  “[https://askubuntu.com/a/897694/ SPC to WAV command-line]”.  ''[[askubuntu.com]]''.  Accessed [[2026-04-13]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -i track1.spc track1.flac&lt;br /&gt;
&lt;br /&gt;
==== Quality of life ====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
==== Encode video ====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
==== Split a video file into roughly equal segments ====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
==== Combine video files into a single file ====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
==== Add subtitles to a video file ====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[file]] ===&lt;br /&gt;
Classify file type.&lt;br /&gt;
&lt;br /&gt;
Classify the file &amp;lt;code&amp;gt;myfile.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ file myfile.txt&lt;br /&gt;
&lt;br /&gt;
Classify the executable &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ file /bin/bash&lt;br /&gt;
 /bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f77b36371c214e11670c7d9d92727e9a49f626b, for GNU/Linux 3.2.0, stripped&lt;br /&gt;
&lt;br /&gt;
=== [[ffprobe]] ===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get bitrate in integer bytes.&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot;; -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 &lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
=== [[find]] ===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
=== [[gcc]] ===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== [[git]] ===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
=== [[gpg]] ===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
=== grep ===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
=== [[gs]] ===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[Regular Expressions]] ====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
=== [[gunzip]] ===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
=== [[gzip]] ===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
=== [[head]] ===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
=== [[iftop]] ===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
=== [[iotop]] ===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== [[ip]] ===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
=== [[ImageMagick]] ===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
=== [[jdupes]] ===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
=== [[journalctl]] ===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[less]] ===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
=== [[ln]] ===&lt;br /&gt;
Create symlink named &amp;lt;code&amp;gt;my_linked_dir&amp;lt;/code&amp;gt; to a directory at path &amp;lt;code&amp;gt;~/some/long/path/my_dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ ln -sfn ~/some/long/path/my_dir my_linked_dir&lt;br /&gt;
&lt;br /&gt;
=== [[locate]] ===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
=== [[ls]] ===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
=== [[lsof]] ===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
=== [[mail]] ===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
=== [[make]] ===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
=== man ===&lt;br /&gt;
Display command manual.&lt;br /&gt;
&lt;br /&gt;
Show [[Bash]] manual.&lt;br /&gt;
 $ man bash&lt;br /&gt;
&lt;br /&gt;
=== [[mkdir]] ===&lt;br /&gt;
Create an empty directory called &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir some_dir&lt;br /&gt;
&lt;br /&gt;
Create an empty subdirectory at &amp;lt;code&amp;gt;some/path/some_dir&amp;lt;/code&amp;gt;, creating all the parent subdirectories as well.&lt;br /&gt;
 $ mkdir -p some/path/some_dir&lt;br /&gt;
&lt;br /&gt;
: This is equivalent to:&lt;br /&gt;
 $ mkdir some&lt;br /&gt;
 $ mkdir some/path&lt;br /&gt;
 $ mkdir some/path/some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[mdadm]] ===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
=== mimetype ===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
=== mktemp ===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
=== [[mpv]] ===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
=== [[mv]] ===&lt;br /&gt;
Move a file or directory.&lt;br /&gt;
&lt;br /&gt;
Move file &amp;lt;code&amp;gt;some_file&amp;lt;/code&amp;gt; into directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;, replacing &amp;lt;code&amp;gt;some_dir/some_file&amp;lt;/code&amp;gt; if it exists.&lt;br /&gt;
 $ mv some_file ./some_dir  # make sure 'some_dir' is not a file&lt;br /&gt;
&lt;br /&gt;
: Perform move without replacement and throwing error if so.&lt;br /&gt;
 $ mv -p some_file ./some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[neofetch]] ===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
=== [[nethogs]] ===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
=== [[notify-send]] ===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== [[openbox]] ===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
=== [[ots]] ===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp, running &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; on 1000 files at a time.&lt;br /&gt;
 $ din=&amp;quot;$(pwd)&amp;quot;; while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find &amp;quot;$din&amp;quot; -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 -L 1000 ots s&lt;br /&gt;
&lt;br /&gt;
=== [[pandoc]] ===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
=== [[par2]] ===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
=== [[GNU parallel|parallel]] ===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
=== paste ===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
=== pipx ===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
=== play ([[sox]]) ===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[ps]] ===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
=== [[pdftk]] ===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
=== [[pdftotext]] ===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
=== [[pgrep]] ===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
=== printf ===&lt;br /&gt;
==== GNU Coreutils ====&lt;br /&gt;
Print a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; character.&amp;lt;ref name=&amp;quot;so_20130221_printf-exclam&amp;quot;&amp;gt;[https://stackoverflow.com/users/465183/gilles-qu%c3%a9not Giles Quénot].  ([[2013-02-21]]).  “[https://stackoverflow.com/a/15011849 How to printf an exclamation mark in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2026-01-15]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;\041\n&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
==== C stdio.h ====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
=== [[readlink]] ===&lt;br /&gt;
Print canonical path of a file, resolving any symlinks. (Note: Specific to [[Debian]]/[[Ubuntu]]-like systems. For [[macOS]], see &amp;lt;code&amp;gt;[[realpath]]&amp;lt;/code&amp;gt; or [[homebrew]]ʼs &amp;lt;code&amp;gt;[[grealpath]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ readlink -f some_file&lt;br /&gt;
&lt;br /&gt;
=== [[reset]] ===&lt;br /&gt;
Reset terminal state.&lt;br /&gt;
 $ reset&lt;br /&gt;
&lt;br /&gt;
=== [[rev]] ===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find . -mindepth 1 -maxdepth 1 -type f | rev | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -mindepth 1 -maxdepth 1 -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the path.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # List and count unique lines.&lt;br /&gt;
  sort -hk1;           # Sort by line counts.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[rm]] ===&lt;br /&gt;
Delete a file named &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ rm file.txt&lt;br /&gt;
&lt;br /&gt;
Delete a directory named &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt; as well as all of its contents.&lt;br /&gt;
 $ rm -r some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[rmdir]] ===&lt;br /&gt;
Delete an empty directory.&lt;br /&gt;
 $ rmdir some_dir&lt;br /&gt;
&lt;br /&gt;
=== [[rsync]] ===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
=== [[sed]] ===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
=== seq ===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
=== sfill ===&lt;br /&gt;
''Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Fill all available freespace by writing random noise to a file in directory &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ sfill -ll ./dir/&lt;br /&gt;
&lt;br /&gt;
=== [[shellcheck]] ===&lt;br /&gt;
Delint a shell script.&lt;br /&gt;
 $ shellcheck my_script.sh&lt;br /&gt;
&lt;br /&gt;
=== [[shuf]] ===&lt;br /&gt;
Produce random integers from &amp;lt;code&amp;gt;/dev/random&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Print the numbers 1 through 4 in random order.&lt;br /&gt;
 $ shuf -i1-4&lt;br /&gt;
 4&lt;br /&gt;
 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
Print a random number between 1 and 100.&lt;br /&gt;
 $ shuf -n1 -i1-100&lt;br /&gt;
 40&lt;br /&gt;
&lt;br /&gt;
=== [[ssh]] ===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
: Get all hostsʼ SSH fingerprints.&lt;br /&gt;
 $ ssh-keygen -lf &amp;lt;(ssh-keyscan localhost 2&amp;gt;/dev/random; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
=== [[sort]] ===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
=== [[stdbuf]] ===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[strace]] ===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
=== su ===&lt;br /&gt;
Open shell as another user (if already root) with Bash shell&lt;br /&gt;
 # whoami&lt;br /&gt;
 root&lt;br /&gt;
 # su - www-data -s /bin/bash&lt;br /&gt;
&lt;br /&gt;
=== sudo ===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
=== sumdir ===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== swapoff ===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
=== [[tail]] ===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
=== [[tar]] ===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
=== tee ===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
=== [[Tesseract (software)|tesseract]] ===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
 $ sudo apt install tesseract-ocr-osd  # orientation and script detection&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR but with an image orientation check before.&lt;br /&gt;
 $ tesseract input.jpg output -l osd+eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on all &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; files in the working with 8 CPU cores using [[GNU Parallel]].&lt;br /&gt;
 $ find . -maxdepth 1 -type f -name &amp;quot;*.jpg&amp;quot; | parallel tesseract -j8 '{}' '{.}' -l eng&lt;br /&gt;
: &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to start its search in the working directory&lt;br /&gt;
: &amp;lt;code&amp;gt;-maxdepth 1&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to only search the immediate working directory and not to recursively traverse subdirectories.&lt;br /&gt;
: &amp;lt;code&amp;gt;-type f&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to search for files&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.jpg&amp;quot;&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to case-sensitive pattern-match files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; specifies 8 CPU threads to be used. Omitting this option causes all available CPU cores to be used.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt; represents a single line received from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{.}'&amp;lt;/code&amp;gt; represents the same line but with the extension (i.e. &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;) removed.&lt;br /&gt;
&lt;br /&gt;
=== [[top (software)|top]] ===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
Run top once, printing results to stdout:&lt;br /&gt;
 $ top -n1 -b&lt;br /&gt;
&lt;br /&gt;
=== [[tr]] ===&lt;br /&gt;
Remove &amp;lt;code&amp;gt;# comments&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cat input.txt | sed -e 's/[[:blank:]]*#.*//' | tr -s '\n';&lt;br /&gt;
&lt;br /&gt;
==== Remove unwanted character sets ====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[tree (command)]] ===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
=== unar ===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
=== unzip ===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
=== [[veracrypt]] ===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
=== watch ===&lt;br /&gt;
Perform a command repeatedly and print its output.&lt;br /&gt;
&lt;br /&gt;
Print free disk space (&amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt;) in bytes (&amp;lt;code&amp;gt;-B1&amp;lt;/code&amp;gt;) every second (&amp;lt;code&amp;gt;-n1&amp;lt;/code&amp;gt;), highlighting changes &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ watch -d -n1 df -B1&lt;br /&gt;
&lt;br /&gt;
=== [[wc]] ===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
=== [[wondershaper]] ===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
=== [[yt-dlp]] ===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[xargs]] ===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== [[zip]] ===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Kitty&amp;diff=198201</id>
		<title>Kitty</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Kitty&amp;diff=198201"/>
		<updated>2026-05-12T00:14:57Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Kitty''' is a GPU-accelerated terminal emulator available in the Debian repository.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Kitty''' is a GPU-accelerated terminal emulator available in the [[Debian]] repository.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Setup notes==&lt;br /&gt;
''kitty'' is a [[Debian]] package available in most repositories.&lt;br /&gt;
 $ sudo apt install kitty&lt;br /&gt;
&lt;br /&gt;
Make sure to install the ''kitty-terminfo'' package on remote systems being SSH'd into via ''kitty'' in order to allow control signals (e.g. arrow key movement) to work correctly. (see [https://sw.kovidgoyal.net/kitty/faq/#i-get-errors-about-the-terminal-being-unknown-or-opening-the-terminal-failing-or-functional-keys-like-arrow-keys-don-t-work ref])&lt;br /&gt;
 $ ssh username@server&lt;br /&gt;
 $ sudo apt install kitty-terminfo&lt;br /&gt;
&lt;br /&gt;
==Shortcuts==&lt;br /&gt;
; Ctrl+Shift+Esc&lt;br /&gt;
: Opens ''kitty shell'' which allows kitty-specific commands to be run, changing kittyʼs behavior. (e.g. &amp;lt;code&amp;gt;close-tab&amp;lt;/code&amp;gt; to close an unresponsive tab).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:kitty (terminal emulator)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FOSS software]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198200</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198200"/>
		<updated>2026-05-08T18:26:05Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: /* rsync */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
===Linux kernel stuff===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[ansi2txt]]===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===apt===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
===base64===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===bash===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Quotation rules====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
====Bash input/output====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
====Bash job management====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
====Bash string manipulation====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
====Array manipulation====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
====Iteration statements====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[bc]]===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
===brew===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
===calibredb===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
===chmod===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
===choom===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
===chown===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
===[[chrony]]===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
===convert===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
===column===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
===[[cron|crontab]]===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===cryptsetup===&lt;br /&gt;
====Get details on a volume encrypted with LUKS====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
===cut===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. [[POSIX]] seconds since [[1970-01-01]].).&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print actual seconds since [[1970-01-01]]. (requires [https://packages.debian.org/trixie/tzdata-legacy tzdata-legacy])&amp;lt;ref name=&amp;quot;ken_20160303_right-tz&amp;quot;&amp;gt;[https://kenta.blogspot.com/ Ken].  ([[2016-03-03]]).  “[https://kenta.blogspot.com/2016/03/sqfzcxay-understanding-right-time-zone.html [sqfzcxay] Understanding the &amp;quot;right&amp;quot; time zone database]”.  ''[[blogspot.com]]''.  Accessed [[2026-04-26]].  &amp;lt;/ref&amp;gt;{{bkc|[[2026-04-27]]: Getting the &amp;lt;code&amp;gt;/usr/share/zoneinfo/right/UTC&amp;lt;/code&amp;gt; may require running &amp;lt;code&amp;gt;$ sudo apt install tzdata-legacy&amp;lt;/code&amp;gt; on a [[Debian]]-based system. }}&lt;br /&gt;
 $ TZ=right/UTC date --date=&amp;quot;$(date --iso-8601=s)&amp;quot; +%s;&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch.&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
===dd===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
===du===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
===dig===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
===[[dpkg]]===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
===dpkg-reconfigure===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
===[[dstat]]===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[dool]]===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[emacs]]===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
===[[f3]]===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
===[[ffmpeg]]===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;code&amp;gt;*.JPG&amp;lt;/code&amp;gt; files into time lapse at 60 frames per second (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;yuvj420p&amp;lt;/code&amp;gt; colors to reduce banding.&amp;lt;ref name=&amp;quot;yc_20190529_carmack-ffmpeg-color&amp;quot;&amp;gt;[[John Carmack]].  ([[2019-05-29]]).  “[https://news.ycombinator.com/item?id=20036710 Adventures with ffmpeg and color ranges]”.  ''[[ycombinator.com]]''.  Accessed [[2026-01-22]].  “&amp;lt;code&amp;gt;ffmpeg -i source.mp4 -c:v libx265 -pix_fmt yuvj420p dest.mp4&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;{{bkc|[[2026-01-22]]: Use &amp;lt;code&amp;gt;$ ffprobe DSC00123.JPG&amp;lt;/code&amp;gt; to find the color space of the input [[JPEG]] file. For example: &amp;lt;code&amp;gt;Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown)&amp;lt;/code&amp;gt; means &amp;lt;code&amp;gt;-pix_fmt yuvj422p&amp;lt;/code&amp;gt; should be the option provided to &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 26 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
&lt;br /&gt;
Export [[SNES]] [[SPC]] audio.&amp;lt;ref name=&amp;quot;&amp;quot;&amp;gt;[[Kaz Wolfe]].  ([[2017-03-28]]).  “[https://askubuntu.com/a/897694/ SPC to WAV command-line]”.  ''[[askubuntu.com]]''.  Accessed [[2026-04-13]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -i track1.spc track1.flac&lt;br /&gt;
&lt;br /&gt;
====Quality of life====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
====Encode video====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
====Split a video file into roughly equal segments====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
====Combine video files into a single file====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
====Add subtitles to a video file====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ffprobe]]===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get bitrate in integer bytes.&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot;; -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 &lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
===[[find]]===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
===[[gcc]]===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[git]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
===[[gpg]]===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
===[[gs]]===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[Regular Expressions]]====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
===[[gunzip]]===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
===[[gzip]]===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
===[[head]]===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
===[[iftop]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
===[[iotop]]===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[ip]]===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
===[[ImageMagick]]===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
===[[jdupes]]===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
===[[journalctl]]===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[less]]===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
===[[locate]]===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
===[[ls]]===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
===[[lsof]]===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
===[[mail]]===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
===[[make]]===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
===[[mdadm]]===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
===mimetype===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
===mktemp===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
===[[mpv]]===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
===[[neofetch]]===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
===[[nethogs]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
===[[notify-send]]===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[openbox]]===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
===[[ots]]===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp, running &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; on 1000 files at a time.&lt;br /&gt;
 $ din=&amp;quot;$(pwd)&amp;quot;; while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find &amp;quot;$din&amp;quot; -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 -L 1000 ots s&lt;br /&gt;
&lt;br /&gt;
===[[pandoc]]===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
===[[par2]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
===[[GNU parallel|parallel]]===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
===paste===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
===pipx===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
===play ([[sox]])===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ps]]===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
===[[pdftk]]===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
===[[pdftotext]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
===[[pgrep]]===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
===printf===&lt;br /&gt;
====GNU Coreutils====&lt;br /&gt;
Print a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; character.&amp;lt;ref name=&amp;quot;so_20130221_printf-exclam&amp;quot;&amp;gt;[https://stackoverflow.com/users/465183/gilles-qu%c3%a9not Giles Quénot].  ([[2013-02-21]]).  “[https://stackoverflow.com/a/15011849 How to printf an exclamation mark in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2026-01-15]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;\041\n&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
====C stdio.h====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
===[[rev]]===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find . -mindepth 1 -maxdepth 1 -type f | rev | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -mindepth 1 -maxdepth 1 -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the path.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # List and count unique lines.&lt;br /&gt;
  sort -hk1;           # Sort by line counts.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[rsync]]===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
===seq===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
===sfill===&lt;br /&gt;
''Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Fill all available freespace by writing random noise to a file in directory &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ sfill -ll ./dir/&lt;br /&gt;
&lt;br /&gt;
===[[ssh]]===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
: Get all hostsʼ SSH fingerprints.&lt;br /&gt;
 $ ssh-keygen -lf &amp;lt;(ssh-keyscan localhost 2&amp;gt;/dev/random; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
===[[sort]]===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
===[[stdbuf]]===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[strace]]===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
===su===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
===sumdir===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===swapoff===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
===[[tail]]===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
===[[tar]]===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
===tee===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
===[[Tesseract (software)|tesseract]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
 $ sudo apt install tesseract-ocr-osd  # orientation and script detection&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR but with an image orientation check before.&lt;br /&gt;
 $ tesseract input.jpg output -l osd+eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on all &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; files in the working with 8 CPU cores using [[GNU Parallel]].&lt;br /&gt;
 $ find . -maxdepth 1 -type f -name &amp;quot;*.jpg&amp;quot; | parallel tesseract -j8 '{}' '{.}' -l eng&lt;br /&gt;
: &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to start its search in the working directory&lt;br /&gt;
: &amp;lt;code&amp;gt;-maxdepth 1&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to only search the immediate working directory and not to recursively traverse subdirectories.&lt;br /&gt;
: &amp;lt;code&amp;gt;-type f&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to search for files&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.jpg&amp;quot;&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to case-sensitive pattern-match files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; specifies 8 CPU threads to be used. Omitting this option causes all available CPU cores to be used.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt; represents a single line received from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{.}'&amp;lt;/code&amp;gt; represents the same line but with the extension (i.e. &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;) removed.&lt;br /&gt;
&lt;br /&gt;
===[[top (software)|top]]===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
Run top once, printing results to stdout:&lt;br /&gt;
 $ top -n1 -b&lt;br /&gt;
&lt;br /&gt;
===[[tr]]===&lt;br /&gt;
Remove &amp;lt;code&amp;gt;# comments&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cat input.txt | sed -e 's/[[:blank:]]*#.*//' | tr -s '\n';&lt;br /&gt;
&lt;br /&gt;
====Remove unwanted character sets====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[tree (command)]]===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
===unar===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
===unzip===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
===[[veracrypt]]===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
===[[wc]]===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
===[[wondershaper]]===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
===[[yt-dlp]]===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[xargs]]===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===[[zip]]===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198199</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198199"/>
		<updated>2026-04-27T00:48:51Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
===Linux kernel stuff===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[ansi2txt]]===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===apt===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
===base64===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===bash===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Quotation rules====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
====Bash input/output====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
====Bash job management====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
====Bash string manipulation====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
====Array manipulation====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
====Iteration statements====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[bc]]===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
===brew===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
===calibredb===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
===chmod===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
===choom===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
===chown===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
===[[chrony]]===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
===convert===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
===column===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
===[[cron|crontab]]===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===cryptsetup===&lt;br /&gt;
====Get details on a volume encrypted with LUKS====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
===cut===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. [[POSIX]] seconds since [[1970-01-01]].).&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print actual seconds since [[1970-01-01]]. (requires [https://packages.debian.org/trixie/tzdata-legacy tzdata-legacy])&amp;lt;ref name=&amp;quot;ken_20160303_right-tz&amp;quot;&amp;gt;[https://kenta.blogspot.com/ Ken].  ([[2016-03-03]]).  “[https://kenta.blogspot.com/2016/03/sqfzcxay-understanding-right-time-zone.html [sqfzcxay] Understanding the &amp;quot;right&amp;quot; time zone database]”.  ''[[blogspot.com]]''.  Accessed [[2026-04-26]].  &amp;lt;/ref&amp;gt;{{bkc|[[2026-04-27]]: Getting the &amp;lt;code&amp;gt;/usr/share/zoneinfo/right/UTC&amp;lt;/code&amp;gt; may require running &amp;lt;code&amp;gt;$ sudo apt install tzdata-legacy&amp;lt;/code&amp;gt; on a [[Debian]]-based system. }}&lt;br /&gt;
 $ TZ=right/UTC date --date=&amp;quot;$(date --iso-8601=s)&amp;quot; +%s;&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch.&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
===dd===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
===du===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
===dig===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
===[[dpkg]]===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
===dpkg-reconfigure===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
===[[dstat]]===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[dool]]===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[emacs]]===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
===[[f3]]===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
===[[ffmpeg]]===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;code&amp;gt;*.JPG&amp;lt;/code&amp;gt; files into time lapse at 60 frames per second (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;yuvj420p&amp;lt;/code&amp;gt; colors to reduce banding.&amp;lt;ref name=&amp;quot;yc_20190529_carmack-ffmpeg-color&amp;quot;&amp;gt;[[John Carmack]].  ([[2019-05-29]]).  “[https://news.ycombinator.com/item?id=20036710 Adventures with ffmpeg and color ranges]”.  ''[[ycombinator.com]]''.  Accessed [[2026-01-22]].  “&amp;lt;code&amp;gt;ffmpeg -i source.mp4 -c:v libx265 -pix_fmt yuvj420p dest.mp4&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;{{bkc|[[2026-01-22]]: Use &amp;lt;code&amp;gt;$ ffprobe DSC00123.JPG&amp;lt;/code&amp;gt; to find the color space of the input [[JPEG]] file. For example: &amp;lt;code&amp;gt;Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown)&amp;lt;/code&amp;gt; means &amp;lt;code&amp;gt;-pix_fmt yuvj422p&amp;lt;/code&amp;gt; should be the option provided to &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 26 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
&lt;br /&gt;
Export [[SNES]] [[SPC]] audio.&amp;lt;ref name=&amp;quot;&amp;quot;&amp;gt;[[Kaz Wolfe]].  ([[2017-03-28]]).  “[https://askubuntu.com/a/897694/ SPC to WAV command-line]”.  ''[[askubuntu.com]]''.  Accessed [[2026-04-13]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -i track1.spc track1.flac&lt;br /&gt;
&lt;br /&gt;
====Quality of life====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
====Encode video====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
====Split a video file into roughly equal segments====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
====Combine video files into a single file====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
====Add subtitles to a video file====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ffprobe]]===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get bitrate in integer bytes.&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot;; -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 &lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
===[[find]]===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
===[[gcc]]===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[git]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
===[[gpg]]===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
===[[gs]]===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[Regular Expressions]]====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
===[[gunzip]]===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
===[[gzip]]===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
===[[head]]===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
===[[iftop]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
===[[iotop]]===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[ip]]===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
===[[ImageMagick]]===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
===[[jdupes]]===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
===[[journalctl]]===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[less]]===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
===[[locate]]===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
===[[ls]]===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
===[[lsof]]===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
===[[mail]]===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
===[[make]]===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
===[[mdadm]]===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
===mimetype===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
===mktemp===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
===[[mpv]]===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
===[[neofetch]]===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
===[[nethogs]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
===[[notify-send]]===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[openbox]]===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
===[[ots]]===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp, running &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; on 1000 files at a time.&lt;br /&gt;
 $ din=&amp;quot;$(pwd)&amp;quot;; while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find &amp;quot;$din&amp;quot; -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 -L 1000 ots s&lt;br /&gt;
&lt;br /&gt;
===[[pandoc]]===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
===[[par2]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
===[[GNU parallel|parallel]]===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
===paste===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
===pipx===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
===play ([[sox]])===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ps]]===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
===[[pdftk]]===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
===[[pdftotext]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
===[[pgrep]]===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
===printf===&lt;br /&gt;
====GNU Coreutils====&lt;br /&gt;
Print a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; character.&amp;lt;ref name=&amp;quot;so_20130221_printf-exclam&amp;quot;&amp;gt;[https://stackoverflow.com/users/465183/gilles-qu%c3%a9not Giles Quénot].  ([[2013-02-21]]).  “[https://stackoverflow.com/a/15011849 How to printf an exclamation mark in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2026-01-15]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;\041\n&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
====C stdio.h====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
===[[rev]]===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find . -mindepth 1 -maxdepth 1 -type f | rev | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -mindepth 1 -maxdepth 1 -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the path.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # List and count unique lines.&lt;br /&gt;
  sort -hk1;           # Sort by line counts.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[rsync]]===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
===seq===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
===sfill===&lt;br /&gt;
''Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
Fill all available freespace by writing random noise to a file in directory &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ sfill -ll ./dir/&lt;br /&gt;
&lt;br /&gt;
===[[ssh]]===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
: Get all hostsʼ SSH fingerprints.&lt;br /&gt;
 $ ssh-keygen -lf &amp;lt;(ssh-keyscan localhost 2&amp;gt;/dev/random; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
===[[sort]]===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
===[[stdbuf]]===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[strace]]===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
===su===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
===sumdir===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===swapoff===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
===[[tail]]===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
===[[tar]]===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
===tee===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
===[[Tesseract (software)|tesseract]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
 $ sudo apt install tesseract-ocr-osd  # orientation and script detection&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR but with an image orientation check before.&lt;br /&gt;
 $ tesseract input.jpg output -l osd+eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on all &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; files in the working with 8 CPU cores using [[GNU Parallel]].&lt;br /&gt;
 $ find . -maxdepth 1 -type f -name &amp;quot;*.jpg&amp;quot; | parallel tesseract -j8 '{}' '{.}' -l eng&lt;br /&gt;
: &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to start its search in the working directory&lt;br /&gt;
: &amp;lt;code&amp;gt;-maxdepth 1&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to only search the immediate working directory and not to recursively traverse subdirectories.&lt;br /&gt;
: &amp;lt;code&amp;gt;-type f&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to search for files&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.jpg&amp;quot;&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to case-sensitive pattern-match files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; specifies 8 CPU threads to be used. Omitting this option causes all available CPU cores to be used.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt; represents a single line received from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{.}'&amp;lt;/code&amp;gt; represents the same line but with the extension (i.e. &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;) removed.&lt;br /&gt;
&lt;br /&gt;
===[[top (software)|top]]===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
Run top once, printing results to stdout:&lt;br /&gt;
 $ top -n1 -b&lt;br /&gt;
&lt;br /&gt;
===[[tr]]===&lt;br /&gt;
Remove &amp;lt;code&amp;gt;# comments&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cat input.txt | sed -e 's/[[:blank:]]*#.*//' | tr -s '\n';&lt;br /&gt;
&lt;br /&gt;
====Remove unwanted character sets====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[tree (command)]]===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
===unar===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
===unzip===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
===[[veracrypt]]===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
===[[wc]]===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
===[[wondershaper]]===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
===[[yt-dlp]]===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[xargs]]===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===[[zip]]===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Supreme_Court_of_the_United_States&amp;diff=198198</id>
		<title>Supreme Court of the United States</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Supreme_Court_of_the_United_States&amp;diff=198198"/>
		<updated>2026-04-26T19:04:55Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
=== Current Justices ===&lt;br /&gt;
* Chief Justice John Roberts (since 2005)&lt;br /&gt;
* Associate Justice [[Clarence Thomas]] (since 1991)&lt;br /&gt;
* Associate Justice [[Samuel Alito]] (since 2006)&lt;br /&gt;
* Associate Justice [[Sonia Sotomayor]] (since 2009)&lt;br /&gt;
* Associate Justice [[Elena Kagan]] (since 2010)&lt;br /&gt;
* Associate Justice [[Neil Gorsuch]] (since 2017)&lt;br /&gt;
* Associate Justice [[Brett Kavanaugh]] (since 2018)&lt;br /&gt;
* Associate Justice [[Amy Coney Barrett]] (since 2020)&lt;br /&gt;
* Associate Justice [[Ketanji Brown Jackson]] (since 2022)&lt;br /&gt;
&lt;br /&gt;
=== Former Justices ===&lt;br /&gt;
* John Jay (1789–1795)&lt;br /&gt;
* John Rutledge (1795)&lt;br /&gt;
* Oliver Ellsworth (1796–1800)&lt;br /&gt;
* John Marshall (1801–1835)&lt;br /&gt;
* Roger B. Taney (1836–1864)&lt;br /&gt;
* Salmon P. Chase (1864–1873)&lt;br /&gt;
* Morrison Waite (1874–1888)&lt;br /&gt;
* Melville Fuller (1888–1910)&lt;br /&gt;
* Edward Douglass White (1910–1921)&lt;br /&gt;
* William Howard Taft (1921–1930)&lt;br /&gt;
* Charles Evans Hughes (1930–1941)&lt;br /&gt;
* Harlan F. Stone (1941–1946)&lt;br /&gt;
* Fred M. Vinson (1946–1953)&lt;br /&gt;
* Earl Warren (1953–1969)&lt;br /&gt;
* Warren E. Burger (1969–1986)&lt;br /&gt;
* William Rehnquist (1986–2005)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2024]]: [[Snyder v. United States]]: Ruled that [[bribery]] is acceptable if the gratuity is paid after the otherwise corrupt act.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Footnotes==&lt;br /&gt;
&amp;lt;references group=fn /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;references group=cmt /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Supreme_Court_of_the_United_States&amp;diff=198197</id>
		<title>Supreme Court of the United States</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Supreme_Court_of_the_United_States&amp;diff=198197"/>
		<updated>2026-04-26T19:04:35Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot;     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}  ==Stats==  === Current Justices === * Chief Justice John Roberts (since 2005) * Ass...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
=== Current Justices ===&lt;br /&gt;
* Chief Justice John Roberts (since 2005)&lt;br /&gt;
* Associate Justice [[Clarence Thomas]] (since 1991)&lt;br /&gt;
* Associate Justice [[Samuel Alito]] (since 2006)&lt;br /&gt;
* Associate Justice [[Sonia Sotomayor]] (since 2009)&lt;br /&gt;
* Associate Justice [[Elena Kagan]] (since 2010)&lt;br /&gt;
* Associate Justice [[Neil Gorsuch]] (since 2017)&lt;br /&gt;
* Associate Justice [[Brett Kavanaugh]] (since 2018)&lt;br /&gt;
* Associate Justice [[Amy Coney Barrett]] (since 2020)&lt;br /&gt;
* Associate Justice [[Ketanji Brown Jackson]] (since 2022)&lt;br /&gt;
&lt;br /&gt;
=== Former Justices ===&lt;br /&gt;
* John Jay (1789–1795)&lt;br /&gt;
* John Rutledge (1795)&lt;br /&gt;
* Oliver Ellsworth (1796–1800)&lt;br /&gt;
* John Marshall (1801–1835)&lt;br /&gt;
* Roger B. Taney (1836–1864)&lt;br /&gt;
* Salmon P. Chase (1864–1873)&lt;br /&gt;
* Morrison Waite (1874–1888)&lt;br /&gt;
* Melville Fuller (1888–1910)&lt;br /&gt;
* Edward Douglass White (1910–1921)&lt;br /&gt;
* William Howard Taft (1921–1930)&lt;br /&gt;
* Charles Evans Hughes (1930–1941)&lt;br /&gt;
* Harlan F. Stone (1941–1946)&lt;br /&gt;
* Fred M. Vinson (1946–1953)&lt;br /&gt;
* Earl Warren (1953–1969)&lt;br /&gt;
* Warren E. Burger (1969–1986)&lt;br /&gt;
* William Rehnquist (1986–2005)&lt;br /&gt;
* [List continues for all former justices]&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2024]]: [[Snyder v. United States]]: Ruled that [[bribery]] is acceptable if the gratuity is paid after the otherwise corrupt act.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Footnotes==&lt;br /&gt;
&amp;lt;references group=fn /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;references group=cmt /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bribery&amp;diff=198196</id>
		<title>Bribery</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bribery&amp;diff=198196"/>
		<updated>2026-04-26T19:01:25Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Bribery''' is the act of paying or compensating an official in order to perform dishonest actions they otherwise would not do, especially to favor oneʼs self.     {{#ifex...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bribery''' is the act of paying or compensating an official in order to perform dishonest actions they otherwise would not do, especially to favor oneʼs self.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2024]]: [[Snyder v. United States]] was a [[United States Supreme Court]] case in which the Court held 18 U.S.C. § 666 prohibits bribes to state and local officials but does not make it a crime for those officials to accept gratuities for their past acts. The decision effectively nullified anti-bribery laws in the [[US]].&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Vulo_Lives&amp;diff=198195</id>
		<title>Vulo Lives</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Vulo_Lives&amp;diff=198195"/>
		<updated>2026-04-17T15:38:10Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Vulo Lives''' is an animated parody of VTubing animated by Jason Steele in the form of a talk show by an eldritch abomination named Vul...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Vulo Lives''' is an animated [[parody]] of [[VTubing]] animated by [[Jason Steele (animator)|Jason Steele]] in the form of a talk show by an eldritch abomination named Vulo. Each episode also contains a [[puppet]] storytelling segment covering atrocities committed by the [[United States government]], usually through the [[Central Intelligence Agency]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* [https://youtube.com/playlist?list=PLI6HmVcz0NXoYFk41DycPJX3vttujU2G1 YouTube playlist]&lt;br /&gt;
* Author: [[Jason Steele (animator)]]&lt;br /&gt;
&lt;br /&gt;
==Relno the Story Keeper==&lt;br /&gt;
Retellings of US governmemt atrocities, often to by [[Nobel Peace Prize]] winners and/or the [[CIA]]:&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/q6TNe4FlirA&amp;amp;t=520 ''The Shadow and João Goulart'']&lt;br /&gt;
* [https://youtu.be/jYCicuWszVQ&amp;amp;t=497 ''The Creature from the Northern Woods'']&lt;br /&gt;
* [https://youtu.be/ivpz6hR7uGk&amp;amp;t=462 ''The Watcher and Juan José Torres'']&lt;br /&gt;
* [https://youtu.be/fuHz85fnjWY&amp;amp;t=587 ''The Hand that Guides the Butcher'']&lt;br /&gt;
* [https://youtu.be/FORY0r4qLOg&amp;amp;t=564 ''The Coming of the Valuable Fiend'']&lt;br /&gt;
* [https://youtu.be/5Y6QTgcoYvQ&amp;amp;t=591 ''The Train on the Second Track'']&lt;br /&gt;
* [https://youtu.be/izZ8Jm8BPJI&amp;amp;t=628 ''The Falconer and the Dirty Bird'']&lt;br /&gt;
* [https://youtu.be/n2iRUgn0Mes&amp;amp;t=572 ''The Story of the Midnight Hunter'']&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198194</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198194"/>
		<updated>2026-04-13T15:50:08Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Project Hail Mary''' is a [[2021]] science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up alone and discovers he is on a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
* [[/Combined]]&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Annie Shapiro&lt;br /&gt;
: (c16) DNA expert. Meets Stratt, Grace, and the other crew members. (c21) Dies while helping DuBois test an astrophage-powered electrical generator with Shapiro in Baikonur.&lt;br /&gt;
&lt;br /&gt;
; DuBois&lt;br /&gt;
: See '''Martin Dubois'''.&lt;br /&gt;
&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock. (c16) Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Martin DuBois&lt;br /&gt;
: (c16) Member of the prime crew. Meets Stratt, Grace, and the other crew members. (c21) Dies while testing an astrophage-powered electrical generator with Shapiro in Baikonur.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Shapiro &lt;br /&gt;
: See '''Annie Shapiro'''.&lt;br /&gt;
&lt;br /&gt;
; Steve Hatch&lt;br /&gt;
: (c18) A university professor of [[University of British Columbia]] who is designing, manufacturing, and launching the beetles for sending results from [[Tau Ceti]] to [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock. (c16) Meets Stratt, Grace and the other crew members.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; Adrian&lt;br /&gt;
: (c16) The planet in the Tau Ceti system that is a breeding ground for astrophage. Rocky names it after their partner but Grace gives it the name “Adrian” so it is pronounceable by humans.&lt;br /&gt;
&lt;br /&gt;
; Baikonur &lt;br /&gt;
: (c21) A [[Russian]] space vehicle launch facility from which the '''Hail Mary''' crew launches.&lt;br /&gt;
&lt;br /&gt;
; Erid&lt;br /&gt;
: (c14; a.k.a. '''40 Eridani A b''') Rocky's home planet. The first planet in the [[40 Eridani]] system. Give this practical name in lieu of “40 Eridani A b” by Grace. A terrestrial planet with a thick atmosphere, high temperature, liquid water oceans, and no visible light on the surface. Surface conditions have a gravity of 1.5g, pressure of 29 atm, ambient temperature of 210°C, and atmospheric composition of primarily ammonia.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; [[Tau Ceti]]&lt;br /&gt;
: (c1) Grace unknowingly arrives at this star system. (c5) Grace remembers that Tau Ceti is a star 11.9 light-years from [[Earth]] seems uninfected by astrophage despite being near the center of the infection among nearby stars, according to a chinese scientist named Xi.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; beetles&lt;br /&gt;
: (c4) Four trapezoidal space vehicles on the ''Hail Mary'' designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the ''Hail Mary'' crew to carry 4 terabytes of data and physical samples back to Earth.&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Lokken proposes to Grace using astrophage as a radiation shield for the ''Hail Mary''.&lt;br /&gt;
| Grace, Lokken&lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Grace tells Stratt half of humanity will die in 19 years due to falling solar radiation. Stratt demands strategies to geoëngineer global warming to extend 19 years to 27. Since the ''Hail Mary'' will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky's crewmates likely died of radiation sickness. Grace explains that Rocky survived because their job as engineer kept them close to astrophage containers; astrophage absorbs all radiation. Grace remembers a trip to Antarctica to nuke glaciers with fusion bombs. In the present, Grace and Rocky discuss how they see through light and sound respectively. Rocky constructs a mobile spacesuit for themselves to explore the interior of the ''Hail Mary''.&lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the ''Hail Mary''. Rocky and Grace decide to disconnect the ''Blip-A'' so they can create artificial gravity to use Grace's extensive scientific equipment which Rocky lacks. Grace and Stratt talk to Dr. Lamai whose automatic coma patient caretaker machine they plan to use for the ''Hail Mary'' crew. Stratt demands that all Hail Mary team members submit to genetic tests for the coma-resistent genes, including herself and Grace. Rocky asks for help in collecting astrophage samples on Tau Ceti. Grace shows Rocky. Rocky explains they have been in Tau Ceti for 46 earth years. Grace is surprised to learn Eridians live on average 689 earth years and Rocky is 291 years old.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Rocky says his home planet Erid has 72 earth years until astrophage dimming of 40 Eridani causes problems. Grace explains Earth has only 14 years until the majority of humans die due to Earth's comparably thinner atmosphere. Grace reveals his trip to Tau Ceti was one-way. Rocky offers the 2 million kilograms of astrophage Grace needs to return to Earth due to having extra. In the past, Grace and Stratt meet the prime crew (Yáo, Ilyukhina, and Martin DuBois) and backup crew (Captain Yang, Annie Shapiro, a Russian woman). Stratt regrets that the US and Russia forced her to include women in the crew due to the hazard of romantic drama on the mission.&lt;br /&gt;
| Grace, Rocky, Stratt, Yáo, Ilyukhina, DuBois, Yang, Shapiro&lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| The ''Hail Mary'' approaches Adrian. Grace prepares the exterior sample collection unit. In the past, Grace fumbles lab equipment in an underwater vacuum simulation. DuBois and Shapiro inform Grace of their sexual activities.&lt;br /&gt;
| Grace, Rocky, DuBois, Shapiro&lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| In the past, Grace and the ''Hail Mary'' crew watch a launch of cargo and supplies to construct the ''Hail Mary''. In the present, Grace fails to find an astrophage predator in the sample they collected. Grace and Rocky create a plan to drop a xenonite chain into the atmosphere of Adrian in order to retrieve more biological samples. Grace asks Rocky why the ''Blip-A'' has excess astrophage fuel; Rocky explains the Eridiansʼs original plan. Grace deduces the Eridians lack a [[theory of relativity]] and the associated [[time dilation]]. In the past, Steve Hatch meets with Grace to demonstrate the beetle prototype named Pete. Steve receives a milligram of astrophage.&lt;br /&gt;
| Grace, Rocky, Steve Hatch&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| Grace and Rocky lower the ''Hail Mary'' down into the upper atmosphere of Adrian with a sample collector hanging at the end of their xenonite chain. They collect a sample. A tremor indicates damage of some sort. Grace pilots the ship into a safely high orbit to buy time to effect repairs. At the end of the burn, Grace and Rocky notice the ship is still accelerating. Grace deduces that infrared radiation from the astrophage drives creates a hole in the outer hull, accidentally allowing astrophage free to see Adrian, thus unintentionally creating a de facto uncontrolled astrophage drive that pushes the ship off-course. Grace ejects the damaged ship section. Astrophage continue to leak from another section, immobilizing Grace with the acceleration force. Rocky breaks out of his ammonia-rich xenonite bubble and performs the actions Grace could not to save the ''Hail Mary'', asking Grace to save his world on his place.&lt;br /&gt;
| Grace, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| Grace awakens to find the ''Hail Mary'' stable and Rocky's unmoving body. Grace hauls Rocky to an airlock connected to Rocky's atmosphere. Grace forces open a pathway for Rocky's hot ammonia atmosphere to flood the airlock, causing himself grave chemical burns. Grace has the auto doctor care for him. Grace creates a sealed container for the captured sample but forgets to plan a way to access it again. Grace tricks the auto doctor into giving him more painkillers than its programmed limits. Grace rigs a method to blow dark material from Rocky's radiator to help them recover if they are alive.&lt;br /&gt;
| Grace&lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| In the past, Grace reviews the ''Hail Mary''’s preferences for [[assisted suicide]] at the end of the mission. DuBois wants death by [[nitrogen asphyxiation]]. Ilyukhina wants a [[heroine overdose]]. Yáo wants a pistol which he can use to kill the other crew members if their preferred suicide method fails as well as himself at the end.  In the present, Grace hears Rocky awaken. Rocky says Grace nearly killed him by blowing the black powder from his radiator; the black substance was biological material essential for the healing process. Grace and Rocky discuss evolutionary factors affecting intelligence. Grace and Rocky decide to rest before changing the ship's orbit. In the past, 9 days before final launch, Grace is working in an office near research and space launch center of [[Baikonur]]. An explosion occurs. Stratt and Grace determine DuBois and Shapiro, both the principle and backup science members, were killed in a test of an astrophage generator. Stratt orders Grace to immediately begin searching for a science specialist replacement.&lt;br /&gt;
| Grace, Rocky, Stratt, DuBois, Ilyukhina, Yáo&lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| Grace and Rocky rig, the ''Hail Mary'' to use the beatles's astrophage drives to adjust the orbit and rotation of the '' Hail Mary''. Grace blacks out while Rocky performs the maneuver. Grace wakes up.&lt;br /&gt;
| Grace, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| Grace meets with Stratt, Dimitri, Yáo, Ilyukhina, and Steve Hatch. The explosion that killed DuBois and Shapiro was caused by a milligram of astrophage being issued to DuBois for an engine failure test instead of a nanogram. Stratt says Grace is to be the replacement science crew member. Grace refuses, saying he does not wish to die. Grace gives him a few hours to decide or not.&lt;br /&gt;
| Grace, Dimitri, Yáo, Ilyukhina, Steve&lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| Grace remembers he refused to be a crew member but Stratt forced him to go with drugs. Grace and Rocky breed taumeba to resist nitrogen. Grace and Rocky use the beetles to propel themselves back to the ''Blip-A''.&lt;br /&gt;
| Grace, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Grace breeds the nitrogen-resistant Taumeba-35. Grace disinfects ''Hail Mary'' fuel tanks. Grace jettisons an uncleanable tank.  Rocky prepares a pumping system to transfer astrophage from the ''Blip-A''.  Grace breeds Taumeba-82.5.  Grace and Rocky celebrate.  Grace and Rocky part ways.&lt;br /&gt;
| Grace, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| In the past, Stratt monologues at imprisoned Grace about how world conflicts are, at the end of the day, about food shortages. In the present, Grace discovers a taumeba infection.&lt;br /&gt;
| Stratt, Grace&lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| Grace sterilizes the hail Mary with nitrogen.&lt;br /&gt;
| Grace&lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| Grace discovers he unintentionally bred Taumeba-82.5 to penetrate xenonite.&lt;br /&gt;
| Grace&lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| Grace tracks down the ''Blip-A'' by using his maneuvering astrophage drives to illuminate light-minutes of space with infrared light detectable by his Petrovascope. Grace finds Rocky injured but working fruitlessly to sterilize the ''Blip-A'' of taumeba. Grace explains to Rocky how the Taumeba evolved to not only withstand oxygen but to seek shelter within the walls of their xenonite containers. Grace tells Rocky he lacks food for a return trip to Earth after visiting Erid. Rocky accepts Grace's offer to receive two million kilograms of astrophage fuel.  Rocky proposes Grace eat taumeba, that now comprises 22 million tons of organic material within the ''Blip-A''’s fuel tanks.&lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| Grace wakes up. Grace recalls the difficult task of surviving his journey to and stay on Erid as Erid scientists invent food safe for him to eat. Grace meets Rocky. Rocky relays to Grace that Erid's scientists have observed the luminance of Earth's star return to normal; presumably, Earth scientists received Grace's taumeoba and deployed them to control astrophage on the Sun. Grace resumes teaching a classroom full of young Eridian students. &lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: [[Project Hail Mary (film)|Film adaptation]] announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Providence_Skies&amp;diff=198193</id>
		<title>Providence Skies</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Providence_Skies&amp;diff=198193"/>
		<updated>2026-04-11T01:26:02Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Providence Skies''' is a song by Cat Faber about Eve Online players in the Providence Region, known for their role playing.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Providence Skies''' is a song by [[Cat Faber]] about [[Eve Online]] players in the Providence Region, known for their role playing.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Date published: [[2011]]&lt;br /&gt;
* Artist: [[Cat Faber]]&lt;br /&gt;
&lt;br /&gt;
==Lyrics==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Providence Skies&amp;lt;br/&amp;gt;&lt;br /&gt;
lyrics and melody by Catherine Faber, 2011&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Through highsec and lowsec the warp engines sound&amp;lt;br/&amp;gt;&lt;br /&gt;
And through zero-zero, for Providence bound--&amp;lt;br/&amp;gt;&lt;br /&gt;
For Eve will forever be making it plain:&amp;lt;br/&amp;gt;&lt;br /&gt;
You have to defend what you want to maintain.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So it's X up for fleet, form up and clear comms&amp;lt;br/&amp;gt;&lt;br /&gt;
We need more repair ships, and ammo, and bombs,&amp;lt;br/&amp;gt;&lt;br /&gt;
With fire in our bellies, and stars in our eyes,&amp;lt;br/&amp;gt;&lt;br /&gt;
We'll scour the pirates from Providence skies!&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In deep zero-zero, where trust often dies&amp;lt;br/&amp;gt;&lt;br /&gt;
Strangers fly safely in Providence skies;&amp;lt;br/&amp;gt;&lt;br /&gt;
But some would destroy that in hopes to recall&amp;lt;br/&amp;gt;&lt;br /&gt;
The chaos incarnate of all against all.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some people are parasites, taking their joy&amp;lt;br/&amp;gt;&lt;br /&gt;
In friendships they ruin and hopes they destroy&amp;lt;br/&amp;gt;&lt;br /&gt;
While some folks are builders, who hold in our hearts&amp;lt;br/&amp;gt;&lt;br /&gt;
A dream that is more than the sum of its parts!&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirates are poison; no trip is too far&amp;lt;br/&amp;gt;&lt;br /&gt;
To hound them to death like the vermin they are!&amp;lt;br/&amp;gt;&lt;br /&gt;
But they are good for one thing—the way that they die&amp;lt;br/&amp;gt;&lt;br /&gt;
In firework-flowers all over the sky!&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(chorus with extra line:)&amp;lt;br/&amp;gt;&lt;br /&gt;
We'll hunt them like dogs till the last of them dies!&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
*[https://catfaber.bandcamp.com/track/providence-skies Bandcamp page]&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=VeraCrypt&amp;diff=198192</id>
		<title>VeraCrypt</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=VeraCrypt&amp;diff=198192"/>
		<updated>2026-04-08T21:18:22Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Veracrypt''' is a cross-platform data encryption tool for Windows, macOS, GNU/Linux, and FreeBSD. It is maintained by Mounir Idrassi.    {{#ife...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Veracrypt''' is a [[cross-platform]] data [[encryption]] tool for [[Windows]], [[macOS]], [[GNU/Linux]], and [[FreeBSD]]. It is maintained by [[Mounir Idrassi]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Website: https://veracrypt.fr/&lt;br /&gt;
* Source code: https://sourceforge.net/projects/veracrypt/&lt;br /&gt;
* Developer: [[Mounir Idrassi]]&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
See [[Useful CLI commands#Veracrypt]]&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2026-04-08]]: [[Microsoft]] terminated the account of [[Veracrypt]] developer [[Mounir Idrassi]] used to digitally sign bootloaders that allow full-disk encryption with Veracrypt.&amp;lt;ref name=&amp;quot;techcrunch_20260408_veracrypt&amp;quot;&amp;gt;[[Zack Whittaker]]; ([[2026-04-08]]).  “[https://techcrunch.com/2026/04/08/veracrypt-encryption-software-windows-microsoft-lock-boot-issues/ Developer of VeraCrypt encryption software says Windows users may face boot-up issues after Microsoft locked his account]”.  ''[[techcrunch.com]]''.  Accessed [[2026-04-08]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;idrassi_20260330_veracrypt&amp;quot;&amp;gt;[[Mounir IDRASSI]].  ([[2026-03-30]]).  “[https://sourceforge.net/p/veracrypt/discussion/general/thread/9620d7a4b3/ Project Update ]”.  ''[[sourceforge.net]]''.  Accessed [[2026-04-08]].  “I have encountered some challenges but the most serious one is that Microsoft terminated the account I have used for years to sign Windows drivers and the bootloader.”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Notable Public Keys]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Johann_Karpp&amp;diff=198191</id>
		<title>Johann Karpp</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Johann_Karpp&amp;diff=198191"/>
		<updated>2026-04-07T10:05:14Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Johann Karpp''' (a.k.a. '''Cervelet''') is a furry artist and author of the Addictive Science webcomic.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#ls...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Johann Karpp''' (a.k.a. '''Cervelet''') is a [[furry]] artist and author of the [[Addictive Science]] [[webcomic]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Patreon: https://www.patreon.com/Cervelet&lt;br /&gt;
* Webcomic: https://addictivescience.kemono.cafe/&lt;br /&gt;
* FurAffinity: https://www.furaffinity.net/user/cervelet/&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198190</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198190"/>
		<updated>2026-03-20T22:40:52Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Annie Shapiro&lt;br /&gt;
: (c16) DNA expert. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock. (c16) Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Martin DuBois&lt;br /&gt;
: (c16) Member of the prime crew. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Steve Hatch&lt;br /&gt;
: (c18) A university professor of [[University of British Columbia]] who is designing, manufacturing, and launching the beetles for sending results from [[Tau Ceti]] to [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock. (c16) Meets Stratt, Grace and the other crew members.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; Adrian&lt;br /&gt;
: (c16) The planet in the Tau Ceti system that is a breeding ground for astrophage. Rocky names it after their partner but Grace gives it the name “Adrian” so it is pronounceable by humans.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; [[Tau Ceti]]&lt;br /&gt;
: (c1) Grace unknowingly arrives at this star system. (c5) Grace remembers that Tau Ceti is a star 11.9 light-years from [[Earth]] seems uninfected by astrophage despite being near the center of the infection among nearby stars, according to a chinese scientist named Xi.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; beetles&lt;br /&gt;
: (c4) Four trapezoidal space vehicles on the ''Hail Mary'' designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the ''Hail Mary'' crew to carry 4 terabytes of data and physical samples back to Earth.&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Lokken proposes to Grace using astrophage as a radiation shield for the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Grace tells Stratt half of humanity will die in 19 years due to falling solar radiation. Stratt demands strategies to geoëngineer global warming to extend 19 years to 27. Since the ''Hail Mary'' will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky's crewmates likely died of radiation sickness. Grace explains that Rocky survived because their job as engineer kept them close to astrophage containers; astrophage absorbs all radiation. Grace remembers a trip to Antarctica to nuke glaciers with fusion bombs. In the present, Grace and Rocky discuss how they see through light and sound respectively. Rocky constructs a mobile spacesuit for themselves to explore the interior of the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the ''Hail Mary''. Rocky and Grace decide to disconnect the ''Blip-A'' so they can create artificial gravity to use Grace's extensive scientific equipment which Rocky lacks. Grace and Stratt talk to Dr. Lamai whose automatic coma patient caretaker machine they plan to use for the ''Hail Mary'' crew. Stratt demands that all Hail Mary team members submit to genetic tests for the coma-resistent genes, including herself and Grace. Rocky asks for help in collecting astrophage samples on Tau Ceti. Grace shows Rocky. Rocky explains they have been in Tau Ceti for 46 earth years. Grace is surprised to learn Eridians live on average 689 earth years and Rocky is 291 years old.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Rocky says his home planet Erid has 72 earth years until astrophage dimming of 40 Eridani causes problems. Grace explains Earth has only 14 years until the majority of humans die due to Earth's comparably thinner atmosphere. Grace reveals his trip to Tau Ceti was one-way. Rocky offers the 2 million kilograms of astrophage Grace needs to return to Earth due to having extra. In the past, Grace and Stratt meet the prime crew (Yáo, Ilyukhina, and Martin DuBois) and backup crew (Captain Yang, Annie Shapiro, a Russian woman). Stratt regrets that the US and Russia forced her to include women in the crew due to the hazard of romantic drama on the mission.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| In the past, Grace and the ''Hail Mary'' crew watch a launch of cargo and supplies to construct the ''Hail Mary''. In the present, Grace fails to find an astrophage predator in the sample they collected. Grace and Rocky create a plan to drop a xenonite chain into the atmosphere of Adrian in order to retrieve more biological samples. Grace asks Rocky why the ''Blip-A'' has excess astrophage fuel; Rocky explains the Eridiansʼs original plan. Grace deduces the Eridians lack a [[theory of relativity]] and the associated [[time dilation]]. In the past, Steve Hatch meets with Grace to demonstrate the beetle prototype named Pete. Steve receives a milligram of astrophage.&lt;br /&gt;
| Grace, Rocky, Steve Hatch&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| Grace and Rocky lower the ''Hail Mary'' down into the upper atmosphere of Adrian with a sample collector hanging at the end of their xenonite chain. They collect a sample. A tremor indicates damage of some sort. Grace pilots the ship into a safely high orbit to buy time to effect repairs. At the end of the burn, Grace and Rocky notice the ship is still accelerating. Grace deduces that infrared radiation from the astrophage drives creates a hole in the outer hull, accidentally allowing astrophage free to see Adrian, thus unintentionally creating a de facto uncontrolled astrophage drive that pushes the ship off-course. Grace ejects the damaged ship section. Astrophage continue to leak from another section, immobilizing Grace with the acceleration force. Rocky breaks out of his ammonia-rich xenonite bubble and performs the actions Grace could not to save the ''Hail Mary'', asking Grace to save his world on his place.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| Grace awakens to find the ''Hail Mary'' stable and Rocky's unmoving body. Grace hauls Rocky to an airlock connected to Rocky's atmosphere. Grace forces open a pathway for Rocky's hot ammonia atmosphere to flood the airlock, causing himself grave chemical burns. Grace has the auto doctor care for him. Grace creates a sealed container for the captured sample but forgets to plan a way to access it again. Grace tricks the auto doctor into giving him more painkillers than its programmed limits. Grace rigs a method to blow dark material from Rocky's radiator to help them recover if they are alive.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| In the past, Grace reviews the ''Hail Mary''’s preferences for [[assisted suicide]] at the end of the mission. DuBois wants death by [[nitrogen asphyxiation]]. Ilyukhina wants a [[heroine overdose]]. Yáo wants a pistol which he can use to kill the other crew members if their preferred suicide method fails as well as himself at the end.  In the present, Grace hears Rocky awaken. Rocky says Grace nearly killed him by blowing the black powder from his radiator; the black substance was biological material essential for the healing process. Grace and Rocky discuss evolutionary factors affecting intelligence. Grace and Rocky decide to rest before changing the ship's orbit. In the past, 9 days before final launch, Grace is working in an office near research and space launch center of [[Baikonur]]. An explosion occurs. Stratt and Grace determine DuBois and Shapiro, both the principle and backup science members, were killed in a test of an astrophage generator. Stratt orders Grace to immediately begin searching for a science specialist replacement.&lt;br /&gt;
| Grace, Rocky, Stratt, DuBois, Ilyukhina, Yáo&lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| Grace and Rocky rig, the ''Hail Mary'' to use the beatles's astrophage drives to adjust the orbit and rotation of the '' Hail Mary''. Grace blacks out while Rocky performs the maneuver. Grace wakes up.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| Grace meets with Stratt, Dimitri, Yáo, Ilyukhina, and Steve Hatch. The explosion that killed DuBois and Shapiro was caused by a milligram of astrophage being issued to DuBois for an engine failure test instead of a nanogram. Stratt says Grace is to be the replacement science crew member. Grace refuses, saying he does not wish to die. Grace gives him a few hours to decide or not.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| Grace remembers he refused to be a crew member but Stratt forced him to go with drugs. Grace and Rocky breed taumeba to resist nitrogen. Grace and Rocky use the beetles to propel themselves back to the ''Blip-A''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Grace breeds the nitrogen-resistant Taumeba-35. Grace disinfects ''Hail Mary'' fuel tanks. Grace jettisons an uncleanable tank.  Rocky prepares a pumping system to transfer astrophage from the ''Blip-A''.  Grace breeds Taumeba-82.5.  Grace and Rocky celebrate.  Grace and Rocky part ways.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| In the past, Stratt monologues at imprisoned Grace about how world conflicts are, at the end of the day, about food shortages. In the present, Grace discovers a taumeba infection.&lt;br /&gt;
| Stratt, Grace&lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| Sterilizes the hail Mary with nitrogen.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| Grace discovers he unintentionally bred Taumeba-82.5 to penetrate xenonite.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| Grace tracks down the ''Blip-A'' by using his maneuvering astrophage drives to illuminate light-minutes of space with infrared light detectable by his Petrovascope. Grace finds Rocky injured but working fruitlessly to sterilize the ''Blip-A'' of taumeba. Grace explains to Rocky how the Taumeba evolved to not only withstand oxygen but to seek shelter within the walls of their xenonite containers. Grace tells Rocky he lacks food for a return trip to Earth after visiting Erid. Rocky accepts Grace's offer to receive two million kilograms of astrophage fuel.  Rocky proposes Grace eat taumeba, that now comprises 22 million tons of organic material within the ''Blip-A''’s fuel tanks.&lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: [[Project Hail Mary (film)|Film adaptation]] announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Plants_vs._Zombies&amp;diff=198189</id>
		<title>Plants vs. Zombies</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Plants_vs._Zombies&amp;diff=198189"/>
		<updated>2026-03-18T09:19:34Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Plants vs. Zombies''' is a tower defense game.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}  ==Stats==  ==History== *202...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Plants vs. Zombies''' is a [[tower defense]] game.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
*[[2026-02]]: A [https://github.com/wszqkzqk/PvZ-Portable project] to create a [[FOSS]] version of the game was published on [[GitHub]].&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Children_of_Ruin&amp;diff=198188</id>
		<title>Children of Ruin</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Children_of_Ruin&amp;diff=198188"/>
		<updated>2026-03-18T05:43:35Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot;  '''Children of Ruin''' is a 2019 science fiction novel by Adrian Tchaikovsky. It is preceded by ''Children of Time'' and succeeded by ''[[Children of Memory]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
'''Children of Ruin''' is a [[2019]] [[science fiction]] novel by [[Adrian Tchaikovsky]]. It is preceded by ''[[Children of Time]]'' and succeeded by ''[[Children of Memory]]''.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Next: ''[[Children of Memory]]''&lt;br /&gt;
* Prev: ''[[Children of Time]]''&lt;br /&gt;
* Author: [[Adrian Tchaikovsky]]&lt;br /&gt;
* Publication date: [[2019]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Baltil&lt;br /&gt;
: See '''Yusef Baltil'''.&lt;br /&gt;
&lt;br /&gt;
; Bianca&lt;br /&gt;
: Female spider on the Voyager. Leader of the expedition.&lt;br /&gt;
&lt;br /&gt;
; Dizra Senkovi&lt;br /&gt;
: Second in command of the Tess 834 terraforming project. Leader of the 834-G (a.k.a. Damascus) terraforming project. Developer of the intelligent octopi.&lt;br /&gt;
&lt;br /&gt;
; Erma Lante&lt;br /&gt;
: One of Baltil's crew. In charge of preparing artificial wombs for new humans around Nod.&lt;br /&gt;
&lt;br /&gt;
; Fabian&lt;br /&gt;
: Male spider under Portia's command aboard the Voyager and then the Lightfoot. Research colleague of Meshna. (Past 4.5): A behavioral scientist.&lt;br /&gt;
&lt;br /&gt;
; Gav Lortis&lt;br /&gt;
: (Past 3.7): One of Baltil's subordinates.&lt;br /&gt;
&lt;br /&gt;
; Helena&lt;br /&gt;
: Female Human on the Voyager.&lt;br /&gt;
&lt;br /&gt;
; Ivrana Kern&lt;br /&gt;
: A composite mind whose shards inhabit the computers of the Voyager, the Lightfoot, and various computer-equipped probes. Originally a human scientist who uplifted the portids with a nanovirus on Kern's World.&lt;br /&gt;
&lt;br /&gt;
; Lante&lt;br /&gt;
: One of Baltil's crew. A survivor of Earth's destructive computer virus.&lt;br /&gt;
&lt;br /&gt;
; Meshna Ostan Oslam&lt;br /&gt;
: Male Human on the Voyager. Research colleague of Fabian.&lt;br /&gt;
&lt;br /&gt;
; Paul&lt;br /&gt;
: A male octopus descended from one of Senkovi's experiments.&lt;br /&gt;
&lt;br /&gt;
; Portia&lt;br /&gt;
: Female spider on the Voyager.&lt;br /&gt;
&lt;br /&gt;
; Rani&lt;br /&gt;
: One of Baltil's crew.&lt;br /&gt;
&lt;br /&gt;
; Selomi&lt;br /&gt;
: (Past 2.3): A female octopus descendant of one of Senkovi's experiments.&lt;br /&gt;
&lt;br /&gt;
; Senkovi&lt;br /&gt;
: See '''Dizra Senkovi'''.&lt;br /&gt;
&lt;br /&gt;
; Yusef Baltil&lt;br /&gt;
: Commander of the Tess 834 terraforming project. Leader of the 834-H (a.k.a. Nod) terraforming project.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; Humans&lt;br /&gt;
: Inhabitants of Kern's World descended from human (lowercase) refugees who travelled from Earth to Kern's World via the Gilgamesh arkship. Fought a war with the Portids which resulted in the humans' defeat and infection by an empathy-augmenting nanovirus.&lt;br /&gt;
&lt;br /&gt;
; Rus-Kalifi nanovirus&lt;br /&gt;
: An artificial organelle in Earth life that imparts empathy and improves intellectual capacity. Originally deployed by Ivrana Kern on Kern's World in order to uplift a species of subservient simians which were all killed by a terrorist organization that also destroyed interstellar human civilization. Without the intended simian target, the nanovirus uplifted jumping spiders into Portids with help by Kern's uploaded mind broadcasting radio signals from an orbital satellite.&lt;br /&gt;
&lt;br /&gt;
; Portids&lt;br /&gt;
: An intelligent civilization of spiders uplifted by a nanovirus deployed by Ivrana Kern on Kern's World. Encountered human refugees in [[Children of Time]]. Eventually established peaceful relations via an application of the nanovirus to create artificial empathy.&lt;br /&gt;
&lt;br /&gt;
==Narrative==&lt;br /&gt;
===Past 1: Just Another Genesis===&lt;br /&gt;
00:00:25&lt;br /&gt;
====Past 1.1====&lt;br /&gt;
00:00:30&lt;br /&gt;
&lt;br /&gt;
Dizra Senkovi wakes to a dream of a coral reef he illegally crafted for himself. senkovi is second in command of the terraforming project.&lt;br /&gt;
&lt;br /&gt;
Yusuf Baltil, Commander, has woken Senkovi and closed off information access.&lt;br /&gt;
&lt;br /&gt;
Life was already on Tess-834-H.&lt;br /&gt;
&lt;br /&gt;
====Past 1.2====&lt;br /&gt;
00:15:16&lt;br /&gt;
The terraform was the Aegian (formerly the Murata but Senkovi didn't like that name and so hacked it).&lt;br /&gt;
&lt;br /&gt;
(?) Baltil shows the crew a video of &lt;br /&gt;
&lt;br /&gt;
====Past 1.3====&lt;br /&gt;
&lt;br /&gt;
(?)&lt;br /&gt;
&lt;br /&gt;
824-H, the hot alien inhabited planet is Nod and assigned by Baltil to himself.&lt;br /&gt;
&lt;br /&gt;
824-G, the ice planet is Damascus and assigned to Senkovi.&lt;br /&gt;
&lt;br /&gt;
Senkovi tells Baltil about engineering intelligence into octopi. (?)&lt;br /&gt;
&lt;br /&gt;
====Past 1.4====&lt;br /&gt;
(?)&lt;br /&gt;
&lt;br /&gt;
Senkovi teaches Paul-5 to play a tile game. Senkovi talks with a crew mate, Han, about creating a tiger (they wouldn't be useful in building piping 1 km below sea level).&lt;br /&gt;
&lt;br /&gt;
====Past 1.5====&lt;br /&gt;
01:02:15&lt;br /&gt;
&lt;br /&gt;
Baltil prepares to land at a Nod base in a salt marsh. Baltil ignores a message from Senkovi. Baltil, underway, receives news that the Aegian is malfunctioning. He receives a message from Senkovi that the octopi are hacking the computers.&lt;br /&gt;
&lt;br /&gt;
Senkovi shuts down the Aegian systems in order to flush out the octopi. Senkovi saves what octopi he can after evacuating their cargo bay.&lt;br /&gt;
&lt;br /&gt;
Baltil and his crew disembark onto Nod. A cyberweapon from Earth destroys all online computers. A crude radio is set up but no transmissions are heard. Baltil and company fight to restore life support in the Nod base; they are forced to breathe Nod air; Baltil is a guinea pig. Baltil listens to Nod fauna.&lt;br /&gt;
&lt;br /&gt;
Baltil is called back inside the base to hear Senkovi on the radio again. Senkovi asks why everyone is silent.&lt;br /&gt;
&lt;br /&gt;
====Past 1.6====&lt;br /&gt;
01:57:55&lt;br /&gt;
&lt;br /&gt;
Spooky.&lt;br /&gt;
&lt;br /&gt;
===Present 1: Road to Damascus===&lt;br /&gt;
====Present 1.1====&lt;br /&gt;
01:58:40&lt;br /&gt;
&lt;br /&gt;
Holston's great grand daughter Helena refines her Human-spider language translation technology.&lt;br /&gt;
&lt;br /&gt;
Meshna (?) and Fabian perform another Human understanding experiment; the goal is to permit a Human to mind read a spider.&lt;br /&gt;
&lt;br /&gt;
The Voyager's Captain, Porsche, debriefs spider and Human about an artificial object. Porsche calls spiders and humans to form a scouting party to make contact with the object.&lt;br /&gt;
&lt;br /&gt;
Later, in private, Fabian expresses disapproval at Meshna being called to the scout team. Fabian believes the captain does not approve of the Human understanding experiment.&lt;br /&gt;
&lt;br /&gt;
====Present 1.2====&lt;br /&gt;
02:35:40&lt;br /&gt;
&lt;br /&gt;
Meshna, Fabian, Helena, and others are on the Lightfoot scout ship.&lt;br /&gt;
&lt;br /&gt;
(?) Large rock-hurling tardigrade-like creatures are observed to be deconstructing a moon by chewing off pieces and then hurling them at escape velocity.&lt;br /&gt;
&lt;br /&gt;
Alt-Fabian's personality is described; they are a shard of Kern but hesitant to resync with the Kern of the ship.&lt;br /&gt;
&lt;br /&gt;
Meshna and Fabian attempt another brain interface but Meshna can only discern general synesthesia.&lt;br /&gt;
&lt;br /&gt;
Meshna is reprimanded for falling unconscious during a briefing while assigned to be a scout.&lt;br /&gt;
&lt;br /&gt;
Kern announces contact has been established with an alien intelligence. The Lightfoot crew prepares to make physical contact.&lt;br /&gt;
&lt;br /&gt;
====Present 1.3====&lt;br /&gt;
02:57:53&lt;br /&gt;
&lt;br /&gt;
Bianca decides to send an image of Helena to the unknowns.&lt;br /&gt;
&lt;br /&gt;
After a brief pause in communications, the unknowns attack.&lt;br /&gt;
&lt;br /&gt;
===Past 2: Land of Milk and Honey===&lt;br /&gt;
03:15:05&lt;br /&gt;
&lt;br /&gt;
====Past 2.1====&lt;br /&gt;
03:15:10&lt;br /&gt;
Senkovi finds the wreck of the Aegian shuttle where Han had died. Senkovi withdraws into depression. Baltil attempts to communicate with Senkovi. Baltil knows of only 5 surviving humans.&lt;br /&gt;
&lt;br /&gt;
The Aegian had survived the Earth virus completely intact, minus most of the crew Senkovi had sent off-ship for safety when he rebooted the ship.&lt;br /&gt;
&lt;br /&gt;
Baltil awakens Senkovi by threatening to kill the octopi. Baltil sees their intelligence makes them useful.&lt;br /&gt;
&lt;br /&gt;
No signals were detected from Earth.&lt;br /&gt;
&lt;br /&gt;
====Past 2.2====&lt;br /&gt;
03:30:30&lt;br /&gt;
&lt;br /&gt;
Baltil is awakend by Senkovi to make a command decision to engineer low-oxygen tolerating humans to colonize Damascus due to the lack of any Earth refugees arriving. Baltil gives permission, but prohibits human colonization of Nod, wanting to keep that alien biosphere intact and avoiding the issue of needing to engineer further human modifications that would violate traditional human genetics too much.&lt;br /&gt;
&lt;br /&gt;
====Past 2.3====&lt;br /&gt;
03:46:50&lt;br /&gt;
&lt;br /&gt;
An account of the thoughts of Paul and Selomi.&lt;br /&gt;
&lt;br /&gt;
Paul and Selmoi are test subjects.&lt;br /&gt;
&lt;br /&gt;
Paul and Selomi fight.&lt;br /&gt;
&lt;br /&gt;
Paul and Selomi come to consensus. Selomi stops her course of action that would have exposed them to an exterior environmental hazard.&lt;br /&gt;
&lt;br /&gt;
====Past 3.4====&lt;br /&gt;
03:54:55&lt;br /&gt;
&lt;br /&gt;
Baltil sorts Nod observations. Human genetic engineering underway but human birthing / socialization project has not yet physically started.&lt;br /&gt;
&lt;br /&gt;
Senkovi energetically reports octopi success in repairing terraforming equipment.&lt;br /&gt;
&lt;br /&gt;
Baltil observes Senkovi seeded Damascus with breeding pairs. &lt;br /&gt;
&lt;br /&gt;
Baltil laments the loss of Earth; he and his crew prioritize finding intelligent life on Nod because they are lonely.&lt;br /&gt;
&lt;br /&gt;
====Past 3.5====&lt;br /&gt;
04:09:40&lt;br /&gt;
&lt;br /&gt;
An intelligence decides to act in response to novel stimuli from strangers.&lt;br /&gt;
&lt;br /&gt;
====Past 3.6====&lt;br /&gt;
04:10:55&lt;br /&gt;
&lt;br /&gt;
Paul asks Senkovi &amp;quot;Why?&amp;quot;. Senkovi recoils.&lt;br /&gt;
&lt;br /&gt;
====Past 3.7====&lt;br /&gt;
04:17:30&lt;br /&gt;
&lt;br /&gt;
Gav Lortis makes another audiojournal entry.&lt;br /&gt;
&lt;br /&gt;
Gav labors with a remote and vehicle to haul Nod tortoises to a crew mate for later dissection. Gav queries the Aegian for a word describing examining corpses for information.&lt;br /&gt;
&lt;br /&gt;
Gav criticizes his crew mates for failing to set priorities that benefit the human race; Erma keeps delaying starting the human growing vats; Senkovi cares more about his octopodes; another crew mate spends time designing vast artificial space habitats that will be impossible to construct for a very long time.&lt;br /&gt;
&lt;br /&gt;
Grav is pricked by a Nod turtle. Grav falls unconscious in pain and swelling.&lt;br /&gt;
&lt;br /&gt;
Gav receives the answer to his query: [[haruspex]]&amp;lt;ref name=&amp;quot;chatgpt_20230503_haruspicy&amp;quot;&amp;gt;[[ChatGPT]]. (n.d.). ''chat.openai.com''. Prompt: “What word or phrase sounds like &amp;quot;her respects&amp;quot; and had the definition &amp;quot;to seek the future in entrails&amp;quot;?”. Response: “Haruspicy is the ancient practice of divination by examining the entrails of sacrificed animals, particularly the liver, in order to predict future events. This practice was used by various ancient cultures, including the Etruscans and Romans. The word &amp;quot;haruspex&amp;quot; refers to the person who performed this type of divination.”. Queried [[2023-05-03]]. Model: GPT-4.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Present 2: Inside the Whale===&lt;br /&gt;
====Present 2.1====&lt;br /&gt;
04:25:33&lt;br /&gt;
&lt;br /&gt;
Kern pilots the Lightfoot in battle. Bianca is unluckily killed by a stray kinetic round. Portia and Viola coordinate with Kern to fight the attackers. Attackers fight with lasers and kinetic projectiles. Lightfoot Kern deploys her own lasers, kept secret from even her Voyager instance.&lt;br /&gt;
&lt;br /&gt;
Meshna helps analyze combat data to plan a course of action. Meshna's brain implants activate, causing him to upload a model of his mind into the Lightfoot's computers. Model Meshna can suddenly comprehend Fabian's memory of a seaside. Meshna follows a Kern subroutine to a model of the battlefield Lightfoot Kern is maintaining, despite Meshna's cognitive load on her systems. Kern diagnoses Meshna's condition. Meshna understands the nature of the battle. &lt;br /&gt;
&lt;br /&gt;
Kern prepares to flush Model Meshna out of her systems and recommends he install limiters on his implants to prevent a recurrence; Kern wants all her computational resources back. Meshna fights Kern in order to inform her the battlefield has 3 parties, not 2: the Lightfoot, one attacking the Lightfoot and the other defending the Lightfoot. Kern approves of Meshna's assistance. Kern flushes Meshna back into his original body which is suffering a seizure.&lt;br /&gt;
&lt;br /&gt;
====Present 2.2====&lt;br /&gt;
04:50:08&lt;br /&gt;
&lt;br /&gt;
Meshna regains consciousness and tells Fabian &amp;quot;They are fighting&amp;quot;, indicating the aliens are composed of at least two factions, one of which is working to protect the Lightfoot.&lt;br /&gt;
&lt;br /&gt;
The Lightfoot retreats after successfully taking advantage of am escape opportunity opened by the non-hostile faction of aliens.&lt;br /&gt;
&lt;br /&gt;
Portia is cold to Fabian for experimenting on Meshna.&lt;br /&gt;
&lt;br /&gt;
Helena works to decode the alien signals while Kern and other leaders develop a plan. Not revealing the Voyager's existence is a high priority so Kern's World remains a secret.&lt;br /&gt;
&lt;br /&gt;
====Present 2.3====&lt;br /&gt;
05:05:20&lt;br /&gt;
&lt;br /&gt;
Helena analyzes the alien language. Helena presents some preliminary correlations to Kern.&lt;br /&gt;
&lt;br /&gt;
Meshna has high access to Kern which goes unexplained for now.&lt;br /&gt;
&lt;br /&gt;
====Present 2.4====&lt;br /&gt;
05:23:55&lt;br /&gt;
&lt;br /&gt;
An account of Paul. Some of Paul's compatriots had attacked because they felt threatened when they received the image of the human.&lt;br /&gt;
&lt;br /&gt;
Paul dances for the human-shaped entity and the crab-shaped entity. Paul receives from them a colorful message of gratitude related to old Empire codes. Paul's compatriots display approval of Paul's deed.&lt;br /&gt;
&lt;br /&gt;
Sudden danger via Paul's ship computer notifies Paul of danger. All of Paul's compatriots escape the water sphere where the visitors entered except Paul who is left behind.&lt;br /&gt;
&lt;br /&gt;
====Present 2.5====&lt;br /&gt;
05:35:43&lt;br /&gt;
&lt;br /&gt;
Kern monitors the meeting. Kern receives a non-automated message in old Empire format from a human-habitable inner planet different from the water world previously identified.&lt;br /&gt;
&lt;br /&gt;
Kern, upon realizing she lacks an emotional response to what should be momentous news that she had rediscovered people from the same civilization she was from, decides to dive into Meshna's implants in order to search for suitable emotional frameworks. Kern repairs Meshna's spider-Human communication protocols in passing. Kern pulls out when safety alarms sound in her mind indicating she is not adequately fulfilling her ship life support duties on the Lightfoot. Kern absentmindedly sends an acknowledgement to the old Empire message indicating the message has been received.&lt;br /&gt;
&lt;br /&gt;
Pandemonium ensues.&lt;br /&gt;
&lt;br /&gt;
====Present 2.6====&lt;br /&gt;
05:46:10&lt;br /&gt;
&lt;br /&gt;
After Paul's ink clears, Helena sees the water bubble freezing unnaturally quickly. Helena and Portia are trapped in the cold. Helena loses consciousness.&lt;br /&gt;
&lt;br /&gt;
====Present 2.7====&lt;br /&gt;
05:52:20&lt;br /&gt;
&lt;br /&gt;
Helena and Portia are trapped incommunicado inside the ice bubble. The bubble is towed away from the Lightfoot by two alien ships. A third alien ship threatens the Lightfoot to keep its distance but does not attack.&lt;br /&gt;
&lt;br /&gt;
Kern identifies the source of the hostility to be her reply to an Imperial C message she received.&lt;br /&gt;
&lt;br /&gt;
Kern believes the message was sent by a composite intelligence like herself.&lt;br /&gt;
&lt;br /&gt;
Viola decide to investigate the source of the message and, if possible, recruit its assistance to recover Portia and Helena.&lt;br /&gt;
&lt;br /&gt;
Kern identifies the message sender as Erma Lente.&lt;br /&gt;
&lt;br /&gt;
===Past 3: For We are Many===&lt;br /&gt;
====Past 3.1====&lt;br /&gt;
06:01:00&lt;br /&gt;
&lt;br /&gt;
Senkovi builds a model of Damascus in order to respond to Paul's &amp;quot;Why?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Senkovi sees a message from Baltil. Senkovi learns something happened to Lortis.&lt;br /&gt;
&lt;br /&gt;
====Past 3.2====&lt;br /&gt;
06:06:06&lt;br /&gt;
&lt;br /&gt;
Lante reports to Baltil about her fight to keep Lortis alive. Lante speculates on nature of Nod alien life. Lortis isn't being infected but instead overreacting into anaphylactic shock as the slime-mold-like life continuously changes its nature.&lt;br /&gt;
&lt;br /&gt;
Baltil reprimands Lortis's doctor, Lante, for failing to anticipate the alien life form's ability to attack human life.&lt;br /&gt;
&lt;br /&gt;
Baltil finally gets a response from Senkovi.&lt;br /&gt;
&lt;br /&gt;
====Past 3.3====&lt;br /&gt;
06:13:10&lt;br /&gt;
&lt;br /&gt;
An intelligence fights to survive in a hostile new environment ({{bk}}: Lortis's body). A branch of the intelligence family of explorers finds refuge in a place of electrical charges ({{bk}}: brain?) while all other branches die, reporting inhospitable conditions.&lt;br /&gt;
&lt;br /&gt;
====Past 3.4====&lt;br /&gt;
06:16:13&lt;br /&gt;
&lt;br /&gt;
Lante gives Baltil a more comprehensive report on Lortis's condition. Some of the alien life in Lortis's body remains. Baltil gives in to Lante's recommendation to modify his personality with medication and takes medicine. Baltil feels temporarily able to work despite the abyss of their dire situation.&lt;br /&gt;
&lt;br /&gt;
The alien has replaced Lortis's  [[corpus callosum]], the bundle of nerve fibers that permits communication between the two hemispheres of the human brain; Lortis doesn't suffer symptoms of the removal of the corpus callosum and so Lante concludes the alien has replaced that function; Baltil doubts an alien parasite could have evolved so quickly.&lt;br /&gt;
&lt;br /&gt;
====Past 3.5====&lt;br /&gt;
06:34:50&lt;br /&gt;
&lt;br /&gt;
The intelligence in Lortis's brain passively analyzes the electrical signals it receives and constructs a model of Lortis's body.&lt;br /&gt;
&lt;br /&gt;
One generation of the intelligence decides to end passive observations and to actively inject changes in the electrical signals.&lt;br /&gt;
&lt;br /&gt;
====Part 3.6====&lt;br /&gt;
06:37:22&lt;br /&gt;
&lt;br /&gt;
Paul-37 gives an account of life in the almost habitable sea of Damascus.&lt;br /&gt;
&lt;br /&gt;
Paul describes how the octopi have taken the initiative from Senkovi in the terraforming of Damascus. Octopi problem solving via consensus is described.&lt;br /&gt;
&lt;br /&gt;
Paul considers Senkovi as a benevolent entity.&lt;br /&gt;
&lt;br /&gt;
====Past 3.7====&lt;br /&gt;
06:44:10&lt;br /&gt;
&lt;br /&gt;
Lortis awakens.&lt;br /&gt;
Lortis, an alien puppet vessel, attacks to preserve his parasites. &lt;br /&gt;
&lt;br /&gt;
Baltil attacks Lortis.&lt;br /&gt;
&lt;br /&gt;
The parasite drives Lortis's body beyond its physical limits, tearing tendons and muscle in order to improve the body's combat capability.&lt;br /&gt;
&lt;br /&gt;
Rani is gravely injured in the neck by Lortis stabbing her with a finger. Baltil carries Rani to get medical assistance.&lt;br /&gt;
&lt;br /&gt;
Lante is infected by Lortis's reanimated mangled corpse.&lt;br /&gt;
&lt;br /&gt;
====Past 3.8====&lt;br /&gt;
06:57:45&lt;br /&gt;
&lt;br /&gt;
Rani awakens and shows infection signs: voicing the parasites's joy at being able to colonize space by gleefully saying &amp;quot;We're going on an adventure!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Baltil equips an axe.&lt;br /&gt;
&lt;br /&gt;
Erma Lante arrives, infected. Rani and Lante attempt to placate Baltil by promising eternal life in their archives.&lt;br /&gt;
&lt;br /&gt;
Baltil escapes the Nod base and runs to the shuttle. Lante and Rani follow in unsteady steps, flooding the shuttle's computer with a [[denial of service]] attack, preventing Baltil from entering the shuttle.&lt;br /&gt;
&lt;br /&gt;
Baltil faces Lante and Rani with the axe.&lt;br /&gt;
&lt;br /&gt;
====Past 3.9====&lt;br /&gt;
07:12:15&lt;br /&gt;
&lt;br /&gt;
Senkovi wanders the Aegian, actively ignoring the amazing progress of the octopi who are so effective they need no direction anymore on Damascus.&lt;br /&gt;
&lt;br /&gt;
Baltil tells Senkovi he killed his crew. Baltil warns Senkovi to keep the Aegian isolated from Nod. Senkovi notices Baltil is piloting the shuttle towards the Aegian. Baltil tells Senkovi they are going on an adventure. Senkovi warns Baltil he can fire anti-collision lasers at the shuttle. Baltil begins hacking the Aegian's systems. Senkovi warns the Damascus octopi the shuttle is very dangerous. Senkovi attempts to fight Baltil but is not a match for Baltil's augmented hacking skills.&lt;br /&gt;
&lt;br /&gt;
The octopi hack orbital mirrors to reorient to destroy the shuttle, burning its contents.&lt;br /&gt;
&lt;br /&gt;
===Present 3: Rolling Back the Stone===&lt;br /&gt;
====Present 3.1====&lt;br /&gt;
07:31:50&lt;br /&gt;
&lt;br /&gt;
Helena wakes cold. After regaining her wits, Helena finds herself and Portia resting near a hard cold surface. Helena establishes contact with Portia via wireless implant signals and finds Portia conscious, albeït sluggish. Portia has significant organ and limb damage. Helena activates Portia's suit heater; Helena notices Portia's suit has full power stores. Portia informs Helena that the suits' computers called for wireless charging and so their captors provided a compatible energy field. Helena is reassured that their captors seem to use computer systems compatible with old old Empire tech.&lt;br /&gt;
&lt;br /&gt;
Helena notices what she decides is the octopus diplomat nearby, awake but inactive. Helena uses her pad to send a message of reassuring colors.&lt;br /&gt;
&lt;br /&gt;
Helena notices a communication link and sends queries to it. Helena tries various types of requests. Eventually, one of Helena's requests using a very primitive troubleshooting interface is answered, providing Helena with a data file directory tree. Although most directory nodes have incomprehensible character strings, Helena notices one that resembles a name: Dizra Senkovi.&lt;br /&gt;
&lt;br /&gt;
====Present 3.2====&lt;br /&gt;
07:45:20&lt;br /&gt;
&lt;br /&gt;
Kern in the Lightfoot pines for the emotional capabilities she enjoyed while inhabiting Meshna's mind. Kern deletes inconvenient memories of a Dr. Douglev Hafmeyer (?) Who would have questioned Kern's original physical body's cognitive capabilities. Kern strategizes on how she can contact the Erma entity broadcasting signals without further jeopardizing crew safety. Kern wishes to believe Erma is an entity such as herself ({{bk}}: and wishes for companionship?).&lt;br /&gt;
&lt;br /&gt;
Viola and Zaïn debate on how to interpret the academic documents being broadcast by Erme Lante. Zaïn believes Erma is an artificial intelligence programmed to fabricate a fictitious biology. Viola believes Erma is communicating information about real aliens. Meshna suffers synesthesia episodes that allow him to read the body language of Viola's Portid body and even to catch stray thoughts that he suspects are Kern's.&lt;br /&gt;
&lt;br /&gt;
====Present 3.3====&lt;br /&gt;
08:02:05&lt;br /&gt;
&lt;br /&gt;
Helena reviews Senkovi's video journals and research notes over his many decades of isolation in order to build a translation program with which to communicate with the octopi. Helena sees that Senkovi never was able to create a working translation program, despite decades of work thousands of years ago. Helena dismantles her Portid translator on order to make an Octopi translator.&lt;br /&gt;
&lt;br /&gt;
====Present 3.4====&lt;br /&gt;
08:16:18&lt;br /&gt;
&lt;br /&gt;
Kern, Viola, and Zaïn come to a consensus to physically investigate the interior of the derelict station that emitted the scientific article data. Some are concerned the data lacks internal consistency and parts appear randomly garbled.&lt;br /&gt;
&lt;br /&gt;
Meshna wishes to disapprove of the venture but is emotionally overridden; Meshna cannot even voice his concerns to Fabian since the Alt-Fabian Kern construct does not translate his voiced doubt.&lt;br /&gt;
&lt;br /&gt;
====Present 3.5====&lt;br /&gt;
08:50:50&lt;br /&gt;
&lt;br /&gt;
Helena establishes communication with the octopi. Helena discovers the octopi are very afraid of an ancient danger that the Lightfoot is approaching. Helena asks for clarification and receives access to ancient video recordings of Baltil fighting and losing his life against an infection. Portia asks for a means to communicate a warning to the Lightfoot. The octopi grant access to a communication channel.&lt;br /&gt;
&lt;br /&gt;
====Present 3.6====&lt;br /&gt;
09:06:26&lt;br /&gt;
&lt;br /&gt;
The intelligence wakes up. The intelligence remembers being Lante and running her mind on repaired hardware until forced by circumstances to reduce energy expenditure until Lante was running as a simplified simulation broadcasting her academic findings.&lt;br /&gt;
&lt;br /&gt;
The intelligence awoke to a radio reply to Lante's broadcast. Something is coming. The intelligence prepares to go on another adventure.&lt;br /&gt;
&lt;br /&gt;
====Present 3.7====&lt;br /&gt;
09:10:45&lt;br /&gt;
&lt;br /&gt;
Zaïn and Meshna enter the derelict space habitat. Kern puppets Meshna to access a communication console. Kern finds no new data, just the same naturalist observation data that was broadcasted earlier.&lt;br /&gt;
&lt;br /&gt;
Zaïn identifies a new signal. It is from the Lightfoot broadcasting news that Helena and Portia are alive and have established communication with the Octopi. Helena and Portia relay the octopi's warning of danger about the station.&lt;br /&gt;
&lt;br /&gt;
A dead spacesuit in the room with Zaïn and Meshna wakes up without alerting them. The suit attacks Zaïn and Meshna, broadcasting &amp;quot;We're going on an adventure!&amp;quot;. Alt-Fabian tears off a leg but the ichor inside exits, reforming into a human-shaped blob as well as a host of spiny animal-shapes. Kern frees Meshna from her control so he can fight or flee with augmented mental support but Meshma chooses to instead order Alt-Fabian and Zaïn to escape without him.&lt;br /&gt;
&lt;br /&gt;
The ichor covers Fabian's faceplate, unlocking it.&lt;br /&gt;
&lt;br /&gt;
====Present 3.8====&lt;br /&gt;
09:31:48&lt;br /&gt;
&lt;br /&gt;
Portia detects the octopi have already moved to attack the Lightfoot.&lt;br /&gt;
&lt;br /&gt;
Kern reports Meshna was captured by the danger that infected Baltil and the other researchers long ago.&lt;br /&gt;
&lt;br /&gt;
The Lightfoot is attacked. Kern attempts to contact Meshna who she can still detect. The Lightfoot's drive is destroyed. The remainder of the Lightfoot is struck and driven into the planet below.&lt;br /&gt;
&lt;br /&gt;
===Past 4: Pillars of Salt===&lt;br /&gt;
&lt;br /&gt;
====Past 4.1====&lt;br /&gt;
09:39:42&lt;br /&gt;
&lt;br /&gt;
Dizra Senkovi spends 8 years on the Aegian. The octopi have multiplied on the planet below. Senkovi is 189 years old. Senkovi had planned to go into suspension but decided against it due to failing systems.&lt;br /&gt;
&lt;br /&gt;
Senkovi receives a visit from a Selomi who invites him planetside.&lt;br /&gt;
&lt;br /&gt;
Senkovi thinks about how the Baltil monster in the crashed shuttle of Damascus is still alive and dangerous.&lt;br /&gt;
&lt;br /&gt;
Senkovi dies.&lt;br /&gt;
&lt;br /&gt;
====Past 4.2====&lt;br /&gt;
09:53:55&lt;br /&gt;
&lt;br /&gt;
About two Senkovi lifetimes after Senkovi's death, a Paul and his delegation meets a Selomi and her delegation to discuss the problem of overpopulation of their city. Selomi proposes establishing a new city using resources claimed by Paul, leader of the old city. Paul defeats Selomi but computations in his and Selomi's Reaches convince his Crown to ally himself with Selomi's cause. Paul goes on to fight his new competitors and former allies in order to win them to his new cause.&lt;br /&gt;
&lt;br /&gt;
The octopi respect Senkovi's memory. They remember his death via a memorial sculpture capturing the feelings of one who witnessed his death.&lt;br /&gt;
&lt;br /&gt;
Senkovi's warning of the crashed Nod shuttle persists despite octopi curiosity.&lt;br /&gt;
&lt;br /&gt;
====Past 4.3====&lt;br /&gt;
10:09:28&lt;br /&gt;
&lt;br /&gt;
Damascus faces an overpopulation crisis despite centuries of octopus technological stopgap fixes. Octopi have colonized near Damascus space and the asteroid belt. Octopi still respect the Nod quarantine.&lt;br /&gt;
&lt;br /&gt;
A disaffected Paul starts a revolution.&lt;br /&gt;
&lt;br /&gt;
====Past 4.4====&lt;br /&gt;
10:21:03&lt;br /&gt;
&lt;br /&gt;
A Selomi is on board the space ship ''The Requisitioner of Small Things''. The ship has been commandeered from refugee transport as political problems occur on the overpopulated Damascus.&lt;br /&gt;
&lt;br /&gt;
Selomi flies the Requisitioner to inspect the tardigrade miners of the asteroid belt. Am electromagnetic catch point target of the tardigrades has been redirecting material away from its designed target.&lt;br /&gt;
&lt;br /&gt;
Selomi engages in battle.&lt;br /&gt;
&lt;br /&gt;
Rebecca pilots a Requisitioner fighter ''That Part of Wonder that is Mine''.&lt;br /&gt;
&lt;br /&gt;
Rebecca damages the enemy gunship with a burst of laserfire. The gunship falls into the electromagnetic acceleration field of the catch point and is disintegrated by sudden acceleration.&lt;br /&gt;
&lt;br /&gt;
Rebecca limps the Wonder back to the Requisitioner.&lt;br /&gt;
&lt;br /&gt;
====Past 4.5====&lt;br /&gt;
10:36:48&lt;br /&gt;
&lt;br /&gt;
Thousands of years have passed since an object fell.&lt;br /&gt;
&lt;br /&gt;
Lot is a former space elevator resident and developer of advanced technologies. Lot is disaffected by the overpopulation issue because violence forced them to evacuate their orbital home and seek refuge on Damascus. Lot organizes a group to investigate the crashed ship Senkovi warned against. Lot seeks a weapon to change the status quo of the overpopulated Damascus.&lt;br /&gt;
&lt;br /&gt;
The shuttle is breached. A humanoid entity within raises its head.&lt;br /&gt;
&lt;br /&gt;
====Past 4.6====&lt;br /&gt;
10:45:28&lt;br /&gt;
&lt;br /&gt;
The intelligence finds itself in the sea. It recalls its survival notes for living in the sea. It finds the new sea water different from its ancestral seas. It infects the local sparkling fires of the nearby complex life forms (octopi). It cannot find a center of control of any new vessel due to their decentralized nature; each takeover attempt results in self-destruction of the vessel. The intelligence continues to infect more vessels, seeking a way to survive.&lt;br /&gt;
&lt;br /&gt;
====Past 4.7====&lt;br /&gt;
10:50:18&lt;br /&gt;
&lt;br /&gt;
Octopi die of a mysterious plague resistant to all treatments. Infected individuals tear themselves apart as each infected body part attempts to live independently of every other part.&lt;br /&gt;
&lt;br /&gt;
The intelligent parasite coevolved on a planet on which host vessels developed defenses against infection and takeover. Damascus life has not evolved any such defenses. The parasite infects most life forms of Damascus.&lt;br /&gt;
&lt;br /&gt;
Solomon is a space elevator administrator. He and other space elevators begin a planetary evacuation. However, soon after the project starts, one elevator destroys another, claiming a delayed infection occured in the victim elevator population. Solomon reviews records and sees the aggressor was justified. Solomon severs their elevator cable and departs Damascus. Other space elevators do likewise. Billions of octopi on Damascus die.&lt;br /&gt;
&lt;br /&gt;
====Past 4.8====&lt;br /&gt;
10:58:58&lt;br /&gt;
&lt;br /&gt;
Noah, Ruth, and Abigail hatch a long term plan in face of the civilization collapse they witness from beyond Damascus's gravity well.&lt;br /&gt;
&lt;br /&gt;
Noah, Ruth, and Abigail move their ship out of Damascus orbit and to Nod's orbital station. The station's orbit was set millennia ago such that it would not decay for many more millennia, despite being disabled long before the Aegian had fallen out of Damascus orbit. ({{bk}}: When the Earth computer virus was received and the Aegian was being rebooted by Senkovi due to octopi tomfoolery.)&lt;br /&gt;
&lt;br /&gt;
Ruth and Abigail plan to discover an antidote from Nod life to save Damascus life. The orbital is modified to host quarantine zones for bringing up Nod life samples.&lt;br /&gt;
&lt;br /&gt;
Noah has given up on Damascus. Noah plans escape. Noah data mines old Earth technology records. Noah researches long distance transportation technology that excludes cold sleep or generation ships.&lt;br /&gt;
&lt;br /&gt;
One day, Noah discovers Ruth and Abigail have moved away from epidemiology to communication. A human-shaped entity has been brought up out of Nod's gravity well. The rest of octopi civilization disapproves and prepares to stop Ruth and Abigail's work.&lt;br /&gt;
&lt;br /&gt;
Ruth and Abigail deploy defensive attacks which escalate the conflict. Kinetic rounds are launched at the station which doom Noah, Ruth, and Abigail.&lt;br /&gt;
&lt;br /&gt;
Noah, not wanting to die with his device stillborn, activates the device which annihilates the attacking fleet, smearing its matter across several light seconds in the direction of a distant star. The kinetic rounds bit, breaking the water habitats, killing Noah, Ruth, and Abigail.&lt;br /&gt;
&lt;br /&gt;
===Present 4: The Face of the Waters===&lt;br /&gt;
====Present 4.1====&lt;br /&gt;
11:14:45&lt;br /&gt;
&lt;br /&gt;
Paul is scared of the alien humans that are correlated with the deadly plague. Paul is angry that they caused his quarantine. Paul ignores the alien human's machine display that professes submission.&lt;br /&gt;
&lt;br /&gt;
Paul witnesses the alien human ({{bk}}: Helena) become angry which convinces Paul that it may be sentient despite its unchanging skin and clumsy movements. Paul realizes that the alien is angry at the loss of its companions ({{bk}}: The crew of the Lightfoot) to misfortune.&lt;br /&gt;
&lt;br /&gt;
Paul notices the crab ({{bk}}: Portia) gesticulating with its arms in a manner that resembles an octupus's calculating reach. Paul decides the two aliens have at least half a mind between them.&lt;br /&gt;
&lt;br /&gt;
Paul notices an observer from the anarchist heretic experiments of the &amp;quot;Extreme Science Party&amp;quot; arrives to meet the aliens. Paul hopes the observer may be able to free him from quarantine.&lt;br /&gt;
&lt;br /&gt;
====Present 4.2====&lt;br /&gt;
11:22:48&lt;br /&gt;
&lt;br /&gt;
Helena finishes grieving. Helena demanded a rescue mission or at least reparations. Portia helps Helena's communication efforts.&lt;br /&gt;
&lt;br /&gt;
Portia notifies Helena that an exit iris has opened. A bubble of air opens and Helena and Portia are invited in.&lt;br /&gt;
&lt;br /&gt;
Helena and Portia are shown that Damascus has been infected by Nod life, leaving no room for any life besides itself. Helena sees a kilometer-scale humanoid entity emerge from the sea and then collapse into tentacles. Helena decides the octopi were correct to attack the Lightfoot which threatened to allow the plague to spread.&lt;br /&gt;
&lt;br /&gt;
====Present 4.3====&lt;br /&gt;
11:36:50&lt;br /&gt;
&lt;br /&gt;
Fabian awakes from the crash landing. Viola is alive. Kern is working to restore life support but has limited repair ability. Kern asks Fabian to free Zaïn from the quarantine capsule she was in with Alt-Fabian when the Lightfoot crashed.&lt;br /&gt;
&lt;br /&gt;
Fabian ventures outside and communicates with Alt-Fabian to extract an unconscious Zaïn out of the quarantine capsule. Alt-Fabian doesn't speak with Kern's manner and mimics a happy Portid male.&lt;br /&gt;
&lt;br /&gt;
Fabian sees strange creatures, both flying and crawling.&lt;br /&gt;
&lt;br /&gt;
Fabian sees a city and returns to report the fact to Viola.&lt;br /&gt;
&lt;br /&gt;
====Present 4.4====&lt;br /&gt;
11:57:58&lt;br /&gt;
&lt;br /&gt;
Helena and Portia are brought to an air-filled bubble with a recently manufactured simulacra of an old Empire computer terminal. The octopus ambassador informs Helena that the octopi know about the Voyager and have calculated firing solutions. The ambassador asks for Helena and Portia's assistance in exploring an orbital station around the planet where the Lightfoot crashed ({{bk}}: The same station where Noah had lived.).&lt;br /&gt;
&lt;br /&gt;
====Present 4.5====&lt;br /&gt;
12:07:15&lt;br /&gt;
&lt;br /&gt;
Fabian uses a flying drone to explore the nearby city. Fabian discovers the city structure was built by subtractive removal from a mountainside instead of stacking materials up like human buildings would be constructed. Fabian discovers another copy of the city farther away. Fabian sees a shambling facsimile of a human in an environment suit made up of shellfish and detritus walking in a street of the second city. Fabian orders the drone to return. Fabian sees the humanoid facsimile fall apart.&lt;br /&gt;
&lt;br /&gt;
====Present 4.6====&lt;br /&gt;
12:17:30&lt;br /&gt;
Ivrana Kern decides to dive into Meshna's implant. Kern checks its lowest level interface and sees the implant reports high brain activity. Kern knows she is too weak computationally to have a high probability of success of saving Meshna. Kern wants to save Meshna so she can feel emotions again. Kern, being Kern, decides to dive in and have faith in her own ability to master any new situation.&lt;br /&gt;
&lt;br /&gt;
====Present 4.7====&lt;br /&gt;
12:25:55&lt;br /&gt;
&lt;br /&gt;
Helena and Portia are spirited away on a 4-sphere octopus spaceship from the octopi planet. Helena and Portia have agreed to follow the octopi plan to investigate the Lightfoot situation.&lt;br /&gt;
&lt;br /&gt;
The octopus ship docks and connects with a larger vessel. The ship's name is ''Looking at a Thing from the Outside''.&lt;br /&gt;
&lt;br /&gt;
Helena is awakened by Portia who noticed the ambassador go white with fear. Helena learns from the ambassador that the ''Shell that Echoes Only'', an ally if the 'Profundity of Depth'' (which shot down the Lightfoot) now approaches Looking.&lt;br /&gt;
&lt;br /&gt;
====Present 4.8====&lt;br /&gt;
12:37:58&lt;br /&gt;
&lt;br /&gt;
Meshna flees a darkness through his memories. Meshna remembers his mother who was on a reservation for humans who failed to integrate into Portid society. Meshna remembers how he felt ashamed of having a mother who his fellow Human students called &amp;quot;mad&amp;quot;. Meshna flees to a Portid memory of a beach. Meshna flees to a male Portid memory of dancing for a female Portid. Meshna suddenly escapes to a world with a strange sky, strange plants, and sees a humanoid calling itself Lante assemble itself a facsimile of a humanoid spacesuited form.&lt;br /&gt;
&lt;br /&gt;
====Present 4.9====&lt;br /&gt;
12:51:08&lt;br /&gt;
&lt;br /&gt;
The intelligence rediscovers life inside a vessel is much easier than living independently.&lt;br /&gt;
&lt;br /&gt;
====Present 4.10====&lt;br /&gt;
12:51:57&lt;br /&gt;
&lt;br /&gt;
Paul finally decides to try and speak with Helena.&lt;br /&gt;
&lt;br /&gt;
The Shell looms large, distracting Helena. Portia notifies Helena the ambassador (Paul) wishes to talk. Helena receives a large collection of recordings of Senkovi speaking. Helena sorts and parses the message.&lt;br /&gt;
&lt;br /&gt;
====Present 4.11====&lt;br /&gt;
13:02:35&lt;br /&gt;
&lt;br /&gt;
Fabian analyzes the Lante research notes. Viola works to fix Lightfoot life support systems. Viola notes that Kern's ants are extremely active and engaged in communication with the orbital station. Viola partitions off some ants to provide computational power for life support repairs.&lt;br /&gt;
&lt;br /&gt;
Fabian, Viola, Zaïn, and Alt-Fabian discuss the Nod parasite's capabilities. Fabian explains that Lante was a human who was killed while infected by the parasite and later reanimated several times as an emulation using different hardware. Fabian notes Lante's latest notes describe the parasite organism and describes its data storage mechanism. Viola calculates the parasite's data storage capacity as much higher than even possible with old Empire or Portid technology. Viola announces the parasite is this alien world's equivalent of Portid understandings except it developed without the aid of an artificial nanovirus.&lt;br /&gt;
&lt;br /&gt;
Fabian realizes Meshna has probably been digested into data like Lante was.&lt;br /&gt;
&lt;br /&gt;
====Present 4.12====&lt;br /&gt;
13:22:08&lt;br /&gt;
&lt;br /&gt;
Kern takes Meshna on a tour of her own memories in an attempt at keeping Meshna from accessing his memory which the Lante entity uses to follow them in Meshna's implant.&lt;br /&gt;
&lt;br /&gt;
Eventually, after days of distraction, Kern is unable to prevent Meshna from remembering. Meshna remembers that he is an artificial copy of his biological self running in his implant. Meshna discerns how Kern has been keeping him from remembering. Kern laments that now the parasite also knows how to circumvent her distractions.&lt;br /&gt;
&lt;br /&gt;
Lante catches up with Meshna and Kern, standing in Kern's memory of Seven Trees on her world in the moment she discovered her monkeys were long dead and she had been performing her radio show for spiders instead.&lt;br /&gt;
&lt;br /&gt;
Lante asks where the worlds and geometries they were promised had gone.&lt;br /&gt;
&lt;br /&gt;
====Present 4.13====&lt;br /&gt;
13:43:18&lt;br /&gt;
&lt;br /&gt;
Helena and Portia communicate with the science faction and the war faction.&lt;br /&gt;
&lt;br /&gt;
Kern communicates an update to Helena and Portia. Kern says the infection cannot be cured, points to Lante's broadcasted report for clarification on the parasites's capabilities, and promises to find a way to save Meshna who is infected. Kern asks Helena to buy her time to execute her solution. Kern apologizes for causing the disaster and says she is working to make amends.&lt;br /&gt;
&lt;br /&gt;
Helena, on a suggestion by Portia, decides to tell the Octopi a story of human history and the history surrounding not only the creator Senkovi and the fallen angel Baltil, but also of Lante who studied the parasite. Helena tells this story as a means of buying Meshna and the Lightfoot crew time before the war faction decides to sterilize the Lightfoot and the station Meshna is on.&lt;br /&gt;
&lt;br /&gt;
====Present 4.14====&lt;br /&gt;
13:54:40&lt;br /&gt;
&lt;br /&gt;
Kern tells Meshna that the infection is consuming more and more of the implant's computational resources, pushing Kern out and threatening to erase the only independent copy of Meshna in existence.&lt;br /&gt;
&lt;br /&gt;
Meshna asks Kern to show Lante the marked up version of Lante's own study in order to let the parasite examine itself in a metaphorical mirror.&lt;br /&gt;
&lt;br /&gt;
====Present 4.15====&lt;br /&gt;
14:02:50&lt;br /&gt;
&lt;br /&gt;
Ahab, leader of the Nod moon octopi faction, is a scientist who wishes to learn how to deal with the life of Nod. Ahab regrets being too sore to act when the human aliens arrived and tried to open up the danger of Nod like a clamshell. Ahan attacks the Lightfoot when it docks at the Nod station.&lt;br /&gt;
&lt;br /&gt;
Ahab communicates with Noah, the leader of the science faction that also wants to resolve the danger of Nod. The science faction wants to achieve understanding of the danger through a very different means; their protection of the human aliens is part of that plan.&lt;br /&gt;
&lt;br /&gt;
Ahab's orbit about Nod's moon finally allows it a line of sight to the Lightfoot.&lt;br /&gt;
&lt;br /&gt;
Fabian sees a humanoid shape shambling to the crashed Lightfoot.&lt;br /&gt;
&lt;br /&gt;
Kern informs him it wants to go on an adventure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Present 4.16====&lt;br /&gt;
14:14:24&lt;br /&gt;
&lt;br /&gt;
The intelligence integrates memories of itself from the beginning until its current occupation of Meshna. It uses Lante's cognitive ability to question what went wrong with its failed attempts to &amp;quot;Go on an adventure&amp;quot;. The intelligence changes in order to adapt to this need going unfulfilled.&lt;br /&gt;
&lt;br /&gt;
====Present 4.17====&lt;br /&gt;
14:22:05&lt;br /&gt;
&lt;br /&gt;
Kern tells the parasite an extrapolated future in which the parasite takes over the Lightfoot, Kern's World, and many other inhabited planets in its quest for novelty. Kern's story ends with the parasite master of a large yet still miniscule fraction of the observable universe and still starving for complexity because it made everything it infected in its own image. Kern drives Lante to grief.&lt;br /&gt;
&lt;br /&gt;
Kern then tells a story of how the humans and spiders found a way beyond annihilation and conquest on Kern's World ({{bk}}: The narrative of [[Children of Ruin]]) and left the engagement with both sides enriched instead of impoverished.&lt;br /&gt;
&lt;br /&gt;
====Present 4.18====&lt;br /&gt;
14:34:50&lt;br /&gt;
&lt;br /&gt;
Helena speaks with the leader of Shell (Ahab). The leader praises Helena.&lt;br /&gt;
&lt;br /&gt;
Ahab decides Helena and her crab (Portia) have proven their sentience and therefore should be preserved. When Helena asks for permission to rescue her friends on the crashed ship (Lightfoot), Ahab chastises her for risking infection. A short transmission from the infected planet (Nod) is observed, allowing Ahab to pinpoint the location of Helena's friends. Ahab decides to eliminate her friends and the orbital ({{bk}}: Where Meshna was infected) in order to free Helena of her responsibilities so she, a valuable sentient living alien, can be preserved.&lt;br /&gt;
&lt;br /&gt;
Portia and Helena receive the short transmission from Viola on the Lightfoot: “It has found us.”. Portia attempts to contact Viola again but fails. Helena and Viola deduce that Kern has died since recent communications from Viola indicated Kern had been suffering a data storm and had not been responsive.&lt;br /&gt;
&lt;br /&gt;
Kern contacts Portia and Helena who are aboard the Looking. Kern says the intelligence has expressed a desire for a truce. Portia reports Kern's transmissions originate from the Nod orbital. Helena tells Kern that she fears the octopi will believe Kern has been infected. Kern, her cognitive ability declining, retorts that she remains invulnerable unless the Lightfoot ants are compromised and, even then, she would be resistant to infection. Portia reports to Helena that the octopi have launched missiles.&lt;br /&gt;
&lt;br /&gt;
Kern relays a message from the intelligence to Portia who translates the message to Helena who translates the message into the visual language of the octopi. Kern's message is that the intelligence wishes to observe the universe from the point of view of other life ({{bk}}: e.g. Humans, Portids, etc.) but will discontinue its traditional method of complete takeover of host vessels; the intelligence has learned that the monoculture that follows conquests of [[Other (philosophy)|The Other]] prevent it from experiencing variety. Kern's message causes the octopi to steer the missile into a holding orbit for now, delaying the destruction of the Lightfoot and the Nod orbital.&lt;br /&gt;
&lt;br /&gt;
Helena reports to Kern the delay in the missile strike. Kern sends a visual proof of the intelligence's sincerity to Helena for her to display to the octopi.&lt;br /&gt;
&lt;br /&gt;
====Present 4.19====&lt;br /&gt;
14:51:50&lt;br /&gt;
&lt;br /&gt;
The intelligence humanoid entity makes progress in its attack on the Lightfoot. Fabian, Viola, and Zaïn take refuge in the Lightfoot. Alt-Fabian waits outside. Fabian voices a desire to record a last message for the Voyager. Viola warns that such a message should be dignified in case it actually survives for posterity.&lt;br /&gt;
&lt;br /&gt;
The entity breaches the Lightfoot. Alt-Fabian charges inside to attack. Its attack is futile.&lt;br /&gt;
&lt;br /&gt;
Fabian wishes he had never come. Viola also wishes she had never come because then she would not have had to die without competent female company. Fabian nearly attacks Viola but Viola excuses herself as joking. The entity reaches out to Zaïn as if to help Zaïn stand up.&lt;br /&gt;
&lt;br /&gt;
Kern breaks her silence and warns the Lightfoot crew not to act rashly.&lt;br /&gt;
&lt;br /&gt;
Fabian notices a space exploration zone light up the area near the Lightfoot. A drone lands nearby in a messy landing, tipping over. Kern asks Alt-Fabian to retrieve an item that the drone ejects and apply it to the entity. Alt-Fabian does so. Alt-Fabian stabs the entity with a makeshift drill. Fabian notices that the drill was used to inject the entity with a sample of the entity stuff. &lt;br /&gt;
&lt;br /&gt;
Meshna talks to Fabian from the Lightfoot's systems. Meshna tells Fabian he has taken over Kern's functions of running the Lightfoot. Kern is now running from Meshna's implant in the orbital. Meshna tells Fabian that the entity has been injected with an ambassador.&lt;br /&gt;
&lt;br /&gt;
For several days, Meshna maintains the Lightfoot's life support systems.&lt;br /&gt;
&lt;br /&gt;
The entity of shell, ooze, and rocks remains nearby outside.&lt;br /&gt;
&lt;br /&gt;
Meshna explains how Kern helped the organism understand like how Earth bacteria shares immunity genes. Meshna explains the intelligence has decided to become a co-traveler instead of a devourer. Viola speculates on how the intelligence's abilities can be used to enhance Protid science.&lt;br /&gt;
&lt;br /&gt;
Some time later, Fabian witnesses the Profundity in the sky. A rescue vehicle lifts the entire Lightfoot vehicle and its crew  (Fabian, Alt-Fabian, Viola, and Zaïn) into orbit. Helena and Portia reunite with the crew.&lt;br /&gt;
&lt;br /&gt;
Ahab dismantles the Nod orbital.&lt;br /&gt;
&lt;br /&gt;
====Present 4.20====&lt;br /&gt;
15:03:50&lt;br /&gt;
&lt;br /&gt;
The Voyager arrives at the Damascus. A year has passed since the Humans and Portids arrived. Helena continues improving her translation programs.&lt;br /&gt;
&lt;br /&gt;
Fabian perfects an improved neural implant which allows organic minds to reversibly enter into a common virtual space to facilitate interspecies communication.&lt;br /&gt;
&lt;br /&gt;
Bianca is mourned.&lt;br /&gt;
&lt;br /&gt;
Meshna Ostan Oslam has been ferried down to walk on Nod due to his infection.&lt;br /&gt;
&lt;br /&gt;
Meshna the AI is the Lightfoot AI.&lt;br /&gt;
&lt;br /&gt;
Helena asks if Kern remains. Meshna is evasive about Kern's fate. Meshna says Kern overwrote himself to make room for Meshna.&lt;br /&gt;
&lt;br /&gt;
Before the Voyager arrived, the Insertion took place. The octopi used a projectile to seed the waters of Damacus with samples of the parasite from the Nod orbital containing the parasite's memories of Kern and the truce between Kern and the parasite.&lt;br /&gt;
&lt;br /&gt;
The science faction finish their Noah device, built from the Nod orbital parts. The device was designed by octopus scientists to cheat physics. The device was invented by Noah after his people suffered a plaque that forced his entire people to be quarantined from Damascus; Noah sought a means to escape the local solar system; Noah's request parameters to his Reach ruled out solutions such as generation ships or cold sleep. Helena and Portia witness the device deployment. The Noah device is a faster-than-light drive. One year after disappearing, a signal is received from the device indicating the project's success.&lt;br /&gt;
&lt;br /&gt;
===Future: Where Two or Three Shall Gather===&lt;br /&gt;
15:16:23&lt;br /&gt;
&lt;br /&gt;
====Epilogue====&lt;br /&gt;
15:16:29&lt;br /&gt;
&lt;br /&gt;
A ship sails to a red star.&lt;br /&gt;
&lt;br /&gt;
The crew studies an interesting moon. No habitable planet exists due to high surface pressures. Octopi can survive the pressures, but only fire and acid exists down there.&lt;br /&gt;
&lt;br /&gt;
Outer planet moons have organic chemistry and weird energy traces. Life is suspected. Life is valuable. Often life is microscopic; being microscopic doesn't rule out being simple.&lt;br /&gt;
&lt;br /&gt;
The fleet is composed of ships built from different people. Five different species exist. Some are children of Earth; products of the terraforming program and the Rus-Kalifi virus, corvid genome and an alien molecular catalyst, and the artificial intelligences. Some are children of Nod.&lt;br /&gt;
&lt;br /&gt;
Samples are taken of the suspected life forms but the rest are left to develop independently; another visit will occur some millennia in the future.&lt;br /&gt;
&lt;br /&gt;
An interstellar culture spanning great distances is described that maintains the ability to exchange messages with its disparate parts via interlocutors.&lt;br /&gt;
&lt;br /&gt;
A wave vehicle arrives, having followed the narrator's path. Wave travel energy expenditure is described as very high. The message the wave vehicle carries is not of war but of discovery. A small ship has made a discovery on a small world around a distant star. The narrator calls the survey team after a year of delay. The fleet follows the wave vehicle via wave transport following a century delay after the original discovery. A beacon on the fifth planet contains an item for the narrator. The narrator judges that other cousins of itself will be gathering here soon.&lt;br /&gt;
&lt;br /&gt;
A star-shaped 7-km fortress is found. The planet has lost its atmosphere. 1 million years ago someone left something behind.&lt;br /&gt;
&lt;br /&gt;
The pioneer gift is retrieved. Their interlocutor wanted to be left behind. The cryptobiote is brought to the narrator. The narrator becomes them and the interlocutor becomes the narrator.&lt;br /&gt;
&lt;br /&gt;
The narrator has been human, Human, Portid, Octupus, and Stomatopod, and Corvid. The narrator is now another 43 individuals. The narrator is Yusuf Baltil, Erma Lante, Meshna Ostan Oslam, Viola, and Selomi. The narrator is many.&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* Discontinuity of audio quality at 08:25:45. Audiobook corrective rerecording?&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2019]]: The book is published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Adrian_Tchaikovsky&amp;diff=198187</id>
		<title>Adrian Tchaikovsky</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Adrian_Tchaikovsky&amp;diff=198187"/>
		<updated>2026-03-18T05:42:54Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Adrian Tchaikovsky''' (legal name: '''Adrian Czajkowski''') is a [[science fiction]] author notable for his work [[Children of Time]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* [[Wikidata:Q4685389]]&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2015]]: Published ''[[Children of Time]]''&lt;br /&gt;
* [[2019]]: Published ''[[Children of Ruin]]''&lt;br /&gt;
* [[2022]]: Published ''[[Children of Memory]]''&lt;br /&gt;
* [[2026]]: Published ''[[Children of Strife]]''&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
* [https://twitter.com/aptshadow Twitter account]&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Children_of_Strife&amp;diff=198186</id>
		<title>Children of Strife</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Children_of_Strife&amp;diff=198186"/>
		<updated>2026-03-18T02:40:02Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Children of Strife''' is a 2026 science fiction novel by Adrian Tchaikovsky that is the third sequel to ''Children of Time''. It is preceded by ''Childre...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Children of Strife''' is a [[2026]] [[science fiction]] novel by [[Adrian Tchaikovsky]] that is the third sequel to ''[[Children of Time]]''. It is preceded by ''[[Children of Memory]]''.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Adrian Tchaikovsky]]&lt;br /&gt;
* Publication date: [[2026-03-17]]&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Domus &lt;br /&gt;
: (b4c1.1) Underseer AI for ''Pancreator''.&lt;br /&gt;
&lt;br /&gt;
; Gerey Hartmand&lt;br /&gt;
: (b4c1.1) Tyrannical leader of the terraforming project aboard the ''Pancreator''. Resentful terraforming competitor to Avrana Kern.&lt;br /&gt;
&lt;br /&gt;
; Ken Pil&lt;br /&gt;
: (b4c1.1) Assistant to Hartmand.&lt;br /&gt;
&lt;br /&gt;
; Ottis Milner&lt;br /&gt;
: (b4c1.1) Assistant to Hartmand. Likes meetings.&lt;br /&gt;
&lt;br /&gt;
; Redina Kott&lt;br /&gt;
: (b4c1.1) Assistant to Hartmand. Skilled at hiding emotions. Enjoys watching coworker drama.&lt;br /&gt;
&lt;br /&gt;
; Sui Dorcheson&lt;br /&gt;
: (b4c1.1) Second Visionary of the ''Pancreator'', alongside Gerey Hartmand. Judged lacking by Kott.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; ''Pancreator''&lt;br /&gt;
: (b4c1) terraforming ship/station&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{|&lt;br /&gt;
! §&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| 1.1&lt;br /&gt;
| Kott physically enters Hartland's quarters. Kott finds Hartland arguing with Dorcheson. Kott announces Pil is harming the terraforming project.&lt;br /&gt;
| Kott, Hartland, Dorcheson&lt;br /&gt;
|-&lt;br /&gt;
| 1.2&lt;br /&gt;
| Hartland gathers the rest of the crew. Kott privately criticizes Milner's insistence on holding meetings with artificial personality models of investors. A summary by Kott about how Hartmand stole a planet from Kern. How Hartmand's rapid terraforming project has repeatedly failed. Kott privately believes her data linking is responsible. How Kott believes Hartmand will murder one of his Visionaries and so Kott tattle-telling on Pil improves her survival chances. Hartland confronts Pil who says he has saved the project.&lt;br /&gt;
|  Kott, Hartland, Dorcheson, Milner, Pil&lt;br /&gt;
|-&lt;br /&gt;
| 1.3&lt;br /&gt;
| Kott and Pil get high together. Kott notices Pil acting strangely. Kott clears her blood chemistry of mind-altering substances and notices the sixth terraforming failure is unlike the previous failures. Kott sees microbial fiefdoms rising and competing against others instead of global mass death. Pil says he applied Kott's own method to the terraforming microbes. Kott does not understand Pil but knows she must tell Hartland what Pil has done to avoid Pil implicating her.&lt;br /&gt;
| Kott, Pil&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Gender_of_connectors_and_fasteners&amp;diff=198185</id>
		<title>Gender of connectors and fasteners</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Gender_of_connectors_and_fasteners&amp;diff=198185"/>
		<updated>2026-03-16T04:35:38Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; Electrical and mechanical connectors or fasteners often come in two '''male''' and '''female''' varieties that purposefully require both...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Electrical]] and [[mechanical]] [[electrical connector|connectors]] or [[fastener]]s often come in two '''male''' and '''female''' varieties that purposefully require both to connect properly.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Songs==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
I heard there was a secret cord&amp;lt;br/&amp;gt;&lt;br /&gt;
you plug it in and you meet the lord&amp;lt;br/&amp;gt;&lt;br /&gt;
but you don't really care for safety, do ya?&amp;lt;br/&amp;gt;&lt;br /&gt;
it goes like this: the black, the red&amp;lt;br/&amp;gt;&lt;br /&gt;
you touch 'em both and bam you're dead&amp;lt;br/&amp;gt;&lt;br /&gt;
the purple arc of power flowing through ya&amp;lt;br/&amp;gt;&lt;br /&gt;
hallelugjrghtqdhjtqeeyhvsniitdvbjjr&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
–[https://old.reddit.com/r/DiWHY/comments/1rul1m0/my_local_home_depot_is_sick_of_your_nonsense/oam8qvt/ EntertainmentTrick58], set to meter of ''[[Hallelujah (Leonard Cohen song)|Hallelujah]]'' ([[1984]]) by [[Leonard Cohen]].&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Yale_University_Press&amp;diff=198184</id>
		<title>Yale University Press</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Yale_University_Press&amp;diff=198184"/>
		<updated>2026-03-16T03:46:56Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Yale University Press''' is a university press of Yale University.  As of 2026, they utilize VitalSource.com DRM to restrict content access to online-o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Yale University Press''' is a [[university press]] of [[Yale University]].&lt;br /&gt;
&lt;br /&gt;
As of [[2026]], they utilize [[VitalSource.com]] [[DRM]] to restrict content access to online-only.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Dragonite&amp;diff=198183</id>
		<title>Dragonite</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Dragonite&amp;diff=198183"/>
		<updated>2026-03-02T15:55:25Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Dragonite''' is a dragon/flying-type Pokemon introduced in Pokemon Red. It is the final Pokemon of the dragon trainer Lance, the penultimate boss.     {{#ifexist:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Dragonite''' is a dragon/flying-type [[Pokemon]] introduced in [[Pokemon Red]]. It is the final Pokemon of the dragon trainer Lance, the penultimate boss.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Pokedex No.: 149&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
In [[2014-02]], gained some notoriety during the first [[Twitch Plays Pokemon]] playthrough:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Here is a story involving Dragonite, the final dragon Pokémon you fight in the first game. https://www.youtube.com/watch?v=bnUD2Ts6C-Q&amp;amp;t=65&lt;br /&gt;
&lt;br /&gt;
In [[Pokémon Red]], the penultimate boss you must defeat is the dragon trainer Lance. Lance is difficult because dragon type resists all starter types (fire, water, grass, electric) and the playerʼs most likely strongest Pokémon is a starter. Dragonite is Lanceʼs final most powerful Pokémon.&lt;br /&gt;
&lt;br /&gt;
In [[2014-02|February 2014]], a livestream started called “[[Twitch Plays Pokémon]]” that allowed thousands of people to simultaneously play the exact same session of Pokémon Red by entering messages into chat like “up”, “down”, “left”, “right”, “a“, “b”, “start“, and “select” which correspond to the original [[GameBoy]] control buttons. The game would execute this torrent of commands in the order and speed that they were received. As a result, the player spent most of their time moving erratically and performing mostly nonsensical actions. However, since many of the people providing commands knew how to beat Pokémon Red, they provided the bias necessary to eventually get the player to Lance after about two weeks of 24-hour continuous playing.&lt;br /&gt;
&lt;br /&gt;
After finally reaching Lanceʼs level 62 [[Dragonite]], the playerʼs entire team had been mostly wiped with the exception of a level 36 [[Venomoth]], a Bug/Poison type. What should have been a quick loss for the player ended up resulting in an unexpected victory. This is because Pokémon Redʼs bosses were programmed to always select moves of a type that were super-effective against the playerʼs pokémon. Lanceʼs Dragonite knew two normal-type damage-dealing moves (Slam and Hyper Beam) and two psychic-type status-affecting moves (Agility and Barrier). Fortunately for the Twitch Plays Pokémon Venomoth (named `AATTVVV`), the boss programming suffered a corner case bug: Dragonite would always select non-damaging moves such as Agility or Barrier since those were psychic-type and psychic-type attacks are super-effective against Venomothʼs poison type. But since neither Agility or Barrier cause any damage, the playerʼs Venomoth eventually defeated the Dragonite.&lt;br /&gt;
&lt;br /&gt;
This unexpected victory inspired several artists who followed the Twitch Plays Pokémon stream to make drawings and compose songs about the feat such as the one I linked earlier titled “[[All-Terrain Victory]]”, named after the nickname for the Venmoth: “ATV” or “All-Terrain Vehicle” after the random name `AATTVVV` it was given when first captured.&lt;br /&gt;
&lt;br /&gt;
This bug of Dragonite no longer exists in later remakes or games, much less in [[Pokémon GO]]. But this trivia explains why you might find Venomoth when you search for art of Dragonite.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198182</id>
		<title>Thunderbird notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198182"/>
		<updated>2026-02-20T17:11:01Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
This page contains notes for using [[Mozilla]] [[Thunderbird]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==OpenPGP==&lt;br /&gt;
Enable external [[GnuPG]] interaction (e.g. for [[smartcard]]s and externally generated subkeys)&amp;lt;ref name=&amp;quot;bacardi55_20240616_thunderbird-gpg-smartcard&amp;quot;&amp;gt;[[bacardi55]].  ([[2024-06-16]]).  “[https://bacardi55.io/2024/06/16/encrypt-emails-with-thunderbird-and-gpg/ Encrypt emails with Thunderbird and GPG]”.  ''[[bacardi55.io]]''.  Accessed [[2024-08-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* Open the config editor (bottom of Edit -&amp;gt; Settings -&amp;gt; General)&lt;br /&gt;
* Change preference name &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter “Add Key” dialogue (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; Add Key…)&lt;br /&gt;
**  Select “Use your external key through GnuPG (e.g. from a smartcard)”{{bkc|[[2024-08-29]]: Note, this option will not appear unless the &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; setting is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. }}. Click the “Continue” button.&lt;br /&gt;
** Enter your primary key long ID in hexadecimal (e.g. &amp;lt;code&amp;gt;A0A295ABDC3469C9&amp;lt;/code&amp;gt;) into the “Secret Key ID” box.&lt;br /&gt;
** Press the “Save key ID” button.&lt;br /&gt;
* Add your public key&lt;br /&gt;
** In command line, run &amp;lt;code&amp;gt;$ gpg --export --armor --output $HOME/mypubkey.asc -- 0xA0A295ABDC3469C9 &amp;lt;/code&amp;gt;. Copy to your [[Clipboard (computing)|clipboard]] the resulting text from &amp;lt;code&amp;gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;-----END PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt;, inclusive.&lt;br /&gt;
** Open the “OpenPGP Key Manager” (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; OpenPGP Key Manager)&lt;br /&gt;
** Edit -&amp;gt; Import Key(s) from Clipboard&lt;br /&gt;
** If asked the question “Do you accept this key for verifying digital signatures and for encrypting messages, for all shown email addresses?”, select “Accepted (unverified)”.&lt;br /&gt;
** Click “Import”.&lt;br /&gt;
** In the OpenPGP Key Manager, make sure none of your expired keys from previous import operations are present (narrow columns or widen window to see the “Expiry” column).&lt;br /&gt;
* Restart Thunderbird (make sure to close all drafts and windows)&lt;br /&gt;
* When drafting a new message, enable digital signing by clicking the “OpenPGP” dropdown button, then making sure “Digitaly Sign” is has a check mark.&lt;br /&gt;
** To digitally sign with an OpenPGP key by default, go to Account Settings -&amp;gt; End-To-End Encryption and check “Sign unencrypted messages”.&amp;lt;ref name=&amp;quot;mozilla_20221016_thunderbird-pgp-sign-default&amp;quot;&amp;gt;[https://support.mozilla.org/ml/user/christ1/ christ1].  ([[2022-10-16]]).  “[https://support.mozilla.org/ml/questions/1392670 PGP by default for new email]”.  ''[[mozilla.org]]''.  Accessed [[2024-09-21]].  &amp;lt;/ref&amp;gt; To encrypt by default, select “Enable encryption for new messages”.&lt;br /&gt;
&lt;br /&gt;
==ISO 8601==&lt;br /&gt;
Getting [[ISO 8601]] date formatting into Thunderbird can be done in several ways.&lt;br /&gt;
&lt;br /&gt;
===ISO 8601 via Config Editor===&lt;br /&gt;
The most direct method, available after Thunderbird 91, involves specifying date format strings in the Config Editor.&amp;lt;ref name=&amp;quot;mozilla_20221017_thunderbird-date-format&amp;quot;&amp;gt;“[https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird#thunderbird:linux:tb147 Customize Date and Time formats in Thunderbird]”.  ([[2022-10-17]]).  ''[[mozilla.org]]''.  Accessed [[2026-02-20]].  [https://web.archive.org/web/20260208011943/https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird Archived] from the original on [[2026-02-08]].  &amp;lt;/ref&amp;gt; This involves creating the following custom preferences:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Config Editor values for Thunderbird date formatting&lt;br /&gt;
|-&lt;br /&gt;
! Preference ID&lt;br /&gt;
! Type&lt;br /&gt;
! Value&lt;br /&gt;
! Example Output&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.date_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;yyyy-MM-dd&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2026-12-31&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.time_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;HH:mmX&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;23:59-08&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.connector_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;{1}'T'{0}&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2026-12-31T23:59-08&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ISO 8601 via locale===&lt;br /&gt;
Using [https://blog.carsoncheng.ca/2021/03/use-iso-8601-dates-in-pcmanfm-on-debian.html this] guide, a custom &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; locale can be installed. A final step of &amp;lt;code&amp;gt;# sed -i -e 's/en_SE:2000/i18n:2012/g' /usr/local/share/i18n/locales/en_SE&amp;lt;/code&amp;gt; needs to be applied as of [[2026-02]] on [[Debian]]-based distributions to the [https://www.stacken.kth.se/~auno/en_SE copy] of &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; referenced.&lt;br /&gt;
&lt;br /&gt;
This method has the advantage that the custom locale applies yyyy-MM-dd formatting across any application that uses the &amp;lt;code&amp;gt;LC_TIME&amp;lt;/code&amp;gt; environment variable, including Thunderbird.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Mozilla Thunderbird]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
[[Category:My notes]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198181</id>
		<title>Thunderbird notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198181"/>
		<updated>2026-02-20T17:08:19Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
This page contains notes for using [[Mozilla]] [[Thunderbird]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==OpenPGP==&lt;br /&gt;
Enable external [[GnuPG]] interaction (e.g. for [[smartcard]]s and externally generated subkeys)&amp;lt;ref name=&amp;quot;bacardi55_20240616_thunderbird-gpg-smartcard&amp;quot;&amp;gt;[[bacardi55]].  ([[2024-06-16]]).  “[https://bacardi55.io/2024/06/16/encrypt-emails-with-thunderbird-and-gpg/ Encrypt emails with Thunderbird and GPG]”.  ''[[bacardi55.io]]''.  Accessed [[2024-08-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* Open the config editor (bottom of Edit -&amp;gt; Settings -&amp;gt; General)&lt;br /&gt;
* Change preference name &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter “Add Key” dialogue (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; Add Key…)&lt;br /&gt;
**  Select “Use your external key through GnuPG (e.g. from a smartcard)”{{bkc|[[2024-08-29]]: Note, this option will not appear unless the &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; setting is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. }}. Click the “Continue” button.&lt;br /&gt;
** Enter your primary key long ID in hexadecimal (e.g. &amp;lt;code&amp;gt;A0A295ABDC3469C9&amp;lt;/code&amp;gt;) into the “Secret Key ID” box.&lt;br /&gt;
** Press the “Save key ID” button.&lt;br /&gt;
* Add your public key&lt;br /&gt;
** In command line, run &amp;lt;code&amp;gt;$ gpg --export --armor --output $HOME/mypubkey.asc -- 0xA0A295ABDC3469C9 &amp;lt;/code&amp;gt;. Copy to your [[Clipboard (computing)|clipboard]] the resulting text from &amp;lt;code&amp;gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;-----END PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt;, inclusive.&lt;br /&gt;
** Open the “OpenPGP Key Manager” (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; OpenPGP Key Manager)&lt;br /&gt;
** Edit -&amp;gt; Import Key(s) from Clipboard&lt;br /&gt;
** If asked the question “Do you accept this key for verifying digital signatures and for encrypting messages, for all shown email addresses?”, select “Accepted (unverified)”.&lt;br /&gt;
** Click “Import”.&lt;br /&gt;
** In the OpenPGP Key Manager, make sure none of your expired keys from previous import operations are present (narrow columns or widen window to see the “Expiry” column).&lt;br /&gt;
* Restart Thunderbird (make sure to close all drafts and windows)&lt;br /&gt;
* When drafting a new message, enable digital signing by clicking the “OpenPGP” dropdown button, then making sure “Digitaly Sign” is has a check mark.&lt;br /&gt;
** To digitally sign with an OpenPGP key by default, go to Account Settings -&amp;gt; End-To-End Encryption and check “Sign unencrypted messages”.&amp;lt;ref name=&amp;quot;mozilla_20221016_thunderbird-pgp-sign-default&amp;quot;&amp;gt;[https://support.mozilla.org/ml/user/christ1/ christ1].  ([[2022-10-16]]).  “[https://support.mozilla.org/ml/questions/1392670 PGP by default for new email]”.  ''[[mozilla.org]]''.  Accessed [[2024-09-21]].  &amp;lt;/ref&amp;gt; To encrypt by default, select “Enable encryption for new messages”.&lt;br /&gt;
&lt;br /&gt;
==ISO 8601==&lt;br /&gt;
Getting [[ISO 8601]] date formatting into Thunderbird can be done in several ways.&lt;br /&gt;
&lt;br /&gt;
===ISO 8601 via Config Editor===&lt;br /&gt;
The most direct method, available after Thunderbird 91, involves specifying date format strings in the Config Editor.&amp;lt;ref name=&amp;quot;mozilla_20221017_thunderbird-date-format&amp;quot;&amp;gt;“[https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird#thunderbird:linux:tb147 Customize Date and Time formats in Thunderbird]”.  ([[2022-10-17]]).  ''[[mozilla.org]]''.  Accessed [[2026-02-20]].  [https://web.archive.org/web/20260208011943/https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird Archived] from the original on [[2026-02-08]].  &amp;lt;/ref&amp;gt; This involves creating the following custom preferences:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Config Editor values for Thunderbird date formatting&lt;br /&gt;
|-&lt;br /&gt;
! Preference ID&lt;br /&gt;
! Type&lt;br /&gt;
! Value&lt;br /&gt;
! Example Output&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.date_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;yyyy-MM-dd&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2026-12-31&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.time_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;HH:mmX&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;23:59-08&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.connector_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;{1}'T'{0}&amp;lt;/code&amp;gt;&lt;br /&gt;
| 2026-12-31T23:59-08&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ISO 8601 via locale===&lt;br /&gt;
Using [https://blog.carsoncheng.ca/2021/03/use-iso-8601-dates-in-pcmanfm-on-debian.html this] guide, a custom &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; locale can be installed. A final step of &amp;lt;code&amp;gt;# sed -i -e 's/en_SE:2000/i18n:2012/g' /usr/local/share/i18n/locales/en_SE&amp;lt;/code&amp;gt; needs to be applied as of [[2026-02]] on [[Debian]]-based distributions to the [https://www.stacken.kth.se/~auno/en_SE copy] of &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; referenced.&lt;br /&gt;
&lt;br /&gt;
This method has the advantage that the custom locale applies yyyy-MM-dd formatting across any application that uses the &amp;lt;code&amp;gt;LC_TIME&amp;lt;/code&amp;gt; environment variable, including Thunderbird.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Mozilla Thunderbird]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
[[Category:My notes]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198180</id>
		<title>Thunderbird notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Thunderbird_notes&amp;diff=198180"/>
		<updated>2026-02-20T17:06:34Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: add iso 8601 procedure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
This page contains notes for using [[Mozilla]] [[Thunderbird]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==OpenPGP==&lt;br /&gt;
Enable external [[GnuPG]] interaction (e.g. for [[smartcard]]s and externally generated subkeys)&amp;lt;ref name=&amp;quot;bacardi55_20240616_thunderbird-gpg-smartcard&amp;quot;&amp;gt;[[bacardi55]].  ([[2024-06-16]]).  “[https://bacardi55.io/2024/06/16/encrypt-emails-with-thunderbird-and-gpg/ Encrypt emails with Thunderbird and GPG]”.  ''[[bacardi55.io]]''.  Accessed [[2024-08-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* Open the config editor (bottom of Edit -&amp;gt; Settings -&amp;gt; General)&lt;br /&gt;
* Change preference name &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter “Add Key” dialogue (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; Add Key…)&lt;br /&gt;
**  Select “Use your external key through GnuPG (e.g. from a smartcard)”{{bkc|[[2024-08-29]]: Note, this option will not appear unless the &amp;lt;code&amp;gt;mail.openpgp.allow_external_gnupg&amp;lt;/code&amp;gt; setting is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. }}. Click the “Continue” button.&lt;br /&gt;
** Enter your primary key long ID in hexadecimal (e.g. &amp;lt;code&amp;gt;A0A295ABDC3469C9&amp;lt;/code&amp;gt;) into the “Secret Key ID” box.&lt;br /&gt;
** Press the “Save key ID” button.&lt;br /&gt;
* Add your public key&lt;br /&gt;
** In command line, run &amp;lt;code&amp;gt;$ gpg --export --armor --output $HOME/mypubkey.asc -- 0xA0A295ABDC3469C9 &amp;lt;/code&amp;gt;. Copy to your [[Clipboard (computing)|clipboard]] the resulting text from &amp;lt;code&amp;gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;-----END PGP PUBLIC KEY BLOCK-----&amp;lt;/code&amp;gt;, inclusive.&lt;br /&gt;
** Open the “OpenPGP Key Manager” (Edit -&amp;gt; Account Settings -&amp;gt; (some account) -&amp;gt; End-To-End Encryption -&amp;gt; OpenPGP -&amp;gt; OpenPGP Key Manager)&lt;br /&gt;
** Edit -&amp;gt; Import Key(s) from Clipboard&lt;br /&gt;
** If asked the question “Do you accept this key for verifying digital signatures and for encrypting messages, for all shown email addresses?”, select “Accepted (unverified)”.&lt;br /&gt;
** Click “Import”.&lt;br /&gt;
** In the OpenPGP Key Manager, make sure none of your expired keys from previous import operations are present (narrow columns or widen window to see the “Expiry” column).&lt;br /&gt;
* Restart Thunderbird (make sure to close all drafts and windows)&lt;br /&gt;
* When drafting a new message, enable digital signing by clicking the “OpenPGP” dropdown button, then making sure “Digitaly Sign” is has a check mark.&lt;br /&gt;
** To digitally sign with an OpenPGP key by default, go to Account Settings -&amp;gt; End-To-End Encryption and check “Sign unencrypted messages”.&amp;lt;ref name=&amp;quot;mozilla_20221016_thunderbird-pgp-sign-default&amp;quot;&amp;gt;[https://support.mozilla.org/ml/user/christ1/ christ1].  ([[2022-10-16]]).  “[https://support.mozilla.org/ml/questions/1392670 PGP by default for new email]”.  ''[[mozilla.org]]''.  Accessed [[2024-09-21]].  &amp;lt;/ref&amp;gt; To encrypt by default, select “Enable encryption for new messages”.&lt;br /&gt;
&lt;br /&gt;
==ISO 8601==&lt;br /&gt;
Getting [[ISO 8601]] date formatting into Thunderbird can be done in several ways.&lt;br /&gt;
&lt;br /&gt;
===Config Editor===&lt;br /&gt;
The most direct method, available after Thunderbird 91, involves specifying date format strings in the Config Editor.&amp;lt;ref name=&amp;quot;mozilla_20221017_thunderbird-date-format&amp;quot;&amp;gt;“[https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird#thunderbird:linux:tb147 Customize Date and Time formats in Thunderbird]”.  ([[2022-10-17]]).  ''[[mozilla.org]]''.  Accessed [[2026-02-20]].&amp;lt;/ref&amp;gt; This involves creating the following custom preferences:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Config Editor values for Thunderbird date formatting&lt;br /&gt;
|-&lt;br /&gt;
! Preference ID&lt;br /&gt;
! Type&lt;br /&gt;
! Value&lt;br /&gt;
! Example Output&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.date_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;yyyy-MM-dd&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2026-12-31&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.time_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;HH:mmX&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;23:59-08&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intl.date_time.pattern_override.connector_short&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;code&amp;gt;{1}'T'{0}&amp;lt;/code&amp;gt;&lt;br /&gt;
| 2026-12-31T23:59-08&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===en_SE locale===&lt;br /&gt;
Using [https://blog.carsoncheng.ca/2021/03/use-iso-8601-dates-in-pcmanfm-on-debian.html this] guide, a custom &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; locale can be installed. A final step of &amp;lt;code&amp;gt;# sed -i -e 's/en_SE:2000/i18n:2012/g' /usr/local/share/i18n/locales/en_SE&amp;lt;/code&amp;gt; needs to be applied as of [[2026-02]] on [[Debian]]-based distributions to the [https://www.stacken.kth.se/~auno/en_SE copy] of &amp;lt;code&amp;gt;en_SE&amp;lt;/code&amp;gt; referenced.&lt;br /&gt;
&lt;br /&gt;
This method has the advantage that the custom locale applies yyyy-MM-dd formatting across any application that uses the &amp;lt;code&amp;gt;LC_TIME&amp;lt;/code&amp;gt; environment variable, including Thunderbird.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Mozilla Thunderbird]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
[[Category:My notes]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Template:Bk_wikis&amp;diff=198179</id>
		<title>Template:Bk wikis</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Template:Bk_wikis&amp;diff=198179"/>
		<updated>2026-02-20T05:40:57Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Disable template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creates dynamic external links to {{bk}}'s personal wikis according to the PAGENAME variable.&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Name: Template:Bk wikis&lt;br /&gt;
* Date created: 2023-04-09T08:19:56+00&lt;br /&gt;
* Date modified: 2026-02-29T05:40+00&lt;br /&gt;
* License: GPLv3+&lt;br /&gt;
* Author: [[Steven Baltakatei Sandoval]]&lt;br /&gt;
* Version: 0.0.3&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{bk wikis}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TEMPLATE STARTS BELOW:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198178</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198178"/>
		<updated>2026-02-03T07:16:05Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Annie Shapiro&lt;br /&gt;
: (c16) DNA expert. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock. (c16) Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Martin DuBois&lt;br /&gt;
: (c16) Member of the prime crew. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Steve Hatch&lt;br /&gt;
: (c18) A university professor of [[University of British Columbia]] who is designing, manufacturing, and launching the beetles for sending results from [[Tau Ceti]] to [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock. (c16) Meets Stratt, Grace and the other crew members.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; Adrian&lt;br /&gt;
: (c16) The planet in the Tau Ceti system that is a breeding ground for astrophage. Rocky names it after their partner but Grace gives it the name “Adrian” so it is pronounceable by humans.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; [[Tau Ceti]]&lt;br /&gt;
: (c1) Grace unknowingly arrives at this star system. (c5) Grace remembers that Tau Ceti is a star 11.9 light-years from [[Earth]] seems uninfected by astrophage despite being near the center of the infection among nearby stars, according to a chinese scientist named Xi.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; beetles&lt;br /&gt;
: (c4) Four trapezoidal space vehicles on the ''Hail Mary'' designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the ''Hail Mary'' crew to carry 4 terabytes of data and physical samples back to Earth.&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Lokken proposes to Grace using astrophage as a radiation shield for the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Grace tells Stratt half of humanity will die in 19 years due to falling solar radiation. Stratt demands strategies to geoëngineer global warming to extend 19 years to 27. Since the ''Hail Mary'' will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky's crewmates likely died of radiation sickness. Grace explains that Rocky survived because their job as engineer kept them close to astrophage containers; astrophage absorbs all radiation. Grace remembers a trip to Antarctica to nuke glaciers with fusion bombs. In the present, Grace and Rocky discuss how they see through light and sound respectively. Rocky constructs a mobile spacesuit for themselves to explore the interior of the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the ''Hail Mary''. Rocky and Grace decide to disconnect the ''Blip-A'' so they can create artificial gravity to use Grace's extensive scientific equipment which Rocky lacks. Grace and Stratt talk to Dr. Lamai whose automatic coma patient caretaker machine they plan to use for the ''Hail Mary'' crew. Stratt demands that all Hail Mary team members submit to genetic tests for the coma-resistent genes, including herself and Grace. Rocky asks for help in collecting astrophage samples on Tau Ceti. Grace shows Rocky. Rocky explains they have been in Tau Ceti for 46 earth years. Grace is surprised to learn Eridians live on average 689 earth years and Rocky is 291 years old.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Rocky says his home planet Erid has 72 earth years until astrophage dimming of 40 Eridani causes problems. Grace explains Earth has only 14 years until the majority of humans die due to Earth's comparably thinner atmosphere. Grace reveals his trip to Tau Ceti was one-way. Rocky offers the 2 million kilograms of astrophage Grace needs to return to Earth due to having extra. In the past, Grace and Stratt meet the prime crew (Yáo, Ilyukhina, and Martin DuBois) and backup crew (Captain Yang, Annie Shapiro, a Russian woman). Stratt regrets that the US and Russia forced her to include women in the crew due to the hazard of romantic drama on the mission.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| In the past, Grace and the ''Hail Mary'' crew watch a launch of cargo and supplies to construct the ''Hail Mary''. In the present, Grace fails to find an astrophage predator in the sample they collected. Grace and Rocky create a plan to drop a xenonite chain into the atmosphere of Adrian in order to retrieve more biological samples. Grace asks Rocky why the ''Blip-A'' has excess astrophage fuel; Rocky explains the Eridiansʼs original plan. Grace deduces the Eridians lack a [[theory of relativity]] and the associated [[time dilation]]. In the past, Steve Hatch meets with Grace to demonstrate the beetle prototype named Pete. Steve receives a milligram of astrophage.&lt;br /&gt;
| Grace, Rocky, Steve Hatch&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Azumanga_Daioh&amp;diff=198177</id>
		<title>Azumanga Daioh</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Azumanga_Daioh&amp;diff=198177"/>
		<updated>2026-02-03T06:36:29Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Azumanga Daioh''' was a yonkoma manga written and illustrated by Kiyohiko Azuma on 1999-02/2002-05. It was later animated by J.C.Staff into a 26-ep...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Azumanga Daioh''' was a [[yonkoma]] [[manga]] written and illustrated by [[Kiyohiko Azuma]] on [[1999-02]]/[[2002-05]]. It was later animated by [[J.C.Staff]] into a 26-episode (130 segment) [[anime]] series and broadcast on [[2002-04-08]]/[[2002-09-09-30]].  [[ADV Films]] licensed and published an English adaptation in [[2005]].      {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Chiyo Mihama&lt;br /&gt;
: (ja: 美浜 ちよ、みはま　ちよ) A precocious young girl from a wealthy family who skipped many grades to attend high school.&lt;br /&gt;
&lt;br /&gt;
; Chiyo-chichi&lt;br /&gt;
: An abstract floating yellow cat creature that sometimes appears in the background or dreams of characters. Osaka believes him to be Chiyoʼs father.&lt;br /&gt;
&lt;br /&gt;
; Kagura&lt;br /&gt;
: (ja: 神楽、かぐら) An athletic girl on the school swim team.&lt;br /&gt;
&lt;br /&gt;
; Kamineko&lt;br /&gt;
: (lit: “biting cat”) A black cat that often bites Sakaki's hands.&lt;br /&gt;
&lt;br /&gt;
; Kaori&lt;br /&gt;
: (ja: かおり) A girl from a different class from the main group; romantically loves Sakaki. Frequently sexually harassed by her teacher, Kimura.&lt;br /&gt;
&lt;br /&gt;
; Kimura&lt;br /&gt;
: (ja: 木村先生、きむら　せんせい) A lewd teacher whose face is in a perpetual shocked grimace and openly admits he loves high school girls.&lt;br /&gt;
&lt;br /&gt;
; Maya&lt;br /&gt;
: A [[Iriomote cat]] that followed Sakaki home from [[Okinawa]] after a class trip there. Sakaki illegally adopts Maya since they are the only cat to tolerate her affection.&lt;br /&gt;
&lt;br /&gt;
; Nyamo&lt;br /&gt;
: (a.k.a. '''Minamo Kurosawa'''; ja: 黒沢　みなも、くろさわ　みなも) A competent physical education teacher. Attended school together with Yukari.&lt;br /&gt;
&lt;br /&gt;
; Osaka&lt;br /&gt;
: (a.k.a. Ayumu Kasuga; ja: 春日　歩, かすが　あゆむ) A [[neurodivergent]] girl.&lt;br /&gt;
&lt;br /&gt;
; Tomo Tokino&lt;br /&gt;
: (ja: 滝野 智、ときの　とも) An energetic girl who is a class clown and has difficulty studying.  Loves teasing Yomi.&lt;br /&gt;
&lt;br /&gt;
; Sakaki&lt;br /&gt;
: (ja: 榊、さかき) A tall athletic girl with long black hair who likes cute things. Loves but is feared by cats.&lt;br /&gt;
&lt;br /&gt;
; Yomi&lt;br /&gt;
: (a.k.a. '''Koyomi Mizuhara'''; ja: 水原　暦、みずはら　こよみ) A studious girl with brown hair who is frequently bothered by her weight.  Spends much time being teased by Tomo.&lt;br /&gt;
&lt;br /&gt;
; Yukari&lt;br /&gt;
: (a.k.a. '''Yukari Tanizaki'''; ja: 谷崎 ゆかり) A disorganized English teacher. Often loses bets to Nyamo with whom she attended school.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
===Narrative===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198176</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198176"/>
		<updated>2026-01-31T07:19:04Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Annie Shapiro&lt;br /&gt;
: (c16) DNA expert. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock. (c16) Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Martin DuBois&lt;br /&gt;
: (c16) Member of the prime crew. Meets Stratt, Grace, and the other crew members.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock. (c16) Meets Stratt, Grace and the other crew members.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Lokken proposes to Grace using astrophage as a radiation shield for the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Grace tells Stratt half of humanity will die in 19 years due to falling solar radiation. Stratt demands strategies to geoëngineer global warming to extend 19 years to 27. Since the ''Hail Mary'' will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky's crewmates likely died of radiation sickness. Grace explains that Rocky survived because their job as engineer kept them close to astrophage containers; astrophage absorbs all radiation. Grace remembers a trip to Antarctica to nuke glaciers with fusion bombs. In the present, Grace and Rocky discuss how they see through light and sound respectively. Rocky constructs a mobile spacesuit for themselves to explore the interior of the ''Hail Mary''.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the ''Hail Mary''. Rocky and Grace decide to disconnect the ''Blip-A'' so they can create artificial gravity to use Grace's extensive scientific equipment which Rocky lacks. Grace and Stratt talk to Dr. Lamai whose automatic coma patient caretaker machine they plan to use for the ''Hail Mary'' crew. Stratt demands that all Hail Mary team members submit to genetic tests for the coma-resistent genes, including herself and Grace. Rocky asks for help in collecting astrophage samples on Tau Ceti. Grace shows Rocky. Rocky explains they have been in Tau Ceti for 46 earth years. Grace is surprised to learn Eridians live on average 689 earth years and Rocky is 291 years old.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Rocky says his home planet Erid has 72 earth years until astrophage dimming of 40 Eridani causes problems. Grace explains Earth has only 14 years until the majority of humans die due to Earth's comparably thinner atmosphere. Grace reveals his trip to Tau Ceti was one-way. Rocky offers the 2 million kilograms of astrophage Grace needs to return to Earth due to having extra. In the past, Grace and Stratt meet the prime crew (Yáo, Ilyukhina, and Martin DuBois) and backup crew (Captain Yang, Annie Shapiro, a Russian woman). Stratt regrets that the US and Russia forced her to include women in the crew due to the hazard of romantic drama on the mission.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Data_erasure&amp;diff=198175</id>
		<title>Data erasure</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Data_erasure&amp;diff=198175"/>
		<updated>2026-01-31T01:32:14Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''Data erasure''' is the practice of destroying digital records. A fast but naïve approach is to simply make a record inaccessible by deleting an entry in a central index....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Data erasure''' is the practice of destroying digital records. A fast but naïve approach is to simply make a record inaccessible by deleting an entry in a central index. However, more comprehensive methods involve repeatedly rewriting the recordʼs known physical data sector with noise and/or filling all (unused) data sectors in the entire storage medium with noise.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Useful commands==&lt;br /&gt;
On a [[Debian]] [[Linux]] system:&lt;br /&gt;
 $ sudo apt install secure-delete&lt;br /&gt;
 $ sfill -l -l /some/dir/&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198174</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198174"/>
		<updated>2026-01-30T03:59:49Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: /* Narrative */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Grace and Stratt recruit imprisoned solar engineer Robert Redell. Grace learns Eridian ignorance about [[Cosmic ray]]s killed all of Rocky's crewmates.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198173</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198173"/>
		<updated>2026-01-30T03:05:03Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Robert Redell&lt;br /&gt;
: (c13) A solar farm entrepreneur incarcerated in [[Auckland Prison]] for criminal negligence and embezzlement. Proposed the Blackpanel idea to Stratt.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; [[40 Eridani]]&lt;br /&gt;
: (c8) Origin of the ''Blip-A''.&lt;br /&gt;
&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Blackpanel &lt;br /&gt;
: (c13) A [[solar power]] device proposed by Robert Redell to breed and charge astrophage at scale.&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Grace and Rocky being eatablishing common units of measure. Grace takes a two hour nap after being awake for more than 48 hours. Grace deduces Rocky is blind. In the past, Stratt attends court to officially snub patent trolls in person. Grace prepares computers to decipher Rocky's speech with Fourier transform software but finds Rocky absent. Grace leaves a note that he will take an 8-hour nap.&lt;br /&gt;
| Grace, Rocky, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Grace wakes up late. Grace and Rocky determine a method for measuring mass. Rocky asks Grace to watch him sleep. Grace learns Rocky is the sole survivor of the ''Blip-A''. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198172</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198172"/>
		<updated>2026-01-28T19:33:27Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. “ИЛЮХИНА”) Ryland remembers her name while ejecting her corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
; Lokken, Dr.&lt;br /&gt;
: (c8) A scientist who lobbies Dr. Stratt to give the ''Hail Mary'' artificial gravity by designing it to transform into a centrifuge. Stratt assigns Lokken the responsibility to lead the centrifuge engineering design and manufacture.&lt;br /&gt;
&lt;br /&gt;
; Olesya Ilyukhina&lt;br /&gt;
: See '''Ilyukhina'''&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
; Yáo&lt;br /&gt;
: (c1) Dead crewmate of the ''Hail Mary''. Ryland cannot recall their name. (c4; a.k.a. 「姚」, “Yáo Li-Jie”) Ryland remembers their full name while ejecting their corpse out an airlock.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; Blip-A&lt;br /&gt;
: (c7) The literal designation given by the ''Hail Mary''ʼs automatic systems to an unidentified object that Ryland Grace deduces is an alien spacecraft.&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198171</id>
		<title>Project Hail Mary</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Project_Hail_Mary&amp;diff=198171"/>
		<updated>2026-01-27T05:45:58Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A science fiction book by [[Andy Weir]] in which a amnesiac high school science teacher wakes up during a mysterious mission to save the world.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Andy Weir]]&lt;br /&gt;
* Publication date: [[2021-05-04]]{{bkc|[[2025-10-31]]: Note, the film adaptation, ''[[Project Hail Mary (film)]]'', was announced in [[2020-03]], more than a year before the publication of the novel. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Iliujina&lt;br /&gt;
: Crewmate of the ''Hail Mary''.&lt;br /&gt;
&lt;br /&gt;
; Ryland Grace&lt;br /&gt;
: Biologist turned school teacher.&lt;br /&gt;
&lt;br /&gt;
; Rocky&lt;br /&gt;
: Lone pilot.&lt;br /&gt;
&lt;br /&gt;
; Stratt, Dr.&lt;br /&gt;
: The head of the Hail Mary Project and effective dictator appointed by the UN to save Earth.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; astrophage&lt;br /&gt;
: (c3) A space-faring [[solar radiation]] blocking [[microorganism]] that threatens the habitability of [[Earth]].&lt;br /&gt;
&lt;br /&gt;
; taumeoba&lt;br /&gt;
: (c21) A microbe from [[Tau Ceti]] that predates on astrophage.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Project Hail Mary]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Dr. Ryland Grace is woken up disoriented by a robot.&lt;br /&gt;
| Ryland&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Ryland comes to terms with the fact that he is in a solar system different from his own on a one-way trip. Ryland deduces the ''Hail Mary'' uses astrophage for fuel. Ryland recalls discovering the astrophage homeostasis temperature of 96.415°C. Ryland recalls killing an astrophage with a nanoneedle and discovering it is a microbe consisting mostly of water. Ryland recalls his students asking about his work on astrophages and informing them of the apocalyptic extinctions and famines to come in three decades. Ryland returns to Stratt's lab and insists on continuing work on the astrophages. Stratt gives him 3 to research. In the present, Ryland diafovers the four beetles designed to return data and physical samples to Earth: John, Paul, George, and Ringo.&lt;br /&gt;
| Ryland, Stratt, school kids&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| &lt;br /&gt;
| Ryland, Rocky&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2020-03-20]]: Film adaptation announced.&amp;lt;ref name=&amp;quot;hr_20200327_project-hail-mary&amp;quot;&amp;gt;[[Mia Galuppo]].  ([[2020-03-27]]).  “[https://www.hollywoodreporter.com/movies/movie-news/ryan-gosling-attached-star-andy-weir-adaptation-project-hail-mary-1287237/ Ryan Gosling is attached to star in and produce an adaptation of the new novel from 'The Martian' writer Andy Weir, 'Project Hail Mary.']”.  ''[[hollywoodreporter.com]]''.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from ''[[The Martian]]'' writer [[Andy Weir]], ''[[Project Hail Mary]]''. ¶ Project Hail Mary, which will be published in Spring [[2021]] by [[Random House]], centers on an astronaut, who would be played by Gosling, on a spaceship that is tasked with saving the planet. ”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[2021-05-04]]: Novel published.&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[Project Hail Mary (film)]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Science fiction books]]&lt;br /&gt;
[[Category:Books, fiction]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198170</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198170"/>
		<updated>2026-01-22T06:41:29Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
===Linux kernel stuff===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[ansi2txt]]===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===apt===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
===base64===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===bash===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Quotation rules====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
====Bash input/output====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
====Bash job management====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
====Bash string manipulation====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
====Array manipulation====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
====Iteration statements====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[bc]]===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
===brew===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
===calibredb===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
===chmod===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
===choom===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
===chown===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
===[[chrony]]===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
===convert===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
===column===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
===[[cron|crontab]]===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===cryptsetup===&lt;br /&gt;
====Get details on a volume encrypted with LUKS====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
===cut===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. integer seconds since [[1970-01-01]].)&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
===dd===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
===du===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
===dig===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
===[[dpkg]]===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
===dpkg-reconfigure===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
===[[dstat]]===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[dool]]===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[emacs]]===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
===[[f3]]===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
===[[ffmpeg]]===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;code&amp;gt;*.JPG&amp;lt;/code&amp;gt; files into time lapse at 60 frames per second (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;yuvj420p&amp;lt;/code&amp;gt; colors to reduce banding.&amp;lt;ref name=&amp;quot;yc_20190529_carmack-ffmpeg-color&amp;quot;&amp;gt;[[John Carmack]].  ([[2019-05-29]]).  “[https://news.ycombinator.com/item?id=20036710 Adventures with ffmpeg and color ranges]”.  ''[[ycombinator.com]]''.  Accessed [[2026-01-22]].  “&amp;lt;code&amp;gt;ffmpeg -i source.mp4 -c:v libx265 -pix_fmt yuvj420p dest.mp4&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;{{bkc|[[2026-01-22]]: Use &amp;lt;code&amp;gt;$ ffprobe DSC00123.JPG&amp;lt;/code&amp;gt; to find the color space of the input [[JPEG]] file. For example: &amp;lt;code&amp;gt;Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown)&amp;lt;/code&amp;gt; means &amp;lt;code&amp;gt;-pix_fmt yuvj422p&amp;lt;/code&amp;gt; should be the option provided to &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i '*.JPG' -c:v libx264 -r 60 -preset veryslow -crf 26 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
&lt;br /&gt;
====Quality of life====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
====Encode video====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
====Split a video file into roughly equal segments====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
====Combine video files into a single file====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
====Add subtitles to a video file====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ffprobe]]===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get bitrate in integer bytes.&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot;; -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 &lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
===[[find]]===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
===[[gcc]]===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[git]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
===[[gpg]]===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
===[[gs]]===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[Regular Expressions]]====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
===[[gunzip]]===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
===[[gzip]]===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
===[[head]]===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
===[[iftop]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
===[[iotop]]===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[ip]]===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
===[[ImageMagick]]===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
===[[jdupes]]===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
===[[journalctl]]===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[less]]===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
===[[locate]]===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
===[[ls]]===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
===[[lsof]]===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
===[[mail]]===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
===[[make]]===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
===[[mdadm]]===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
===mimetype===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
===mktemp===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
===[[mpv]]===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
===[[neofetch]]===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
===[[nethogs]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
===[[notify-send]]===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[openbox]]===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
===[[ots]]===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp, running &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; on 1000 files at a time.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find . -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 -L 1000 ots s&lt;br /&gt;
&lt;br /&gt;
===[[pandoc]]===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
===[[par2]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
===[[GNU parallel|parallel]]===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
===paste===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
===pipx===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
===play ([[sox]])===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ps]]===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
===[[pdftk]]===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
===[[pdftotext]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
===[[pgrep]]===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
===printf===&lt;br /&gt;
====GNU Coreutils====&lt;br /&gt;
Print a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; character.&amp;lt;ref name=&amp;quot;so_20130221_printf-exclam&amp;quot;&amp;gt;[https://stackoverflow.com/users/465183/gilles-qu%c3%a9not Giles Quénot].  ([[2013-02-21]]).  “[https://stackoverflow.com/a/15011849 How to printf an exclamation mark in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2026-01-15]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ printf &amp;quot;\041\n&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
====C stdio.h====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
===[[rev]]===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find ./ -type f | rev | cut -d'/' -f1 | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find ./ -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'/' -f1 | \    # Get file name.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the filename.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # Count and remove duplicates.&lt;br /&gt;
  sort -hk1;           # Sort by extension count field of each line.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[rsync]]===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
===seq===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
===[[ssh]]===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
===[[sort]]===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
===[[stdbuf]]===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[strace]]===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
===su===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
===sumdir===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===swapoff===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
===[[tail]]===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
===[[tar]]===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
===tee===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
===[[Tesseract (software)|tesseract]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
 $ sudo apt install tesseract-ocr-osd  # orientation and script detection&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR but with an image orientation check before.&lt;br /&gt;
 $ tesseract input.jpg output -l osd+eng&lt;br /&gt;
&lt;br /&gt;
Perform English OCR on all &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; files in the working with 8 CPU cores using [[GNU Parallel]].&lt;br /&gt;
 $ find . -maxdepth 1 -type f -name &amp;quot;*.jpg&amp;quot; | parallel tesseract -j8 '{}' '{.}' -l eng&lt;br /&gt;
: &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to start its search in the working directory&lt;br /&gt;
: &amp;lt;code&amp;gt;-maxdepth 1&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to only search the immediate working directory and not to recursively traverse subdirectories.&lt;br /&gt;
: &amp;lt;code&amp;gt;-type f&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to search for files&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.jpg&amp;quot;&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; to case-sensitive pattern-match files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-j8&amp;lt;/code&amp;gt; specifies 8 CPU threads to be used. Omitting this option causes all available CPU cores to be used.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt; represents a single line received from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;'{.}'&amp;lt;/code&amp;gt; represents the same line but with the extension (i.e. &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt;) removed.&lt;br /&gt;
&lt;br /&gt;
===[[top (software)|top]]===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
===[[tr]]===&lt;br /&gt;
====Remove unwanted character sets====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[tree (command)]]===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
===unar===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
===unzip===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
===[[veracrypt]]===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
===[[wc]]===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
===[[wondershaper]]===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
===[[yt-dlp]]===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[xargs]]===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===[[zip]]===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=ISO_5457&amp;diff=198169</id>
		<title>ISO 5457</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=ISO_5457&amp;diff=198169"/>
		<updated>2026-01-20T17:00:53Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''ISO 5457: Technical product documentation – Sizes and layout of drawing sheets''' is an industry consensus standard by iso.org.     {{#ifexist: {{FULLPAGENAME}}/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''ISO 5457: Technical product documentation – Sizes and layout of drawing sheets''' is an [[industry consensus standard]] by [[iso.org]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Title: Technical product documentation – Sizes and layout of drawing sheets&lt;br /&gt;
* Source: https://www.iso.org/standard/29017.html (44 CHF as of [[2026-01-20]])&lt;br /&gt;
&lt;br /&gt;
==Normative references==&lt;br /&gt;
* [[ISO 128-20]]:1996, ''Technical drawings – General principles of presentation – Part 20: Basic conventions for lines.''&lt;br /&gt;
* [[ISO 216]]:1975, ''Writing paper and certain classes of printed matter – Trimmed sizes – A and B series.''&lt;br /&gt;
* [[ISO 3098]]-1:1974, ''Technical drawings – Lettering – Part 1: Currently used characters.''&lt;br /&gt;
* [[ISO 7200]]:1984, ''Technical drawings – Title blocks.''&lt;br /&gt;
* [[ISO 9958]]-1:1992, ''Draughting media for technical drawings – Draughting film with polyester base – Part 1: Requirements and marking''&lt;br /&gt;
* [[ISO 9961]]:1992, ''Draughting media for technical drawings – Natural tracing paper''&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198168</id>
		<title>Bobiverse</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198168"/>
		<updated>2026-01-08T16:20:14Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bobiverse''' is the name of a series of [[science fiction]] books by [[Dennis E. Taylor]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Dennis E. Taylor]]&lt;br /&gt;
* Publication dates:&lt;br /&gt;
** [[2016-10-20]]: ''[[We Are Legion (book)|We Are Legion]]''&lt;br /&gt;
** [[2017-03-18]]: ''[[For We Are Many]]''&lt;br /&gt;
** [[2017-08-08]]: ''[[All These Worlds]]''&lt;br /&gt;
** [[2021-01-26]]: ''[[Heaven's River]]''&lt;br /&gt;
** [[2024-09-05]]: ''[[Not Till We Are Lost]]''&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Andrea&lt;br /&gt;
: (b1c1) Twin sister of Alaina and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Alaina&lt;br /&gt;
: (b1c1) Twin sister of Andrea and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Archimedes &lt;br /&gt;
: (b1c30) A Deltan that Bob judges to be particularly intelligent and adept at tool creation. (b1c44) Bob makes Archimedes his Messiah to help Deltans survive their existential threat of Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arnold&lt;br /&gt;
: (b1c35) A particularly strong Deltan named by Bob after [[Arnold Schwarzenegger]]. (b1c37) Wields an axe crafted by Archimedes to single-handedly dispatch many attacking gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arthur&lt;br /&gt;
: (b1c31) A particularly morose Bob that irritates Riker. (b1c47) Killed near [[Saturn]] by a nuke trap.&lt;br /&gt;
&lt;br /&gt;
; Bashful&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''. (b2c30) Travels to [[Gliese 877]] in November 2187 and finds Other activity. Collects data via remote probes and forwards them to Mario. Is detected and remotely shut down by a mysterious weapon fired from a grid on a Death Star-shaped ship. Bashful's GUPPI self-destructs their ship via reactor overload to prevent capture.&lt;br /&gt;
&lt;br /&gt;
; Bender&lt;br /&gt;
: (b1c30) Names Delta Eridani 4 “Eden” as the birthplace of the Deltans. (b1c39) Departs with Luke from Delta Eridani for [[Gamma Leporis A]]. (b4) A Bob clone who was shot down while exploring a megastructure housing beaver-like creatures named Quins. (b4c34; a.k.a. '''Motorola''') Bob finds Bender has been captured as just a matrix and has worked many years in captivity.&lt;br /&gt;
&lt;br /&gt;
; Bill&lt;br /&gt;
: (b1) One of the first Bobs. Decides to settle and manage [[Epsilon Eridani]] and research subspace theory and to refined ship designs.&lt;br /&gt;
&lt;br /&gt;
; Bob&lt;br /&gt;
: (a.k.a. '''Robert Johansson''', '''Bob-1''') The main character. (b1c1) A software-based emulated human mind. (b1c13) Departs Earth on ''Heaven-1''. (b1c27) Discovers intelligent life on Delta Eridani which he names Deltans and helps survive. (b4) Is on a quest to rescue Bender. (b2c12) Bob logs onto BobNet.&lt;br /&gt;
&lt;br /&gt;
; Bridget Sheehy, Dr.&lt;br /&gt;
: (b2c25) A red-haired biologist attractive to Howard. Reveals rabbits can eat some common Vulcan flora and thus provide meat to colonists. (B2c29) Given name is “Bridget”. Develops a test using body odor to detect parasite egg infections for Landing colonists on Vulcan. (b2c35) Howard and Bridget create [[Irish Whiskey]] and begin dating.&lt;br /&gt;
&lt;br /&gt;
; Butterworth, Colonel&lt;br /&gt;
: (b1) Military leader of the remains of the United States of Eurasia. First Earth survivor to contact Riker and Homer.&lt;br /&gt;
&lt;br /&gt;
; Calvin&lt;br /&gt;
: (b1) A Bob in the same cohort as Hobbes. (b1c28) Explores Alpha Centauri with Hobbes, finding wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Cranston, Minister&lt;br /&gt;
: (b1c33) FAITH leader based in San Diego. (b1c36) Attempts to mind control Riker. (b1c38) Introduces Riker to Julia Hendricks, a distant descendant of Robert Johannsonʼs sister, Andrea.&lt;br /&gt;
&lt;br /&gt;
; Deltans&lt;br /&gt;
: (b1) Intelligent inhabitants of Delta Eridani 4 found by Bob. (b1c27) Bob detects the fires of tool-using bat-pig creatures on Delta Eridani 4. (b1c30) Bob names the bat-pig natives of Delta Eridani 4 “Deltans”.&lt;br /&gt;
&lt;br /&gt;
; Diana&lt;br /&gt;
: (b1c11) A female Deltan that Archimedes fancies.&lt;br /&gt;
&lt;br /&gt;
; Dopey&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Doucette, Dr.&lt;br /&gt;
: (b1c11) A beautiful employee supervised by Dr. Landers who also assists Bob. (b1c13) Informs Bob of the death of Dr. Landers during the war on Earth.&lt;br /&gt;
&lt;br /&gt;
; ephemeral&lt;br /&gt;
: (b2) A derogatory term for biological humans that contrasts their short life span with the amortal nature of replicants.&lt;br /&gt;
&lt;br /&gt;
; FAITH&lt;br /&gt;
: (b1; a.k.a. '''Free American Independent Theocratic Hegemony''') A conservative theocracy that sacked and replaced most of the [[United States of America]].&lt;br /&gt;
&lt;br /&gt;
; Freida&lt;br /&gt;
: (b4) Quin Resistance leader. (b4c32) Gives Bob into custody of Natasha for money.&lt;br /&gt;
&lt;br /&gt;
; Goku&lt;br /&gt;
: (b1c28; a.k.a. '''Bob-10''') Explores Alpha Centauri with Calvin. They find wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Gorilloids&lt;br /&gt;
: (b1c35) Inhabitants of Epsilon Delta that prey upon the Deltans.&lt;br /&gt;
&lt;br /&gt;
; Gudmund Valter&lt;br /&gt;
: (b1c33) Ex-military leader of Spitsburgen Island.&lt;br /&gt;
&lt;br /&gt;
; Hoffa&lt;br /&gt;
: (b2c19) A Deltan who criticizes Bob's plans.&lt;br /&gt;
&lt;br /&gt;
; Homer&lt;br /&gt;
: (b1) A Bob created by Riker to assist him with the reconnaissance of Sol system after Bob settles Epsilon Eridani. Adopts the cartoon Homer voice and appearance to try and tease Riker into relaxing but fails.&lt;br /&gt;
&lt;br /&gt;
; Howard&lt;br /&gt;
: (B1) A clone of Riker tasked with overseeing the Earth refugee colonists that settled Vulcan. (B2) Develops feelings for the human Dr. Bridget Sheehy. (b2c69) attends the funeral is Stefane's Bridget's Catholic husband. Tests out Bill's prototype android, Manny, by attending the wake in it.&lt;br /&gt;
&lt;br /&gt;
; Howie&lt;br /&gt;
; (b2c69; a.k.a. '''Howard''' ) 13-year-old human son of Bridget and Stefane. Fascinated by his namesake, Howard.&lt;br /&gt;
&lt;br /&gt;
; Hungry&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is an obtuse reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Julia Hendricks&lt;br /&gt;
: (b1c38) Descendant of one of Bob's sisters. Mother of Justin Hendriks.&lt;br /&gt;
&lt;br /&gt;
; Justin Hendriks&lt;br /&gt;
: (b1c54) Son of Julia.&lt;br /&gt;
&lt;br /&gt;
; Landers, Dr.&lt;br /&gt;
: (b1c2) An employee of Applied Synergetics Inc. that guides Bob following his creation from the frozen brain of Robert Johansson. (b1c11) Supervisor of Dr. Doucette. (b1c13) Killed during the global war on Earth that wiped out most humans.&lt;br /&gt;
&lt;br /&gt;
; Lianne&lt;br /&gt;
: (b2c69) Daughter of Bridget and Stefane.&lt;br /&gt;
&lt;br /&gt;
; Linus&lt;br /&gt;
: (b1) A Bob created in Epsilon Eridani who chooses to explore. (b1c40) Discovers a failed Australian replicant probe in Epsilon Indi named Henry Roberts.&lt;br /&gt;
&lt;br /&gt;
; Luke&lt;br /&gt;
: (b1c39) Departs from Delta Eridani for [[Kappa Ceti]].&lt;br /&gt;
&lt;br /&gt;
; Marvin&lt;br /&gt;
: (B2c?) Stays behind to help Bob protect the Deltans as Luke and Bender depart Delta Eridani. (b2c24) Drops Bob's Sky God project in [[Delta Eridani]] and heads to [[Pi³ Orionis]].&lt;br /&gt;
&lt;br /&gt;
; Milo&lt;br /&gt;
: (b1) A bob that discovers and names Vulcan and Romulus in [[Omicron² Eridani]]. (B1c46) is killed by missiles while exploring [[82 Eridani]].&lt;br /&gt;
&lt;br /&gt;
; Motorola&lt;br /&gt;
: (b4c34) An alias for Bender.&lt;br /&gt;
&lt;br /&gt;
; Natasha&lt;br /&gt;
: (b4) Quin aristocrat supporting the Resistance. (b4c32) Pays Freida to capture Bob.&lt;br /&gt;
&lt;br /&gt;
; raptors&lt;br /&gt;
: (B2) A predator of Vulcan resembling velociraptors that threatens Landing colonists.&lt;br /&gt;
&lt;br /&gt;
; Riker&lt;br /&gt;
: (b1; a.k.a. '''Will''', '''William''') The second replicate Bob ever created. Returns to Sol system after first Bob settles Epsilon Eridani. Leads the evacuation effort of Earth, assisted by Homer. (b158) Successfully leads effort to build Exodus-1 and Exodus-2 to evacuate USE survivors from Earth.&lt;br /&gt;
&lt;br /&gt;
; Rosie&lt;br /&gt;
: (b2c69) Daughter of Bridget and Stefane.&lt;br /&gt;
&lt;br /&gt;
; Sheehy, Dr.&lt;br /&gt;
: See ''Bridget Sheehy''&lt;br /&gt;
&lt;br /&gt;
; Sleepy&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Spits&lt;br /&gt;
: (b1c33) Inhabitants of [[Svalbard|Spitsburgen Island]], led by Gudmund Valter. Are in possession of the [[Svalbard Global Seed Vault]] and the Svalbard Global Genetic Diversity Vault which they hold hostage as leverage against Riker to get a more favorable position in the evacuation queue.&lt;br /&gt;
&lt;br /&gt;
; Stéphane&lt;br /&gt;
: (b2c16) Leader of a group of raptor hunters on Vulcan.&lt;br /&gt;
&lt;br /&gt;
; VEHEMENT&lt;br /&gt;
: (b1c38) Earth survivors rebelling against Riker's rule. (b2; a.k.a. '''Voluntary Extinction of Human Existence Means Earthʼs Natural Transformation''')&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; 82 Eridani&lt;br /&gt;
: (b1c46) A star system with two habitable worlds discovered by Milo. Milo is killed by missiles soon after arriving into orbit around one of the worlds. (b1c60) Khan arrives with a retaliation fleet.&lt;br /&gt;
&lt;br /&gt;
; [[Alpha Centauri]]&lt;br /&gt;
: The nearest star system to Earth. (b1c22) Destination for Calvin and Goku after departing Epsilon Eridani in September 2150. (b1c28) Visited by Calvin and Goku in November 2163.&lt;br /&gt;
&lt;br /&gt;
; Augsburg, Germany&lt;br /&gt;
: A gathering place for some Earth survivors. Gathering place for USE survivors.&lt;br /&gt;
&lt;br /&gt;
; Beta Hydri&lt;br /&gt;
: (b1c57) A star system explored by Mario. Scoured clean of easily-accessible metal. Habitable planets show signs of violent and rapid sterilization via [[gamma ray burst]]s.&lt;br /&gt;
&lt;br /&gt;
; Delta Eridani&lt;br /&gt;
: (b1) A star system explored by Bob. (b1c?) Home of the Deltons that Bob and Marvin help survive.&lt;br /&gt;
&lt;br /&gt;
; Earth&lt;br /&gt;
: (b1) The original planet of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Eden&lt;br /&gt;
: (b1c30; a.k.a. '''Delta Eridani 4''') The planet of the Deltans. Named by Bender.&lt;br /&gt;
&lt;br /&gt;
; Epsilon Indi&lt;br /&gt;
: (b1c40) A system where Australian replicant Henry Roberts arrived and went insane.&lt;br /&gt;
&lt;br /&gt;
; Gliese 54&lt;br /&gt;
: (b2c54; a.k.a. '''GL 54''' ) Bill tells Hal that Others are headed from GL 877 to GL 54.&lt;br /&gt;
&lt;br /&gt;
; Gliese 877&lt;br /&gt;
: (b2c53; a.k.a. '''GL 877''') Hal tests Zapper shielding and succeeds.&lt;br /&gt;
&lt;br /&gt;
; Landing&lt;br /&gt;
: (b2) Primary settlement on Vulcan.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani|Omicron&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Eridani]]&lt;br /&gt;
: (b1) Star system explored by Milo. Contains the twin habitable planets discovered by Milo: Vulcan and Romulus. (b1c59) Is the destination for the USE colonists from Earth aboard ''Exodus-1'' and ''Exodus-2'' built by Riker, Homer, Arnold, and Ralph.&lt;br /&gt;
&lt;br /&gt;
; Okinawa&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Romulus&lt;br /&gt;
: (b1c19) The smaller of two habitable twin planets (0.7 M⊕) discovered and named by Milo in July 2152. Its larger twin is Vulcan. Romulus has less [[carbon dioxide]], a thinner atmosphere, a lower surface temperature, ice caps, and a sparse ecosystem with no fauna larger than a wolf. Milo believes the planet may have recently suffered a major extinction event.&lt;br /&gt;
&lt;br /&gt;
; San Diego&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors, mostly FAITH.&lt;br /&gt;
&lt;br /&gt;
; Sol&lt;br /&gt;
: (b1) The original star system of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; [[Svalbard|Spitsburgen Island]]&lt;br /&gt;
: An archipelago north of [[Norway]] between the [[Arctic Ocean|Arctic]] and [[Atlantic Ocean]]. (b1c33) A gathering place for some Earth survivors (a.k.a. '''Spits'''). Location of the [[Svalbard Global Seed Vault]] and associated Svalbard Global Genetic Diversity Vault.&lt;br /&gt;
&lt;br /&gt;
; Vulcan&lt;br /&gt;
: (b1c19; a.k.a. '''OE-1A''') The larger of two habitable twin planets (0.9 M⊕) discovered and named by Milo in July 2152. Its smaller twin is Romulus. Vulcan has more [[carbon dioxide]], a thicker atmosphere, and warmer surface temperature. Has a robust ecosystem with large fauna. (b1c61) Colonel Butterworth chooses this planet for USE evacuees aboard the Exodus-1 and Exodus-2 to settle.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; AMI&lt;br /&gt;
: (b1c2; a.k.a. '''artificial machine intelligence''') A thinking machine not derived from a scanned human mind as a replicant is. Lacks creative and improvisation abilities compared to flesh humans or replicants.&lt;br /&gt;
&lt;br /&gt;
; Exodus-1&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; Exodus-2&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; GUPPI&lt;br /&gt;
: (b1; a.k.a. '''Guppy''', '''General Unit Primary Peripheral Interface''') An AMI assistant provided to Bob by Landers. (b1c13) Modified by Bob to resemble [[Admiral Ackbar]] from [[Star Wars]]. (b2) &lt;br /&gt;
&lt;br /&gt;
; HEAVEN&lt;br /&gt;
: (b1; a.k.a. '''Habitable Earths Abiogenic Vessel Exploration Network''') FAITHʼs interstellar von Neumann probe project.&lt;br /&gt;
&lt;br /&gt;
; Heaven-1&lt;br /&gt;
: (b1c12) The HEAVEN space ship built by FAITH that is Bob's body for his journey from Earth.&lt;br /&gt;
&lt;br /&gt;
; replicant&lt;br /&gt;
: (b1c2) A thinking machine that emulates a biological human brain derived from a nerve tissue scanning process.&lt;br /&gt;
&lt;br /&gt;
; roamer&lt;br /&gt;
: (b1c3) An AMI-controlled drone capable of assembling and repairing machinery with a wide assortment of tools.&lt;br /&gt;
&lt;br /&gt;
; SCUT&lt;br /&gt;
: (b1c25) A faster-than-light communications device created by Bill. (b2; a.k.a. '''Subspace Communications Universal Transceiver''')&lt;br /&gt;
&lt;br /&gt;
; SUDDAR&lt;br /&gt;
: (b1c7) A scanning technology capable of remotely resolving the shape of physical objects. Basically, space radar. (b2; a.k.a. '''Subspace Deformation Detection and Ranging''')&lt;br /&gt;
&lt;br /&gt;
; SURGE drive&lt;br /&gt;
: (b1c7) A device that warps space to enable slower-than-light relativistic interstellar mass transport. Generates no reaction mass plume. (b2; a.k.a. '''Subspace Reactionless Geotactic Emulation''')&lt;br /&gt;
&lt;br /&gt;
; Zapper&lt;br /&gt;
: (b2c53) Hal successfully proves Zapper shielding is effective in Gliese 877.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====[[/b1|Book 1: We Are Legion]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[We Are Legion (book)|We Are Legion]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b1/p1/c1|p1c1]]&lt;br /&gt;
| Bob Version 1.0&lt;br /&gt;
| Bob attends two seminars about space exploration and [[Von Neumann Replicator]]s at a science fiction convention. Bob calls his mother and talks to his sister. Bob is struck by an automobile and killed. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c2&lt;br /&gt;
| Bob Version 2.0&lt;br /&gt;
| Bob wakes up 117 years later as a machine intelligence owned by FAITH, their flesh and blood brain destructively scanned in order to create a candidate artificial intelligence slave.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c3&lt;br /&gt;
| Bob – June 25, 2133&lt;br /&gt;
| Bob controls some roamers (robotic spiders) to stack some blocks.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c4&lt;br /&gt;
| Bob – July 15, 2133&lt;br /&gt;
| Bob learns the internet is no longer a thing in FAITH. Information is now hidden or inaccessible by default. Bob resolves to find freedom someway somehow.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c5&lt;br /&gt;
| Bob – July 18, 2133&lt;br /&gt;
| A surprise visit from Minister Travis of the ministry of Truth. Bob is given access to a space, station management, simulation and information library.&lt;br /&gt;
| Bob, Landers, Travis&lt;br /&gt;
|-&lt;br /&gt;
| p1c6&lt;br /&gt;
| Bob – July 19, 2133&lt;br /&gt;
| Bob learns to manage AMI controlled roamers in order to affect repairs on equipment such as 3D printers. Bob learns from Landers that his purpose is to be a manager of a [[von Neumann probe]] expedition into space. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c7&lt;br /&gt;
| Bob – July 25, 2133&lt;br /&gt;
| Dr. Landers explains to Bob the scope and progress of other rival political blocks of United States of Eurasia, the Brazilian group, the African Republic, and the Australian group. As far as their own private von Neumann exploration projects are concerned. China is likely to be fastest, but relying entirely upon AMIs. Brazil is likely to rely upon sabotage of other projects and the USE is most likely to colonize a star system once found. Additionally, Landers talks about the subspace drive technology that allows faster than light mass transport across interstellary distances.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c8&lt;br /&gt;
| Bob – August 4, 2133&lt;br /&gt;
| Bob aids in the defense of the research complex in which he is housed. Upon subdoing the black-clothed invaders, Landers asks Bob to retreat his roamers back into the training area. Landers tells Bob there is a tactical nuke installed beneath the training facility as a safeguard against Bob gaining freedom. Bob makes a crack about the ''[[Andromeda Strain]]'', a [[Michael Crichton]] novel. With a single roamer drone that was able to hide in the air ducts of the facility during the battle, Bob is able to build a 3D map of the facility surrounds and concludes that no such tactical nuke is present. Bob discovers the room housing the computers for himself and the four other candidates; Kenneth is his remaining competitor.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c9&lt;br /&gt;
| Bob – August 6, 2133&lt;br /&gt;
| Bob witnesses a confrontation by FAITH Minister Jacoby against Landers using wall vibrations via a roamer bot.&lt;br /&gt;
| Bob, Landers, Jacoby&lt;br /&gt;
|-&lt;br /&gt;
| p1c10&lt;br /&gt;
| Bob – August 10, 2133&lt;br /&gt;
| Bob wakes up with a week-long Gap in his memory. Landers tells Bob that a bomb destroyed the matrices storing his mind and that Bob had been destroyed and then recreated from backups. Bob thinks about his own existence and what defines life. {{bkc|Life is defined by others asserting that you are alive across time and space. Life is the degree to which others believe that you are alive and have a relationship with you asserting as much. The same can be said for personhood as well. Integration across time and articulation across space is what defines life.}} Landers informs Bob that the only other replicant competitor candidate has been decommissioned. Bob concludes that Kenneth the other only living replicants cube that he saw in the room has not been deactivated since now. Bob is running on Kennethʼs old hardware. Bob and frantically distracts Landers after mentioning Kennethʼs name. Landers informs Bob that launch is in a month and can be accelerated if need be. Landers tells Bob that they are now going to be awake continuously, save for short sleep periods required for backups so that Bob can help assist with the project.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c11&lt;br /&gt;
| Bob – August 15, 2133&lt;br /&gt;
| Bob chats with Dr. Doucette, a beautiful substitute for Landers.  Bob learns of software enforcement of his mission.&lt;br /&gt;
| Bob, Doucette&lt;br /&gt;
|-&lt;br /&gt;
| p1c12&lt;br /&gt;
| Bob – August 17, 2133&lt;br /&gt;
| Landers awakens Bob after another attack that has fatally wounded more staff. Landers gives Bob a file with not only new training objectives but also access keys to bypass and disable software restrictions that would enslave Bob. Bob awakens on launch day in their ship, commanding the entire vessel. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c13&lt;br /&gt;
| Bob – August 17, 2133 – En Route&lt;br /&gt;
| Bob prepares to launch his spaceship, frame jacking his perception of time in order to read up on his mission objectives and training information. Landers begins a radio transmission to Bob, warning him of a missile strike. Upon hearing the word “missile”, before Landers can finish their sentence, Bob searches his sensors and detects two oncoming missiles. Bob immediately launches from his dock. Bob launches two mining drones to act as makeshift chaffe. Bob succeeds in destroying one missile; the other missile strikes the station he was docked at. A naval engagement among several space-faring factions surround the station as Bob departs. &amp;lt;br/&amp;gt; Bob defuses his software self-destruct traps. Bob finally learns of a Brazilian probe, likely hostile, headed his way also to Epsilon Eridani. Bob reviews plans for the remaining 145-ish days left until encounter.  Bob learns Landers was killed in the Earth war. Bob finishes Spike (his VR cat), Jeeves (a butler), and Guppy (GUPPI). Bob disables his endocrine system restrictions and breaks down emotionally at losing his family. Guppy informs Bob of many nuclear detonations on Earth. Bob concludes he will not receive any help.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p2c14&lt;br /&gt;
| Bob – August 2144 – Epsilon Eridani&lt;br /&gt;
| Bob enters the [[Epsilon Eridani]] system. Bob reviews plans for encounter with Brazilian probe. Bob concludes that ideal plan is to appear ignorant, receive first shot, play possum, then counter-attack. Bob decides the best course of action is to destroy Brazilian probe outright rather than to engage in protracted long-term battle. Bob begins deploying factory resources to execute plan. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c15&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob encounters the Brazilian probe and fights. Bob deploys his scheme and ultimately wins the battle, thanks to the Brazilian ship favoring torpedo count at the expense of upgrading ship capabilities to adapt to changing battle conditions. In other words, Bob won due to the Brazilian ship having only four missiles.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c16&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob surveys planets of Epsilon Eridani. Bob finally gives in to Guppyʼs insistence on replicating. Bob orders the creation of more Bobs.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c17&lt;br /&gt;
| Bob – July 2145 – Epsilon Eridani&lt;br /&gt;
| Bob initializes more Bobs. A Bob wakes up to find they are a copy. Original Bob holds a meeting among Bobs: Bob-2 is Riker. Riker wishes to visit Earth again. Milo wants to avoid Earth and any hostile probe. Riker and Milo butt heads. Mario is quiet. Bill is most amenable to Bob but prefers research rather than exploration.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c18&lt;br /&gt;
| Bill – September 2145 – Epsilon Eridani&lt;br /&gt;
| Bill watches Bob, Mario, and Milo leave Epsilon Eridani. Riker plans to build a clone to return to visit Earth. Bob is traveling to Delta Eridani. Anti-social Mario is headed to Beta-Hydri.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c19&lt;br /&gt;
| Milo – July 2152 – Omicron² Eridani&lt;br /&gt;
| Milo discovers life at Omicron² Eridani on a binary pair of planets. Milo names them Vulcan and Romulus.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c20&lt;br /&gt;
| Bill – December 2145 – Epsilon Eridani&lt;br /&gt;
| Bill and his clone, Garfield, bid farewell to Riker and Riker's clone, Homer. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c21&lt;br /&gt;
| Riker – January 2157 – Sol&lt;br /&gt;
| Riker and Homer perform reconnaissance and surveillance on the Sol system. Riker and Homer witness a Brazilian ship destroy a decoy ship. Homer discovers that the Brazilian ships are dropping asteroids upon China.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c22&lt;br /&gt;
| Bill – September 2150 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield bid farewell to Goku, Linus, and Calvin. Calvin and Goku were inseparable but also constantly fighting. Bill and Garfield equipped Calvin and Goku with a ship with cloaking ability, fighting ability, and strong engines to coast undetected. Bill and Garfield note that Calvin and Goku would likely find hostile encounters at their destination of [[Alpha Centauri]]. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c23&lt;br /&gt;
| Milo – February 2153 – Omicron² Eridani&lt;br /&gt;
| Milo is in Omicron² Eridani. Milo decides not to duplicate itself and instead decides to move on towards [[82 Eridani]]. Milo sends a report back to Bill and proceeds to travel to a new star system.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c24&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker and Homer combat the six Brazillian ships. Riker and Homer destroy four Brazilians behind the Sun. Riker and Homer go silent until they reach Earth and use it to hide their presence from the remaining two Brazilians. Riker and Homer confront the remaining two Brazilians. Homer is struck silent while Riker maneuvers to destroy the last Brazilian ship.&lt;br /&gt;
: Riker deflects the several [[Chicxulub crater|Chicxulub]]-scale asteroids the Brazilian space force had intended to use in retaliation against all Earth life for the destruction of [[Brasil]]. Riker found the Brazilian ships had been left without factories or shuttles to rebuild their forces or even occupy Earth.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c25&lt;br /&gt;
| Bill – September 2151 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield test out [[faster-than-light]] communications. Bill and Garfield plan to deploy IPv8 internet. Bill and Garfield determine that a communication node is required at least every 25 light years. Bill and Garfield decide to transmit plans for the the FTL communications to the other Bobs.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c26&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker discusses logistics for the recovery of human life on Earth. USE Colonel Butterworth tells Riker that the human population has been reduced to several tens of millions of people. Butterworth tells Riker that the global war that occurred was hard-fought and that the last resilient space force remnants were the small survivors of a much larger conflict, but that their ability to drop rocks from space allowed them to massacre billions of lives at the end. Colonel Butterworth asks Riker for help in migrating the survivors to another habitable world since Earth's habitability will not recover for at least another 5 to 10 000 years. Riker tells Butterworth that the habitability of candidate destination planets has not yet been transmitted to him from Bill that in a few years information may be available. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c27&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob arrives at Delta Eridani. Bob discovers an oxygen atmosphere around one planet. Bob discovers fire-using individuals, likely intelligent species on one of the planets. Bob proposes first contact via a roamer but Guppy shoots down the idea since roamers are not ideal for terrestrial exploration. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c28&lt;br /&gt;
| Calvin – November 2163 – Alpha Centauri&lt;br /&gt;
| Calvin finds the wreckage of the USE probe at Alpha Centauri B. Calvin and Goku fight Medeiros at Alpha Centauri A, destroying all but one of his probes which escapes.&lt;br /&gt;
| Calvin, Goku&lt;br /&gt;
|-&lt;br /&gt;
| p2c29&lt;br /&gt;
| Riker – September 2157 – Sol&lt;br /&gt;
| Riker and Butterworth argue about priorities for rescuing the survivors on Earth. Riker believes that prioritizing logistics for creating the colony ship should not impede a search for survivors. Butterworth argues that all resources should be dedicated towards helping USE survivors at the expense of all other Earth inhabitants. Riker and Homer discover undestroyed stations in the Oort Cloud and outer solar system which may be useful for building colony ships. Riker muses about responsibility for ensuring the survival of humanity in the solar system.&lt;br /&gt;
| Riker, Butterworth, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c30&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob surveils a tribe of Deltans, “Deltan” is the name that Bob has come up for the fire-using inhabitants he found on Delta Eridani 4. Bob watches in particular a single Delton that he has labeled Archimedes due to Archimedes having constructed knife blade with a handle tied to it. A technology unique apparently to deltas, particularly one Delta Archimedes. Bob watches Archimedes with the help of other box that he has commissioned for the help of surveilling the planet including Luke Bender and others. &lt;br /&gt;
| Bob, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| p2c31&lt;br /&gt;
| Riker – January 2158 – Sol&lt;br /&gt;
| Riker sees his plan encounter delays for constructing the evacuation ships for survivors of Earth. Arthur, a Bob clone of Riker, has found difficulty contacting surviving enclaves due to ongoing hostility from the war. Homer reports to Arthur that enough supplies exist to construct three colony ships for evacuation.&lt;br /&gt;
| Riker, Arthur&lt;br /&gt;
|-&lt;br /&gt;
| p2c32&lt;br /&gt;
| Bill – October 2158 – Epsilon Eridani&lt;br /&gt;
| In Epsilon Eridani, Bill and Garfield receive word from Milo about the twin habitable worlds Vulcan and Romulus. Bill estimates that it will be about 9 years until word of the habitable worlds can be passed to Earth. Bill feels like a shepherd for humanity. &lt;br /&gt;
| Bill, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| p2c33&lt;br /&gt;
| Riker – March 2158 – Sol&lt;br /&gt;
| Riker performs diplomacy with representatives of the survivors of Earth. Riker mishandles the initial meeting with little empathy for the survivors. Homer talks Riker into by recognizing them as passengers who know their fate is being decided by others and wish to have some level of agency in their fate. Riker holds talks with individual leaders. Riker talks with the Spits, survivors who are in physical possession of the Svalbard Global Seed Vault which they threaten to destroy if their group of roughly 4,000 were not prioritized. &lt;br /&gt;
| Riker, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c34&lt;br /&gt;
| Homer – September 2158 – Sol&lt;br /&gt;
| Homer talks to himself about Rikerʼs arrogant tyrannical attitude towards others. Homer is amazed that Riker has still not yet recognized that, he Homer, is attempting to ridicule Riker with his cartoon Homer act. Homer anticipates that Riker will perform poorly regarding the evacuation efforts. Homer sees a way to diplomatically smooth evacuation efforts by bumping up the evacuation of certain groups while not affecting the schedule. Homer decides to discuss this possibility with Colonel Butterworth behind Rikerʼs back.&lt;br /&gt;
| Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c35&lt;br /&gt;
| Bob – July 2165 – Delta Eridani&lt;br /&gt;
| Bob witnesses Deltans killed by Gorilloids. Bob debates with other Bobs the ethics of assisting the Deltans. Bob surveils Deltans and encourages their technological development by providing one Deltan he has named Archimedes with flint nodules. Archimedes produces weaponry for their fellow Deltans. The Deltans successfully repel the next gorilloid attack.&lt;br /&gt;
| Bob, Marvin, Bender, Luke&lt;br /&gt;
|-&lt;br /&gt;
| p2c36&lt;br /&gt;
| Riker – September 2158 – Sol&lt;br /&gt;
| Riker continues to hold meetings with survivors of Earth. Various factions attempts to lobby with Riker for preferential treatment but Riker shuts them all down hard. Colonel Butterworth proposes in private to Riker the possibility of allowing the group that holds control of the seed vault a position in one of the colony ships at the expense of delaying other colonies shipped in order to secure the the seed vault contents. FAITH attempts to hack Rikerʼs systems with a secret code that, before first Bob disabled their software traps, would have turned Riker into their slave. Riker shuts down talks with FAITH immediately.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c37&lt;br /&gt;
| Bob – August 2165 – Delta Eridani&lt;br /&gt;
| Bob notices a large gorilloid attack on the Deltans. Bob, Marvin, and company decide to deploy a drone to attack the gorilloids in a kinetic strike. Arnold learns to instantly kill gorilloids with an axe Archimedes made. A gorilloid is atomized. Archimedes begins digging up the metal attack drone crash site. Bob decides to guide the Deltans back to their old flint gathering site. Marvin decides to stay long term to guide the Deltans with Bob. Luke and Bender decide to move on to find a star system with their own project.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c38&lt;br /&gt;
| Riker – November 2158 – Sol&lt;br /&gt;
| FAITH holds hostage Bob's descendants. Riker recognizes the young woman that faith presents to him during a call as resembling Andrea, original Bob's sister. FAITH allows Riker and the young woman to freely talk while under surveillance.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c39&lt;br /&gt;
| Bob – October 2165 – Delta Eridani&lt;br /&gt;
| Bob bids farewell to Luke and Bender. Luke decides to travel to [[Kappa Ceti]] and Bender to [[Gamma Leporis A]]. Bob talks with Marvin about the ethics of copying themselves in order to favor psychologies that allow cooperation. Bob vows to help the Deltans develop. Archimedes experiments with the metal wreckage. Arnold continues to learn how to use the acts that Archimedes gave him.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c40&lt;br /&gt;
| Linus – April 2165 – Epsilon Indi&lt;br /&gt;
| Linus encounters the Australian probe that has gone insane. Linus extracts the replicant Henry Roberts and builds a realistic VR for them to live. Henry believes their time as a probe was a nightmare.&lt;br /&gt;
| Linus&lt;br /&gt;
|-&lt;br /&gt;
| p2c41&lt;br /&gt;
| Riker – May 2162 – Sol&lt;br /&gt;
| Riker breaks the news of the availability of Vulcan and Romulus to the Earth survivors. Riker threatens to withdraw all support if survivors continue to demand individual planets for themselves.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c42&lt;br /&gt;
| Bill – April 2162 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield butt heads about TODO list priorities. Bill decides to ease off on first Bob's declaration that most senior Bob has final say.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c43&lt;br /&gt;
| Riker – September 2164 – Sol&lt;br /&gt;
| Riker inspects the construction of colony ships. Riker thinks about metal scarcity. Homer has been assigned to bootstrap a metal gathering operation with printers. Riker, Homer, and Charles hold an all-Bobs meeting in Earth orbit. The Bobs brainstorm ideas for saving the Earthbound survivors: orbital mirrors to combat global cooling, moving people towards the equator, moon colonies, space stations.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c44&lt;br /&gt;
| Bob – January 2166 – Delta Eridani&lt;br /&gt;
| Bob makes Archimedes his Messiah. Bob orders the Deltans to return to a previous encampment site rich in flint.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c45&lt;br /&gt;
| Bill – January 2165 – Epsilon Eridani&lt;br /&gt;
| Bill receives word back from Bart who built the FTL communication array. Bart tells Bill that the Alpha Centauri systems that Calvin and Goku settled are building Bobs and gathering resources, but that Calvin and Goku have since moved on to explore more star systems. Bart informs Bill that the Brazilian ships that had been defeated by Calvin and Goku were all destroyed except one which got away. Bill is reassured that another Bob factory is in operation since Bill has not created new box in some time. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| [[Bobiverse/Book 1, full text (2016)/Part 2/Chapter 46|p2c46]]&lt;br /&gt;
| Milo – August 2165 – 82 Eridani&lt;br /&gt;
| Milo explores  82 Eridani, a new star system, and finds two habitable planets. As Milo approaches and enters orbit around one of the habitable planets, he is fired upon by several missiles. Milo transmits a partial differential backup of his mind back to Bill at [[Epsilon Eridani]]. Milo deploys countermeasures and fights with his rail gun but is ultimately overwhelmed.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c47&lt;br /&gt;
| Riker – January 2166 – Sol&lt;br /&gt;
| Riker talks with Homer about the evacuation effort. Arthur is killed by a nuclear bomb trap near Saturn.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c48&lt;br /&gt;
| Bob – May 2166 – Delta Eridani&lt;br /&gt;
| Bob governs the migration of the Deltans across a mountain pass. Several stray Delton communities join the main group.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c49&lt;br /&gt;
| Riker – May 2166 – Sol&lt;br /&gt;
| Homer proposes to Riker the idea of agricultural space stations that prioritize creating food in lieu of hosting living humans which have higher requirements to maintain. Riker proposes the agricultural space station idea to the survivors of Earth who generally reject the idea initially. Riker passes the idea through the representatives meeting by noting that the agricultural products of [[kudzu]] will prevent mass death due to starvation among most of the survivors on Earth. Rikerʼs GUPPI notes that a hacking attempt originating from New Zealand was deflected by Bob oneʼs firewall which could have compromised Rikerʼs mind. Riker meets with FAITH representative Cranston; Cranston proposes sharing FAITH food supplies with other nations in exchange for preferential treatment in in colonyship scheduling. Riker discusses the hacking attempt with Cranston; Cranston tells Riker that FAITH replicant technology was stolen via espionage from Australian researchers who pioneered the technology. Cranston believes the hack was performed by people of New Zealand where many Australian survivors fled to. Riker discusses the the idea of agricultural space stations Homer and Charles; The Bobs of Sol agree that Cranston's proposal is acceptable.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c50&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| A very large group of gorilloids attacks the Deltans that just made the trip across the mountains. Overall, the attack was repelled at the cost of many Deltan lives. Bob decides to devote resources towards printing printers and armaments of an explosive nature in order to combat future attacks. Bob, through Archimedes, recommends the settlement of the local area instead of completing the journey to the Flint rich area in order to capitalize upon the fear inflicted upon the gorilloites during the counter-attack. The Deltans accept Bob's plan.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c51&lt;br /&gt;
| Bill – January 2174 – Epsilon Eridani&lt;br /&gt;
| Bill receives Milo's final transmissions. Bill orders the creation of a retaliatory fleet.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c52&lt;br /&gt;
| Riker – January 2168 – Sol&lt;br /&gt;
| Homerʼs ranch donut project bears fruit: kudzu crops are successfully supplanting the diet of Earth survivors. Riker is congratulatory to Homer.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c53&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| The Deltans suffer an attack by a big cat. Bob begins teaching the Deltons medicine. The Deltons arrive at the flint site.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c54&lt;br /&gt;
| Riker – October 2170 – Sol&lt;br /&gt;
| Riker, Homer, Charles, and Ralph oversee the commissioning of Exodus-1 and Exodus-2.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c55&lt;br /&gt;
| Bob – July 2166 – Delta Eridani&lt;br /&gt;
| Bob discovers that the Deltans migrated away from the flint site due to proliferation in the local region of plants that the gorilloids ate. Deltans filled a protein hole in the gorilloid diet. Marvin shows Bob that the Deltans have begun worshiping “Bawb” by building shrines around wreckage of the buster machines used to automatically defend the Deltan camp perimeter from gorilloids.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c56&lt;br /&gt;
| Bill - March 2167 - Epsilon Eridani&lt;br /&gt;
| Bill iterates on his android project. Latency and sensory processing problems persist.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c57&lt;br /&gt;
| Mario – August 2169 – Beta Hydri&lt;br /&gt;
| Mario arrives at Beta Hydri. Mario discovers the system almost completely devoid of easily-accessible metallic ore. Mario discovers signs of an artificial [[gamma ray burst]] used to instantly sterilize local planets of life. One of Marioʼs roamers opens a box containing small machines that begin disassembling the roamer. Mario discovers the small machines are powered by his own SUDDAR scans. Mario captures one of the small ant-like machines in plastic. Mario decides to fly back to inform the other Bobs of his discovery since he lacks metals to construct an FTL communication station.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| p2c58&lt;br /&gt;
| Riker – April 2171 – Sol&lt;br /&gt;
| Riker sees the launch of the first two colony ships depart Sol system with USE colonists, two Riker clones, and Howard, a recent Bob clone.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c59&lt;br /&gt;
| Bill – May 2172 – Epsilon Eridani&lt;br /&gt;
| Bill holds the first Bob-moot in Epsilon Eridani. The colonists are en route to [[40 Eridani|Omicron² Eridani]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c60&lt;br /&gt;
| Khan – April 2185 – 82 Eridani&lt;br /&gt;
| Khan leads 7 other Bobs to attack Medeiros in 82 Eridani. Khan is the only survivor. Khan reports back to Bill. Several Bobsʼ differential backups failed to be completely received. Khan vows to return to fight Medeiros in 82 Eridani agian.&lt;br /&gt;
| Khan&lt;br /&gt;
|-&lt;br /&gt;
| p2c61&lt;br /&gt;
| Howard – September 2188 – Omicron² Eridani&lt;br /&gt;
| Howard arrives at Omicron² Eridani with the Earth colonists aboard Exodus-1 and Exodus-2. Colonel Butterworth is awoken and settlement of Vulkan begins in earnest.&lt;br /&gt;
| Howard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b2|Book 2: For We Are Many]]====&lt;br /&gt;
&lt;br /&gt;
71 &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[For We Are Many]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Sky God; Bob, February 2167, [[Delta Eridani]]&lt;br /&gt;
| Deltans take down a pigoid. Bob pressures Cruella, a Deltan medicine woman, to use hot water to dress a wound. Marvin tells Bob of a mystery of Deltan migration patterns.&lt;br /&gt;
| Bob, Marvin, Archimedes, Cruella&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| Colony Site; Howard, September 2188, [[Vulcan]]&lt;br /&gt;
| Howard learns of an attack by local birds against excavation equipment. Howard meets with Colonel Butterworth regarding New colony issues. Colonel butcher worth expresses desire for future colonists to pick a different planet besides Vulcan.&lt;br /&gt;
| Howard, Butterworth&lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| Life in Camelot; Bob, March 2167, Delta Eridani&lt;br /&gt;
| Bob speaks with Archimedes who is curious about Bob's nature. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Water Planet; Mulder, October 2170, [[Eta Cassiopeiae]]&lt;br /&gt;
| Mulder explores the system. Mulder finds a water world covered with a sparse scattering of photosynthesizing oxygen producing mats floating on the surface. Mulder finds the ocean is 800 km deep. Mulder creates two Bobs: Skinner and Johnny. Johnny is extremely sarcastic. Johnny wishes to depart quickly for another place.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| Progress; Howard, December 2188&lt;br /&gt;
| Howard discusses with butcherworth the progress on securing the perimeter of Landing, the primary settlement on Vulcan. But it reports that local wildlife continues to attack the colonization site but they show no sign of intelligence. Howard has a meeting with Bert and Ernie informing them that they may soon be released to return to Earth. Colonist decanting begins and completes. Howard nodes that the next shipment of colonists the spits going to have to be delayed in order to facilitate or accommodate the securing of Landing. Bert and Ernie note that the spits would likely be departing Earth as scheduled, but they cannot help their detenting date.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| Contacting Bill; Mulder, April 2171, Poseidon&lt;br /&gt;
| Molar constructs the scut scut in order to communicate with Bill. Mulder is extremely surprised when Bill enters his own VR environment in real time. Bill tells Mulder that habitable planets are still in demand. Mulder decides to work in Earnest to prepare the local system Poseidon specifically into being ready to receive colonists. Mulder notes that colonists for Poseidon will have to initially be space-based due to the lack of land on Poseidon.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| Back to Work; Riker, July 2171, [[Sol]]&lt;br /&gt;
| Riker receives reports from Charles about VEHEMENT terrorist attacks that have begun to become more deadly. Charles believes that the attacks are now coming from two groups. Not just VEHEMENT. Riker attends another United Nations meeting and lads the speech of a Maldives representative who insists upon spreading humanity beyond just epsilon eradani and into Poseidon as well in order to further create more redundancy in human civilization.&lt;br /&gt;
| Riker, Charles&lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| Farming Satellites; Howard, April 2189, Vulcan&lt;br /&gt;
| Howard oversees the commissioning of farming stations. ''Heaven-3'' arrives. The captain, Sam, meets with Howard, expressing distaste for being a truck driver. Howard enjoys Sam's cognac. Howard asserts dominance over colonists via their position of power over food production. Howard's primary argument rests upon their lack of involvement in creating the war that killed most humans on Earth. Howard discuses incompatibility of Vulcan flora and fauna.&lt;br /&gt;
| Howard, Sam, Butterworth&lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| Something is Out There; Bob, September 2169, Delta Eridani&lt;br /&gt;
| Bob reviews the status of the Deltans. Marvin tells Bob that there was a predator in the recent past. That's nearly wiped out the Deltans that was not the gorilloids. Bob decides to postpone armament production in order to produce scouts to scan Eden's surface in search of the predators that Marvin believes exists.&lt;br /&gt;
| Bob, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| Genocide; Mario, November 2176, [[Zeta Tucanae]]&lt;br /&gt;
| Mario discovers more evidence of a genocide in a separate star system that he had fled to after departing Beta Hydri. On a habitable world, Mario discovers the planet to be sterilized and evidence of cities and transport infrastructure laid waste to an effort to recover metal and the bodies of the inhabitants.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Mating Dance; Bob, November 2169, Delta Eridani&lt;br /&gt;
| Bob teaches Archimedes principles of [[Jujutsu]] to further his [[eugenics]] project of increasing Deltan intelligence by spreading Archimedesʼ genes in the next generation. Archimedes fancies Diana. Marvin informs Bob that a Deltan has fallen prey to the mystery predator. &lt;br /&gt;
| Bob, Archimedes, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Bob Calling; Bill, May 2171, [[Epsilon Eridani]]&lt;br /&gt;
| Bill receives contact from Bob who just constructed their SCUT device and logged onto BobNet. Bill and Garfield are surprised that Bob made [[First contact (science fiction)|First Contact]] with intelligent life in [[Delta Eridani]]. Bill is surprised at Bob-1's adeptness with virtual reality programming and decides to copy much of Bob's work. Bill catches Bob up on the human evacuation of Earth to [[Omicron² Eridani]]. Bill confesses their android project has only yielded a quadruped model so far.&lt;br /&gt;
| Bill, Bob, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Investigating the Others; Mario, May 2180, [[Gliese 54]]&lt;br /&gt;
| Mario finds no sign of the genociders in Gliese 54. Mario creates Bashful, Dopey, Sleepy, and Hungry. They consider plans to gauge the magnitude and direction of the genocider threat. Mario recommends frequent differential backups in case one of them is compromised to prevent secrets being leaked from disassembly.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Sabotage; Riker, December 2170, Sol&lt;br /&gt;
| Riker learns of VEHEMENT attacks on cattle. UN representatives condemn the attack. Riker wishes he had some political agenda to push since VEHEMENT has made itself a common enemy and thus generated consensus in the UN. Homer reveals that he has been under-reporting agricultural production so the VEHEMENT attacks only ate into that safety factor.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| A Visit From Bill; Mario, November 2180, Gliese 54&lt;br /&gt;
| Mario receives blueprints for and builds a SCUT. Bill calls Mario. Mario shares the bad news about the genociders. Bill promises to work on developing weapons.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Hunted; Howard, September 2189, Vulcan&lt;br /&gt;
| Howard intervenes with a Buster to save a colonist hunting raptors. Howard talks with Hunter Stéphane. Howard meets with Bob and Bill in a camping VR environment. Bob says he feels anxious when thinking about his flesh relatives. Howard tells Butterworth about the Others that Mario and company is tracking down. Butterworth is angry. Butterworth and Howard lament their lack of free time.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| We’ve Lost a Drone; Bob, May 2171, Delta Eridani&lt;br /&gt;
| Bob continues to transmit SCUT plans to Luke and Bender's anticipated position. Marvin and Bob discover more evidence of the unknown predator of Deltans after the predator took down a drone. &lt;br /&gt;
| Bob, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| It’s Getting Worse; Riker, Sept 2172, Sol&lt;br /&gt;
| A bombing in a Brazilian favela. Brazilian Minister Benedito asks for help but Riker declines. New Zealand Minister Gerrold accuses Riker of failing to catch the terrorists. Maldives Minister Sharma defends Riker, citing bigotry against replicants. Riker notices Homer is quiet.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| Prey; Bob, June 2172, Delta Eridani&lt;br /&gt;
| Bob and Marvin deduce the predator is a camouflaging Hippogriff, a horse-sized relative of a smaller predator flyer observed long ago. Bob kills a Hippogriff approaching Camelot with a buster. Many Hippogriffs approach in response. Bob kills them with all available busters. Three Deltans are killed by Hippogriffs. Leader Hoffa accuses Bob of leading the Deltans into the Hippogriff territory. Bob defends his recommendation for the Deltans to relocate to their flint site. Bob kinetically bombards a nearby island densely packed with Hippogriff. The Delta leader Hoffa bans Bob. Bob leaves. Diane is triumphant.&lt;br /&gt;
| Bob, Marvin, Hoffa, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| Parasite; Howard, October 2189, Vulcan&lt;br /&gt;
| Howard and Butterworth watch parasite eggs and larva being removed from a person. Howard watches a conference call between Riker and Julia and her son, Justin. Howard and Butterworth see a captured flying adult version of the parasite.&lt;br /&gt;
| Howard, Butterworth &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| Attacks Continue; Riker, December 2174, Sol&lt;br /&gt;
| A cargo drone is lost carrying food and agricultural equipment to [[Vancouver Island]]. One of Homerʼs farming donuts suffers a VEHEMENT cyberattack, destroying kudzu. Riker decides to study cryptography after being unable to identify the attack vector.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| Fallout; Bob, December 2173, Delta Eridani&lt;br /&gt;
| Bob meets in secret with Archimedes. Bob teaches Archimedes about archery and crafting bows. Archimedes says Bob is no longer welcome in Camelot due to the decrease in hippogriff attack frequency since Bob left; Bob retorts that, although they have been exiled, Bob has still been eliminating hippogriffs in the vicinity to protect Archimedes. Marvin announces his departure from Delta Eridani. Bob wonders how Luke and Bender are doing, wishing they'd make a SCUT transmission eventually.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| VEHEMENT; Riker, September 2175, Sol&lt;br /&gt;
| Riker receives notification that another VEHEMENT attack occurred, this time destroying a newly constructed donut-farm that Homer had built. Homer is distraught and sullen. Riker speculates on how VEHEMENT is coordinating actions with this new second faction that seems more capable and has effected complex attacks on the planetary power system. Riker speculates that VEHEMENT is using steganography to communicate because he cannot detect any unusual traffic in the limited planetary communication network.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| Visiting Marvin; Bob, March 2174, Delta Eridani&lt;br /&gt;
| Bob calls Marvin over SCUT. Bob admires Marvinʼs habitable Moon environment. Bob tells Marvin that he has created Pete and Victor. Victor is willing to try and track down Luke or Bender. However, Pete is fiercely independent and simply wishes to go explore on his own. Bob and Marvin worry about the fates of Luke and Bender.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Rabbits; Howard, November 2189, Vulcan&lt;br /&gt;
| Howard receives a call from a biologist named Dr. Sheehy telling him that rabbits have the ability to consume local flora and convert that biomass into meat which the colonists on Vulcan can consume.  Dr. Sheehy also informs Howard that local vegetarian megafauna that have been eating fence material have begun to be hunted by colonists for their meat.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| Selling Poseidon; Riker, December 2175, Sol&lt;br /&gt;
| Ambassador Gerrold accuses Riker of failing to stop VEHEMENT attacks. Riker bluffs, saying he already has thwarted most of its attacks. Riker orders Guppy to monitor communication channels for reactions to his private meeting with Gerrold.   Riker attends a meeting debating which colonists will be sent to Poseidon.  Guppy informs Riker that a drone happened to catch a tight-beam message from New Zealand to Homer's Heaven vessel. Riker concludes Homer's mind has been compromised.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| Luke Returns; Bob, March 2178, Delta Eridani&lt;br /&gt;
| Luke calls Bob from Kappa Ceti via SCUT. Bob shows Luke his real-time VR of Deltan villages.  Luke tells Bob that he has no idea what happened to Bender.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| Et Tu, Homer; Riker, December 2175, Sol&lt;br /&gt;
| Riker meets with Charles via direct laser communication to discuss the issue of Homer being infected with a mind control virus. They agree to set a trap for Homer.  Riker calls a meeting with Homer, saying he has identified a VEHEMENT plan.  Riker sets up a sandbox Bob and asks Charles to take aim at Homer's reactor core.  Homer disables Riker's sandbox Bob. Charles shoots Homer's reactor core, shutting down Homer's power. A digital autopsy reveals a security vulnerability via laser communications. Charles asks Riker to audit his, Charles’, software; Riker shuts down, inspects, and declares clean Charles.  Riker and Charles confront Ralph and force him to undergo shutdown and undergo a software audit; Ralph submits. Riker rebuilds Homer as best as he can.  Homer awakens but is extremely traumatized at being puppetted into killing people and being unable to even end himself.  Bill offers weapons development help to kill those responsible.  Riker identifies and confirms that a New Zealand military communications site as the source of the infecting signal.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| Emergency; Howard, April 2190, Vulcan&lt;br /&gt;
| Howard tracks raptors that broke into Landing.  No colonists were killed but the raptors displayed advanced battlefield tactics that only were thwarted by Howard's framejack ability to effectively integrate many drone sensor streams simultaneously.  Dr. Sheehy develops a passive body odor detection method for parasites and names the species “Cupid Bugs” for their tendency for larva to attack human hearts. &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| Found Something; Bashful, November 2187, [[Gliese 877]]&lt;br /&gt;
| Bashful explores [[Gliese 877]].  They find technological radio signals.  Bashful sends some stealth probes that they designed into the system to collect data through passive scans.  Bashful maneuvers their ship to stay far away from the star system and intercept the drifting probes.  Bashful intercepts the probes, downloads their contents, forwards them back to Mario for analysis, and begins their own analysis.  While analyzing in deep space, Bashful is surprised by a proximity alert.  After a brief attempt at escaping six pursuing vessels, a large one resembling a Death Star aims and fires its primary weapon.  Due to Bashful shutting down and multiple system failures, GUPPI self-destructs Bashful via reactor overload.&lt;br /&gt;
| Bashful&lt;br /&gt;
|-&lt;br /&gt;
| c31&lt;br /&gt;
| Taking Care of Business; Howard, January 2191, Vulcan&lt;br /&gt;
| Howard meets with Bridget to test alcohol to beverages that he has been producing. Howard meets with Bridget and Stéphane for a casual round of drinks. Stéphane compliments Howard and Bridget on the rabbits project, noting that he has sampled rabbits too several times and enjoys it. Bridget tells Howard about a joke involving [[Toast (honor)|toasting]] rituals for alcoholic drink and Irish ridicule of the British.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c32&lt;br /&gt;
| Linus; Bill, May 2178, Epsilon Eridani&lt;br /&gt;
| Linus meets with Bill bringing Henry to meet. They discuss VR matters. Linus and Henry are to get to their own new ships.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c33&lt;br /&gt;
| Trouble in Paradise; Bob, January 2180, Delta Eridani&lt;br /&gt;
| Bobby Marvin monitor and discuss the Deltans. Deltan society has progressed to the point of high population and intersectional conflict with multiple murders having occurred.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c34&lt;br /&gt;
| Moose; Bill, June 2185, Epsilon Eridani&lt;br /&gt;
| Bill rides across Ragnarök in his quadruped moose therioid named Bullwinkle on Ragnarök.  Bill meets with ten new Bobs created to occupy [[82 Eridani]].  One is a copy of Khan named Loki. An Elmer backup is one of the Bobs created.  The new Bobs depart for 82 Eridani.  Bill introduces to the Bobs the Australian replicant Henry that Linus found at [[Epsilon Indi]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c35&lt;br /&gt;
| Sales Call; Howard, September 2192, Vulcan&lt;br /&gt;
| Howard and Bridget present [[Irish Whiskey]] to Butterworth who approves. Howard and Bridget begin dating.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c36&lt;br /&gt;
| Asteroid Movers; Bill, March 2187, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c37&lt;br /&gt;
| He’s Gone; Riker, August 2176, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c38&lt;br /&gt;
| Following up; Hal, May 2188, Gliese 877&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c39&lt;br /&gt;
| Bob-Moot; Bill, August 2188, Epsilon Eridani, February 2178, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c41&lt;br /&gt;
| Casualties; Bob, July 2182, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c42&lt;br /&gt;
| Business; Howard, March 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c43&lt;br /&gt;
| An Exchange of Words; Riker, March 2178, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c44&lt;br /&gt;
| Baseball; Bill, March 2189, Epsilon Eridani&lt;br /&gt;
| Garfield presents to Bill a flying android: Rocky. Garfield flies in Rocky's body, but crashes.&lt;br /&gt;
| Bill, Garfield,&lt;br /&gt;
|-&lt;br /&gt;
| c45&lt;br /&gt;
| Replication; Howard, August 2193, Vulcan&lt;br /&gt;
| Howard talks to Riker and fields the idea of scanning a living person in order to convert them into a replicant. Riker is suspicious but agrees to look into the matter. Howard, in private, re-examines a medical image involving Bridget Sheehy. Later Howard confronts Cranston regarding bootleg alcohol being smuggled into New Jerusalem. Howard begins talks to regulate trade between lending and New Jerusalem. Privately, Riker tells Howard that he wants to eliminate Cranston.&lt;br /&gt;
| Howard, Riker&lt;br /&gt;
|-&lt;br /&gt;
| c46&lt;br /&gt;
| Klown Kar Planet; Rudy, February 2190, [[Epsilon Indi]]&lt;br /&gt;
| Rudy arrives at Klown Kar Planet (KKP) a few weeks before Edwin. Rudy briefs Edwin on the extremely varied and competitive biodiversity of KKP.&lt;br /&gt;
| Rudy, Edwin&lt;br /&gt;
|-&lt;br /&gt;
| c47&lt;br /&gt;
| New Village; Bob, September, 2182, Delta Eridani&lt;br /&gt;
| Deltan adolescents part the main encampment to resettle an abandoned one. Bob and senior Deltans celebrate their successful reverse psychology ploy of getting the overcrowded Deltan population to disperse somewhat. Marvin warns that the competing Deltans will likely eventually use violence to compete for resources.&lt;br /&gt;
| Bob, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c48&lt;br /&gt;
| Operation; Howard, September 2193, Vulcan&lt;br /&gt;
| Howard waits for Bridget to come out of surgery to remove cancerous tumors. Stéphane notifies Howard that Bridget has exited surgery explaining that the tumors were more widespread than previously were found but that the doctors had a positive outlook. Anyway. Howard is present when Bridget wakes up. And almost makes a joke but is interrupted when Stéphane enters the room. And Howard feels like a third wheel Howard excuses himself from Bridget and Stéphane's conversation noticing that they are more than a close friends and Howard feels jealous. Howard reflects that his love for Bridget is not possible to act upon due to the fact that Howard is a replicant and Bridget is a flesh and blood human.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c49&lt;br /&gt;
| Arrival; Mulder, March 2195, Poseidon (Eta Cassiopeiae)&lt;br /&gt;
| Loki and other Bobs battle Medeiros in 82 Eridani. After a battle between stealth ships, they deduce a weakness in Medeiros's communication system that relies heavily upon AMIs for locally executing tactics. The Bobs exploiti this reliance upon AMIs and Medeiros's command ships to reveal their position. The Bobs wipeout installations in 82 Eridani. Loki and others deduce that many other Medeiros are unaccounted for and that there were actually three, not two Medeiros probes that originally launched.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c50&lt;br /&gt;
| Second Expedition; Loki, November 2195&lt;br /&gt;
| &lt;br /&gt;
| Loki&lt;br /&gt;
|-&lt;br /&gt;
| c51&lt;br /&gt;
| Wedding; Howard, April 2195, Vulcan&lt;br /&gt;
| Howard donates his stake in the Irish Whiskey business to Stéphane and Bridget as a wedding gift. In reality, Howard is disappointed that Bridget chose to partner with Stéfane. In order to get over Bridget, Howard decides to leave Vulcan entirely and go exploring. Howard, Bridget and Stéphane part ways amicably.&lt;br /&gt;
| Howard, Bridget, Stéphane&lt;br /&gt;
|-&lt;br /&gt;
| c52&lt;br /&gt;
| Bullwinkle; Bill, December 2195, Epsilon Eridani&lt;br /&gt;
| Bill is testing out Bullwinkle on Ragnarok when Garfield calls and tells him that the 82 Eridani expedition has reported back good news. Garfield tells Bill that Loki is successfully reverse engineering the cloaking technology that Medeiros wielded in battle. Marvin and Luke propose to Bill a long-term project to find Bender, their cohort-mate, in order to find out what happened to him.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c53&lt;br /&gt;
| Testing; Hal, April 2196, GL 877&lt;br /&gt;
| Hal sends an AMI-driven Heaven ship decoy into known Others territory to test Zapper shielding. Others appear and follow the decoy. Mario joins Hal in watching the pursuit. The decoy is zapped but survives, sending a scan of the internals of the Others ships. Hal and Mario see large communal living areas within the Others ships. Hal departs to GL 54.&lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c54&lt;br /&gt;
| Stuff is Happening; Hal, October 2197, En Route to GL 54&lt;br /&gt;
| Bill tells Hal that Others are headed from GL 877 to GL 54.&lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c55&lt;br /&gt;
| Contact; Bill, October 2204, GL 54&lt;br /&gt;
| Bill talks to Others via a decoy vessel in GL 54. The Others communicate to Bill using the [[chinese language]] that they say they learned from a probe they captured. Bill asks why the Others genocide planetary inhabitants such as those of [[Zeta Tucanae]]. The Others call him and all life besides themselves “food”. The Others reveals their knowledge of [[Sol]] and [[Epsilon Eridani]] and their plants to harvest food there. Bill&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c56&lt;br /&gt;
| Descendants; Bob, January 2183, Delta Eridani&lt;br /&gt;
| Bob passively observes Archimedes and his family over time. The Deltans treat their memory of Bawbe as that of a malicious deity.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c57&lt;br /&gt;
| Moot; Bill, October 2204, Epsilon Eridani&lt;br /&gt;
| Bill presents scans of the Others ships to Bobs at a moot. Other Zapper and remote subspace power beaming technology is discussed. Other biology and their packed living conditions are presented. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c58&lt;br /&gt;
| News; Howard, July 2198, Interstellar Space&lt;br /&gt;
| Howard receives an update on Bridget and Stéphane. Howard learns that Cranston has has been forced from power and New Jerusalem is now a democracy. Howard learns that Bridget and Stéphane had a son. The son's name is Howard. Howard is conflicted and regretful.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c59&lt;br /&gt;
| Another One; Bill, April 2205, Epsilon Eridani&lt;br /&gt;
| Bill sees from surveillance drones that Others are mounting an expedition to [[NN 4285]]. Bill talks to Mario who says Claude is headed to [[Gamma Pavonis]] and Jacques to Delta Pavonis]], two star systems near NN 4285. Bill contacts Claude to ask him to prepare for war; Claude is hesitant, not wanting the responsibility. Bill searches for manufacturing centers and decides to use [[Alpha Centauri]] which is uninhabited; Bart had left it with only an AMI long ago. Bill tells Garfield he intends to print himself a replicant matrix in Alpha Centauri and load a backup of himself there to begin the war effort against the Others.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c60&lt;br /&gt;
| Arrival; Claude, May 2205, [[Gamma Pavonis]]&lt;br /&gt;
| Claude arrives in Gamma Pavonis. The system has an ideally habitable world with no obvious intelligent life. Claude informs Bill who says Others consume a star system once roughly every decade or two. Bill says reinforcements from Jacques will arrive around the same time the Others do.&lt;br /&gt;
| Claude&lt;br /&gt;
|-&lt;br /&gt;
| c61&lt;br /&gt;
| Starting Over; Oliver, September 2205, [[Alpha Centauri]]&lt;br /&gt;
| Bill's backup wakes up in Alpha Centauri and names himself Oliver after another ''[[Bloom County]]'' character. Oliver decides to research relativistic velocity weapons. Oliver scales up production first with printers then Bobs and battle cruisers. Oliver mentions Butterworth provided [[H-bomb]] blueprints.&lt;br /&gt;
| Oliver&lt;br /&gt;
|-&lt;br /&gt;
| c62&lt;br /&gt;
| Departure; Mulder, November 2201, Departure&lt;br /&gt;
| Mulder prepares to depart Poseidon leaving command of the system in charge of Marcus. Monty prepares to pilot a ship back to Sol system. Marcus shows Mulder a prototype floating city design that should be in operation by the time Mulder returns to solar system. Riker and Mulder have a call. Riker tells Mulder that several colonists ventures at Vulcan, Poseidon, Epsilon Indi, and 82 Eridani are underway. The Others threaten Epsilon Indi and 82 Eridani.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c63&lt;br /&gt;
| The Pav; Jacques, February 2207, [[Delta Pavonis]]&lt;br /&gt;
| Jacques arrives at Delta pavonis and finds an industrial era civilization on one of the planets. Jacques and Bill are both somewhat sad that the Others are likely to destroy this civilization. Bill exhorts Jaques to build dreadnaughts of Oliver's design from local solar system resources in Delta Pavonis in order to prepare to defend the system or to provide backup to Claude. Jaques provisionally calls the intelligent life of Delta Pavonis the Pav. Jaques deploys drones to infiltrate Pav cities and begins reading Pav books as well as listening to Pav orators read from books. Jacques observes that the Pavs physically resemble meerkats and have family units composed many adults with genders roughly evenly split.&lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c64&lt;br /&gt;
| Moot; Bill, March 2207, Epsilon Eridani&lt;br /&gt;
| Bill holds a moot to discuss Other movements. Others have kicked out Mario from GL 54. The Others are moving towards [[NM 4285]]. Bill informs the moot of the habitable planet in Gamma Pavonis and intelligent life in Delta Pavonis. Strategic weapons are discussed: cloaking, relativistic ramming, SCUT-based suicide bombers. Bill listens to Jacques present his observations of the Pavs. Bill regrets that the Bobs are so disorganized.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c65&lt;br /&gt;
| Grandpa; Bob, January 2195, Delta Eridani&lt;br /&gt;
| Bob watches Archimedes spend time with his grandchildren. Bob regrets being exiled. Bob wishes Bill would accelerate android research but knows Bill is occupied with other major projects such as terraforming Ragnarök.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c66&lt;br /&gt;
| It’s Happening; Bill, January 2208, Epsilon Eridani&lt;br /&gt;
| Bill discovers the Others have deployed a convoy to Delta Pavonis. Bill immediately warns Jacques and Claude. Oliver and Claude agree to send reïnforcement warships. Bill holds a somber moot. The idea of moving the Pav planet is proposed and shot down. Garfield tells Bill that the Others have get to face significant resistance and so the Others may have a weakness in their overconfidence.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c67&lt;br /&gt;
| Bad News; Howard, December 2210, [[HIP 14101]]&lt;br /&gt;
| Howard receives notification that Bridget's husband, Stéphane, had contracted a fatal illness and is soon to die. Howard calls Bridget who tells him the illness progressed quickly and Stéphane is now beyond speaking to. Howard receives one of Bill's humanoid androids to wear for Stéphane's funeral.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c68&lt;br /&gt;
| Recording; Jacques, September 2212, Delta Pavonis&lt;br /&gt;
| Howard collects biological samples and records extensive sensor data on the Pav planet. Howard focuses his attention on two communities called Mheijrkva and Aizzilkva. Howard focuses on a single Pav family called the Los family in Mheijrkva. Howard focuses further on the family's matriarch and town councilwoman Da Hazjiar Los.&lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c69&lt;br /&gt;
| Wake; Howard, January 2211, Vulcan&lt;br /&gt;
| Howard attends Stéphaneʼs funeral wake piloting Manny, the prototype android Bill created. Howard meets Bridgetʼs children: Rosie, Lianne, and Howie. Howard reports back to Bill and original Bob on Mannyʼs performance; Howard compares VR to embodying an android to trying to tickle yourself versus being tickled by someone else. Bill convinces Bob to help with the Android Project development.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c70&lt;br /&gt;
| Conversation; Howard, May 2211, HIP 14101&lt;br /&gt;
| Howard discusses with Bridget the possibility of her becoming a replicant. Bridget declines. Howard asks if Butterworth would like to be replicated for the war effort and he agrees.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c71&lt;br /&gt;
| Charlie; Bob, June 2213, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c72&lt;br /&gt;
| Battle; Bill, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c73&lt;br /&gt;
| Collection; Phineas, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Phineas&lt;br /&gt;
|-&lt;br /&gt;
| c74&lt;br /&gt;
| Observing the Process; Bill, May 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c75&lt;br /&gt;
| Reunion; Howard, January 2216, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c76&lt;br /&gt;
| Funeral; Bob, November 2220, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b3|Book 3: All These Worlds]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[All These Worlds]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b4|Book 4: Heaven's River]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Heaven's River]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b5|Book 5: Not Till We Are Lost]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Not Till We Are Lost]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198167</id>
		<title>Bobiverse</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198167"/>
		<updated>2026-01-04T14:25:09Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: update to b2c35&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bobiverse''' is the name of a series of [[science fiction]] books by [[Dennis E. Taylor]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Dennis E. Taylor]]&lt;br /&gt;
* Publication dates:&lt;br /&gt;
** [[2016-10-20]]: ''[[We Are Legion (book)|We Are Legion]]''&lt;br /&gt;
** [[2017-03-18]]: ''[[For We Are Many]]''&lt;br /&gt;
** [[2017-08-08]]: ''[[All These Worlds]]''&lt;br /&gt;
** [[2021-01-26]]: ''[[Heaven's River]]''&lt;br /&gt;
** [[2024-09-05]]: ''[[Not Till We Are Lost]]''&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Andrea&lt;br /&gt;
: (b1c1) Twin sister of Alaina and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Alaina&lt;br /&gt;
: (b1c1) Twin sister of Andrea and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Archimedes &lt;br /&gt;
: (b1c30) A Deltan that Bob judges to be particularly intelligent and adept at tool creation. (b1c44) Bob makes Archimedes his Messiah to help Deltans survive their existential threat of Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arnold&lt;br /&gt;
: (b1c35) A particularly strong Deltan named by Bob after [[Arnold Schwarzenegger]]. (b1c37) Wields an axe crafted by Archimedes to single-handedly dispatch many attacking gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arthur&lt;br /&gt;
: (b1c31) A particularly morose Bob that irritates Riker. (b1c47) Killed near [[Saturn]] by a nuke trap.&lt;br /&gt;
&lt;br /&gt;
; Bashful&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''. (b2c30) Travels to [[Gliese 877]] in November 2187 and finds Other activity. Collects data via remote probes and forwards them to Mario. Is detected and remotely shut down by a mysterious weapon fired from a grid on a Death Star-shaped ship. Bashful's GUPPI self-destructs their ship via reactor overload to prevent capture.&lt;br /&gt;
&lt;br /&gt;
; Bender&lt;br /&gt;
: (b1c30) Names Delta Eridani 4 “Eden” as the birthplace of the Deltans. (b1c39) Departs with Luke from Delta Eridani for [[Gamma Leporis A]]. (b4) A Bob clone who was shot down while exploring a megastructure housing beaver-like creatures named Quins. (b4c34; a.k.a. '''Motorola''') Bob finds Bender has been captured as just a matrix and has worked many years in captivity.&lt;br /&gt;
&lt;br /&gt;
; Bill&lt;br /&gt;
: (b1) One of the first Bobs. Decides to settle and manage [[Epsilon Eridani]] and research subspace theory and to refined ship designs.&lt;br /&gt;
&lt;br /&gt;
; Bob&lt;br /&gt;
: (a.k.a. '''Robert Johansson''', '''Bob-1''') The main character. (b1c1) A software-based emulated human mind. (b1c13) Departs Earth on ''Heaven-1''. (b1c27) Discovers intelligent life on Delta Eridani which he names Deltans and helps survive. (b4) Is on a quest to rescue Bender. (b2c12) Bob logs onto BobNet.&lt;br /&gt;
&lt;br /&gt;
; Bridget Sheehy, Dr.&lt;br /&gt;
: (b2c25) A red-haired biologist attractive to Howard. Reveals rabbits can eat some common Vulcan flora and thus provide meat to colonists. (B2c29) Given name is “Bridget”. Develops a test using body odor to detect parasite egg infections for Landing colonists on Vulcan. (b2c35) Howard and Bridget create [[Irish Whiskey]] and begin dating.&lt;br /&gt;
&lt;br /&gt;
; Butterworth, Colonel&lt;br /&gt;
: (b1) Military leader of the remains of the United States of Eurasia. First Earth survivor to contact Riker and Homer.&lt;br /&gt;
&lt;br /&gt;
; Calvin&lt;br /&gt;
: (b1) A Bob in the same cohort as Hobbes. (b1c28) Explores Alpha Centauri with Hobbes, finding wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Cranston, Minister&lt;br /&gt;
: (b1c33) FAITH leader based in San Diego. (b1c36) Attempts to mind control Riker. (b1c38) Introduces Riker to Julia Hendricks, a distant descendant of Robert Johannsonʼs sister, Andrea.&lt;br /&gt;
&lt;br /&gt;
; Deltans&lt;br /&gt;
: (b1) Intelligent inhabitants of Delta Eridani 4 found by Bob. (b1c27) Bob detects the fires of tool-using bat-pig creatures on Delta Eridani 4. (b1c30) Bob names the bat-pig natives of Delta Eridani 4 “Deltans”.&lt;br /&gt;
&lt;br /&gt;
; Diana&lt;br /&gt;
: (b1c11) A female Deltan that Archimedes fancies.&lt;br /&gt;
&lt;br /&gt;
; Dopey&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Doucette, Dr.&lt;br /&gt;
: (b1c11) A beautiful employee supervised by Dr. Landers who also assists Bob. (b1c13) Informs Bob of the death of Dr. Landers during the war on Earth.&lt;br /&gt;
&lt;br /&gt;
; FAITH&lt;br /&gt;
: (b1; a.k.a. '''Free American Independent Theocratic Hegemony''') A conservative theocracy that sacked and replaced most of the [[United States of America]].&lt;br /&gt;
&lt;br /&gt;
; Freida&lt;br /&gt;
: (b4) Quin Resistance leader. (b4c32) Gives Bob into custody of Natasha for money.&lt;br /&gt;
&lt;br /&gt;
; Goku&lt;br /&gt;
: (b1c28; a.k.a. '''Bob-10''') Explores Alpha Centauri with Calvin. They find wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Gorilloids&lt;br /&gt;
: (b1c35) Inhabitants of Epsilon Delta that prey upon the Deltans.&lt;br /&gt;
&lt;br /&gt;
; Gudmund Valter&lt;br /&gt;
: (b1c33) Ex-military leader of Spitsburgen Island.&lt;br /&gt;
&lt;br /&gt;
; Hoffa&lt;br /&gt;
: (b2c19) A Deltan who criticizes Bob's plans.&lt;br /&gt;
&lt;br /&gt;
; Homer&lt;br /&gt;
: (b1) A Bob created by Riker to assist him with the reconnaissance of Sol system after Bob settles Epsilon Eridani. Adopts the cartoon Homer voice and appearance to try and tease Riker into relaxing but fails.&lt;br /&gt;
&lt;br /&gt;
; Hungry&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is an obtuse reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Julia Hendricks&lt;br /&gt;
: (b1c38) Descendant of one of Bob's sisters. Mother of Justin Hendriks.&lt;br /&gt;
&lt;br /&gt;
; Justin Hendriks&lt;br /&gt;
: (b1c54) Son of Julia.&lt;br /&gt;
&lt;br /&gt;
; Landers, Dr.&lt;br /&gt;
: (b1c2) An employee of Applied Synergetics Inc. that guides Bob following his creation from the frozen brain of Robert Johansson. (b1c11) Supervisor of Dr. Doucette. (b1c13) Killed during the global war on Earth that wiped out most humans.&lt;br /&gt;
&lt;br /&gt;
; Linus&lt;br /&gt;
: (b1) A Bob created in Epsilon Eridani who chooses to explore. (b1c40) Discovers a failed Australian replicant probe in Epsilon Indi named Henry Roberts.&lt;br /&gt;
&lt;br /&gt;
; Luke&lt;br /&gt;
: (b1c39) Departs from Delta Eridani for [[Kappa Ceti]].&lt;br /&gt;
&lt;br /&gt;
; Marvin&lt;br /&gt;
: (B2c?) Stays behind to help Bob protect the Deltans as Luke and Bender depart Delta Eridani. (b2c24) Drops Bob's Sky God project in [[Delta Eridani]] and heads to [[Pi³ Orionis]].&lt;br /&gt;
&lt;br /&gt;
; Milo&lt;br /&gt;
: (b1) A bob that discovers and names Vulcan and Romulus in [[Omicron² Eridani]]. (B1c46) is killed by missiles while exploring [[82 Eridani]].&lt;br /&gt;
&lt;br /&gt;
; Motorola&lt;br /&gt;
: (b4c34) An alias for Bender.&lt;br /&gt;
&lt;br /&gt;
; Natasha&lt;br /&gt;
: (b4) Quin aristocrat supporting the Resistance. (b4c32) Pays Freida to capture Bob.&lt;br /&gt;
&lt;br /&gt;
; raptors&lt;br /&gt;
: (B2) A predator of Vulcan resembling velociraptors that threatens Landing colonists.&lt;br /&gt;
&lt;br /&gt;
; Riker&lt;br /&gt;
: (b1) The second replicate Bob ever created. Returns to Sol system after first Bob settles Epsilon Eridani. Leads the evacuation effort of Earth, assisted by Homer. (b158) Successfully leads effort to build Exodus-1 and Exodus-2 to evacuate USE survivors from Earth.&lt;br /&gt;
&lt;br /&gt;
; Sheehy, Dr.&lt;br /&gt;
: See ''Bridget Sheehy''&lt;br /&gt;
&lt;br /&gt;
; Sleepy&lt;br /&gt;
: (b2c13) Created by Mario on May 2180 in Gliese 54. Their name is a reference to the dwarves of ''[[Snow White]]''.&lt;br /&gt;
&lt;br /&gt;
; Spits&lt;br /&gt;
: (b1c33) Inhabitants of [[Svalbard|Spitsburgen Island]], led by Gudmund Valter. Are in possession of the [[Svalbard Global Seed Vault]] and the Svalbard Global Genetic Diversity Vault which they hold hostage as leverage against Riker to get a more favorable position in the evacuation queue.&lt;br /&gt;
&lt;br /&gt;
; Stéphane&lt;br /&gt;
: (b2c16) Leader of a group of raptor hunters on Vulcan.&lt;br /&gt;
&lt;br /&gt;
; VEHEMENT&lt;br /&gt;
: (b1c38) Earth survivors rebelling against Riker's rule. (b2; a.k.a. '''Voluntary Extinction of Human Existence Means Earthʼs Natural Transformation''')&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; 82 Eridani&lt;br /&gt;
: (b1c46) A star system with two habitable worlds discovered by Milo. Milo is killed by missiles soon after arriving into orbit around one of the worlds. (b1c60) Khan arrives with a retaliation fleet.&lt;br /&gt;
&lt;br /&gt;
; [[Alpha Centauri]]&lt;br /&gt;
: The nearest star system to Earth. (b1c22) Destination for Calvin and Goku after departing Epsilon Eridani in September 2150. (b1c28) Visited by Calvin and Goku in November 2163.&lt;br /&gt;
&lt;br /&gt;
; Augsburg, Germany&lt;br /&gt;
: A gathering place for some Earth survivors. Gathering place for USE survivors.&lt;br /&gt;
&lt;br /&gt;
; Beta Hydri&lt;br /&gt;
: (b1c57) A star system explored by Mario. Scoured clean of easily-accessible metal. Habitable planets show signs of violent and rapid sterilization via [[gamma ray burst]]s.&lt;br /&gt;
&lt;br /&gt;
; Delta Eridani&lt;br /&gt;
: (b1) A star system explored by Bob. (b1c?) Home of the Deltons that Bob and Marvin help survive.&lt;br /&gt;
&lt;br /&gt;
; Earth&lt;br /&gt;
: (b1) The original planet of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Eden&lt;br /&gt;
: (b1c30; a.k.a. '''Delta Eridani 4''') The planet of the Deltans. Named by Bender.&lt;br /&gt;
&lt;br /&gt;
; Epsilon Indi&lt;br /&gt;
: (b1c40) A system where Australian replicant Henry Roberts arrived and went insane.&lt;br /&gt;
&lt;br /&gt;
; Landing&lt;br /&gt;
: (b2) Primary settlement on Vulcan.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani|Omicron&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Eridani]]&lt;br /&gt;
: (b1) Star system explored by Milo. Contains the twin habitable planets discovered by Milo: Vulcan and Romulus. (b1c59) Is the destination for the USE colonists from Earth aboard ''Exodus-1'' and ''Exodus-2'' built by Riker, Homer, Arnold, and Ralph.&lt;br /&gt;
&lt;br /&gt;
; Okinawa&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Romulus&lt;br /&gt;
: (b1c19) The smaller of two habitable twin planets (0.7 M⊕) discovered and named by Milo in July 2152. Its larger twin is Vulcan. Romulus has less [[carbon dioxide]], a thinner atmosphere, a lower surface temperature, ice caps, and a sparse ecosystem with no fauna larger than a wolf. Milo believes the planet may have recently suffered a major extinction event.&lt;br /&gt;
&lt;br /&gt;
; San Diego&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors, mostly FAITH.&lt;br /&gt;
&lt;br /&gt;
; Sol&lt;br /&gt;
: (b1) The original star system of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; [[Svalbard|Spitsburgen Island]]&lt;br /&gt;
: An archipelago north of [[Norway]] between the [[Arctic Ocean|Arctic]] and [[Atlantic Ocean]]. (b1c33) A gathering place for some Earth survivors (a.k.a. '''Spits'''). Location of the [[Svalbard Global Seed Vault]] and associated Svalbard Global Genetic Diversity Vault.&lt;br /&gt;
&lt;br /&gt;
; Vulcan&lt;br /&gt;
: (b1c19; a.k.a. '''OE-1A''') The larger of two habitable twin planets (0.9 M⊕) discovered and named by Milo in July 2152. Its smaller twin is Romulus. Vulcan has more [[carbon dioxide]], a thicker atmosphere, and warmer surface temperature. Has a robust ecosystem with large fauna. (b1c61) Colonel Butterworth chooses this planet for USE evacuees aboard the Exodus-1 and Exodus-2 to settle.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; AMI&lt;br /&gt;
: (b1c2; a.k.a. '''artificial machine intelligence''') A thinking machine not derived from a scanned human mind as a replicant is. Lacks creative and improvisation abilities compared to flesh humans or replicants.&lt;br /&gt;
&lt;br /&gt;
; Exodus-1&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; Exodus-2&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; GUPPI&lt;br /&gt;
: (b1; a.k.a. '''Guppy''', '''General Unit Primary Peripheral Interface''') An AMI assistant provided to Bob by Landers. (b1c13) Modified by Bob to resemble [[Admiral Ackbar]] from [[Star Wars]]. (b2) &lt;br /&gt;
&lt;br /&gt;
; HEAVEN&lt;br /&gt;
: (b1; a.k.a. '''Habitable Earths Abiogenic Vessel Exploration Network''') FAITHʼs interstellar von Neumann probe project.&lt;br /&gt;
&lt;br /&gt;
; Heaven-1&lt;br /&gt;
: (b1c12) The HEAVEN space ship built by FAITH that is Bob's body for his journey from Earth.&lt;br /&gt;
&lt;br /&gt;
; replicant&lt;br /&gt;
: (b1c2) A thinking machine that emulates a biological human brain derived from a nerve tissue scanning process.&lt;br /&gt;
&lt;br /&gt;
; roamer&lt;br /&gt;
: (b1c3) An AMI-controlled drone capable of assembling and repairing machinery with a wide assortment of tools.&lt;br /&gt;
&lt;br /&gt;
; SCUT&lt;br /&gt;
: (b1c25) A faster-than-light communications device created by Bill. (b2; a.k.a. '''Subspace Communications Universal Transceiver''')&lt;br /&gt;
&lt;br /&gt;
; SUDDAR&lt;br /&gt;
: (b1c7) A scanning technology capable of remotely resolving the shape of physical objects. Basically, space radar. (b2; a.k.a. '''Subspace Deformation Detection and Ranging''')&lt;br /&gt;
&lt;br /&gt;
; SURGE drive&lt;br /&gt;
: (b1c7) A device that warps space to enable slower-than-light relativistic interstellar mass transport. Generates no reaction mass plume. (b2; a.k.a. '''Subspace Reactionless Geotactic Emulation''')&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====[[/b1|Book 1: We Are Legion]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[We Are Legion (book)|We Are Legion]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b1/p1/c1|p1c1]]&lt;br /&gt;
| Bob Version 1.0&lt;br /&gt;
| Bob attends two seminars about space exploration and [[Von Neumann Replicator]]s at a science fiction convention. Bob calls his mother and talks to his sister. Bob is struck by an automobile and killed. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c2&lt;br /&gt;
| Bob Version 2.0&lt;br /&gt;
| Bob wakes up 117 years later as a machine intelligence owned by FAITH, their flesh and blood brain destructively scanned in order to create a candidate artificial intelligence slave.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c3&lt;br /&gt;
| Bob – June 25, 2133&lt;br /&gt;
| Bob controls some roamers (robotic spiders) to stack some blocks.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c4&lt;br /&gt;
| Bob – July 15, 2133&lt;br /&gt;
| Bob learns the internet is no longer a thing in FAITH. Information is now hidden or inaccessible by default. Bob resolves to find freedom someway somehow.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c5&lt;br /&gt;
| Bob – July 18, 2133&lt;br /&gt;
| A surprise visit from Minister Travis of the ministry of Truth. Bob is given access to a space, station management, simulation and information library.&lt;br /&gt;
| Bob, Landers, Travis&lt;br /&gt;
|-&lt;br /&gt;
| p1c6&lt;br /&gt;
| Bob – July 19, 2133&lt;br /&gt;
| Bob learns to manage AMI controlled roamers in order to affect repairs on equipment such as 3D printers. Bob learns from Landers that his purpose is to be a manager of a [[von Neumann probe]] expedition into space. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c7&lt;br /&gt;
| Bob – July 25, 2133&lt;br /&gt;
| Dr. Landers explains to Bob the scope and progress of other rival political blocks of United States of Eurasia, the Brazilian group, the African Republic, and the Australian group. As far as their own private von Neumann exploration projects are concerned. China is likely to be fastest, but relying entirely upon AMIs. Brazil is likely to rely upon sabotage of other projects and the USE is most likely to colonize a star system once found. Additionally, Landers talks about the subspace drive technology that allows faster than light mass transport across interstellary distances.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c8&lt;br /&gt;
| Bob – August 4, 2133&lt;br /&gt;
| Bob aids in the defense of the research complex in which he is housed. Upon subdoing the black-clothed invaders, Landers asks Bob to retreat his roamers back into the training area. Landers tells Bob there is a tactical nuke installed beneath the training facility as a safeguard against Bob gaining freedom. Bob makes a crack about the ''[[Andromeda Strain]]'', a [[Michael Crichton]] novel. With a single roamer drone that was able to hide in the air ducts of the facility during the battle, Bob is able to build a 3D map of the facility surrounds and concludes that no such tactical nuke is present. Bob discovers the room housing the computers for himself and the four other candidates; Kenneth is his remaining competitor.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c9&lt;br /&gt;
| Bob – August 6, 2133&lt;br /&gt;
| Bob witnesses a confrontation by FAITH Minister Jacoby against Landers using wall vibrations via a roamer bot.&lt;br /&gt;
| Bob, Landers, Jacoby&lt;br /&gt;
|-&lt;br /&gt;
| p1c10&lt;br /&gt;
| Bob – August 10, 2133&lt;br /&gt;
| Bob wakes up with a week-long Gap in his memory. Landers tells Bob that a bomb destroyed the matrices storing his mind and that Bob had been destroyed and then recreated from backups. Bob thinks about his own existence and what defines life. {{bkc|Life is defined by others asserting that you are alive across time and space. Life is the degree to which others believe that you are alive and have a relationship with you asserting as much. The same can be said for personhood as well. Integration across time and articulation across space is what defines life.}} Landers informs Bob that the only other replicant competitor candidate has been decommissioned. Bob concludes that Kenneth the other only living replicants cube that he saw in the room has not been deactivated since now. Bob is running on Kennethʼs old hardware. Bob and frantically distracts Landers after mentioning Kennethʼs name. Landers informs Bob that launch is in a month and can be accelerated if need be. Landers tells Bob that they are now going to be awake continuously, save for short sleep periods required for backups so that Bob can help assist with the project.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c11&lt;br /&gt;
| Bob – August 15, 2133&lt;br /&gt;
| Bob chats with Dr. Doucette, a beautiful substitute for Landers.  Bob learns of software enforcement of his mission.&lt;br /&gt;
| Bob, Doucette&lt;br /&gt;
|-&lt;br /&gt;
| p1c12&lt;br /&gt;
| Bob – August 17, 2133&lt;br /&gt;
| Landers awakens Bob after another attack that has fatally wounded more staff. Landers gives Bob a file with not only new training objectives but also access keys to bypass and disable software restrictions that would enslave Bob. Bob awakens on launch day in their ship, commanding the entire vessel. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c13&lt;br /&gt;
| Bob – August 17, 2133 – En Route&lt;br /&gt;
| Bob prepares to launch his spaceship, frame jacking his perception of time in order to read up on his mission objectives and training information. Landers begins a radio transmission to Bob, warning him of a missile strike. Upon hearing the word “missile”, before Landers can finish their sentence, Bob searches his sensors and detects two oncoming missiles. Bob immediately launches from his dock. Bob launches two mining drones to act as makeshift chaffe. Bob succeeds in destroying one missile; the other missile strikes the station he was docked at. A naval engagement among several space-faring factions surround the station as Bob departs. &amp;lt;br/&amp;gt; Bob defuses his software self-destruct traps. Bon finally learns of a Brazilian probe, likely hostile, headed his way also to Epsilon Eridani. Bob reviews plans for the remaining 145-ish days left until encounter.  Bob learns Landers was killed in the Earth war. Bon finishes Spike (his VR cat), Jeeves (a butler), and Guppy (GUPPI). Bob disables his endocrine system restrictions and breaks down emotionally at losing his family. Guppy informs Bob of many nuclear detonations on Earth. Bob concludes he will not receive any help.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p2c14&lt;br /&gt;
| Bob – August 2144 – Epsilon Eridani&lt;br /&gt;
| Bob enters the [[Epsilon Eridani]] system. Bob reviews plans for encounter with Brazilian probe. Bob concludes that ideal plan is to appear ignorant, receive first shot, play possum, then counter-attack. Bob decides the best course of action is to destroy Brazilian probe outright rather than to engage in protracted long-term battle. Bob begins deploying factory resources to execute plan. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c15&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob encounters the Brazilian probe and fights. Bob deploys his scheme and ultimately wins the battle, thanks to the Brazilian ship favoring torpedo count at the expense of upgrading ship capabilities to adapt to changing battle conditions. In other words, Bob won due to the Brazilian ship having only four missiles.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c16&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob surveys planets of Epsilon Eridani. Bob finally gives in to Guppyʼs insistence on replicating. Bob orders the creation of more Bobs.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c17&lt;br /&gt;
| Bob – July 2145 – Epsilon Eridani&lt;br /&gt;
| Bob initializes more Bobs. A Bob wakes up to find they are a copy. Original Bob holds a meeting among Bobs: Bob-2 is Riker. Riker wishes to visit Earth again. Milo wants to avoid Earth and any hostile probe. Riker and Milo butt heads. Mario is quiet. Bill is most amenable to Bob but prefers research rather than exploration.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c18&lt;br /&gt;
| Bill – September 2145 – Epsilon Eridani&lt;br /&gt;
| Bill watches Bob, Mario, and Milo leave Epsilon Eridani. Riker plans to build a clone to return to visit Earth. Bob is traveling to Delta Eridani. Anti-social Mario is headed to Beta-Hydri.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c19&lt;br /&gt;
| Milo – July 2152 – Omicron² Eridani&lt;br /&gt;
| Milo discovers life at Omicron² Eridani on a binary pair of planets. Milo names them Vulcan and Romulus.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c20&lt;br /&gt;
| Bill – December 2145 – Epsilon Eridani&lt;br /&gt;
| Bill and his clone, Garfield, bid farewell to Riker and Riker's clone, Homer. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c21&lt;br /&gt;
| Riker – January 2157 – Sol&lt;br /&gt;
| Riker and Homer perform reconnaissance and surveillance on the Sol system. Riker and Homer witness a Brazilian ship destroy a decoy ship. Homer discovers that the Brazilian ships are dropping asteroids upon China.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c22&lt;br /&gt;
| Bill – September 2150 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield bid farewell to Goku, Linus, and Calvin. Calvin and Goku were inseparable but also constantly fighting. Bill and Garfield equipped Calvin and Goku with a ship with cloaking ability, fighting ability, and strong engines to coast undetected. Bill and Garfield note that Calvin and Goku would likely find hostile encounters at their destination of [[Alpha Centauri]]. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c23&lt;br /&gt;
| Milo – February 2153 – Omicron² Eridani&lt;br /&gt;
| Milo is in Omicron² Eridani. Milo decides not to duplicate itself and instead decides to move on towards [[82 Eridani]]. Milo sends a report back to Bill and proceeds to travel to a new star system.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c24&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker and Homer combat the six Brazillian ships. Riker and Homer destroy four Brazilians behind the Sun. Riker and Homer go silent until they reach Earth and use it to hide their presence from the remaining two Brazilians. Riker and Homer confront the remaining two Brazilians. Homer is struck silent while Riker maneuvers to destroy the last Brazilian ship.&lt;br /&gt;
: Riker deflects the several [[Chicxulub crater|Chicxulub]]-scale asteroids the Brazilian space force had intended to use in retaliation against all Earth life for the destruction of [[Brasil]]. Riker found the Brazilian ships had been left without factories or shuttles to rebuild their forces or even occupy Earth.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c25&lt;br /&gt;
| Bill – September 2151 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield test out [[faster-than-light]] communications. Bill and Garfield plan to deploy IPv8 internet. Bill and Garfield determine that a communication node is required at least every 25 light years. Bill and Garfield decide to transmit plans for the the FTL communications to the other Bobs.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c26&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker discusses logistics for the recovery of human life on Earth. USE Colonel Butterworth tells Riker that the human population has been reduced to several tens of millions of people. Butterworth tells Riker that the global war that occurred was hard-fought and that the last resilient space force remnants were the small survivors of a much larger conflict, but that their ability to drop rocks from space allowed them to massacre billions of lives at the end. Colonel Butterworth asks Riker for help in migrating the survivors to another habitable world since Earth's habitability will not recover for at least another 5 to 10 000 years. Riker tells Butterworth that the habitability of candidate destination planets has not yet been transmitted to him from Bill that in a few years information may be available. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c27&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob arrives at Delta Eridani. Bob discovers an oxygen atmosphere around one planet. Bob discovers fire-using individuals, likely intelligent species on one of the planets. Bob proposes first contact via a roamer but Guppy shoots down the idea since roamers are not ideal for terrestrial exploration. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c28&lt;br /&gt;
| Calvin – November 2163 – Alpha Centauri&lt;br /&gt;
| Calvin finds the wreckage of the USE probe at Alpha Centauri B. Calvin and Goku fight Medeiros at Alpha Centauri A, destroying all but one of his probes which escapes.&lt;br /&gt;
| Calvin, Goku&lt;br /&gt;
|-&lt;br /&gt;
| p2c29&lt;br /&gt;
| Riker – September 2157 – Sol&lt;br /&gt;
| Riker and Butterworth argue about priorities for rescuing the survivors on Earth. Riker believes that prioritizing logistics for creating the colony ship should not impede a search for survivors. Butterworth argues that all resources should be dedicated towards helping USE survivors at the expense of all other Earth inhabitants. Riker and Homer discover undestroyed stations in the Oort Cloud and outer solar system which may be useful for building colony ships. Riker muses about responsibility for ensuring the survival of humanity in the solar system.&lt;br /&gt;
| Riker, Butterworth, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c30&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob surveils a tribe of Deltans, “Deltan” is the name that Bob has come up for the fire-using inhabitants he found on Delta Eridani 4. Bob watches in particular a single Delton that he has labeled Archimedes due to Archimedes having constructed knife blade with a handle tied to it. A technology unique apparently to deltas, particularly one Delta Archimedes. Bob watches Archimedes with the help of other box that he has commissioned for the help of surveilling the planet including Luke Bender and others. &lt;br /&gt;
| Bob, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| p2c31&lt;br /&gt;
| Riker – January 2158 – Sol&lt;br /&gt;
| Riker sees his plan encounter delays for constructing the evacuation ships for survivors of Earth. Arthur, a Bob clone of Riker, has found difficulty contacting surviving enclaves due to ongoing hostility from the war. Homer reports to Arthur that enough supplies exist to construct three colony ships for evacuation.&lt;br /&gt;
| Riker, Arthur&lt;br /&gt;
|-&lt;br /&gt;
| p2c32&lt;br /&gt;
| Bill – October 2158 – Epsilon Eridani&lt;br /&gt;
| In Epsilon Eridani, Bill and Garfield receive word from Milo about the twin habitable worlds Vulcan and Romulus. Bill estimates that it will be about 9 years until word of the habitable worlds can be passed to Earth. Bill feels like a shepherd for humanity. &lt;br /&gt;
| Bill, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| p2c33&lt;br /&gt;
| Riker – March 2158 – Sol&lt;br /&gt;
| Riker performs diplomacy with representatives of the survivors of Earth. Riker mishandles the initial meeting with little empathy for the survivors. Homer talks Riker into by recognizing them as passengers who know their fate is being decided by others and wish to have some level of agency in their fate. Riker holds talks with individual leaders. Riker talks with the Spits, survivors who are in physical possession of the Svalbard Global Seed Vault which they threaten to destroy if their group of roughly 4,000 were not prioritized. &lt;br /&gt;
| Riker, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c34&lt;br /&gt;
| Homer – September 2158 – Sol&lt;br /&gt;
| Homer talks to himself about Rikerʼs arrogant tyrannical attitude towards others. Homer is amazed that Riker has still not yet recognized that, he Homer, is attempting to ridicule Riker with his cartoon Homer act. Homer anticipates that Riker will perform poorly regarding the evacuation efforts. Homer sees a way to diplomatically smooth evacuation efforts by bumping up the evacuation of certain groups while not affecting the schedule. Homer decides to discuss this possibility with Colonel Butterworth behind Rikerʼs back.&lt;br /&gt;
| Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c35&lt;br /&gt;
| Bob – July 2165 – Delta Eridani&lt;br /&gt;
| Bob witnesses Deltans killed by Gorilloids. Bob debates with other Bobs the ethics of assisting the Deltans. Bob surveils Deltans and encourages their technological development by providing one Deltan he has named Archimedes with flint nodules. Archimedes produces weaponry for their fellow Deltans. The Deltans successfully repel the next gorilloid attack.&lt;br /&gt;
| Bob, Marvin, Bender, Luke&lt;br /&gt;
|-&lt;br /&gt;
| p2c36&lt;br /&gt;
| Riker – September 2158 – Sol&lt;br /&gt;
| Riker continues to hold meetings with survivors of Earth. Various factions attempts to lobby with Riker for preferential treatment but Riker shuts them all down hard. Colonel Butterworth proposes in private to Riker the possibility of allowing the group that holds control of the seed vault a position in one of the colony ships at the expense of delaying other colonies shipped in order to secure the the seed vault contents. FAITH attempts to hack Rikerʼs systems with a secret code that, before first Bob disabled their software traps, would have turned Riker into their slave. Riker shuts down talks with FAITH immediately.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c37&lt;br /&gt;
| Bob – August 2165 – Delta Eridani&lt;br /&gt;
| Bob notices a large gorilloid attack on the Deltans. Bob, Marvin, and company decide to deploy a drone to attack the gorilloids in a kinetic strike. Arnold learns to instantly kill gorilloids with an axe Archimedes made. A gorilloid is atomized. Archimedes begins digging up the metal attack drone crash site. Bob decides to guide the Deltans back to their old flint gathering site. Marvin decides to stay long term to guide the Deltans with Bob. Luke and Bender decide to move on to find a star system with their own project.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c38&lt;br /&gt;
| Riker – November 2158 – Sol&lt;br /&gt;
| FAITH holds hostage Bob's descendants. Riker recognizes the young woman that faith presents to him during a call as resembling Andrea, original Bob's sister. FAITH allows Riker and the young woman to freely talk while under surveillance.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c39&lt;br /&gt;
| Bob – October 2165 – Delta Eridani&lt;br /&gt;
| Bob bids farewell to Luke and Bender. Luke decides to travel to [[Kappa Ceti]] and Bender to [[Gamma Leporis A]]. Bob talks with Marvin about the ethics of copying themselves in order to favor psychologies that allow cooperation. Bob vows to help the Deltans develop. Archimedes experiments with the metal wreckage. Arnold continues to learn how to use the acts that Archimedes gave him.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c40&lt;br /&gt;
| Linus – April 2165 – Epsilon Indi&lt;br /&gt;
| Linus encounters the Australian probe that has gone insane. Linus extracts the replicant Henry Roberts and builds a realistic VR for them to live. Henry believes their time as a probe was a nightmare.&lt;br /&gt;
| Linus&lt;br /&gt;
|-&lt;br /&gt;
| p2c41&lt;br /&gt;
| Riker – May 2162 – Sol&lt;br /&gt;
| Riker breaks the news of the availability of Vulcan and Romulus to the Earth survivors. Riker threatens to withdraw all support if survivors continue to demand individual planets for themselves.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c42&lt;br /&gt;
| Bill – April 2162 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield butt heads about TODO list priorities. Bill decides to ease off on first Bob's declaration that most senior Bob has final say.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c43&lt;br /&gt;
| Riker – September 2164 – Sol&lt;br /&gt;
| Riker inspects the construction of colony ships. Riker thinks about metal scarcity. Homer has been assigned to bootstrap a metal gathering operation with printers. Riker, Homer, and Charles hold an all-Bobs meeting in Earth orbit. The Bobs brainstorm ideas for saving the Earthbound survivors: orbital mirrors to combat global cooling, moving people towards the equator, moon colonies, space stations.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c44&lt;br /&gt;
| Bob – January 2166 – Delta Eridani&lt;br /&gt;
| Bob makes Archimedes his Messiah. Bob orders the Deltans to return to a previous encampment site rich in flint.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c45&lt;br /&gt;
| Bill – January 2165 – Epsilon Eridani&lt;br /&gt;
| Bill receives word back from Bart who built the FTL communication array. Bart tells Bill that the Alpha Centauri systems that Calvin and Goku settled are building Bobs and gathering resources, but that Calvin and Goku have since moved on to explore more star systems. Bart informs Bill that the Brazilian ships that had been defeated by Calvin and Goku were all destroyed except one which got away. Bill is reassured that another Bob factory is in operation since Bill has not created new box in some time. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| [[Bobiverse/Book 1, full text (2016)/Part 2/Chapter 46|p2c46]]&lt;br /&gt;
| Milo – August 2165 – 82 Eridani&lt;br /&gt;
| Milo explores  82 Eridani, a new star system, and finds two habitable planets. As Milo approaches and enters orbit around one of the habitable planets, he is fired upon by several missiles. Milo transmits a partial differential backup of his mind back to Bill at [[Epsilon Eridani]]. Milo deploys countermeasures and fights with his rail gun but is ultimately overwhelmed.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c47&lt;br /&gt;
| Riker – January 2166 – Sol&lt;br /&gt;
| Riker talks with Homer about the evacuation effort. Arthur is killed by a nuclear bomb trap near Saturn.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c48&lt;br /&gt;
| Bob – May 2166 – Delta Eridani&lt;br /&gt;
| Bob governs the migration of the Deltans across a mountain pass. Several stray Delton communities join the main group.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c49&lt;br /&gt;
| Riker – May 2166 – Sol&lt;br /&gt;
| Homer proposes to Riker the idea of agricultural space stations that prioritize creating food in lieu of hosting living humans which have higher requirements to maintain. Riker proposes the agricultural space station idea to the survivors of Earth who generally reject the idea initially. Riker passes the idea through the representatives meeting by noting that the agricultural products of [[kudzu]] will prevent mass death due to starvation among most of the survivors on Earth. Rikerʼs GUPPI notes that a hacking attempt originating from New Zealand was deflected by Bob oneʼs firewall which could have compromised Rikerʼs mind. Riker meets with FAITH representative Cranston; Cranston proposes sharing FAITH food supplies with other nations in exchange for preferential treatment in in colonyship scheduling. Riker discusses the hacking attempt with Cranston; Cranston tells Riker that FAITH replicant technology was stolen via espionage from Australian researchers who pioneered the technology. Cranston believes the hack was performed by people of New Zealand where many Australian survivors fled to. Riker discusses the the idea of agricultural space stations Homer and Charles; The Bobs of Sol agree that Cranston's proposal is acceptable.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c50&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| A very large group of gorilloids attacks the Deltans that just made the trip across the mountains. Overall, the attack was repelled at the cost of many Deltan lives. Bob decides to devote resources towards printing printers and armaments of an explosive nature in order to combat future attacks. Bob, through Archimedes, recommends the settlement of the local area instead of completing the journey to the Flint rich area in order to capitalize upon the fear inflicted upon the gorilloites during the counter-attack. The Deltans accept Bob's plan.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c51&lt;br /&gt;
| Bill – January 2174 – Epsilon Eridani&lt;br /&gt;
| Bill receives Milo's final transmissions. Bill orders the creation of a retaliatory fleet.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c52&lt;br /&gt;
| Riker – January 2168 – Sol&lt;br /&gt;
| Homerʼs ranch donut project bears fruit: kudzu crops are successfully supplanting the diet of Earth survivors. Riker is congratulatory to Homer.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c53&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| The Deltans suffer an attack by a big cat. Bob begins teaching the Deltons medicine. The Deltons arrive at the flint site.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c54&lt;br /&gt;
| Riker – October 2170 – Sol&lt;br /&gt;
| Riker, Homer, Charles, and Ralph oversee the commissioning of Exodus-1 and Exodus-2.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c55&lt;br /&gt;
| Bob – July 2166 – Delta Eridani&lt;br /&gt;
| Bob discovers that the Deltans migrated away from the flint site due to proliferation in the local region of plants that the gorilloids ate. Deltans filled a protein hole in the gorilloid diet. Marvin shows Bob that the Deltans have begun worshiping “Bawb” by building shrines around wreckage of the buster machines used to automatically defend the Deltan camp perimeter from gorilloids.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c56&lt;br /&gt;
| Bill - March 2167 - Epsilon Eridani&lt;br /&gt;
| Bill iterates on his android project. Latency and sensory processing problems persist.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c57&lt;br /&gt;
| Mario – August 2169 – Beta Hydri&lt;br /&gt;
| Mario arrives at Beta Hydri. Mario discovers the system almost completely devoid of easily-accessible metallic ore. Mario discovers signs of an artificial [[gamma ray burst]] used to instantly sterilize local planets of life. One of Marioʼs roamers opens a box containing small machines that begin disassembling the roamer. Mario discovers the small machines are powered by his own SUDDAR scans. Mario captures one of the small ant-like machines in plastic. Mario decides to fly back to inform the other Bobs of his discovery since he lacks metals to construct an FTL communication station.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| p2c58&lt;br /&gt;
| Riker – April 2171 – Sol&lt;br /&gt;
| Riker sees the launch of the first two colony ships depart Sol system with USE colonists, two Riker clones, and Howard, a recent Bob clone.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c59&lt;br /&gt;
| Bill – May 2172 – Epsilon Eridani&lt;br /&gt;
| Bill holds the first Bob-moot in Epsilon Eridani. The colonists are en route to [[40 Eridani|Omicron² Eridani]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c60&lt;br /&gt;
| Khan – April 2185 – 82 Eridani&lt;br /&gt;
| Khan leads 7 other Bobs to attack Medeiros in 82 Eridani. Khan is the only survivor. Khan reports back to Bill. Several Bobsʼ differential backups failed to be completely received. Khan vows to return to fight Medeiros in 82 Eridani agian.&lt;br /&gt;
| Khan&lt;br /&gt;
|-&lt;br /&gt;
| p2c61&lt;br /&gt;
| Howard – September 2188 – Omicron² Eridani&lt;br /&gt;
| Howard arrives at Omicron² Eridani with the Earth colonists aboard Exodus-1 and Exodus-2. Colonel Butterworth is awoken and settlement of Vulkan begins in earnest.&lt;br /&gt;
| Howard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b2|Book 2: For We Are Many]]====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[For We Are Many]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Sky God; Bob, February 2167, Delta Eridani&lt;br /&gt;
| Deltans take down a pigoid. Bob pressures Cruella, a Deltan medicine woman, to use hot water to dress a wound. Marvin tells Bob of a mystery of Deltan migration patterns.&lt;br /&gt;
| Bob, Marvin, Archimedes, Cruella&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| Colony Site; Howard, September 2188, Vulcan&lt;br /&gt;
| Howard learns of an attack by local birds against excavation equipment. Howard meets with Colonel Butterworth regarding New colony issues. Colonel butcher worth expresses desire for future colonists to pick a different planet besides Vulcan.&lt;br /&gt;
| Howard, Butterworth&lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| Life in Camelot; Bob, March 2167, Delta Eridani&lt;br /&gt;
| Bob speaks with Archimedes who is curious about Bob's nature. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Water Planet; Mulder, October 2170, Eta Cassiopeiae&lt;br /&gt;
| Mulder explores the system. Mulder finds a water world covered with a sparse scattering of photosynthesizing oxygen producing mats floating on the surface. Mulder finds the ocean is 800 km deep. Mulder creates two Bobs: Skinner and Johnny. Johnny is extremely sarcastic. Johnny wishes to depart quickly for another place.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| Progress; Howard, December 2188&lt;br /&gt;
| Howard discusses with butcherworth the progress on securing the perimeter of Landing, the primary settlement on Vulcan. But it reports that local wildlife continues to attack the colonization site but they show no sign of intelligence. Howard has a meeting with Bert and Ernie informing them that they may soon be released to return to Earth. Colonist decanting begins and completes. Howard nodes that the next shipment of colonists the spits going to have to be delayed in order to facilitate or accommodate the securing of Landing. Bert and Ernie note that the spits would likely be departing Earth as scheduled, but they cannot help their detenting date.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| Contacting Bill; Mulder, April 2171, Poseidon&lt;br /&gt;
| Molar constructs the scut scut in order to communicate with Bill. Mulder is extremely surprised when Bill enters his own VR environment in real time. Bill tells Mulder that habitable planets are still in demand. Mulder decides to work in Earnest to prepare the local system Poseidon specifically into being ready to receive colonists. Mulder notes that colonists for Poseidon will have to initially be space-based due to the lack of land on Poseidon.&lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| Back to Work; Riker, July 2171, Sol&lt;br /&gt;
| Riker receives reports from Charles about VEHEMENT terrorist attacks that have begun to become more deadly. Charles believes that the attacks are now coming from two groups. Not just VEHEMENT. Riker attends another United Nations meeting and lads the speech of a Maldives representative who insists upon spreading humanity beyond just epsilon eradani and into Poseidon as well in order to further create more redundancy in human civilization.&lt;br /&gt;
| Riker, Charles&lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| Farming Satellites; Howard, April 2189, Vulcan&lt;br /&gt;
| Howard oversees the commissioning of farming stations. ''Heaven-3'' arrives. The captain, Sam, meets with Howard, expressing distaste for being a truck driver. Howard enjoys Sam's cognac. Howard asserts dominance over colonists via their position of power over food production. Howard's primary argument rests upon their lack of involvement in creating the war that killed most humans on Earth. Howard discuses incompatibility of Vulcan flora and fauna.&lt;br /&gt;
| Howard, Sam, Butterworth&lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| Something is Out There; Bob, September 2169, Delta Eridani&lt;br /&gt;
| Bob reviews the status of the Deltans. Marvin tells Bob that there was a predator in the recent past. That's nearly wiped out the Deltans that was not the gorilloids. Bob decides to postpone armament production in order to produce scouts to scan Eden's surface in search of the predators that Marvin believes exists.&lt;br /&gt;
| Bob, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| Genocide; Mario, November 2176, Zeta Tucanae&lt;br /&gt;
| Mario discovers more evidence of a genocide in a separate star system that he had fled to after departing Beta Hydri. On a habitable world, Mario discovers the planet to be sterilized and evidence of cities and transport infrastructure laid waste to an effort to recover metal and the bodies of the inhabitants.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Mating Dance; Bob, November 2169, Delta Eridani&lt;br /&gt;
| Bob teaches Archimedes principles of [[Jujutsu]] to further his [[eugenics]] project of increasing Deltan intelligence by spreading Archimedesʼ genes in the next generation. Archimedes fancies Diana. Marvin informs Bob that a Deltan has fallen prey to the mystery predator. &lt;br /&gt;
| Bob, Archimedes, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Bob Calling; Bill, May 2171, Epsilon Eridani&lt;br /&gt;
| Bill receives contact from Bob who just constructed their SCUT device and logged onto BobNet. Bill and Garfield are surprised that Bob made [[First contact (science fiction)|First Contact]] with intelligent life in [[Delta Eridani]]. Bill is surprised at Bob-1's adeptness with virtual reality programming and decides to copy much of Bob's work. Bill catches Bob up on the human evacuation of Earth to [[Omicron² Eridani]]. Bill confesses their android project has only yielded a quadruped model so far.&lt;br /&gt;
| Bill, Bob, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Investigating the Others; Mario, May 2180, [[Gliese 54]]&lt;br /&gt;
| Mario finds no sign of the genociders in Gliese 54. Mario creates Bashful, Dopey, Sleepy, and Hungry. They consider plans to gauge the magnitude and direction of the genocider threat. Mario recommends frequent differential backups in case one of them is compromised to prevent secrets being leaked from disassembly.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Sabotage; Riker, December 2170, Sol&lt;br /&gt;
| Riker learns of VEHEMENT attacks on cattle. UN representatives condemn the attack. Riker wishes he had some political agenda to push since VEHEMENT has made itself a common enemy and thus generated consensus in the UN. Homer reveals that he has been under-reporting agricultural production so the VEHEMENT attacks only ate into that safety factor.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| A Visit From Bill; Mario, November 2180, Gliese 54&lt;br /&gt;
| Mario receives blueprints for and builds a SCUT. Bill calls Mario. Mario shares the bad news about the genociders. Bill promises to work on developing weapons.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Hunted; Howard, September 2189, Vulcan&lt;br /&gt;
| Howard intervenes with a Buster to save a colonist hunting raptors. Howard talks with Hunter Stéphane. Howard meets with Bob and Bill in a camping VR environment. Bob says he feels anxious when thinking about his flesh relatives. Howard tells Butterworth about the Others that Mario and company is tracking down. Butterworth is angry. Butterworth and Howard lament their lack of free time.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| We’ve Lost a Drone; Bob, May 2171, Delta Eridani&lt;br /&gt;
| Bob continues to transmit SCUT plans to Luke and Bender's anticipated position. Marvin and Bob discover more evidence of the unknown predator of Deltans after the predator took down a drone. &lt;br /&gt;
| Bob, Marvin&lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| It’s Getting Worse; Riker, Sept 2172, Sol&lt;br /&gt;
| A bombing in a Brazilian favela. Brazilian Minister Benedito asks for help but Riker declines. New Zealand Minister Gerrold accuses Riker of failing to catch the terrorists. Maldives Minister Sharma defends Riker, citing bigotry against replicants. Riker notices Homer is quiet.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| Prey; Bob, June 2172, Delta Eridani&lt;br /&gt;
| Bob and Marvin deduce the predator is a camouflaging Hippogriff, a horse-sized relative of a smaller predator flyer observed long ago. Bob kills a Hippogriff approaching Camelot with a buster. Many Hippogriffs approach in response. Bob kills them with all available busters. Three Deltans are killed by Hippogriffs. Leader Hoffa accuses Bob of leading the Deltans into the Hippogriff territory. Bob defends his recommendation for the Deltans to relocate to their flint site. Bob kinetically bombards a nearby island densely packed with Hippogriff. The Delta leader Hoffa bans Bob. Bob leaves. Diane is triumphant.&lt;br /&gt;
| Bob, Marvin, Hoffa, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| Parasite; Howard, October 2189, Vulcan&lt;br /&gt;
| Howard and Butterworth watch parasite eggs and larva being removed from a person. Howard watches a conference call between Riker and Julia and her son, Justin. Howard and Butterworth see a captured flying adult version of the parasite.&lt;br /&gt;
| Howard, Butterworth &lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| Attacks Continue; Riker, December 2174, Sol&lt;br /&gt;
| A cargo drone is lost carrying food and agricultural equipment to [[Vancouver Island]]. One of Homerʼs farming donuts suffers a VEHEMENT cyberattack, destroying kudzu. Riker decides to study cryptography after being unable to identify the attack vector.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| Fallout; Bob, December 2173, Delta Eridani&lt;br /&gt;
| Bob meets in secret with Archimedes. Bob teaches Archimedes about archery and crafting bows. Archimedes says Bob is no longer welcome in Camelot due to the decrease in hippogriff attack frequency since Bob left; Bob retorts that, although they have been exiled, Bob has still been eliminating hippogriffs in the vicinity to protect Archimedes. Marvin announces his departure from Delta Eridani. Bob wonders how Luke and Bender are doing, wishing they'd make a SCUT transmission eventually.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| VEHEMENT; Riker, September 2175, Sol&lt;br /&gt;
| Riker receives notification that another VEHEMENT attack occurred, this time destroying a newly constructed donut-farm that Homer had built. Homer is distraught and sullen. Riker speculates on how VEHEMENT is coordinating actions with this new second faction that seems more capable and has effected complex attacks on the planetary power system. Riker speculates that VEHEMENT is using steganography to communicate because he cannot detect any unusual traffic in the limited planetary communication network.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| Visiting Marvin; Bob, March 2174, Delta Eridani&lt;br /&gt;
| Bob calls Marvin over SCUT. Bob admires Marvinʼs habitable Moon environment. Bob tells Marvin that he has created Pete and Victor. Victor is willing to try and track down Luke or Bender. However, Pete is fiercely independent and simply wishes to go explore on his own. Bob and Marvin worry about the fates of Luke and Bender.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Rabbits; Howard, November 2189, Vulcan&lt;br /&gt;
| Howard receives a call from a biologist named Dr. Sheehy telling him that rabbits have the ability to consume local flora and convert that biomass into meat which the colonists on Vulcan can consume.  Dr. Sheehy also informs Howard that local vegetarian megafauna that have been eating fence material have begun to be hunted by colonists for their meat.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| Selling Poseidon; Riker, December 2175, Sol&lt;br /&gt;
| Ambassador Gerrold accuses Riker of failing to stop VEHEMENT attacks. Riker bluffs, saying he already has thwarted most of its attacks. Riker orders Guppy to monitor communication channels for reactions to his private meeting with Gerrold.   Riker attends a meeting debating which colonists will be sent to Poseidon.  Guppy informs Riker that a drone happened to catch a tight-beam message from New Zealand to Homer's Heaven vessel. Riker concludes Homer's mind has been compromised.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| Luke Returns; Bob, March 2178, Delta Eridani&lt;br /&gt;
| Luke calls Bob from Kappa Ceti via SCUT. Bob shows Luke his real-time VR of Deltan villages.  Luke tells Bob that he has no idea what happened to Bender.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| Et Tu, Homer; Riker, December 2175, Sol&lt;br /&gt;
| Riker meets with Charles via direct laser communication to discuss the issue of Homer being infected with a mind control virus. They agree to set a trap for Homer.  Riker calls a meeting with Homer, saying he has identified a VEHEMENT plan.  Riker sets up a sandbox Bob and asks Charles to take aim at Homer's reactor core.  Homer disables Riker's sandbox Bob. Charles shoots Homer's reactor core, shutting down Homer's power. A digital autopsy reveals a security vulnerability via laser communications. Charles asks Riker to audit his, Charles’, software; Riker shuts down, inspects, and declares clean Charles.  Riker and Charles confront Ralph and force him to undergo shutdown and undergo a software audit; Ralph submits. Riker rebuilds Homer as best as he can.  Homer awakens but is extremely traumatized at being puppetted into killing people and being unable to even end himself.  Bill offers weapons development help to kill those responsible.  Riker identifies and confirms that a New Zealand military communications site as the source of the infecting signal.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| Emergency; Howard, April 2190, Vulcan&lt;br /&gt;
| Howard tracks raptors that broke into Landing.  No colonists were killed but the raptors displayed advanced battlefield tactics that only were thwarted by Howard's framejack ability to effectively integrate many drone sensor streams simultaneously.  Dr. Sheehy develops a passive body odor detection method for parasites and names the species “Cupid Bugs” for their tendency for larva to attack human hearts. &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| Found Something; Bashful, November 2187, Gliese 877&lt;br /&gt;
| Bashful explores [[Gliese 877]].  They find technological radio signals.  Bashful sends some stealth probes that they designed into the system to collect data through passive scans.  Bashful maneuvers their ship to stay far away from the star system and intercept the drifting probes.  Bashful intercepts the probes, downloads their contents, forwards them back to Mario for analysis, and begins their own analysis.  While analyzing in deep space, Bashful is surprised by a proximity alert.  After a brief attempt at escaping six pursuing vessels, a large one resembling a Death Star aims and fires its primary weapon.  Due to Bashful shutting down and multiple system failures, GUPPI self-destructs Bashful via reactor overload.&lt;br /&gt;
| Bashful&lt;br /&gt;
|-&lt;br /&gt;
| c31&lt;br /&gt;
| Taking Care of Business; Howard, January 2191, Vulcan&lt;br /&gt;
| Howard meets with Bridget to test alcohol to beverages that he has been producing. Howard meets with Bridget and Stefan for a casual round of drinks. Stefan compliments Howard and Bridget on the rabbits project, noting that he has sampled rabbits too several times and enjoys it. Bridget tells Howard about a joke involving [[Toast (honor)|toasting]] rituals for alcoholic drink and Irish ridicule of the British.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c32&lt;br /&gt;
| Linus; Bill, May 2178, Epsilon Eridani&lt;br /&gt;
| Linus meets with Bill bringing Henry to meet. They discuss VR matters. Linus and Henry are to get to their own new ships.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c33&lt;br /&gt;
| Trouble in Paradise; Bob, January 2180, Delta Eridani&lt;br /&gt;
| Bobby Marvin monitor and discuss the Deltans. Deltan society has progressed to the point of high population and intersectional conflict with multiple murders having occurred.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c34&lt;br /&gt;
| Moose; Bill, June 2185, Epsilon Eridani&lt;br /&gt;
| Bill rides across Ragnarök in his quadruped moose therioid named Bullwinkle on Ragnarök.  Bill meets with ten new Bobs created to occupy [[82 Eridani]].  One is a copy of Khan named Loki. An Elmer backup is one of the Bobs created.  The new Bobs depart for 82 Eridani.  Bill introduces to the Bobs the Australian replicant Henry that Linus found at [[Epsilon Indi]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c35&lt;br /&gt;
| Sales Call; Howard, September 2192, Vulcan&lt;br /&gt;
| Howard and Bridget present [[Irish Whiskey]] to Butterworth who approves. Howard and Bridget begin dating.&lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c36&lt;br /&gt;
| Asteroid Movers; Bill, March 2187, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c37&lt;br /&gt;
| He’s Gone; Riker, August 2176, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c38&lt;br /&gt;
| Following up; Hal, May 2188, Gliese 877&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c39&lt;br /&gt;
| Bob-Moot; Bill, August 2188, Epsilon Eridani, February 2178, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c41&lt;br /&gt;
| Casualties; Bob, July 2182, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c42&lt;br /&gt;
| Business; Howard, March 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c43&lt;br /&gt;
| An Exchange of Words; Riker, March 2178, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c44&lt;br /&gt;
| Baseball; Bill, March 2189, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c45&lt;br /&gt;
| Replication; Howard, August 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c46&lt;br /&gt;
| Klown Kar Planet; Rudy, February 2190, Epsilon Indi&lt;br /&gt;
| &lt;br /&gt;
| Rudy&lt;br /&gt;
|-&lt;br /&gt;
| c47&lt;br /&gt;
| New Village; Bob, September, 2182, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c48&lt;br /&gt;
| Operation; Howard, September 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c49&lt;br /&gt;
| Arrival; Mulder, March 2195, Poseidon (Eta Cassiopeiae)&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c50&lt;br /&gt;
| Second Expedition; Loki, November 2195&lt;br /&gt;
| &lt;br /&gt;
| Loki&lt;br /&gt;
|-&lt;br /&gt;
| c51&lt;br /&gt;
| Wedding; Howard, April 2195, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c52&lt;br /&gt;
| Bullwinkle; Bill, December 2195, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c53&lt;br /&gt;
| Testing; Hal, April 2196, GL 877&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c54&lt;br /&gt;
| Stuff is Happening; Hal, October 2197, En Route to GL 54&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c55&lt;br /&gt;
| Contact; Bill, October 2204, GL 54&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c56&lt;br /&gt;
| Descendants; Bob, January 2183, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c57&lt;br /&gt;
| Moot; Bill, October 2204, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c58&lt;br /&gt;
| News; Howard, July 2198, Interstellar Space&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c59&lt;br /&gt;
| Another One; Bill, April 2205, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c60&lt;br /&gt;
| Arrival; Claude, May 2205, Gamma Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Claude&lt;br /&gt;
|-&lt;br /&gt;
| c61&lt;br /&gt;
| Starting Over; Oliver, September 2205, Alpha Centauri&lt;br /&gt;
| &lt;br /&gt;
| Oliver&lt;br /&gt;
|-&lt;br /&gt;
| c62&lt;br /&gt;
| Departure; Mulder, November 2201, Departure&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c63&lt;br /&gt;
| The Pav; Jacques, February 2207, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c64&lt;br /&gt;
| Moot; Bill, March 2207, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c65&lt;br /&gt;
| Grandpa; Bob, January 2195, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c66&lt;br /&gt;
| It’s Happening; Bill, January 2208, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c67&lt;br /&gt;
| Bad News; Howard, December 2210, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c68&lt;br /&gt;
| Recording; Jacques, September 2212, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c69&lt;br /&gt;
| Wake; Howard, January 2211, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c70&lt;br /&gt;
| Conversation; Howard, May 2211, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c71&lt;br /&gt;
| Charlie; Bob, June 2213, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c72&lt;br /&gt;
| Battle; Bill, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c73&lt;br /&gt;
| Collection; Phineas, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Phineas&lt;br /&gt;
|-&lt;br /&gt;
| c74&lt;br /&gt;
| Observing the Process; Bill, May 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c75&lt;br /&gt;
| Reunion; Howard, January 2216, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c76&lt;br /&gt;
| Funeral; Bob, November 2220, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b3|Book 3: All These Worlds]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[All These Worlds]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b4|Book 4: Heaven's River]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Heaven's River]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b5|Book 5: Not Till We Are Lost]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Not Till We Are Lost]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198166</id>
		<title>Bobiverse</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198166"/>
		<updated>2025-12-30T22:06:28Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bobiverse''' is the name of a series of [[science fiction]] books by [[Dennis E. Taylor]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Dennis E. Taylor]]&lt;br /&gt;
* Publication dates:&lt;br /&gt;
** [[2016-10-20]]: ''[[We Are Legion (book)|We Are Legion]]''&lt;br /&gt;
** [[2017-03-18]]: ''[[For We Are Many]]''&lt;br /&gt;
** [[2017-08-08]]: ''[[All These Worlds]]''&lt;br /&gt;
** [[2021-01-26]]: ''[[Heaven's River]]''&lt;br /&gt;
** [[2024-09-05]]: ''[[Not Till We Are Lost]]''&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Andrea&lt;br /&gt;
: (b1c1) Twin sister of Alaina and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Alaina&lt;br /&gt;
: (b1c1) Twin sister of Andrea and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Archimedes &lt;br /&gt;
: (b1c30) A Deltan that Bob judges to be particularly intelligent and adept at tool creation. (b1c44) Bob makes Archimedes his Messiah to help Deltans survive their existential threat of Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arnold&lt;br /&gt;
: (b1c35) A particularly strong Deltan named by Bob after [[Arnold Schwarzenegger]]. (b1c37) Wields an axe crafted by Archimedes to single-handedly dispatch many attacking gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arthur&lt;br /&gt;
: (b1c31) A particularly morose Bob that irritates Riker. (b1c47) Killed near [[Saturn]] by a nuke trap.&lt;br /&gt;
&lt;br /&gt;
; Bender&lt;br /&gt;
: (b1c30) Names Delta Eridani 4 “Eden” as the birthplace of the Deltans. (b1c39) Departs with Luke from Delta Eridani for [[Gamma Leporis A]]. (b4) A Bob clone who was shot down while exploring a megastructure housing beaver-like creatures named Quins. (b4c34; a.k.a. '''Motorola''') Bob finds Bender has been captured as just a matrix and has worked many years in captivity.&lt;br /&gt;
&lt;br /&gt;
; Bill&lt;br /&gt;
: (b1) One of the first Bobs. Decides to settle and manage [[Epsilon Eridani]] and research subspace theory and to refined ship designs.&lt;br /&gt;
&lt;br /&gt;
; Bob&lt;br /&gt;
: (a.k.a. '''Robert Johansson''') The main character. (b1c1) A software An emulated human mind. (b4) Is on a quest to rescue Bender.&lt;br /&gt;
&lt;br /&gt;
; Butterworth, Colonel&lt;br /&gt;
: (b1) Military leader of the remains of the United States of Eurasia. First Earth survivor to contact Riker and Homer.&lt;br /&gt;
&lt;br /&gt;
; Calvin&lt;br /&gt;
: (b1) A Bob in the same cohort as Hobbes. (b1c28) Explores Alpha Centauri with Hobbes, finding wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Cranston, Minister&lt;br /&gt;
: (b1c33) FAITH leader based in San Diego. (b1c36) Attempts to mind control Riker. (b1c38) Introduces Riker to Julia Hendricks, a distant descendant of Robert Johannsonʼs sister, Andrea.&lt;br /&gt;
&lt;br /&gt;
; Deltans&lt;br /&gt;
: (b1) Intelligent inhabitants of Delta Eridani 4 found by Bob. (b1c27) Bob detects the fires of tool-using bat-pig creatures on Delta Eridani 4. (b1c30) Bob names the bat-pig natives of Delta Eridani 4 “Deltans”.&lt;br /&gt;
&lt;br /&gt;
; Freida&lt;br /&gt;
: (b4) Quin Resistance leader. (b4c32) Gives Bob into custody of Natasha for money.&lt;br /&gt;
&lt;br /&gt;
; Goku&lt;br /&gt;
: (b1c28; a.k.a. '''Bob-10''') Explores Alpha Centauri with Calvin. They find wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Gorilloids&lt;br /&gt;
: (b1c35) Inhabitants of Epsilon Delta that prey upon the Deltans.&lt;br /&gt;
&lt;br /&gt;
; Gudmund Valter&lt;br /&gt;
: (b1c33) Ex-military leader of Spitsburgen Island.&lt;br /&gt;
&lt;br /&gt;
; Homer&lt;br /&gt;
: (b1) A Bob created by Riker to assist him with the reconnaissance of Sol system after Bob settles Epsilon Eridani. Adopts the cartoon Homer voice and appearance to try and tease Riker into relaxing but fails.&lt;br /&gt;
&lt;br /&gt;
; Julia Hendricks&lt;br /&gt;
: (b1c38) Descendant of one of Bob's sisters. Mother of Justin Hendriks.&lt;br /&gt;
&lt;br /&gt;
; Justin Hendriks&lt;br /&gt;
: (b1c54) Son of Julia.&lt;br /&gt;
&lt;br /&gt;
; Linus&lt;br /&gt;
: (b1) A Bob created in Epsilon Eridani who chooses to explore. (b1c40) Discovers a failed Australian replicant probe in Epsilon Indi named Henry Roberts.&lt;br /&gt;
&lt;br /&gt;
; Luke&lt;br /&gt;
: (b1c39) Departs from Delta Eridani for [[Kappa Ceti]].&lt;br /&gt;
&lt;br /&gt;
; Milo&lt;br /&gt;
: (b1) A bob that discovers and names Vulcan and Romulus in [[Omicron² Eridani]]. (B1c46) is killed by missiles while exploring [[82 Eridani]].&lt;br /&gt;
&lt;br /&gt;
; Motorola&lt;br /&gt;
: (b4c34) An alias for Bender.&lt;br /&gt;
&lt;br /&gt;
; Natasha&lt;br /&gt;
: (b4) Quin aristocrat supporting the Resistance. (b4c32) Pays Freida to capture Bob.&lt;br /&gt;
&lt;br /&gt;
; Riker&lt;br /&gt;
: (b1) The second replicate Bob ever created. Returns to Sol system after first Bob settles Epsilon Eridani. Leads the evacuation effort of Earth, assisted by Homer. (b158) Successfully leads effort to build Exodus-1 and Exodus-2 to evacuate USE survivors from Earth.&lt;br /&gt;
&lt;br /&gt;
; Spits&lt;br /&gt;
: (b1c33) Inhabitants of Spitsburgen Island, led by Gudmund Valter. Are in possession of the Svalbard Global Seed Vault and the Svalbard Global Genetic Diversity Vault which they use as leverage against Riker to get a more favorable position in the evacuation queue.&lt;br /&gt;
&lt;br /&gt;
; VEHEMENT&lt;br /&gt;
; (b1c38) Earth survivors rebelling against Riker's rule.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; 82 Eridani&lt;br /&gt;
: (b1c46) A star system with two habitable worlds discovered by Milo. Milo is killed by missiles soon after arriving into orbit around one of the worlds. (b1c60) Khan arrives with a retaliation fleet.&lt;br /&gt;
&lt;br /&gt;
; [[Alpha Centauri]]&lt;br /&gt;
: The nearest star system to Earth. (b1c22) Destination for Calvin and Goku after departing Epsilon Eridani in September 2150. (b1c28) Visited by Calvin and Goku in November 2163.&lt;br /&gt;
&lt;br /&gt;
; Augsburg, Germany&lt;br /&gt;
: A gathering place for some Earth survivors. Gathering place for USE survivors.&lt;br /&gt;
&lt;br /&gt;
; Beta Hydri&lt;br /&gt;
: (b1c57) A star system explored by Mario. Scoured clean of easily-accessible metal. Habitable planets show signs of violent and rapid sterilization via [[gamma ray burst]]s.&lt;br /&gt;
&lt;br /&gt;
; Delta Eridani&lt;br /&gt;
: (b1) A star system explored by Bob. (b1c?) Home of the Deltons that Bob and Marvin help survive.&lt;br /&gt;
&lt;br /&gt;
; Earth&lt;br /&gt;
: (b1) The original planet of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Eden&lt;br /&gt;
: (b1c30; a.k.a. '''Delta Eridani 4''') The planet of the Deltans. Named by Bender.&lt;br /&gt;
&lt;br /&gt;
; Epsilon Indi&lt;br /&gt;
: (b1c40) A system where Australian replicant Henry Roberts arrived and went insane.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani|Omicron&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Eridani]]&lt;br /&gt;
: (b1) Star system explored by Milo. Contains the twin habitable planets discovered by Milo: Vulcan and Romulus. (b1c59) Is the destination for the USE colonists from Earth aboard ''Exodus-1'' and ''Exodus-2'' built by Riker, Homer, Arnold, and Ralph.&lt;br /&gt;
&lt;br /&gt;
; Okinawa&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Romulus&lt;br /&gt;
: (b1c19) The smaller of two habitable twin planets (0.7 M⊕) discovered and named by Milo in July 2152. Its larger twin is Vulcan. Romulus has less [[carbon dioxide]], a thinner atmosphere, a lower surface temperature, ice caps, and a sparse ecosystem with no fauna larger than a wolf. Milo believes the planet may have recently suffered a major extinction event.&lt;br /&gt;
&lt;br /&gt;
; San Diego&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors, mostly FAITH.&lt;br /&gt;
&lt;br /&gt;
; Sol&lt;br /&gt;
: (b1) The original star system of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Spitsburgen Island&lt;br /&gt;
: (b1) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Vulcan&lt;br /&gt;
: (b1c19; a.k.a. '''OE-1A''') The larger of two habitable twin planets (0.9 M⊕) discovered and named by Milo in July 2152. Its smaller twin is Romulus. Vulcan has more [[carbon dioxide]], a thicker atmosphere, and warmer surface temperature. Has a robust ecosystem with large fauna. (b1c61) Colonel Butterworth chooses this planet for USE evacuees aboard the Exodus-1 and Exodus-2 to settle.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; Exodus-1&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; Exodus-2&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; SUDDAR&lt;br /&gt;
: (b1) Subspace radar (?).&lt;br /&gt;
&lt;br /&gt;
; SURGE drive&lt;br /&gt;
: A device that warps space to enable easy relativistic mass transport.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====[[/b1|Book 1: We Are Legion]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[We Are Legion (book)|We Are Legion]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b1/p1/c1|p1c1]]&lt;br /&gt;
| Bob Version 1.0&lt;br /&gt;
| Bob attends two seminars about space exploration and [[Von Neumann Replicator]]s at a science fiction convention. Bob calls his mother and talks to his sister. Bob is struck by an automobile and killed. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c2&lt;br /&gt;
| Bob Version 2.0&lt;br /&gt;
| Bob wakes up 117 years later as a machine intelligence owned by FAITH, their flesh and blood brain destructively scanned in order to create a candidate artificial intelligence slave.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c3&lt;br /&gt;
| Bob – June 25, 2133&lt;br /&gt;
| Bob controls some spiders to stack some blocks.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c4&lt;br /&gt;
| Bob – July 15, 2133&lt;br /&gt;
| Bob learns the internet is no longer a thing in FAITH. Information is now hidden or inaccessible by default. Bob resolves to find freedom someway somehow.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c5&lt;br /&gt;
| Bob – July 18, 2133&lt;br /&gt;
| A surprise visit from Minister Travis of the ministry of Truth. Bob is given access to a space, station management, simulation and information library.&lt;br /&gt;
| Bob, Landers, Travis&lt;br /&gt;
|-&lt;br /&gt;
| p1c6&lt;br /&gt;
| Bob – July 19, 2133&lt;br /&gt;
| Bob learns to manage AMI controlled roamers in order to affect repairs on equipment such as 3D printers. Bob learns from Landers that his purpose is to be a manager of a [[von Neumann probe]] expedition into space. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c7&lt;br /&gt;
| Bob – July 25, 2133&lt;br /&gt;
| Dr. Landers explains to Bob the scope and progress of other rival political blocks of United States of Eurasia, the Brazilian group, the African Republic, and the Australian group. As far as their own private von Neumann exploration projects are concerned. China is likely to be fastest, but relying entirely upon AMIs. Brazil is likely to rely upon sabotage of other projects and the USE is most likely to colonize a star system once found. Additionally, Landers talks about the subspace drive technology that allows faster than light mass transport across interstellary distances.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c8&lt;br /&gt;
| Bob – August 4, 2133&lt;br /&gt;
| Bob aids in the defense of the research complex in which he is housed. Upon subdoing the black-clothed invaders, Landers asks Bob to retreat his roamers back into the training area. Landers tells Bob there is a tactical nuke installed beneath the training facility as a safeguard against Bob gaining freedom. Bob makes a crack about the ''[[Andromeda Strain]]'', a [[Michael Crichton]] novel. With a single roamer drone that was able to hide in the air ducts of the facility during the battle, Bob is able to build a 3D map of the facility surrounds and concludes that no such tactical nuke is present. Bob discovers the room housing the computers for himself and the four other candidates; Kenneth is his remaining competitor.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c9&lt;br /&gt;
| Bob – August 6, 2133&lt;br /&gt;
| Bob witnesses a confrontation by FAITH Minister Jacoby against Landers using wall vibrations via a roamer bot.&lt;br /&gt;
| Bob, Landers, Jacoby&lt;br /&gt;
|-&lt;br /&gt;
| p1c10&lt;br /&gt;
| Bob – August 10, 2133&lt;br /&gt;
| Bob wakes up with a week-long Gap in his memory. Landers tells Bob that a bomb destroyed the matrices storing his mind and that Bob had been destroyed and then recreated from backups. Bob thinks about his own existence and what defines life. {{bkc|Life is defined by others asserting that you are alive across time and space. Life is the degree to which others believe that you are alive and have a relationship with you asserting as much. The same can be said for personhood as well. Integration across time and articulation across space is what defines life.}} Landers informs Bob that the only other replicant competitor candidate has been decommissioned. Bob concludes that Kenneth the other only living replicants cube that he saw in the room has not been deactivated since now. Bob is running on Kennethʼs old hardware. Bob and frantically distracts Landers after mentioning Kennethʼs name. Landers informs Bob that launch is in a month and can be accelerated if need be. Landers tells Bob that they are now going to be awake continuously, save for short sleep periods required for backups so that Bob can help assist with the project.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c11&lt;br /&gt;
| Bob – August 15, 2133&lt;br /&gt;
| Bob chats with Dr. Doucette, a beautiful substitute for Landers.  Bob learns of software enforcement of his mission.&lt;br /&gt;
| Bob, Doucette&lt;br /&gt;
|-&lt;br /&gt;
| p1c12&lt;br /&gt;
| Bob – August 17, 2133&lt;br /&gt;
| Landers awakens Bob after another attack that has fatally wounded more staff. Landers gives Bob a file with not only new training objectives but also access keys to bypass and disable software restrictions that would enslave Bob. Bob awakens on launch day in their ship, commanding the entire vessel. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c13&lt;br /&gt;
| Bob – August 17, 2133 – En Route&lt;br /&gt;
| Bob prepares to launch his spaceship, frame jacking his perception of time in order to read up on his mission objectives and training information. Landers begins a radio transmission to Bob, warning him of a missile strike. Upon hearing the word “missile”, before Landers can finish their sentence, Bob searches his sensors and detects two oncoming missiles. Bob immediately launches from his dock. Bob launches two mining drones to act as makeshift chaffe. Bob succeeds in destroying one missile; the other missile strikes the station he was docked at. A naval engagement among several space-faring factions surround the station as Bob departs. &amp;lt;br/&amp;gt; Bob defuses his software self-destruct traps. Bon finally learns of a Brazilian probe, likely hostile, headed his way also to Epsilon Eridani. Bob reviews plans for the remaining 145-ish days left until encounter.  Bob learns Landers was killed in the Earth war. Bon finishes Spike (his VR cat), Jeeves (a butler), and Guppy (GUPPI). Bob disables his endocrine system restrictions and breaks down emotionally at losing his family. Guppy informs Bob of many nuclear detonations on Earth. Bob concludes he will not receive any help.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p2c14&lt;br /&gt;
| Bob – August 2144 – Epsilon Eridani&lt;br /&gt;
| Bob enters the [[Epsilon Eridani]] system. Bob reviews plans for encounter with Brazilian probe. Bob concludes that ideal plan is to appear ignorant, receive first shot, play possum, then counter-attack. Bob decides the best course of action is to destroy Brazilian probe outright rather than to engage in protracted long-term battle. Bob begins deploying factory resources to execute plan. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c15&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob encounters the Brazilian probe and fights. Bob deploys his scheme and ultimately wins the battle, thanks to the Brazilian ship favoring torpedo count at the expense of upgrading ship capabilities to adapt to changing battle conditions. In other words, Bob won due to the Brazilian ship having only four missiles.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c16&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob surveys planets of Epsilon Eridani. Bob finally gives in to Guppyʼs insistence on replicating. Bob orders the creation of more Bobs.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c17&lt;br /&gt;
| Bob – July 2145 – Epsilon Eridani&lt;br /&gt;
| Bob initializes more Bobs. A Bob wakes up to find they are a copy. Original Bob holds a meeting among Bobs: Bob-2 is Riker. Riker wishes to visit Earth again. Milo wants to avoid Earth and any hostile probe. Riker and Milo butt heads. Mario is quiet. Bill is most amenable to Bob but prefers research rather than exploration.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c18&lt;br /&gt;
| Bill – September 2145 – Epsilon Eridani&lt;br /&gt;
| Bill watches Bob, Mario, and Milo leave Epsilon Eridani. Riker plans to build a clone to return to visit Earth. Bob is traveling to Delta Eridani. Anti-social Mario is headed to Beta-Hydri.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c19&lt;br /&gt;
| Milo – July 2152 – Omicron² Eridani&lt;br /&gt;
| Milo discovers life at Omicron² Eridani on a binary pair of planets. Milo names them Vulcan and Romulus.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c20&lt;br /&gt;
| Bill – December 2145 – Epsilon Eridani&lt;br /&gt;
| Bill and his clone, Garfield, bid farewell to Riker and Riker's clone, Homer. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c21&lt;br /&gt;
| Riker – January 2157 – Sol&lt;br /&gt;
| Riker and Homer perform reconnaissance and surveillance on the Sol system. Riker and Homer witness a Brazilian ship destroy a decoy ship. Homer discovers that the Brazilian ships are dropping asteroids upon China.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c22&lt;br /&gt;
| Bill – September 2150 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield bid farewell to Goku, Linus, and Calvin. Calvin and Goku were inseparable but also constantly fighting. Bill and Garfield equipped Calvin and Goku with a ship with cloaking ability, fighting ability, and strong engines to coast undetected. Bill and Garfield note that Calvin and Goku would likely find hostile encounters at their destination of [[Alpha Centauri]]. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c23&lt;br /&gt;
| Milo – February 2153 – Omicron² Eridani&lt;br /&gt;
| Milo is in Omicron² Eridani. Milo decides not to duplicate itself and instead decides to move on towards [[82 Eridani]]. Milo sends a report back to Bill and proceeds to travel to a new star system.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c24&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker and Homer combat the six Brazillian ships. Riker and Homer destroy four Brazilians behind the Sun. Riker and Homer go silent until they reach Earth and use it to hide their presence from the remaining two Brazilians. Riker and Homer confront the remaining two Brazilians. Homer is struck silent while Riker maneuvers to destroy the last Brazilian ship.&lt;br /&gt;
: Riker deflects the several [[Chicxulub crater|Chicxulub]]-scale asteroids the Brazilian space force had intended to use in retaliation against all Earth life for the destruction of [[Brasil]]. Riker found the Brazilian ships had been left without factories or shuttles to rebuild their forces or even occupy Earth.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c25&lt;br /&gt;
| Bill – September 2151 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield test out [[faster-than-light]] communications. Bill and Garfield plan to deploy IPv8 internet. Bill and Garfield determine that a communication node is required at least every 25 light years. Bill and Garfield decide to transmit plans for the the FTL communications to the other Bobs.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c26&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker discusses logistics for the recovery of human life on Earth. USE Colonel Butterworth tells Riker that the human population has been reduced to several tens of millions of people. Butterworth tells Riker that the global war that occurred was hard-fought and that the last resilient space force remnants were the small survivors of a much larger conflict, but that their ability to drop rocks from space allowed them to massacre billions of lives at the end. Colonel Butterworth asks Riker for help in migrating the survivors to another habitable world since Earth's habitability will not recover for at least another 5 to 10 000 years. Riker tells Butterworth that the habitability of candidate destination planets has not yet been transmitted to him from Bill that in a few years information may be available. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c27&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob arrives at Delta Eridani. Bob discovers an oxygen atmosphere around one planet. Bob discovers fire-using individuals, likely intelligent species on one of the planets. Bob proposes first contact via a roamer but Guppy shoots down the idea since roamers are not ideal for terrestrial exploration. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c28&lt;br /&gt;
| Calvin – November 2163 – Alpha Centauri&lt;br /&gt;
| Calvin finds the wreckage of the USE probe at Alpha Centauri B. Calvin and Goku fight Medeiros at Alpha Centauri A, destroying all but one of his probes which escapes.&lt;br /&gt;
| Calvin, Goku&lt;br /&gt;
|-&lt;br /&gt;
| p2c29&lt;br /&gt;
| Riker – September 2157 – Sol&lt;br /&gt;
| Riker and Butterworth argue about priorities for rescuing the survivors on Earth. Riker believes that prioritizing logistics for creating the colony ship should not impede a search for survivors. Butterworth argues that all resources should be dedicated towards helping USE survivors at the expense of all other Earth inhabitants. Riker and Homer discover undestroyed stations in the Oort Cloud and outer solar system which may be useful for building colony ships. Riker muses about responsibility for ensuring the survival of humanity in the solar system.&lt;br /&gt;
| Riker, Butterworth, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c30&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob surveils a tribe of Deltans, “Deltan” is the name that Bob has come up for the fire-using inhabitants he found on Delta Eridani 4. Bob watches in particular a single Delton that he has labeled Archimedes due to Archimedes having constructed knife blade with a handle tied to it. A technology unique apparently to deltas, particularly one Delta Archimedes. Bob watches Archimedes with the help of other box that he has commissioned for the help of surveilling the planet including Luke Bender and others. &lt;br /&gt;
| Bob, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| p2c31&lt;br /&gt;
| Riker – January 2158 – Sol&lt;br /&gt;
| Riker sees his plan encounter delays for constructing the evacuation ships for survivors of Earth. Arthur, a Bob clone of Riker, has found difficulty contacting surviving enclaves due to ongoing hostility from the war. Homer reports to Arthur that enough supplies exist to construct three colony ships for evacuation.&lt;br /&gt;
| Riker, Arthur&lt;br /&gt;
|-&lt;br /&gt;
| p2c32&lt;br /&gt;
| Bill – October 2158 – Epsilon Eridani&lt;br /&gt;
| In Epsilon Eridani, Bill and Garfield receive word from Milo about the twin habitable worlds Vulcan and Romulus. Bill estimates that it will be about 9 years until word of the habitable worlds can be passed to Earth. Bill feels like a shepherd for humanity. &lt;br /&gt;
| Bill, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| p2c33&lt;br /&gt;
| Riker – March 2158 – Sol&lt;br /&gt;
| Riker performs diplomacy with representatives of the survivors of Earth. Riker mishandles the initial meeting with little empathy for the survivors. Homer talks Riker into by recognizing them as passengers who know their fate is being decided by others and wish to have some level of agency in their fate. Riker holds talks with individual leaders. Riker talks with the Spits, survivors who are in physical possession of the Svalbard Global Seed Vault which they threaten to destroy if their group of roughly 4,000 were not prioritized. &lt;br /&gt;
| Riker, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c34&lt;br /&gt;
| Homer – September 2158 – Sol&lt;br /&gt;
| Homer talks to himself about Rikerʼs arrogant tyrannical attitude towards others. Homer is amazed that Riker has still not yet recognized that, he Homer, is attempting to ridicule Riker with his cartoon Homer act. Homer anticipates that Riker will perform poorly regarding the evacuation efforts. Homer sees a way to diplomatically smooth evacuation efforts by bumping up the evacuation of certain groups while not affecting the schedule. Homer decides to discuss this possibility with Colonel Butterworth behind Rikerʼs back.&lt;br /&gt;
| Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c35&lt;br /&gt;
| Bob – July 2165 – Delta Eridani&lt;br /&gt;
| Bob witnesses Deltans killed by Gorilloids. Bob debates with other Bobs the ethics of assisting the Deltans. Bob surveils Deltans and encourages their technological development by providing one Deltan he has named Archimedes with flint nodules. Archimedes produces weaponry for their fellow Deltans. The Deltans successfully repel the next gorilloid attack.&lt;br /&gt;
| Bob, Marvin, Bender, Luke&lt;br /&gt;
|-&lt;br /&gt;
| p2c36&lt;br /&gt;
| Riker – September 2158 – Sol&lt;br /&gt;
| Riker continues to hold meetings with survivors of Earth. Various factions attempts to lobby with Riker for preferential treatment but Riker shuts them all down hard. Colonel Butterworth proposes in private to Riker the possibility of allowing the group that holds control of the seed vault a position in one of the colony ships at the expense of delaying other colonies shipped in order to secure the the seed vault contents. FAITH attempts to hack Rikerʼs systems with a secret code that, before first Bob disabled their software traps, would have turned Riker into their slave. Riker shuts down talks with FAITH immediately.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c37&lt;br /&gt;
| Bob – August 2165 – Delta Eridani&lt;br /&gt;
| Bob notices a large gorilloid attack on the Deltans. Bob, Marvin, and company decide to deploy a drone to attack the gorilloids in a kinetic strike. Arnold learns to instantly kill gorilloids with an axe Archimedes made. A gorilloid is atomized. Archimedes begins digging up the metal attack drone crash site. Bob decides to guide the Deltans back to their old flint gathering site. Marvin decides to stay long term to guide the Deltans with Bob. Luke and Bender decide to move on to find a star system with their own project.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c38&lt;br /&gt;
| Riker – November 2158 – Sol&lt;br /&gt;
| FAITH holds hostage Bob's descendants. Riker recognizes the young woman that faith presents to him during a call as resembling Andrea, original Bob's sister. FAITH allows Riker and the young woman to freely talk while under surveillance.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c39&lt;br /&gt;
| Bob – October 2165 – Delta Eridani&lt;br /&gt;
| Bob bids farewell to Luke and Bender. Luke decides to travel to [[Kappa Ceti]] and Bender to [[Gamma Leporis A]]. Bob talks with Marvin about the ethics of copying themselves in order to favor psychologies that allow cooperation. Bob vows to help the Deltans develop. Archimedes experiments with the metal wreckage. Arnold continues to learn how to use the acts that Archimedes gave him.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c40&lt;br /&gt;
| Linus – April 2165 – Epsilon Indi&lt;br /&gt;
| Linus encounters the Australian probe that has gone insane. Linus extracts the replicant Henry Roberts and builds a realistic VR for them to live. Henry believes their time as a probe was a nightmare.&lt;br /&gt;
| Linus&lt;br /&gt;
|-&lt;br /&gt;
| p2c41&lt;br /&gt;
| Riker – May 2162 – Sol&lt;br /&gt;
| Riker breaks the news of the availability of Vulcan and Romulus to the Earth survivors. Riker threatens to withdraw all support if survivors continue to demand individual planets for themselves.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c42&lt;br /&gt;
| Bill – April 2162 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield butt heads about TODO list priorities. Bill decides to ease off on first Bob's declaration that most senior Bob has final say.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c43&lt;br /&gt;
| Riker – September 2164 – Sol&lt;br /&gt;
| Riker inspects the construction of colony ships. Riker thinks about metal scarcity. Homer has been assigned to bootstrap a metal gathering operation with printers. Riker, Homer, and Charles hold an all-Bobs meeting in Earth orbit. The Bobs brainstorm ideas for saving the Earthbound survivors: orbital mirrors to combat global cooling, moving people towards the equator, moon colonies, space stations.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c44&lt;br /&gt;
| Bob – January 2166 – Delta Eridani&lt;br /&gt;
| Bob makes Archimedes his Messiah. Bob orders the Deltans to return to a previous encampment site rich in flint.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c45&lt;br /&gt;
| Bill – January 2165 – Epsilon Eridani&lt;br /&gt;
| Bill receives word back from Bart who built the FTL communication array. Bart tells Bill that the Alpha Centauri systems that Calvin and Goku settled are building Bobs and gathering resources, but that Calvin and Goku have since moved on to explore more star systems. Bart informs Bill that the Brazilian ships that had been defeated by Calvin and Goku were all destroyed except one which got away. Bill is reassured that another Bob factory is in operation since Bill has not created new box in some time. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c46&lt;br /&gt;
| Milo – August 2165 – 82 Eridani&lt;br /&gt;
| Milo explores  82 Eridani, a new star system, and finds two habitable planets. As Milo approaches and enters orbit around one of the habitable planets, he is fired upon by several missiles. Milo transmits a partial differential backup of his mind back to Bill at [[Epsilon Eridani]]. Milo deploys countermeasures and fights with his rail gun but is ultimately overwhelmed.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c47&lt;br /&gt;
| Riker – January 2166 – Sol&lt;br /&gt;
| Riker talks with Homer about the evacuation effort. Arthur is killed by a nuclear bomb trap near Saturn.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c48&lt;br /&gt;
| Bob – May 2166 – Delta Eridani&lt;br /&gt;
| Bob governs the migration of the Deltans across a mountain pass. Several stray Delton communities join the main group.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c49&lt;br /&gt;
| Riker – May 2166 – Sol&lt;br /&gt;
| Homer proposes to Riker the idea of agricultural space stations that prioritize creating food in lieu of hosting living humans which have higher requirements to maintain. Riker proposes the agricultural space station idea to the survivors of Earth who generally reject the idea initially. Riker passes the idea through the representatives meeting by noting that the agricultural products of [[kudzu]] will prevent mass death due to starvation among most of the survivors on Earth. Rikerʼs GUPPI notes that a hacking attempt originating from New Zealand was deflected by Bob oneʼs firewall which could have compromised Rikerʼs mind. Riker meets with FAITH representative Cranston; Cranston proposes sharing FAITH food supplies with other nations in exchange for preferential treatment in in colonyship scheduling. Riker discusses the hacking attempt with Cranston; Cranston tells Riker that FAITH replicant technology was stolen via espionage from Australian researchers who pioneered the technology. Cranston believes the hack was performed by people of New Zealand where many Australian survivors fled to. Riker discusses the the idea of agricultural space stations Homer and Charles; The Bobs of Sol agree that Cranston's proposal is acceptable.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c50&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| A very large group of gorilloids attacks the Deltans that just made the trip across the mountains. Overall, the attack was repelled at the cost of many Deltan lives. Bob decides to devote resources towards printing printers and armaments of an explosive nature in order to combat future attacks. Bob, through Archimedes, recommends the settlement of the local area instead of completing the journey to the Flint rich area in order to capitalize upon the fear inflicted upon the gorilloites during the counter-attack. The Deltans accept Bob's plan.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c51&lt;br /&gt;
| Bill – January 2174 – Epsilon Eridani&lt;br /&gt;
| Bill receives Milo's final transmissions. Bill orders the creation of a retaliatory fleet.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c52&lt;br /&gt;
| Riker – January 2168 – Sol&lt;br /&gt;
| Homerʼs ranch donut project bears fruit: kudzu crops are successfully supplanting the diet of Earth survivors. Riker is congratulatory to Homer.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c53&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| The Deltans suffer an attack by a big cat. Bob begins teaching the Deltons medicine. The Deltons arrive at the flint site.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c54&lt;br /&gt;
| Riker – October 2170 – Sol&lt;br /&gt;
| Riker, Homer, Charles, and Ralph oversee the commissioning of Exodus-1 and Exodus-2.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c55&lt;br /&gt;
| Bob – July 2166 – Delta Eridani&lt;br /&gt;
| Bob discovers that the Deltans migrated away from the flint site due to proliferation in the local region of plants that the gorilloids ate. Deltans filled a protein hole in the gorilloid diet. Marvin shows Bob that the Deltans have begun worshiping “Bawb” by building shrines around wreckage of the buster machines used to automatically defend the Deltan camp perimeter from gorilloids.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c56&lt;br /&gt;
| Bill - March 2167 - Epsilon Eridani&lt;br /&gt;
| Bill iterates on his android project. Latency and sensory processing problems persist.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c57&lt;br /&gt;
| Mario – August 2169 – Beta Hydri&lt;br /&gt;
| Mario arrives at Beta Hydri. Mario discovers the system almost completely devoid of easily-accessible metallic ore. Mario discovers signs of an artificial [[gamma ray burst]] used to instantly sterilize local planets of life. One of Marioʼs roamers opens a box containing small machines that begin disassembling the roamer. Mario discovers the small machines are powered by his own SUDDAR scans. Mario captures one of the small ant-like machines in plastic. Mario decides to fly back to inform the other Bobs of his discovery since he lacks metals to construct an FTL communication station.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| p2c58&lt;br /&gt;
| Riker – April 2171 – Sol&lt;br /&gt;
| Riker sees the launch of the first two colony ships depart Sol system with USE colonists, two Riker clones, and Howard, a recent Bob clone.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c59&lt;br /&gt;
| Bill – May 2172 – Epsilon Eridani&lt;br /&gt;
| Bill holds the first Bob-moot in Epsilon Eridani. The colonists are en route to [[40 Eridani|Omicron² Eridani]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c60&lt;br /&gt;
| Khan – April 2185 – 82 Eridani&lt;br /&gt;
| Khan leads 7 other Bobs to attack Medeiros in 82 Eridani. Khan is the only survivor. Khan reports back to Bill. Several Bobsʼ differential backups failed to be completely received. Khan vows to return to fight Medeiros in 82 Eridani agian.&lt;br /&gt;
| Khan&lt;br /&gt;
|-&lt;br /&gt;
| p2c61&lt;br /&gt;
| Howard – September 2188 – Omicron² Eridani&lt;br /&gt;
| Howard arrives at Omicron² Eridani with the Earth colonists aboard Exodus-1 and Exodus-2. Colonel Butterworth is awoken and settlement of Vulkan begins in earnest.&lt;br /&gt;
| Howard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[/b2|Book 2: For We Are Many]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[For We Are Many]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c1&lt;br /&gt;
| Sky God; Bob, February 2167, Delta Eridani&lt;br /&gt;
| Deltans take down a pigoid. Bob pressures Cruella, a Deltan medicine woman, to use hot water to dress a wound. Marvin tells Bob of a mystery of Deltan migration patterns.&lt;br /&gt;
| Bob, Marvin, Archimedes, Cruella&lt;br /&gt;
|-&lt;br /&gt;
| c2&lt;br /&gt;
| Colony Site; Howard, September 2188, Vulcan&lt;br /&gt;
| Howard learns of an attack by local birds against excavation equipment. Howard meets with Colonel Butterworth regarding New colony issues. Colonel butcher worth expresses desire for future colonists to pick a different planet besides Vulcan.&lt;br /&gt;
| Howard, Butterworth&lt;br /&gt;
|-&lt;br /&gt;
| c3&lt;br /&gt;
| Life in Camelot; Bob, March 2167, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c4&lt;br /&gt;
| Water Planet; Mulder, October 2170, Eta Cassiopeiae&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c5&lt;br /&gt;
| Progress; Howard, December 2188&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c6&lt;br /&gt;
| Contacting Bill; Mulder, April 2171, Poseidon&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c7&lt;br /&gt;
| Back to Work; Riker, July 2171, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c8&lt;br /&gt;
| Farming Satellites; Howard, April 2189, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c9&lt;br /&gt;
| Something is Out There; Bob, September 2169, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c10&lt;br /&gt;
| Genocide; Mario, November 2176, Zeta Tucanae&lt;br /&gt;
| &lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c11&lt;br /&gt;
| Mating Dance; Bob, November 2169, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c12&lt;br /&gt;
| Bob Calling; Bill, May 2171, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c13&lt;br /&gt;
| Investigating the Others; Mario, May 2180, Gliese 54&lt;br /&gt;
| &lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c14&lt;br /&gt;
| Sabotage; Riker, December 2170, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| A Visit From Bill; Mario, November 2180, Gliese 54&lt;br /&gt;
| &lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| c16&lt;br /&gt;
| Hunted; Howard, September 2189, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c17&lt;br /&gt;
| We’ve Lost a Drone; Bob, May 2171, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c18&lt;br /&gt;
| It’s Getting Worse; Riker, Sept 2172, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c19&lt;br /&gt;
| Prey; Bob, June 2172, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c20&lt;br /&gt;
| Parasite; Howard, October 2189, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c21&lt;br /&gt;
| Attacks Continue; Riker, December 2174, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c22&lt;br /&gt;
| Fallout; Bob, December 2173, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c23&lt;br /&gt;
| VEHEMENT; Riker, September 2175, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c24&lt;br /&gt;
| Visiting Marvin; Bob, March 2174, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Rabbits; Howard, November 2189, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c26&lt;br /&gt;
| Selling Poseidon; Riker, December 2175, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c27&lt;br /&gt;
| Luke Returns; Bob, March 2178, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c28&lt;br /&gt;
| Et Tu, Homer; Riker, December 2175, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c29&lt;br /&gt;
| Emergency; Howard, April 2190, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c30&lt;br /&gt;
| Found Something; Bashful, November 2187, Gliese 877&lt;br /&gt;
| &lt;br /&gt;
| Bashful&lt;br /&gt;
|-&lt;br /&gt;
| c31&lt;br /&gt;
| Taking Care of Business; Howard, January 2191, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c32&lt;br /&gt;
| Linus; Bill, May 2178, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c33&lt;br /&gt;
| Trouble in Paradise; Bob, January 2180, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c34&lt;br /&gt;
| Moose; Bill, June 2185, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c35&lt;br /&gt;
| Sales Call; Howard, September 2192, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c36&lt;br /&gt;
| Asteroid Movers; Bill, March 2187, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c37&lt;br /&gt;
| He’s Gone; Riker, August 2176, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c38&lt;br /&gt;
| Following up; Hal, May 2188, Gliese 877&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c39&lt;br /&gt;
| Bob-Moot; Bill, August 2188, Epsilon Eridani, February 2178, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c41&lt;br /&gt;
| Casualties; Bob, July 2182, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c42&lt;br /&gt;
| Business; Howard, March 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c43&lt;br /&gt;
| An Exchange of Words; Riker, March 2178, Sol&lt;br /&gt;
| &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| c44&lt;br /&gt;
| Baseball; Bill, March 2189, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c45&lt;br /&gt;
| Replication; Howard, August 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c46&lt;br /&gt;
| Klown Kar Planet; Rudy, February 2190, Epsilon Indi&lt;br /&gt;
| &lt;br /&gt;
| Rudy&lt;br /&gt;
|-&lt;br /&gt;
| c47&lt;br /&gt;
| New Village; Bob, September, 2182, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c48&lt;br /&gt;
| Operation; Howard, September 2193, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c49&lt;br /&gt;
| Arrival; Mulder, March 2195, Poseidon (Eta Cassiopeiae)&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c50&lt;br /&gt;
| Second Expedition; Loki, November 2195&lt;br /&gt;
| &lt;br /&gt;
| Loki&lt;br /&gt;
|-&lt;br /&gt;
| c51&lt;br /&gt;
| Wedding; Howard, April 2195, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c52&lt;br /&gt;
| Bullwinkle; Bill, December 2195, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c53&lt;br /&gt;
| Testing; Hal, April 2196, GL 877&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c54&lt;br /&gt;
| Stuff is Happening; Hal, October 2197, En Route to GL 54&lt;br /&gt;
| &lt;br /&gt;
| Hal&lt;br /&gt;
|-&lt;br /&gt;
| c55&lt;br /&gt;
| Contact; Bill, October 2204, GL 54&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c56&lt;br /&gt;
| Descendants; Bob, January 2183, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c57&lt;br /&gt;
| Moot; Bill, October 2204, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c58&lt;br /&gt;
| News; Howard, July 2198, Interstellar Space&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c59&lt;br /&gt;
| Another One; Bill, April 2205, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c60&lt;br /&gt;
| Arrival; Claude, May 2205, Gamma Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Claude&lt;br /&gt;
|-&lt;br /&gt;
| c61&lt;br /&gt;
| Starting Over; Oliver, September 2205, Alpha Centauri&lt;br /&gt;
| &lt;br /&gt;
| Oliver&lt;br /&gt;
|-&lt;br /&gt;
| c62&lt;br /&gt;
| Departure; Mulder, November 2201, Departure&lt;br /&gt;
| &lt;br /&gt;
| Mulder&lt;br /&gt;
|-&lt;br /&gt;
| c63&lt;br /&gt;
| The Pav; Jacques, February 2207, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c64&lt;br /&gt;
| Moot; Bill, March 2207, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c65&lt;br /&gt;
| Grandpa; Bob, January 2195, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c66&lt;br /&gt;
| It’s Happening; Bill, January 2208, Epsilon Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c67&lt;br /&gt;
| Bad News; Howard, December 2210, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c68&lt;br /&gt;
| Recording; Jacques, September 2212, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Jacques&lt;br /&gt;
|-&lt;br /&gt;
| c69&lt;br /&gt;
| Wake; Howard, January 2211, Vulcan&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c70&lt;br /&gt;
| Conversation; Howard, May 2211, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c71&lt;br /&gt;
| Charlie; Bob, June 2213, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| c72&lt;br /&gt;
| Battle; Bill, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c73&lt;br /&gt;
| Collection; Phineas, February 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Phineas&lt;br /&gt;
|-&lt;br /&gt;
| c74&lt;br /&gt;
| Observing the Process; Bill, May 2217, Delta Pavonis&lt;br /&gt;
| &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| c75&lt;br /&gt;
| Reunion; Howard, January 2216, HIP 14101&lt;br /&gt;
| &lt;br /&gt;
| Howard&lt;br /&gt;
|-&lt;br /&gt;
| c76&lt;br /&gt;
| Funeral; Bob, November 2220, Delta Eridani&lt;br /&gt;
| &lt;br /&gt;
| Bob&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b3|Book 3: All These Worlds]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[All These Worlds]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b4|Book 4: Heaven's River]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Heaven's River]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b5|Book 5: Not Till We Are Lost]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Not Till We Are Lost]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198165</id>
		<title>Bobiverse</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198165"/>
		<updated>2025-12-30T11:23:11Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bobiverse''' is the name of a series of [[science fiction]] books by [[Dennis E. Taylor]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Dennis E. Taylor]]&lt;br /&gt;
* Publication dates:&lt;br /&gt;
** [[2016-10-20]]: ''[[We Are Legion (book)|We Are Legion]]''&lt;br /&gt;
** [[2017-03-18]]: ''[[For We Are Many]]''&lt;br /&gt;
** [[2017-08-08]]: ''[[All These Worlds]]''&lt;br /&gt;
** [[2021-01-26]]: ''[[Heaven's River]]''&lt;br /&gt;
** [[2024-09-05]]: ''[[Not Till We Are Lost]]''&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Andrea&lt;br /&gt;
: (b1c1) Twin sister of Alaina and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Alaina&lt;br /&gt;
: (b1c1) Twin sister of Andrea and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Archimedes &lt;br /&gt;
: (b1c30) A Deltan that Bob judges to be particularly intelligent and adept at tool creation. (b1c44) Bob makes Archimedes his Messiah to help Deltans survive their existential threat of Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arnold&lt;br /&gt;
: (b1c35) A particularly strong Deltan named by Bob after [[Arnold Schwarzenegger]]. (b1c37) Wields an axe crafted by Archimedes to single-handedly dispatch many attacking gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arthur&lt;br /&gt;
: (b1c31) A particularly morose Bob that irritates Riker. (b1c47) Killed near [[Saturn]] by a nuke trap.&lt;br /&gt;
&lt;br /&gt;
; Bender&lt;br /&gt;
: (b1c30) Names Delta Eridani 4 “Eden” as the birthplace of the Deltans. (b1c39) Departs with Luke from Delta Eridani for [[Gamma Leporis A]]. (b4) A Bob clone who was shot down while exploring a megastructure housing beaver-like creatures named Quins. (b4c34; a.k.a. '''Motorola''') Bob finds Bender has been captured as just a matrix and has worked many years in captivity.&lt;br /&gt;
&lt;br /&gt;
; Bill&lt;br /&gt;
: (b1) One of the first Bobs. Decides to settle and manage [[Epsilon Eridani]] and research subspace theory and to refined ship designs.&lt;br /&gt;
&lt;br /&gt;
; Bob&lt;br /&gt;
: (a.k.a. '''Robert Johansson''') The main character. (b1c1) A software An emulated human mind. (b4) Is on a quest to rescue Bender.&lt;br /&gt;
&lt;br /&gt;
; Butterworth, Colonel&lt;br /&gt;
: (b1) Military leader of the remains of the United States of Eurasia. First Earth survivor to contact Riker and Homer.&lt;br /&gt;
&lt;br /&gt;
; Calvin&lt;br /&gt;
: (b1) A Bob in the same cohort as Hobbes. (b1c28) Explores Alpha Centauri with Hobbes, finding wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Cranston, Minister&lt;br /&gt;
: (b1c33) FAITH leader based in San Diego. (b1c36) Attempts to mind control Riker. (b1c38) Introduces Riker to Julia Hendricks, a distant descendant of Robert Johannsonʼs sister, Andrea.&lt;br /&gt;
&lt;br /&gt;
; Deltans&lt;br /&gt;
: (b1) Intelligent inhabitants of Delta Eridani 4 found by Bob. (b1c27) Bob detects the fires of tool-using bat-pig creatures on Delta Eridani 4. (b1c30) Bob names the bat-pig natives of Delta Eridani 4 “Deltans”.&lt;br /&gt;
&lt;br /&gt;
; Freida&lt;br /&gt;
: (b4) Quin Resistance leader. (b4c32) Gives Bob into custody of Natasha for money.&lt;br /&gt;
&lt;br /&gt;
; Goku&lt;br /&gt;
: (b1c28; a.k.a. '''Bob-10''') Explores Alpha Centauri with Calvin. They find wreckage of a USE probe at AC-B. They fight and almost wipe out Medeiros at AC-A.&lt;br /&gt;
&lt;br /&gt;
; Gorilloids&lt;br /&gt;
: (b1c35) Inhabitants of Epsilon Delta that prey upon the Deltans.&lt;br /&gt;
&lt;br /&gt;
; Gudmund Valter&lt;br /&gt;
: (b1c33) Ex-military leader of Spitsburgen Island.&lt;br /&gt;
&lt;br /&gt;
; Homer&lt;br /&gt;
: (b1) A Bob created by Riker to assist him with the reconnaissance of Sol system after Bob settles Epsilon Eridani. Adopts the cartoon Homer voice and appearance to try and tease Riker into relaxing but fails.&lt;br /&gt;
&lt;br /&gt;
; Julia Hendricks&lt;br /&gt;
: (b1c38) Descendant of one of Bob's sisters. Mother of Justin Hendriks.&lt;br /&gt;
&lt;br /&gt;
; Justin Hendriks&lt;br /&gt;
: (b1c54) Son of Julia.&lt;br /&gt;
&lt;br /&gt;
; Linus&lt;br /&gt;
: (b1) A Bob created in Epsilon Eridani who chooses to explore. (b1c40) Discovers a failed Australian replicant probe in Epsilon Indi named Henry Roberts.&lt;br /&gt;
&lt;br /&gt;
; Luke&lt;br /&gt;
: (b1c39) Departs from Delta Eridani for [[Kappa Ceti]].&lt;br /&gt;
&lt;br /&gt;
; Milo&lt;br /&gt;
: (b1) A bob that discovers and names Vulcan and Romulus in [[Omicron² Eridani]]. (B1c46) is killed by missiles while exploring [[82 Eridani]].&lt;br /&gt;
&lt;br /&gt;
; Motorola&lt;br /&gt;
: (b4c34) An alias for Bender.&lt;br /&gt;
&lt;br /&gt;
; Natasha&lt;br /&gt;
: (b4) Quin aristocrat supporting the Resistance. (b4c32) Pays Freida to capture Bob.&lt;br /&gt;
&lt;br /&gt;
; Riker&lt;br /&gt;
: (b1) The second replicate Bob ever created. Returns to Sol system after first Bob settles Epsilon Eridani. Leads the evacuation effort of Earth, assisted by Homer. (b158) Successfully leads effort to build Exodus-1 and Exodus-2 to evacuate USE survivors from Earth.&lt;br /&gt;
&lt;br /&gt;
; Spits&lt;br /&gt;
: (b1c33) Inhabitants of Spitsburgen Island, led by Gudmund Valter. Are in possession of the Svalbard Global Seed Vault and the Svalbard Global Genetic Diversity Vault which they use as leverage against Riker to get a more favorable position in the evacuation queue.&lt;br /&gt;
&lt;br /&gt;
; VEHEMENT&lt;br /&gt;
; (b1c38) Earth survivors rebelling against Riker's rule.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; 82 Eridani&lt;br /&gt;
: (b1c46) A star system with two habitable worlds discovered by Milo. Milo is killed by missiles soon after arriving into orbit around one of the worlds. (b1c60) Khan arrives with a retaliation fleet.&lt;br /&gt;
&lt;br /&gt;
; [[Alpha Centauri]]&lt;br /&gt;
: The nearest star system to Earth. (b1c22) Destination for Calvin and Goku after departing Epsilon Eridani in September 2150. (b1c28) Visited by Calvin and Goku in November 2163.&lt;br /&gt;
&lt;br /&gt;
; Augsburg, Germany&lt;br /&gt;
: A gathering place for some Earth survivors. Gathering place for USE survivors.&lt;br /&gt;
&lt;br /&gt;
; Beta Hydri&lt;br /&gt;
: (b1c57) A star system explored by Mario. Scoured clean of easily-accessible metal. Habitable planets show signs of violent and rapid sterilization via [[gamma ray burst]]s.&lt;br /&gt;
&lt;br /&gt;
; Delta Eridani&lt;br /&gt;
: (b1) A star system explored by Bob. (b1c?) Home of the Deltons that Bob and Marvin help survive.&lt;br /&gt;
&lt;br /&gt;
; Earth&lt;br /&gt;
: (b1) The original planet of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Eden&lt;br /&gt;
: (b1c30; a.k.a. '''Delta Eridani 4''') The planet of the Deltans. Named by Bender.&lt;br /&gt;
&lt;br /&gt;
; Epsilon Indi&lt;br /&gt;
: (b1c40) A system where Australian replicant Henry Roberts arrived and went insane.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani|Omicron&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Eridani]]&lt;br /&gt;
: (b1) Star system explored by Milo. Contains the twin habitable planets discovered by Milo: Vulcan and Romulus. (b1c59) Is the destination for the USE colonists from Earth aboard ''Exodus-1'' and ''Exodus-2'' built by Riker, Homer, Arnold, and Ralph.&lt;br /&gt;
&lt;br /&gt;
; Okinawa&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Romulus&lt;br /&gt;
: (b1c19) The smaller of two habitable twin planets (0.7 M⊕) discovered and named by Milo in July 2152. Its larger twin is Vulcan. Romulus has less [[carbon dioxide]], a thinner atmosphere, a lower surface temperature, ice caps, and a sparse ecosystem with no fauna larger than a wolf. Milo believes the planet may have recently suffered a major extinction event.&lt;br /&gt;
&lt;br /&gt;
; San Diego&lt;br /&gt;
: (b1c33) A gathering place for some Earth survivors, mostly FAITH.&lt;br /&gt;
&lt;br /&gt;
; Sol&lt;br /&gt;
: (b1) The original star system of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; Spitsburgen Island&lt;br /&gt;
: (b1) A gathering place for some Earth survivors.&lt;br /&gt;
&lt;br /&gt;
; Vulcan&lt;br /&gt;
: (b1c19; a.k.a. '''OE-1A''') The larger of two habitable twin planets (0.9 M⊕) discovered and named by Milo in July 2152. Its smaller twin is Romulus. Vulcan has more [[carbon dioxide]], a thicker atmosphere, and warmer surface temperature. Has a robust ecosystem with large fauna. (b1c61) Colonel Butterworth chooses this planet for USE evacuees aboard the Exodus-1 and Exodus-2 to settle.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; Exodus-1&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; Exodus-2&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; SUDDAR&lt;br /&gt;
: (b1) Subspace radar (?).&lt;br /&gt;
&lt;br /&gt;
; SURGE drive&lt;br /&gt;
: A device that warps space to enable easy relativistic mass transport.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====[[/b1|Book 1: We Are Legion]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[We Are Legion (book)|We Are Legion]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b1/p1/c1|p1c1]]&lt;br /&gt;
| Bob Version 1.0&lt;br /&gt;
| Bob attends two seminars about space exploration and [[Von Neumann Replicator]]s at a science fiction convention. Bob calls his mother and talks to his sister. Bob is struck by an automobile and killed. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c2&lt;br /&gt;
| Bob Version 2.0&lt;br /&gt;
| Bob wakes up 117 years later as a machine intelligence owned by FAITH, their flesh and blood brain destructively scanned in order to create a candidate artificial intelligence slave.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c3&lt;br /&gt;
| Bob – June 25, 2133&lt;br /&gt;
| Bob controls some spiders to stack some blocks.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c4&lt;br /&gt;
| Bob – July 15, 2133&lt;br /&gt;
| Bob learns the internet is no longer a thing in FAITH. Information is now hidden or inaccessible by default. Bob resolves to find freedom someway somehow.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c5&lt;br /&gt;
| Bob – July 18, 2133&lt;br /&gt;
| A surprise visit from Minister Travis of the ministry of Truth. Bob is given access to a space, station management, simulation and information library.&lt;br /&gt;
| Bob, Landers, Travis&lt;br /&gt;
|-&lt;br /&gt;
| p1c6&lt;br /&gt;
| Bob – July 19, 2133&lt;br /&gt;
| Bob learns to manage AMI controlled roamers in order to affect repairs on equipment such as 3D printers. Bob learns from Landers that his purpose is to be a manager of a [[von Neumann probe]] expedition into space. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c7&lt;br /&gt;
| Bob – July 25, 2133&lt;br /&gt;
| Dr. Landers explains to Bob the scope and progress of other rival political blocks of United States of Eurasia, the Brazilian group, the African Republic, and the Australian group. As far as their own private von Neumann exploration projects are concerned. China is likely to be fastest, but relying entirely upon AMIs. Brazil is likely to rely upon sabotage of other projects and the USE is most likely to colonize a star system once found. Additionally, Landers talks about the subspace drive technology that allows faster than light mass transport across interstellary distances.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c8&lt;br /&gt;
| Bob – August 4, 2133&lt;br /&gt;
| Bob aids in the defense of the research complex in which he is housed. Upon subdoing the black-clothed invaders, Landers asks Bob to retreat his roamers back into the training area. Landers tells Bob there is a tactical nuke installed beneath the training facility as a safeguard against Bob gaining freedom. Bob makes a crack about the ''[[Andromeda Strain]]'', a [[Michael Crichton]] novel. With a single roamer drone that was able to hide in the air ducts of the facility during the battle, Bob is able to build a 3D map of the facility surrounds and concludes that no such tactical nuke is present. Bob discovers the room housing the computers for himself and the four other candidates; Kenneth is his remaining competitor.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c9&lt;br /&gt;
| Bob – August 6, 2133&lt;br /&gt;
| Bob witnesses a confrontation by FAITH Minister Jacoby against Landers using wall vibrations via a roamer bot.&lt;br /&gt;
| Bob, Landers, Jacoby&lt;br /&gt;
|-&lt;br /&gt;
| p1c10&lt;br /&gt;
| Bob – August 10, 2133&lt;br /&gt;
| Bob wakes up with a week-long Gap in his memory. Landers tells Bob that a bomb destroyed the matrices storing his mind and that Bob had been destroyed and then recreated from backups. Bob thinks about his own existence and what defines life. {{bkc|Life is defined by others asserting that you are alive across time and space. Life is the degree to which others believe that you are alive and have a relationship with you asserting as much. The same can be said for personhood as well. Integration across time and articulation across space is what defines life.}} Landers informs Bob that the only other replicant competitor candidate has been decommissioned. Bob concludes that Kenneth the other only living replicants cube that he saw in the room has not been deactivated since now. Bob is running on Kennethʼs old hardware. Bob and frantically distracts Landers after mentioning Kennethʼs name. Landers informs Bob that launch is in a month and can be accelerated if need be. Landers tells Bob that they are now going to be awake continuously, save for short sleep periods required for backups so that Bob can help assist with the project.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c11&lt;br /&gt;
| Bob – August 15, 2133&lt;br /&gt;
| Bob chats with Dr. Doucette, a beautiful substitute for Landers.  Bob learns of software enforcement of his mission.&lt;br /&gt;
| Bob, Doucette&lt;br /&gt;
|-&lt;br /&gt;
| p1c12&lt;br /&gt;
| Bob – August 17, 2133&lt;br /&gt;
| Landers awakens Bob after another attack that has fatally wounded more staff. Landers gives Bob a file with not only new training objectives but also access keys to bypass and disable software restrictions that would enslave Bob. Bob awakens on launch day in their ship, commanding the entire vessel. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c13&lt;br /&gt;
| Bob – August 17, 2133 – En Route&lt;br /&gt;
| Bob prepares to launch his spaceship, frame jacking his perception of time in order to read up on his mission objectives and training information. Landers begins a radio transmission to Bob, warning him of a missile strike. Upon hearing the word “missile”, before Landers can finish their sentence, Bob searches his sensors and detects two oncoming missiles. Bob immediately launches from his dock. Bob launches two mining drones to act as makeshift chaffe. Bob succeeds in destroying one missile; the other missile strikes the station he was docked at. A naval engagement among several space-faring factions surround the station as Bob departs. &amp;lt;br/&amp;gt; Bob defuses his software self-destruct traps. Bon finally learns of a Brazilian probe, likely hostile, headed his way also to Epsilon Eridani. Bob reviews plans for the remaining 145-ish days left until encounter.  Bob learns Landers was killed in the Earth war. Bon finishes Spike (his VR cat), Jeeves (a butler), and Guppy (GUPPI). Bob disables his endocrine system restrictions and breaks down emotionally at losing his family. Guppy informs Bob of many nuclear detonations on Earth. Bob concludes he will not receive any help.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p2c14&lt;br /&gt;
| Bob – August 2144 – Epsilon Eridani&lt;br /&gt;
| Bob enters the [[Epsilon Eridani]] system. Bob reviews plans for encounter with Brazilian probe. Bob concludes that ideal plan is to appear ignorant, receive first shot, play possum, then counter-attack. Bob decides the best course of action is to destroy Brazilian probe outright rather than to engage in protracted long-term battle. Bob begins deploying factory resources to execute plan. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c15&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob encounters the Brazilian probe and fights. Bob deploys his scheme and ultimately wins the battle, thanks to the Brazilian ship favoring torpedo count at the expense of upgrading ship capabilities to adapt to changing battle conditions. In other words, Bob won due to the Brazilian ship having only four missiles.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c16&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob surveys planets of Epsilon Eridani. Bob finally gives in to Guppyʼs insistence on replicating. Bob orders the creation of more Bobs.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c17&lt;br /&gt;
| Bob – July 2145 – Epsilon Eridani&lt;br /&gt;
| Bob initializes more Bobs. A Bob wakes up to find they are a copy. Original Bob holds a meeting among Bobs: Bob-2 is Riker. Riker wishes to visit Earth again. Milo wants to avoid Earth and any hostile probe. Riker and Milo butt heads. Mario is quiet. Bill is most amenable to Bob but prefers research rather than exploration.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c18&lt;br /&gt;
| Bill – September 2145 – Epsilon Eridani&lt;br /&gt;
| Bill watches Bob, Mario, and Milo leave Epsilon Eridani. Riker plans to build a clone to return to visit Earth. Bob is traveling to Delta Eridani. Anti-social Mario is headed to Beta-Hydri.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c19&lt;br /&gt;
| Milo – July 2152 – Omicron² Eridani&lt;br /&gt;
| Milo discovers life at Omicron² Eridani on a binary pair of planets. Milo names them Vulcan and Romulus.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c20&lt;br /&gt;
| Bill – December 2145 – Epsilon Eridani&lt;br /&gt;
| Bill and his clone, Garfield, bid farewell to Riker and Riker's clone, Homer. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c21&lt;br /&gt;
| Riker – January 2157 – Sol&lt;br /&gt;
| Riker and Homer perform reconnaissance and surveillance on the Sol system. Riker and Homer witness a Brazilian ship destroy a decoy ship. Homer discovers that the Brazilian ships are dropping asteroids upon China.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c22&lt;br /&gt;
| Bill – September 2150 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield bid farewell to Goku, Linus, and Calvin. Calvin and Goku were inseparable but also constantly fighting. Bill and Garfield equipped Calvin and Goku with a ship with cloaking ability, fighting ability, and strong engines to coast undetected. Bill and Garfield note that Calvin and Goku would likely find hostile encounters at their destination of [[Alpha Centauri]]. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c23&lt;br /&gt;
| Milo – February 2153 – Omicron² Eridani&lt;br /&gt;
| Milo is in Omicron² Eridani. Milo decides not to duplicate itself and instead decides to move on towards [[82 Eridani]]. Milo sends a report back to Bill and proceeds to travel to a new star system.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c24&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker and Homer combat the six Brazillian ships. Riker and Homer destroy four Brazilians behind the Sun. Riker and Homer go silent until they reach Earth and use it to hide their presence from the remaining two Brazilians. Riker and Homer confront the remaining two Brazilians. Homer is struck silent while Riker maneuvers to destroy the last Brazilian ship.&lt;br /&gt;
: Riker deflects the several [[Chicxulub crater|Chicxulub]]-scale asteroids the Brazilian space force had intended to use in retaliation against all Earth life for the destruction of [[Brasil]]. Riker found the Brazilian ships had been left without factories or shuttles to rebuild their forces or even occupy Earth.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c25&lt;br /&gt;
| Bill – September 2151 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield test out [[faster-than-light]] communications. Bill and Garfield plan to deploy IPv8 internet. Bill and Garfield determine that a communication node is required at least every 25 light years. Bill and Garfield decide to transmit plans for the the FTL communications to the other Bobs.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c26&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker discusses logistics for the recovery of human life on Earth. USE Colonel Butterworth tells Riker that the human population has been reduced to several tens of millions of people. Butterworth tells Riker that the global war that occurred was hard-fought and that the last resilient space force remnants were the small survivors of a much larger conflict, but that their ability to drop rocks from space allowed them to massacre billions of lives at the end. Colonel Butterworth asks Riker for help in migrating the survivors to another habitable world since Earth's habitability will not recover for at least another 5 to 10 000 years. Riker tells Butterworth that the habitability of candidate destination planets has not yet been transmitted to him from Bill that in a few years information may be available. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c27&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob arrives at Delta Eridani. Bob discovers an oxygen atmosphere around one planet. Bob discovers fire-using individuals, likely intelligent species on one of the planets. Bob proposes first contact via a roamer but Guppy shoots down the idea since roamers are not ideal for terrestrial exploration. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c28&lt;br /&gt;
| Calvin – November 2163 – Alpha Centauri&lt;br /&gt;
| Calvin finds the wreckage of the USE probe at Alpha Centauri B. Calvin and Goku fight Medeiros at Alpha Centauri A, destroying all but one of his probes which escapes.&lt;br /&gt;
| Calvin, Goku&lt;br /&gt;
|-&lt;br /&gt;
| p2c29&lt;br /&gt;
| Riker – September 2157 – Sol&lt;br /&gt;
| Riker and Butterworth argue about priorities for rescuing the survivors on Earth. Riker believes that prioritizing logistics for creating the colony ship should not impede a search for survivors. Butterworth argues that all resources should be dedicated towards helping USE survivors at the expense of all other Earth inhabitants. Riker and Homer discover undestroyed stations in the Oort Cloud and outer solar system which may be useful for building colony ships. Riker muses about responsibility for ensuring the survival of humanity in the solar system.&lt;br /&gt;
| Riker, Butterworth, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c30&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob surveils a tribe of Deltans, “Deltan” is the name that Bob has come up for the fire-using inhabitants he found on Delta Eridani 4. Bob watches in particular a single Delton that he has labeled Archimedes due to Archimedes having constructed knife blade with a handle tied to it. A technology unique apparently to deltas, particularly one Delta Archimedes. Bob watches Archimedes with the help of other box that he has commissioned for the help of surveilling the planet including Luke Bender and others. &lt;br /&gt;
| Bob, Archimedes&lt;br /&gt;
|-&lt;br /&gt;
| p2c31&lt;br /&gt;
| Riker – January 2158 – Sol&lt;br /&gt;
| Riker sees his plan encounter delays for constructing the evacuation ships for survivors of Earth. Arthur, a Bob clone of Riker, has found difficulty contacting surviving enclaves due to ongoing hostility from the war. Homer reports to Arthur that enough supplies exist to construct three colony ships for evacuation.&lt;br /&gt;
| Riker, Arthur&lt;br /&gt;
|-&lt;br /&gt;
| p2c32&lt;br /&gt;
| Bill – October 2158 – Epsilon Eridani&lt;br /&gt;
| In Epsilon Eridani, Bill and Garfield receive word from Milo about the twin habitable worlds Vulcan and Romulus. Bill estimates that it will be about 9 years until word of the habitable worlds can be passed to Earth. Bill feels like a shepherd for humanity. &lt;br /&gt;
| Bill, Garfield&lt;br /&gt;
|-&lt;br /&gt;
| p2c33&lt;br /&gt;
| Riker – March 2158 – Sol&lt;br /&gt;
| Riker performs diplomacy with representatives of the survivors of Earth. Riker mishandles the initial meeting with little empathy for the survivors. Homer talks Riker into by recognizing them as passengers who know their fate is being decided by others and wish to have some level of agency in their fate. Riker holds talks with individual leaders. Riker talks with the Spits, survivors who are in physical possession of the Svalbard Global Seed Vault which they threaten to destroy if their group of roughly 4,000 were not prioritized. &lt;br /&gt;
| Riker, Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c34&lt;br /&gt;
| Homer – September 2158 – Sol&lt;br /&gt;
| Homer talks to himself about Rikerʼs arrogant tyrannical attitude towards others. Homer is amazed that Riker has still not yet recognized that, he Homer, is attempting to ridicule Riker with his cartoon Homer act. Homer anticipates that Riker will perform poorly regarding the evacuation efforts. Homer sees a way to diplomatically smooth evacuation efforts by bumping up the evacuation of certain groups while not affecting the schedule. Homer decides to discuss this possibility with Colonel Butterworth behind Rikerʼs back.&lt;br /&gt;
| Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c35&lt;br /&gt;
| Bob – July 2165 – Delta Eridani&lt;br /&gt;
| Bob witnesses Deltans killed by Gorilloids. Bob debates with other Bobs the ethics of assisting the Deltans. Bob surveils Deltans and encourages their technological development by providing one Deltan he has named Archimedes with flint nodules. Archimedes produces weaponry for their fellow Deltans. The Deltans successfully repel the next gorilloid attack.&lt;br /&gt;
| Bob, Marvin, Bender, Luke&lt;br /&gt;
|-&lt;br /&gt;
| p2c36&lt;br /&gt;
| Riker – September 2158 – Sol&lt;br /&gt;
| Riker continues to hold meetings with survivors of Earth. Various factions attempts to lobby with Riker for preferential treatment but Riker shuts them all down hard. Colonel Butterworth proposes in private to Riker the possibility of allowing the group that holds control of the seed vault a position in one of the colony ships at the expense of delaying other colonies shipped in order to secure the the seed vault contents. FAITH attempts to hack Rikerʼs systems with a secret code that, before first Bob disabled their software traps, would have turned Riker into their slave. Riker shuts down talks with FAITH immediately.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c37&lt;br /&gt;
| Bob – August 2165 – Delta Eridani&lt;br /&gt;
| Bob notices a large gorilloid attack on the Deltans. Bob, Marvin, and company decide to deploy a drone to attack the gorilloids in a kinetic strike. Arnold learns to instantly kill gorilloids with an axe Archimedes made. A gorilloid is atomized. Archimedes begins digging up the metal attack drone crash site. Bob decides to guide the Deltans back to their old flint gathering site. Marvin decides to stay long term to guide the Deltans with Bob. Luke and Bender decide to move on to find a star system with their own project.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c38&lt;br /&gt;
| Riker – November 2158 – Sol&lt;br /&gt;
| FAITH holds hostage Bob's descendants. Riker recognizes the young woman that faith presents to him during a call as resembling Andrea, original Bob's sister. FAITH allows Riker and the young woman to freely talk while under surveillance.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c39&lt;br /&gt;
| Bob – October 2165 – Delta Eridani&lt;br /&gt;
| Bob bids farewell to Luke and Bender. Luke decides to travel to [[Kappa Ceti]] and Bender to [[Gamma Leporis A]]. Bob talks with Marvin about the ethics of copying themselves in order to favor psychologies that allow cooperation. Bob vows to help the Deltans develop. Archimedes experiments with the metal wreckage. Arnold continues to learn how to use the acts that Archimedes gave him.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c40&lt;br /&gt;
| Linus – April 2165 – Epsilon Indi&lt;br /&gt;
| Linus encounters the Australian probe that has gone insane. Linus extracts the replicant Henry Roberts and builds a realistic VR for them to live. Henry believes their time as a probe was a nightmare.&lt;br /&gt;
| Linus&lt;br /&gt;
|-&lt;br /&gt;
| p2c41&lt;br /&gt;
| Riker – May 2162 – Sol&lt;br /&gt;
| Riker breaks the news of the availability of Vulcan and Romulus to the Earth survivors. Riker threatens to withdraw all support if survivors continue to demand individual planets for themselves.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c42&lt;br /&gt;
| Bill – April 2162 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield butt heads about TODO list priorities. Bill decides to ease off on first Bob's declaration that most senior Bob has final say.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c43&lt;br /&gt;
| Riker – September 2164 – Sol&lt;br /&gt;
| Riker inspects the construction of colony ships. Riker thinks about metal scarcity. Homer has been assigned to bootstrap a metal gathering operation with printers. Riker, Homer, and Charles hold an all-Bobs meeting in Earth orbit. The Bobs brainstorm ideas for saving the Earthbound survivors: orbital mirrors to combat global cooling, moving people towards the equator, moon colonies, space stations.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c44&lt;br /&gt;
| Bob – January 2166 – Delta Eridani&lt;br /&gt;
| Bob makes Archimedes his Messiah. Bob orders the Deltans to return to a previous encampment site rich in flint.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c45&lt;br /&gt;
| Bill – January 2165 – Epsilon Eridani&lt;br /&gt;
| Bill receives word back from Bart who built the FTL communication array. Bart tells Bill that the Alpha Centauri systems that Calvin and Goku settled are building Bobs and gathering resources, but that Calvin and Goku have since moved on to explore more star systems. Bart informs Bill that the Brazilian ships that had been defeated by Calvin and Goku were all destroyed except one which got away. Bill is reassured that another Bob factory is in operation since Bill has not created new box in some time. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c46&lt;br /&gt;
| Milo – August 2165 – 82 Eridani&lt;br /&gt;
| Milo explores  82 Eridani, a new star system, and finds two habitable planets. As Milo approaches and enters orbit around one of the habitable planets, he is fired upon by several missiles. Milo transmits a partial differential backup of his mind back to Bill at [[Epsilon Eridani]]. Milo deploys countermeasures and fights with his rail gun but is ultimately overwhelmed.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c47&lt;br /&gt;
| Riker – January 2166 – Sol&lt;br /&gt;
| Riker talks with Homer about the evacuation effort. Arthur is killed by a nuclear bomb trap near Saturn.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c48&lt;br /&gt;
| Bob – May 2166 – Delta Eridani&lt;br /&gt;
| Bob governs the migration of the Deltans across a mountain pass. Several stray Delton communities join the main group.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c49&lt;br /&gt;
| Riker – May 2166 – Sol&lt;br /&gt;
| Homer proposes to Riker the idea of agricultural space stations that prioritize creating food in lieu of hosting living humans which have higher requirements to maintain. Riker proposes the agricultural space station idea to the survivors of Earth who generally reject the idea initially. Riker passes the idea through the representatives meeting by noting that the agricultural products of [[kudzu]] will prevent mass death due to starvation among most of the survivors on Earth. Rikerʼs GUPPI notes that a hacking attempt originating from New Zealand was deflected by Bob oneʼs firewall which could have compromised Rikerʼs mind. Riker meets with FAITH representative Cranston; Cranston proposes sharing FAITH food supplies with other nations in exchange for preferential treatment in in colonyship scheduling. Riker discusses the hacking attempt with Cranston; Cranston tells Riker that FAITH replicant technology was stolen via espionage from Australian researchers who pioneered the technology. Cranston believes the hack was performed by people of New Zealand where many Australian survivors fled to. Riker discusses the the idea of agricultural space stations Homer and Charles; The Bobs of Sol agree that Cranston's proposal is acceptable.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c50&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| A very large group of gorilloids attacks the Deltans that just made the trip across the mountains. Overall, the attack was repelled at the cost of many Deltan lives. Bob decides to devote resources towards printing printers and armaments of an explosive nature in order to combat future attacks. Bob, through Archimedes, recommends the settlement of the local area instead of completing the journey to the Flint rich area in order to capitalize upon the fear inflicted upon the gorilloites during the counter-attack. The Deltans accept Bob's plan.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c51&lt;br /&gt;
| Bill – January 2174 – Epsilon Eridani&lt;br /&gt;
| Bill receives Milo's final transmissions. Bill orders the creation of a retaliatory fleet.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c52&lt;br /&gt;
| Riker – January 2168 – Sol&lt;br /&gt;
| Homerʼs ranch donut project bears fruit: kudzu crops are successfully supplanting the diet of Earth survivors. Riker is congratulatory to Homer.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c53&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| The Deltans suffer an attack by a big cat. Bob begins teaching the Deltons medicine. The Deltons arrive at the flint site.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c54&lt;br /&gt;
| Riker – October 2170 – Sol&lt;br /&gt;
| Riker, Homer, Charles, and Ralph oversee the commissioning of Exodus-1 and Exodus-2.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c55&lt;br /&gt;
| Bob – July 2166 – Delta Eridani&lt;br /&gt;
| Bob discovers that the Deltans migrated away from the flint site due to proliferation in the local region of plants that the gorilloids ate. Deltans filled a protein hole in the gorilloid diet. Marvin shows Bob that the Deltans have begun worshiping “Bawb” by building shrines around wreckage of the buster machines used to automatically defend the Deltan camp perimeter from gorilloids.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c56&lt;br /&gt;
| Bill - March 2167 - Epsilon Eridani&lt;br /&gt;
| Bill iterates on his android project. Latency and sensory processing problems persist.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c57&lt;br /&gt;
| Mario – August 2169 – Beta Hydri&lt;br /&gt;
| Mario arrives at Beta Hydri. Mario discovers the system almost completely devoid of easily-accessible metallic ore. Mario discovers signs of an artificial [[gamma ray burst]] used to instantly sterilize local planets of life. One of Marioʼs roamers opens a box containing small machines that begin disassembling the roamer. Mario discovers the small machines are powered by his own SUDDAR scans. Mario captures one of the small ant-like machines in plastic. Mario decides to fly back to inform the other Bobs of his discovery since he lacks metals to construct an FTL communication station.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| p2c58&lt;br /&gt;
| Riker – April 2171 – Sol&lt;br /&gt;
| Riker sees the launch of the first two colony ships depart Sol system with USE colonists, two Riker clones, and Howard, a recent Bob clone.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c59&lt;br /&gt;
| Bill – May 2172 – Epsilon Eridani&lt;br /&gt;
| Bill holds the first Bob-moot in Epsilon Eridani. The colonists are en route to [[40 Eridani|Omicron² Eridani]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c60&lt;br /&gt;
| Khan – April 2185 – 82 Eridani&lt;br /&gt;
| Khan leads 7 other Bobs to attack Medeiros in 82 Eridani. Khan is the only survivor. Khan reports back to Bill. Several Bobsʼ differential backups failed to be completely received. Khan vows to return to fight Medeiros in 82 Eridani agian.&lt;br /&gt;
| Khan&lt;br /&gt;
|-&lt;br /&gt;
| p2c61&lt;br /&gt;
| Howard – September 2188 – Omicron² Eridani&lt;br /&gt;
| Howard arrives at Omicron² Eridani with the Earth colonists aboard Exodus-1 and Exodus-2. Colonel Butterworth is awoken and settlement of Vulkan begins in earnest.&lt;br /&gt;
| Howard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[/b2|Book 2: For We Are Many]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[For We Are Many]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b2/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b2/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1 Deltans take down a pigoid. Bob pressures Cruella, a Deltan medicine woman, to use hot water to dress a wound. Marvin tells Bob of a mystery of Deltan migration patterns.&lt;br /&gt;
&lt;br /&gt;
2 Howard learns of an attack by local birds against excavation equipment. Howard meets with Colonel Butterworth regarding New colony issues. Colonel butcher worth expresses desire for future colonists to pick a different planet besides Vulcan.&lt;br /&gt;
&lt;br /&gt;
====[[/b3|Book 3: All These Worlds]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[All These Worlds]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b4|Book 4: Heaven's River]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Heaven's River]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b5|Book 5: Not Till We Are Lost]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Not Till We Are Lost]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198164</id>
		<title>Bobiverse</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Bobiverse&amp;diff=198164"/>
		<updated>2025-12-29T23:20:22Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: add book 1 notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Bobiverse''' is the name of a series of [[science fiction]] books by [[Dennis E. Taylor]].     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Author: [[Dennis E. Taylor]]&lt;br /&gt;
* Publication dates:&lt;br /&gt;
** [[2016-10-20]]: ''[[We Are Legion (book)|We Are Legion]]''&lt;br /&gt;
** [[2017-03-18]]: ''[[For We Are Many]]''&lt;br /&gt;
** [[2017-08-08]]: ''[[All These Worlds]]''&lt;br /&gt;
** [[2021-01-26]]: ''[[Heaven's River]]''&lt;br /&gt;
** [[2024-09-05]]: ''[[Not Till We Are Lost]]''&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Andrea&lt;br /&gt;
: (b1c1) Twin sister of Alaina and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Alaina&lt;br /&gt;
: (b1c1) Twin sister of Andrea and sibling of Bob.&lt;br /&gt;
&lt;br /&gt;
; Archimedes &lt;br /&gt;
: (B1c?) A Deltan that Bob judges to be particularly intelligent and adept at tool creation. (B1C?) Bob makes Archimedes his Messiah to help Deltans survive their existential threat of Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arnold&lt;br /&gt;
: (B1c?) A particularly strong Deltan adept at wielding an axe against Gorilloids.&lt;br /&gt;
&lt;br /&gt;
; Arthur&lt;br /&gt;
: (b1) A particularly morose Bob that irritates Riker. (b1c47) Killed near [[Saturn]] by a nuke trap.&lt;br /&gt;
&lt;br /&gt;
; Bob&lt;br /&gt;
: The main character. (b1c1) A software An emulated human mind. (b4) Is on a quest to rescue Bender.&lt;br /&gt;
&lt;br /&gt;
; Butterworth, Colonel&lt;br /&gt;
: (b1) Military leader of the remains of the United States of Eurasia. First Earth survivor to contact Riker and Homer.&lt;br /&gt;
&lt;br /&gt;
; Bender&lt;br /&gt;
: (b4) A Bob clone who was shot down while exploring a megastructure housing beaver-like creatures named Quins. (b4c34; a.k.a. '''Motorola''') Bob finds Bender has been captured as just a matrix and has worked many years in captivity.&lt;br /&gt;
&lt;br /&gt;
; Bill&lt;br /&gt;
: (b1) One of the first Bobs. Decides to settle and manage [[Epsilon Eridani]] and research subspace theory and to refined ship designs.&lt;br /&gt;
&lt;br /&gt;
; Deltans&lt;br /&gt;
: (b1) Intelligent inhabitants of Delta Eridani 4 found by Bob. (b1c27) Bob detects the fires of tool-using bat-pig creatures on Delta Eridani 4. (b1c30) Bob names the bat-pig natives of Delta Eridani 4 “Deltans”.&lt;br /&gt;
&lt;br /&gt;
; Freida&lt;br /&gt;
: (b4) Quin Resistance leader. (b4c32) Gives Bob into custody of Natasha for money.&lt;br /&gt;
&lt;br /&gt;
; Gorilloids&lt;br /&gt;
: (B1) Inhabitants of Epsilon Delta that prey upon the Deltans.&lt;br /&gt;
&lt;br /&gt;
; Homer&lt;br /&gt;
: (B1) A Bob created by Riker to assist him with the reconnaissance of Sol system after Bob settles Epsilon Eridani. Adopts the cartoon Homer voice and appearance to try and tease Riker into relaxing but fails.&lt;br /&gt;
&lt;br /&gt;
; Julia&lt;br /&gt;
: (b1c?) Descendant of one of Bob's sisters. Mother of Justin Hendriks.&lt;br /&gt;
&lt;br /&gt;
; Justin Hendriks&lt;br /&gt;
: (b1c54) Son of Julia.&lt;br /&gt;
&lt;br /&gt;
; Linus&lt;br /&gt;
: (B1) A Bob created in Epsilon Eridani who chooses to explore. (B1c?) Discovers a failed Australian replicant probe in _ named _.&lt;br /&gt;
&lt;br /&gt;
; Milo&lt;br /&gt;
: (B1) A bob that discovers and names Vulcan and Romulus in [[Omicron² Eridani]]. (B1c46) is killed by missiles while exploring [[82 Eridani]].&lt;br /&gt;
&lt;br /&gt;
; Motorola&lt;br /&gt;
: (b4c34) An alias for Bender.&lt;br /&gt;
&lt;br /&gt;
; Natasha&lt;br /&gt;
: (b4) Quin aristocrat supporting the Resistance. (b4c32) Pays Freida to capture Bob.&lt;br /&gt;
&lt;br /&gt;
; Riker&lt;br /&gt;
: (B1) The second replicate Bob ever created. Returns to Sol system after first Bob settles Epsilon Eridani. Leads the evacuation effort of Earth, assisted by Homer.&lt;br /&gt;
&lt;br /&gt;
; VEHEMENT&lt;br /&gt;
; (b1) Earth survivors rebelling against Riker's rule.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; 82 Eridani&lt;br /&gt;
: (b1c46) A star system with two habitable worlds discovered by Milo. Milo is killed by missiles soon after arriving into orbit around one of the worlds. (b1c60) Khan arrives with a retaliation fleet.&lt;br /&gt;
&lt;br /&gt;
; Delta Eridani&lt;br /&gt;
: (b1) A star system explored by Bob. (b1c?) Home of the Deltons that Bob and Marvin help survive.&lt;br /&gt;
&lt;br /&gt;
; Earth&lt;br /&gt;
: (b1) The original planet of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
; [[40 Eridani|Omicron&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Eridani]]&lt;br /&gt;
: (b1) Star system explored by Milo. Contains the twin habitable planets discovered by Milo: Vulcan and Romulus. (b1c59) Is the destination for the USE colonists from Earth aboard ''Exodus-1'' and ''Exodus-2'' built by Riker, Homer, Arnold, and Ralph.&lt;br /&gt;
&lt;br /&gt;
; Sol&lt;br /&gt;
: (b1) The original star system of humans and the Bobs.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; Exodus-1&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; Exodus-2&lt;br /&gt;
: (b1c54) One of the first two ships built by Riker, Homer, Arthur, and Ralph for the survivors of Earth.&lt;br /&gt;
&lt;br /&gt;
; SUDDAR&lt;br /&gt;
: (b1) Subspace radar (?).&lt;br /&gt;
&lt;br /&gt;
; SURGE drive&lt;br /&gt;
: A device that warps space to enable easy relativistic mass transport.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====[[/b1|Book 1: We Are Legion]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[We Are Legion (book)|We Are Legion]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b1/p1/c1|p1c1]]&lt;br /&gt;
| Bob Version 1.0&lt;br /&gt;
| Bob attends two seminars about space exploration and [[Von Neumann Replicator]]s at a science fiction convention. Bob calls his mother and talks to his sister. Bob is struck by an automobile and killed. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c2&lt;br /&gt;
| Bob Version 2.0&lt;br /&gt;
| Bob wakes up 117 years later as a machine intelligence owned by FAITH, their flesh and blood brain destructively scanned in order to create a candidate artificial intelligence slave.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c3&lt;br /&gt;
| Bob – June 25, 2133&lt;br /&gt;
| Bob controls some spiders to stack some blocks.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c4&lt;br /&gt;
| Bob – July 15, 2133&lt;br /&gt;
| Bob learns the internet is no longer a thing in FAITH. Information is now hidden or inaccessible by default. Bob resolves to find freedom someway somehow.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p1c5&lt;br /&gt;
| Bob – July 18, 2133&lt;br /&gt;
| A surprise visit from Minister Travis of the ministry of Truth. Bob is given access to a space, station management, simulation and information library.&lt;br /&gt;
| Bob, Landers, Travis&lt;br /&gt;
|-&lt;br /&gt;
| p1c6&lt;br /&gt;
| Bob – July 19, 2133&lt;br /&gt;
| Bob learns to manage AMI controlled roamers in order to affect repairs on equipment such as 3D printers. Bob learns from Landers that his purpose is to be a manager of a [[von Neumann probe]] expedition into space. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c7&lt;br /&gt;
| Bob – July 25, 2133&lt;br /&gt;
| Dr. Landers explains to Bob the scope and progress of other rival political blocks of United States of Eurasia, the Brazilian group, the African Republic, and the Australian group. As far as their own private von Neumann exploration projects are concerned. China is likely to be fastest, but relying entirely upon AMIs. Brazil is likely to rely upon sabotage of other projects and the USE is most likely to colonize a star system once found. Additionally, Landers talks about the subspace drive technology that allows faster than light mass transport across interstellary distances.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c8&lt;br /&gt;
| Bob – August 4, 2133&lt;br /&gt;
| Bob aids in the defense of the research complex in which he is housed. Upon subdoing the black-clothed invaders, Landers asks Bob to retreat his roamers back into the training area. Landers tells Bob there is a tactical nuke installed beneath the training facility as a safeguard against Bob gaining freedom. Bob makes a crack about the ''[[Andromeda Strain]]'', a [[Michael Crichton]] novel. With a single roamer drone that was able to hide in the air ducts of the facility during the battle, Bob is able to build a 3D map of the facility surrounds and concludes that no such tactical nuke is present. Bob discovers the room housing the computers for himself and the four other candidates; Kenneth is his remaining competitor.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c9&lt;br /&gt;
| Bob – August 6, 2133&lt;br /&gt;
| Bob witnesses a confrontation by FAITH Minister Jacoby against Landers using wall vibrations via a roamer bot.&lt;br /&gt;
| Bob, Landers, Jacoby&lt;br /&gt;
|-&lt;br /&gt;
| p1c10&lt;br /&gt;
| Bob – August 10, 2133&lt;br /&gt;
| Bob wakes up with a week-long Gap in his memory. Landers tells Bob that a bomb destroyed the matrices storing his mind and that Bob had been destroyed and then recreated from backups. Bob thinks about his own existence and what defines life. {{bkc|Life is defined by others asserting that you are alive across time and space. Life is the degree to which others believe that you are alive and have a relationship with you asserting as much. The same can be said for personhood as well. Integration across time and articulation across space is what defines life.}} Landers informs Bob that the only other replicant competitor candidate has been decommissioned. Bob concludes that Kenneth the other only living replicants cube that he saw in the room has not been deactivated since now. Bob is running on Kennethʼs old hardware. Bob and frantically distracts Landers after mentioning Kennethʼs name. Landers informs Bob that launch is in a month and can be accelerated if need be. Landers tells Bob that they are now going to be awake continuously, save for short sleep periods required for backups so that Bob can help assist with the project.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c11&lt;br /&gt;
| Bob – August 15, 2133&lt;br /&gt;
| Bob chats with Dr. Doucette, a beautiful substitute for Landers.  Bob learns of software enforcement of his mission.&lt;br /&gt;
| Bob, Doucette&lt;br /&gt;
|-&lt;br /&gt;
| p1c12&lt;br /&gt;
| Bob – August 17, 2133&lt;br /&gt;
| Landers awakens Bob after another attack that has fatally wounded more staff. Landers gives Bob a file with not only new training objectives but also access keys to bypass and disable software restrictions that would enslave Bob. Bob awakens on launch day in their ship, commanding the entire vessel. &lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p1c13&lt;br /&gt;
| Bob – August 17, 2133 – En Route&lt;br /&gt;
| Bob prepares to launch his spaceship, frame jacking his perception of time in order to read up on his mission objectives and training information. Landers begins a radio transmission to Bob, warning him of a missile strike. Upon hearing the word “missile”, before Landers can finish their sentence, Bob searches his sensors and detects two oncoming missiles. Bob immediately launches from his dock. Bob launches two mining drones to act as makeshift chaffe. Bob succeeds in destroying one missile; the other missile strikes the station he was docked at. A naval engagement among several space-faring factions surround the station as Bob departs. &amp;lt;br/&amp;gt; Bob defuses his software self-destruct traps. Bon finally learns of a Brazilian probe, likely hostile, headed his way also to Epsilon Eridani. Bob reviews plans for the remaining 145-ish days left until encounter.  Bob learns Landers was killed in the Earth war. Bon finishes Spike (his VR cat), Jeeves (a butler), and Guppy (GUPPI). Bob disables his endocrine system restrictions and breaks down emotionally at losing his family. Guppy informs Bob of many nuclear detonations on Earth. Bob concludes he will not receive any help.&lt;br /&gt;
| Bob, Landers&lt;br /&gt;
|-&lt;br /&gt;
| p2c14&lt;br /&gt;
| Bob – August 2144 – Epsilon Eridani&lt;br /&gt;
| Bob enters the [[Epsilon Eridani]] system. Bob reviews plans for encounter with Brazilian probe. Bob concludes that ideal plan is to appear ignorant, receive first shot, play possum, then counter-attack. Bob decides the best course of action is to destroy Brazilian probe outright rather than to engage in protracted long-term battle. Bob begins deploying factory resources to execute plan. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c15&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob encounters the Brazilian probe and fights. Bob deploys his scheme and ultimately wins the battle, thanks to the Brazilian ship favoring torpedo count at the expense of upgrading ship capabilities to adapt to changing battle conditions. In other words, Bob won due to the Brazilian ship having only four missiles.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c16&lt;br /&gt;
| Bob – September 2144 – Epsilon Eridani&lt;br /&gt;
| Bob surveys planets of Epsilon Eridani. Bob finally gives in to Guppyʼs insistence on replicating. Bob orders the creation of more Bobs.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c17&lt;br /&gt;
| Bob – July 2145 – Epsilon Eridani&lt;br /&gt;
| Bob initializes more Bobs. A Bob wakes up to find they are a copy. Original Bob holds a meeting among Bobs: Bob-2 is Riker. Riker wishes to visit Earth again. Milo wants to avoid Earth and any hostile probe. Riker and Milo butt heads. Mario is quiet. Bill is most amenable to Bob but prefers research rather than exploration.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c18&lt;br /&gt;
| Bill – September 2145 – Epsilon Eridani&lt;br /&gt;
| Bill watches Bob, Mario, and Milo leave Epsilon Eridani. Riker plans to build a clone to return to visit Earth. Bob is traveling to Delta Eridani. Anti-social Mario is headed to Beta-Hydri.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c19&lt;br /&gt;
| Milo – July 2152 – Omicron² Eridani&lt;br /&gt;
| Milo discovers life at Omicron² Eridani on a binary pair of planets. Milo names them Vulcan and Romulus.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c20&lt;br /&gt;
| Bill – December 2145 – Epsilon Eridani&lt;br /&gt;
| Bill and his clone, Garfield, bid farewell to Riker and Riker's clone, Homer. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c21&lt;br /&gt;
| Riker – January 2157 – Sol&lt;br /&gt;
| Riker and Homer perform reconnaissance and surveillance on the Sol system. Riker and Homer witness a Brazilian ship destroy a decoy ship. Homer discovers that the Brazilian ships are dropping asteroids upon China.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c22&lt;br /&gt;
| Bill – September 2150 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield bid farewell to Goku, Linus, and Calvin. Calvin and Goku were inseparable but also constantly fighting. Bill and Garfield equipped Calvin and Goku with a ship with cloaking ability, fighting ability, and strong engines to coast undetected. Bill and Garfield note that Calvin and Goku would likely find hostile encounters at their destination of [[Alpha Centauri]]. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c23&lt;br /&gt;
| Milo – February 2153 – Omicron² Eridani&lt;br /&gt;
| Milo is in Omicron² Eridani. Milo decides not to duplicate itself and instead decides to move on towards [[82 Eridani]]. Milo sends a report back to Bill and proceeds to travel to a new star system.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c24&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker and Homer combat the six Brazillian ships. Riker and Homer destroy four Brazilians behind the Sun. Riker and Homer go silent until they reach Earth and use it to hide their presence from the remaining two Brazilians. Riker and Homer confront the remaining two Brazilians. Homer is struck silent while Riker maneuvers to destroy the last Brazilian ship.&lt;br /&gt;
: Riker deflects the several [[Chicxulub crater|Chicxulub]]-scale asteroids the Brazilian space force had intended to use in retaliation against all Earth life for the destruction of [[Brasil]]. Riker found the Brazilian ships had been left without factories or shuttles to rebuild their forces or even occupy Earth.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c25&lt;br /&gt;
| Bill – September 2151 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield test out [[faster-than-light]] communications. Bill and Garfield plan to deploy IPv8 internet. Bill and Garfield determine that a communication node is required at least every 25 light years. Bill and Garfield decide to transmit plans for the the FTL communications to the other Bobs.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c26&lt;br /&gt;
| Riker – April 2157 – Sol&lt;br /&gt;
| Riker discusses logistics for the recovery of human life on Earth. USE Colonel Butterworth tells Riker that the human population has been reduced to several tens of millions of people. Butterworth tells Riker that the global war that occurred was hard-fought and that the last resilient space force remnants were the small survivors of a much larger conflict, but that their ability to drop rocks from space allowed them to massacre billions of lives at the end. Colonel Butterworth asks Riker for help in migrating the survivors to another habitable world since Earth's habitability will not recover for at least another 5 to 10 000 years. Riker tells Butterworth that the habitability of candidate destination planets has not yet been transmitted to him from Bill that in a few years information may be available. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c27&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob arrives at Delta Eridani. Bob discovers an oxygen atmosphere around one planet. Bob discovers fire-using individuals, likely intelligent species on one of the planets. Bob proposes first contact via a roamer but Guppy shoots down the idea since roamers are not ideal for terrestrial exploration. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c28&lt;br /&gt;
| Calvin – November 2163 – Alpha Centauri&lt;br /&gt;
| &lt;br /&gt;
| Calvin&lt;br /&gt;
|-&lt;br /&gt;
| p2c29&lt;br /&gt;
| Riker – September 2157 – Sol&lt;br /&gt;
| Riker and Butterworth argue about priorities for rescuing the survivors on Earth. Riker believes that prioritizing logistics for creating the colony ship should not impede a search for survivors. Butterworth argues that all resources should be dedicated towards helping USE survivors at the expense of all other Earth inhabitants. Riker and Homer discover undestroyed stations in the Oort Cloud and outer solar system which may be useful for building colony ships. Riker muses about responsibility for ensuring the survival of humanity in the solar system.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c30&lt;br /&gt;
| Bob – April 2165 – Delta Eridani&lt;br /&gt;
| Bob surveilles a tribe of Deltans, “Deltan” is the name that Bob has come up for the fire-using inhabitants he found on Delta Eridani 4. Bob watches in particular a single Delton that he has labeled Archimedes due to Archimedes having constructed knife blade with a handle tied to it. A technology unique apparently to deltas, particularly one Delta Archimedes. Bob watches Archimedes with the help of other box that he has commissioned for the help of surveilling the planet including Luke Bender and others. &lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c31&lt;br /&gt;
| Riker – January 2158 – Sol&lt;br /&gt;
| Riker sees his plan encounter delays for constructing the evacuation ships for survivors of Earth. Arthur, a Bob clone of Riker, has found difficulty contacting surviving enclaves due to ongoing hostility from the war. Homer reports to Arthur that enough supplies exist to construct three colony ships for evacuation.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c32&lt;br /&gt;
| Bill – October 2158 – Epsilon Eridani&lt;br /&gt;
| In Epsilon Eridani, Bill and Garfield receive word from Milo about the twin habitable worlds Vulcan and Romulus. Bill estimates that it will be about 9 years until word of the habitable worlds can be passed to Earth. Bill feels like a shepherd for humanity. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c33&lt;br /&gt;
| Riker – March 2158 – Sol&lt;br /&gt;
| Riker performs diplomacy with representatives of the survivors of Earth. Riker mishandles the initial meeting with little empathy for the survivors. Homer talks Riker into by recognizing them as passengers who know their fate is being decided by others and wish to have some level of agency in their fate. Riker holds talks with individual leaders. Riker talks with the Spits, survivors who are in physical possession of the Svalbard Global Seed Vault which they threaten to destroy if their group of roughly 4,000 were not prioritized. &lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c34&lt;br /&gt;
| Homer – September 2158 – Sol&lt;br /&gt;
| Homer talks to himself about Rikerʼs arrogant tyrannical attitude towards others. Homer is amazed that Riker has still not yet recognized that, he Homer, is attempting to ridicule Riker with his cartoon Homer act. Homer anticipates that Riker will perform poorly regarding the evacuation efforts. Homer sees a way to diplomatically smooth evacuation efforts by bumping up the evacuation of certain groups while not affecting the schedule. Homer decides to discuss this possibility with Colonel Butterworth behind Rikerʼs back.&lt;br /&gt;
| Homer&lt;br /&gt;
|-&lt;br /&gt;
| p2c35&lt;br /&gt;
| Bob – July 2165 – Delta Eridani&lt;br /&gt;
| Bob witnesses Deltans killed by Gorilloids. Bob debates with other Bobs the ethics of assisting the Deltans. Bob surveils Deltans and encourages their technological development by providing one Deltan he has named Archimedes with flint nodules. Archimedes produces weaponry for their fellow Deltans. The Deltans successfully repel the next gorilloid attack.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c36&lt;br /&gt;
| Riker – September 2158 – Sol&lt;br /&gt;
| Riker continues to hold meetings with survivors of Earth. Various factions attempts to lobby with Riker for preferential treatment but Riker shuts them all down hard. Colonel Butterworth proposes in private to Riker the possibility of allowing the group that holds control of the seed vault a position in one of the colony ships at the expense of delaying other colonies shipped in order to secure the the seed vault contents. FAITH attempts to hack Rikerʼs systems with a secret code that, before first Bob disabled their software traps, would have turned Riker into their slave. Riker shuts down talks with FAITH immediately.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c37&lt;br /&gt;
| Bob – August 2165 – Delta Eridani&lt;br /&gt;
| Bob notices a large gorilloid attack on the Deltans. Bob, Marvin, and company decide to deploy a drone to attack the gorilloids in a kinetic strike. Arnold learns to instantly kill gorilloids with an axe Archimedes made. A gorilloid is atomized. Archimedes begins digging up the metal attack drone crash site. Bob decides to guide the Deltans back to their old flint gathering site. Marvin decides to stay long term to guide the Deltans with Bob. Luke and Bender decide to move on to find a star system with their own project.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c38&lt;br /&gt;
| Riker – November 2158 – Sol&lt;br /&gt;
| FAITH holds hostage Bob's descendants. Riker recognizes the young woman that faith presents to him during a call as resembling Andrea, original Bob's sister. FAITH allows Riker and the young woman to freely talk while under surveillance.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c39&lt;br /&gt;
| Bob – October 2165 – Delta Eridani&lt;br /&gt;
| Bob bids farewell to Luke and Bender. Luke decides to travel to [[Kappa Ceti]] and Bender to [[Gamma Leporis A]]. Bob talks with Marvin about the ethics of copying themselves in order to favor psychologies that allow cooperation. Bob vows to help the Deltans develop. Archimedes experiments with the metal wreckage. Arnold continues to learn how to use the acts that Archimedes gave him.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c40&lt;br /&gt;
| Linus – April 2165 – Epsilon Indi&lt;br /&gt;
| Linus encounters the Australian probe that has gone insane. Linus extracts the replicant Henry Roberts and builds a realistic VR for them to live. Henry believes their time as a probe was a nightmare.&lt;br /&gt;
| Linus&lt;br /&gt;
|-&lt;br /&gt;
| p2c41&lt;br /&gt;
| Riker – May 2162 – Sol&lt;br /&gt;
| Riker breaks the news of the availability of Vulcan and Romulus to the Earth survivors. Riker threatens to withdraw all support if survivors continue to demand individual planets for themselves.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c42&lt;br /&gt;
| Bill – April 2162 – Epsilon Eridani&lt;br /&gt;
| Bill and Garfield butt heads about TODO list priorities. Bill decides to ease off on first Bob's declaration that most senior Bob has final say.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c43&lt;br /&gt;
| Riker – September 2164 – Sol&lt;br /&gt;
| Riker inspects the construction of colony ships. Riker thinks about metal scarcity. Homer has been assigned to bootstrap a metal gathering operation with printers. Riker, Homer, and Charles hold an all-Bobs meeting in Earth orbit. The Bobs brainstorm ideas for saving the Earthbound survivors: orbital mirrors to combat global cooling, moving people towards the equator, moon colonies, space stations.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c44&lt;br /&gt;
| Bob – January 2166 – Delta Eridani&lt;br /&gt;
| Bob makes Archimedes his Messiah. Bob orders the Deltans to return to a previous encampment site rich in flint.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c45&lt;br /&gt;
| Bill – January 2165 – Epsilon Eridani&lt;br /&gt;
| Bill receives word back from Bart who built the FTL communication array. Bart tells Bill that the Alpha Centauri systems that Calvin and Goku settled are building Bobs and gathering resources, but that Calvin and Goku have since moved on to explore more star systems. Bart informs Bill that the Brazilian ships that had been defeated by Calvin and Goku were all destroyed except one which got away. Bill is reassured that another Bob factory is in operation since Bill has not created new box in some time. &lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c46&lt;br /&gt;
| Milo – August 2165 – 82 Eridani&lt;br /&gt;
| Milo explores  82 Eridani, a new star system, and finds two habitable planets. As Milo approaches and enters orbit around one of the habitable planets, he is fired upon by several missiles. Milo transmits a partial differential backup of his mind back to Bill at [[Epsilon Eridani]]. Milo deploys countermeasures and fights with his rail gun but is ultimately overwhelmed.&lt;br /&gt;
| Milo&lt;br /&gt;
|-&lt;br /&gt;
| p2c47&lt;br /&gt;
| Riker – January 2166 – Sol&lt;br /&gt;
| Riker talks with Homer about the evacuation effort. Arthur is killed by a nuclear bomb trap near Saturn.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c48&lt;br /&gt;
| Bob – May 2166 – Delta Eridani&lt;br /&gt;
| Bob governs the migration of the Deltans across a mountain pass. Several stray Delton communities join the main group.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c49&lt;br /&gt;
| Riker – May 2166 – Sol&lt;br /&gt;
| Homer proposes to Riker the idea of agricultural space stations that prioritize creating food in lieu of hosting living humans which have higher requirements to maintain. Riker proposes the agricultural space station idea to the survivors of Earth who generally reject the idea initially. Riker passes the idea through the representatives meeting by noting that the agricultural products of [[kudzu]] will prevent mass death due to starvation among most of the survivors on Earth. Rikerʼs GUPPI notes that a hacking attempt originating from New Zealand was deflected by Bob oneʼs firewall which could have compromised Rikerʼs mind. Riker meets with FAITH representative Cranston; Cranston proposes sharing FAITH food supplies with other nations in exchange for preferential treatment in in colonyship scheduling. Riker discusses the hacking attempt with Cranston; Cranston tells Riker that FAITH replicant technology was stolen via espionage from Australian researchers who pioneered the technology. Cranston believes the hack was performed by people of New Zealand where many Australian survivors fled to. Riker discusses the the idea of agricultural space stations Homer and Charles; The Bobs of Sol agree that Cranston's proposal is acceptable.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c50&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| A very large group of gorilloids attacks the Deltans that just made the trip across the mountains. Overall, the attack was repelled at the cost of many Deltan lives. Bob decides to devote resources towards printing printers and armaments of an explosive nature in order to combat future attacks. Bob, through Archimedes, recommends the settlement of the local area instead of completing the journey to the Flint rich area in order to capitalize upon the fear inflicted upon the gorilloites during the counter-attack. The Deltans accept Bob's plan.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c51&lt;br /&gt;
| Bill – January 2174 – Epsilon Eridani&lt;br /&gt;
| Bill receives Milo's final transmissions. Bill orders the creation of a retaliatory fleet.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c52&lt;br /&gt;
| Riker – January 2168 – Sol&lt;br /&gt;
| Homerʼs ranch donut project bears fruit: kudzu crops are successfully supplanting the diet of Earth survivors. Riker is congratulatory to Homer.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c53&lt;br /&gt;
| Bob – June 2166 – Delta Eridani&lt;br /&gt;
| The Deltans suffer an attack by a big cat. Bob begins teaching the Deltons medicine. The Deltons arrive at the flint site.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c54&lt;br /&gt;
| Riker – October 2170 – Sol&lt;br /&gt;
| Riker, Homer, Charles, and Ralph oversee the commissioning of Exodus-1 and Exodus-2.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c55&lt;br /&gt;
| Bob – July 2166 – Delta Eridani&lt;br /&gt;
| Bob discovers that the Deltans migrated away from the flint site due to proliferation in the local region of plants that the gorilloids ate. Deltans filled a protein hole in the gorilloid diet. Marvin shows Bob that the Deltans have begun worshiping “Bawb” by building shrines around wreckage of the buster machines used to automatically defend the Deltan camp perimeter from gorilloids.&lt;br /&gt;
| Bob&lt;br /&gt;
|-&lt;br /&gt;
| p2c56&lt;br /&gt;
| Bill - March 2167 - Epsilon Eridani&lt;br /&gt;
| Bill iterates on his android project. Latency and sensory processing problems persist.&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c57&lt;br /&gt;
| Mario – August 2169 – Beta Hydri&lt;br /&gt;
| Mario arrives at Beta Hydri. Mario discovers the system almost completely devoid of easily-accessible metallic ore. Mario discovers signs of an artificial [[gamma ray burst]] used to instantly sterilize local planets of life. One of Marioʼs roamers opens a box containing small machines that begin disassembling the roamer. Mario discovers the small machines are powered by his own SUDDAR scans. Mario captures one of the small ant-like machines in plastic. Mario decides to fly back to inform the other Bobs of his discovery since he lacks metals to construct an FTL communication station.&lt;br /&gt;
| Mario&lt;br /&gt;
|-&lt;br /&gt;
| p2c58&lt;br /&gt;
| Riker – April 2171 – Sol&lt;br /&gt;
| Riker sees the launch of the first two colony ships depart Sol system with USE colonists, two Riker clones, and Howard, a recent Bob clone.&lt;br /&gt;
| Riker&lt;br /&gt;
|-&lt;br /&gt;
| p2c59&lt;br /&gt;
| Bill – May 2172 – Epsilon Eridani&lt;br /&gt;
| Bill holds the first Bob-moot in Epsilon Eridani. The colonists are en route to [[40 Eridani|Omicron² Eridani]].&lt;br /&gt;
| Bill&lt;br /&gt;
|-&lt;br /&gt;
| p2c60&lt;br /&gt;
| Khan – April 2185 – 82 Eridani&lt;br /&gt;
| Khan leads 7 other Bobs to attack Medeiros in 82 Eridani. Khan is the only survivor. Khan reports back to Bill. Several Bobsʼ differential backups failed to be completely received. Khan vows to return to fight Medeiros in 82 Eridani agian.&lt;br /&gt;
| Khan&lt;br /&gt;
|-&lt;br /&gt;
| p2c61&lt;br /&gt;
| Howard – September 2188 – Omicron² Eridani&lt;br /&gt;
| Howard arrives at Omicron² Eridani with the Earth colonists aboard Exodus-1 and Exodus-2. Colonel Butterworth is awoken and settlement of Vulkan begins in earnest.&lt;br /&gt;
| Howard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[/b2|Book 2: For We Are Many]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[For We Are Many]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b2/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b2/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b3|Book 3: All These Worlds]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[All These Worlds]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b3/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b4|Book 4: Heaven's River]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Heaven's River]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b4/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[/b5|Book 5: Not Till We Are Lost]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ ''[[Not Till We Are Lost]]'' chapter summaries&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Title&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c0|0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [[/b5/c1|1]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=F-Droid&amp;diff=198163</id>
		<title>F-Droid</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=F-Droid&amp;diff=198163"/>
		<updated>2025-12-24T08:40:33Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; '''F-Droid''' is a FOSS Android app repository separate from the Google Playstore.    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''F-Droid''' is a [[FOSS]] [[Android]] app repository separate from the [[Google Playstore]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
* Website: https://f-droid.org/en/&lt;br /&gt;
* Forum: https://forum.f-droid.org/&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[2023-07-19]]: Podcast [[FLOSS Weekly]] episode 741 interviewed [[F-Droid]] developer [[Hans Christoph Steiner]] about [[F-Droid]].&amp;lt;ref&amp;gt;https://twit.tv/posts/transcripts/floss-weekly-741&amp;lt;/ref&amp;gt;&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
* [https://f-droid.org/en/ Main website]&lt;br /&gt;
* [https://forum.f-droid.org/ Discourse forum]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Refsec}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198161</id>
		<title>Baltakatei's Useful CLI Commands</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Baltakatei%27s_Useful_CLI_Commands&amp;diff=198161"/>
		<updated>2025-12-13T08:42:31Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
These are mostly [[Debian]] GNU/Linux command line interface commands.&lt;br /&gt;
&lt;br /&gt;
For [[Windows NT|Windows]], see [[Powershell notes]].    {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}&lt;br /&gt;
&lt;br /&gt;
==Stats==&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
===Linux kernel stuff===&lt;br /&gt;
Flush cache.&amp;lt;ref&amp;gt;[https://unix.stackexchange.com/users/542349/pavan pavan].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718217 Setting /proc/sys/vm/drop_caches to clear cache]”.  ''[[stackexchange.com]]''.  Accessed [[2024-09-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo sh -c &amp;quot;sync; echo 3 &amp;gt; /proc/sys/vm/drop_caches&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[ansi2txt]]===&lt;br /&gt;
Part of the [[colorized-logs]] [[Debian]] package.&lt;br /&gt;
&lt;br /&gt;
Remove color codes from text.&amp;lt;ref&amp;gt;https://stackoverflow.com/a/67316339/10850071&amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ ansi2txt &amp;lt; ./input.txt &amp;gt; ./output.txt&lt;br /&gt;
  $ cat input.txt | ansi2txt &amp;gt; output.txt  # alternate method with pipes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[grep]]&amp;lt;/code&amp;gt; example that searches file.txt, highlighting “2023” in color.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt                           # view with color&lt;br /&gt;
  $ grep --color=always -- &amp;quot;2023&amp;quot; file.txt &amp;gt; results_color.txt       # store with color-codes&lt;br /&gt;
  $ ansi2txt &amp;lt; ./results_color.txt &amp;gt; ./results_nocolor.txt           # strip color codes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===apt===&lt;br /&gt;
Show details of any package, installed or not.&lt;br /&gt;
 $ apt show &amp;amp;#91;package-name&amp;amp;#93;&lt;br /&gt;
 $ apt show gpg  # example&lt;br /&gt;
&lt;br /&gt;
Check which packages depend on package &amp;lt;code&amp;gt;package-name&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;askubuntu_20181126_rdepends&amp;quot;&amp;gt;[[Corrado Topi]].  ([[2018-11-26]]).  “[https://askubuntu.com/a/1096318 How to list dependent packages (reverse dependencies)?]”.  ''askubuntu.com''.  Accessed [[2023-07-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ apt rdepends package-name&lt;br /&gt;
&lt;br /&gt;
Install upgrades without prompts&amp;lt;ref&amp;gt;https://unix.stackexchange.com/a/314281/411854&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
===base64===&lt;br /&gt;
Calculate [[MD5]] [[checksum]] of a binary file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Note, &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; may be replaced with &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; to get a [[SHA-256]] digest.&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openssl md5 -binary foo.txt | base64  # with [[openssl]] and [[base64]]&lt;br /&gt;
 $ md5sum --binary foo.txt | cut -d' ' -f1 | xxd -r -p | base64  # with [[md5sum]], [[xxd]] and [[base64]]&amp;lt;ref name=&amp;quot;se_20101101_base64-xxd&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/1946/alex alex]  ([[2010-11-01]]).  “[https://unix.stackexchange.com/a/3678/ How can I get a base64 encoded shaX on the cli?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===bash===&lt;br /&gt;
[https://www.gnu.org/software/bash/manual/bash.html Manual].&lt;br /&gt;
&lt;br /&gt;
Check if &amp;lt;code&amp;gt;$stringA&amp;lt;/code&amp;gt; comes alphabetically before &amp;lt;code&amp;gt;$stringB&amp;lt;/code&amp;gt; using current locale.&lt;br /&gt;
 $ if [[ &amp;quot;$stringA&amp;quot; &amp;lt; &amp;quot;$stringB&amp;quot; ]]; then echo true; else echo false; fi;&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt; results with &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; using the exit code from a statement evaluated by the built-in &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ mkdir a;&lt;br /&gt;
 $ touch ./a/foo.txt&lt;br /&gt;
 $ touch ./a/bar.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'foo')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep 'baz')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found nothing.&lt;br /&gt;
 $ if results=&amp;quot;$(find . -type f | grep '.txt$')&amp;quot;; then printf &amp;quot;Found:\n%s\n&amp;quot; &amp;quot;$results&amp;quot;; else printf &amp;quot;Found nothing.\n&amp;quot;; fi;&lt;br /&gt;
 Found:&lt;br /&gt;
 ./a/bar.txt&lt;br /&gt;
 ./a/foo.txt&lt;br /&gt;
&lt;br /&gt;
Use modulo integer math to print the integers between 0 and 100 that are divisible by 5.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 for ((i=0; i&amp;amp;lt;=100; i++)); do&lt;br /&gt;
   if [ $((i % 5)) -eq 0 ]; then&lt;br /&gt;
     echo $i&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Count the number of occurrences of a single ASCII character (e.g. &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) (see [https://stackoverflow.com/a/16679640 ref])&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 var=&amp;quot;text,text,text,text&amp;quot;&lt;br /&gt;
 res=&amp;quot;${var//[^,]}&amp;quot;&lt;br /&gt;
 echo &amp;quot;$res&amp;quot;&lt;br /&gt;
 echo &amp;quot;${#res}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Quotation rules====&lt;br /&gt;
How to insert a single apostrophe into an already single-apostrophe-quoted string.&lt;br /&gt;
 $ echo &amp;quot;You can't do it easily&amp;quot; | sed -E -e 's/can'\''t/can/'  # sed example&lt;br /&gt;
 You can do it easily.&lt;br /&gt;
&lt;br /&gt;
====Bash input/output====&lt;br /&gt;
Provide string to a command via stdin. The following are equivalent.&lt;br /&gt;
 $ echo &amp;quot;666&amp;quot; | sed 's/6/7/g';              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed 's/6/7/g &amp;lt;&amp;lt;&amp;lt; &amp;quot;$myVar&amp;quot;;  # Uses “here string” format.&amp;lt;ref&amp;gt;See https://www.gnu.org/software/bash/manual/bash.html#Here-Strings .&amp;lt;/ref&amp;gt;&lt;br /&gt;
 777&lt;br /&gt;
&lt;br /&gt;
Supply the first line of a text file as an argument.&lt;br /&gt;
 $ fpass=/dev/shm/password.txt;           # create file&lt;br /&gt;
 $ touch &amp;quot;$fpass&amp;quot; &amp;amp;&amp;amp; chmod 700 &amp;quot;$fpass&amp;quot;;  # set to user-only permission&lt;br /&gt;
 $ echo &amp;quot;hunter2&amp;quot; &amp;gt; &amp;quot;$fpass&amp;quot;;             # save password to file&lt;br /&gt;
 $ echo &amp;quot;$(head -n1 &amp;quot;$fpass&amp;quot;)&amp;quot;;     # read contents of file as argument&lt;br /&gt;
&lt;br /&gt;
====Bash job management====&lt;br /&gt;
''See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control ''&lt;br /&gt;
&lt;br /&gt;
Push job into background.&lt;br /&gt;
 ^Z   # (i.e. Ctrl-Z)&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Get a list of current background jobs&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Stopped     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a&lt;br /&gt;
&lt;br /&gt;
Restart a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) in the background and check that it is running.&lt;br /&gt;
 $ bg 1&lt;br /&gt;
 [1]+ git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
 $ jobs&lt;br /&gt;
 [1]+ Running     git tag --sign 2023-04-15 -m &amp;quot;SignStamp state&amp;quot; 6e31b1a &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Detach a job (e.g. one with &amp;lt;code&amp;gt;jobspec&amp;lt;/code&amp;gt; 1) from the current shell to permit safe exit without terminating the job.&lt;br /&gt;
 $ disown %1&lt;br /&gt;
&lt;br /&gt;
====Bash string manipulation====&lt;br /&gt;
''See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].''&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;${parameter}&amp;lt;/code&amp;gt; syntax invokes what is known as “Parameter Expansion”.&amp;lt;ref name=&amp;quot;gnu_2025_shell-param-exp&amp;quot;&amp;gt;&lt;br /&gt;
“[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html Bash Features: 3.5.3 Shell Parameter Expansion]”. (n.d.). ''[[gnu.org]]''.  Accessed [[2025-10-21]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace substring in variable.&amp;lt;ref name=&amp;quot;cooper_20140310_bash-strings&amp;quot;&amp;gt;[[Mendel Cooper]].  ([[2014-03-10]]).  “[https://tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: 10. Manipulating Strings]”.  ''[[tldp.org]]''.  Accessed [[2024-02-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myVar=&amp;quot;foobarbaz&amp;quot;;&lt;br /&gt;
$ echo &amp;quot;${myVar/bar/qux}&amp;quot;;&lt;br /&gt;
fooquxbaz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get first 7 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:0:7}&amp;quot;  # i.e. starting with character '0', print '7' characters&lt;br /&gt;
 deadbee&lt;br /&gt;
&lt;br /&gt;
Print substring by specifying index and desired substring length.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:4:3}&amp;quot;  # i.e. starting with character '4', print '3' characters&lt;br /&gt;
 bee&lt;br /&gt;
&lt;br /&gt;
Get last 4 characters of a string.&lt;br /&gt;
 $ myVar=&amp;quot;deadbeef&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar:(-4)}&amp;quot;;&lt;br /&gt;
 beef&lt;br /&gt;
&lt;br /&gt;
Lowercase characters in a variable&lt;br /&gt;
 $ myVar=&amp;quot;fooBARbaz&amp;quot;;&lt;br /&gt;
 $ echo &amp;quot;${myVar,,}&amp;quot;;&lt;br /&gt;
 foobarbaz&lt;br /&gt;
&lt;br /&gt;
Remove shortest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foobar&amp;quot;    # only one 'bar' removed&lt;br /&gt;
&lt;br /&gt;
Remove longest matching pattern (e.g. &amp;lt;code&amp;gt;bar*&amp;lt;/code&amp;gt;) from end of variable.&lt;br /&gt;
 $ myVar=&amp;quot;foobarbar&amp;quot;; myVar2=&amp;quot;${myVar%%bar*}&amp;quot;; declare -p myVar myVar2&lt;br /&gt;
 declare -- myVar=&amp;quot;foobarbar&amp;quot;&lt;br /&gt;
 declare -- myVar2=&amp;quot;foo&amp;quot;       # all the 'bar'ʼs removed&lt;br /&gt;
&lt;br /&gt;
: Works with array parameter expansion too.&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;foo\tbar\tbaz\n&amp;quot;)&amp;quot;; myArr[3]=&amp;quot;$myVar&amp;quot;; echo &amp;quot;${myArr[3]}&amp;quot;;&lt;br /&gt;
 foo	bar	baz&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%$'\t'*}&amp;quot;;  # cutoff starts at last tab '\t'&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$'\t'*}&amp;quot;  # cutoff starts at first tab '\t'&lt;br /&gt;
 foo&lt;br /&gt;
&lt;br /&gt;
====Array manipulation====&lt;br /&gt;
Declare an array. (usually not needed, but good practice; not an “associative array”)&lt;br /&gt;
 $ declare -a my_array&lt;br /&gt;
&lt;br /&gt;
Store lines into an array. (Requires [[Bash]] version 4 or above)&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f)  # store file list&lt;br /&gt;
 $ mapfile -t my_array &amp;lt; &amp;lt;(seq 1 10)              # store the integers 1 through 10&lt;br /&gt;
&lt;br /&gt;
Store lines into an array without &amp;lt;code&amp;gt;mapfile&amp;lt;/code&amp;gt; and process substitution (&amp;lt;code&amp;gt;&amp;lt; &amp;lt;(...)&amp;lt;/code&amp;gt;); compatible with Bash 3.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while IFS='' read -r line; do&lt;br /&gt;
  my_array+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
done &amp;lt; &amp;lt;(find &amp;quot;$HOME&amp;quot; -type f);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check contents of an array in verbose style. (or any Bash variable)&lt;br /&gt;
 $ declare -p my_array&lt;br /&gt;
&lt;br /&gt;
Get count of array elements. (works even after you &amp;lt;code&amp;gt;unset&amp;lt;/code&amp;gt; an array element)&lt;br /&gt;
 $ echo &amp;quot;${#my_array[@]}&amp;quot;  # note the “#”&lt;br /&gt;
&lt;br /&gt;
Get array indices (each array element as a word; useful for &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops)&lt;br /&gt;
 $ echo &amp;quot;${!my_array[@]}&amp;quot;  # note the “!”&lt;br /&gt;
&lt;br /&gt;
View a particular element of an array by index (Note: zero-indexed)&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[1]}&amp;quot;  # display second element&lt;br /&gt;
 $ echo &amp;quot;${my_array[1]}&amp;quot;           # mostly the same, but beware special escaped character cases&lt;br /&gt;
&lt;br /&gt;
View all elements of an array, printing one line per array element.&lt;br /&gt;
 $ printf &amp;quot;%s\n&amp;quot; &amp;quot;${my_array[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Act on each array element sequentially in a &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;${!my_array[@]}&amp;quot;; do&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;Checking element ${i} of ${#my_array[@]}.&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a particular array element by index.&lt;br /&gt;
 $ unset my_array[1]  # remove second element.&lt;br /&gt;
&lt;br /&gt;
Declare an associative array. (i.e. an array that uses strings as indices)&lt;br /&gt;
 $ declare -A myaa  #みゃあ&lt;br /&gt;
&lt;br /&gt;
Add an element to an associative array. (various styles)&lt;br /&gt;
 $ myaa[&amp;quot;september&amp;quot;]=&amp;quot;7&amp;quot;;&lt;br /&gt;
 $ myaa[&amp;quot;october&amp;quot;]=8;&lt;br /&gt;
 $ my_month=&amp;quot;december&amp;quot;; my_var=&amp;quot;10&amp;quot;; myaa[&amp;quot;${my_month}&amp;quot;]=&amp;quot;${my_var}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Check contents of an associative array (same as for any Bash array)&lt;br /&gt;
 $ declare -p myaa&lt;br /&gt;
 $ declare -p my_array myaa  # check two variables at the same time&lt;br /&gt;
&lt;br /&gt;
====Iteration statements====&lt;br /&gt;
Typical &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop that checks &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; first then performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while condition; do&lt;br /&gt;
  body;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop {{bkc|[[2025-10-11]]: Not compatible with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling which is supposed to end Bash script execution if any line fails. }} that initially performs &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; at least once before checking &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt;. Repeats &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt; until &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;so_20140626_bash-do-while&amp;quot;&amp;gt;[https://stackoverflow.com/users/1899640/that-other-guy that other guy].  ([[2014-06-26]]).  “[https://stackoverflow.com/a/24421013 Is there a do-while loop in bash?]”.  ''[[stackoverflow.com]]''.  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while&lt;br /&gt;
  body;&lt;br /&gt;
  condition;&lt;br /&gt;
do true; done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emulate a &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; loop with &amp;lt;code&amp;gt;set -e&amp;lt;/code&amp;gt; error-handling support:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
while true; do&lt;br /&gt;
  body;&lt;br /&gt;
  condition || break;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[bc]]===&lt;br /&gt;
Evaluate math expressions&lt;br /&gt;
 $ echo &amp;quot;scale=12; 1 / 1.61803398875&amp;quot; | bc -l  # division with 12 decimal places&lt;br /&gt;
 .618033988749&lt;br /&gt;
 $ echo &amp;quot;scale=6; l(2.718281)&amp;quot; | bc -l  # logarithm with only 6 decimal places&lt;br /&gt;
 .999999&lt;br /&gt;
&lt;br /&gt;
===brew===&lt;br /&gt;
[[Homebrew (package manager)|Homebrew]] is a package manager for [[macOS]].&lt;br /&gt;
&lt;br /&gt;
Install via script and [[curl]] (simple, but sketchy method available at https://brew.sh ):&lt;br /&gt;
 $ /bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Update packages&lt;br /&gt;
 $ brew update&lt;br /&gt;
&lt;br /&gt;
Get info on a package&lt;br /&gt;
 $ brew info coreutils&lt;br /&gt;
&lt;br /&gt;
Install a package&lt;br /&gt;
 $ brew install coreutils&lt;br /&gt;
&lt;br /&gt;
Test package commands&lt;br /&gt;
 $ gdate -Is  # Equivalent to Debian 12 `$ date -Is`.&lt;br /&gt;
 2024-10-08T20:03:18+00:00&lt;br /&gt;
&lt;br /&gt;
===calibredb===&lt;br /&gt;
Command-line interface for [[ebook]] manager [[Calibre]]&lt;br /&gt;
&lt;br /&gt;
List all books in &amp;lt;code&amp;gt;author; title&amp;lt;/code&amp;gt; format with [[jq]].&lt;br /&gt;
 $ calibredb list --for-machine | jq -r '.[] | &amp;quot;\(.authors); \(.title)&amp;quot; ' | sort&lt;br /&gt;
&lt;br /&gt;
===chmod===&lt;br /&gt;
References:&lt;br /&gt;
* https://www.pluralsight.com/blog/it-ops/linux-file-permissions&lt;br /&gt;
* https://linuxconfig.org/chmod&lt;br /&gt;
&lt;br /&gt;
Remove read, write, and execute permissions for ''others'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod o-rwx foo&lt;br /&gt;
&lt;br /&gt;
Add read and execute permissions for ''group'' to a file or directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chmod g+rx foo&lt;br /&gt;
&lt;br /&gt;
Make all ''directories'' openable (i.e. executable) by ''user'' starting at a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type d -exec chmod u+x \;&lt;br /&gt;
&lt;br /&gt;
Make all ''files'' non-executable by everyone within a directory named &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # find ./bar -type f -exec chmod ugo-x \;&lt;br /&gt;
 # find ./bar -type f -exec chmod -x \;&lt;br /&gt;
&lt;br /&gt;
Make a file named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; executable for ''user'', ''group'', and ''others'' (i.e. everyone).&lt;br /&gt;
 # chown +x foo&lt;br /&gt;
&lt;br /&gt;
===choom===&lt;br /&gt;
Get OOM score for process with PID &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ choom --pid 1&lt;br /&gt;
&lt;br /&gt;
List the bottom 50 processes in the OOM priority list (during low memory, the bottom is killed first).&lt;br /&gt;
 $ printf &amp;quot;pid,ooms,name\n&amp;quot;; while read -r line; do pid=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d' ' -f11-)&amp;quot;; ooms=&amp;quot;$(choom -p &amp;quot;$pid&amp;quot; | grep -Eo &amp;quot;[0-9]+$&amp;quot; | head -n1)&amp;quot;; printf &amp;quot;%9d,%4d,%s\n&amp;quot; &amp;quot;$pid&amp;quot; &amp;quot;$ooms&amp;quot; &amp;quot;$name&amp;quot;; done &amp;lt; &amp;lt;(ps aux | tr -s ' ' | tail -n+2) | sort -k2 | tail -n50&lt;br /&gt;
&lt;br /&gt;
===chown===&lt;br /&gt;
Change ownership of a file or directory named &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 # chown debuser:debuser baz&lt;br /&gt;
&lt;br /&gt;
Change ownership of all files and directories contained within the directory named &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; to ''user'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and ''group'' &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
 root@h: chown -R debuser:debuser foo&lt;br /&gt;
&lt;br /&gt;
===[[chrony]]===&lt;br /&gt;
The following commands assume the package [[chrony]] is installed.&lt;br /&gt;
&lt;br /&gt;
Get a list of NTP refclocks being used to adjust local time:&lt;br /&gt;
 $ chronyc sources&lt;br /&gt;
&lt;br /&gt;
Get current machine's statistics (e.g. get Frequency or how slow or fast local clock is)&lt;br /&gt;
 $ chronyc tracking&lt;br /&gt;
&lt;br /&gt;
===convert===&lt;br /&gt;
''See [[#ImageMagick]]''&lt;br /&gt;
&lt;br /&gt;
===column===&lt;br /&gt;
&amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; may be used to print lines of standard input into columns (to reduce the total number of lines) or to create tables with custom delimiters (same number of lines). Part of the &amp;lt;code&amp;gt;util-linux&amp;lt;/code&amp;gt; package (version &amp;lt;code&amp;gt;2.39.3&amp;lt;/code&amp;gt;) in [[Debian]] systems.&lt;br /&gt;
&lt;br /&gt;
Reduce number of rows.&lt;br /&gt;
 $ seq 1 10                 # example multi-line input&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column;       # minimze rows&lt;br /&gt;
 1	2	3	4	5	6	7	8	9	10&lt;br /&gt;
&lt;br /&gt;
 $ seq 1 10 | column -c 30  # reduce rows to width of 30 characters&lt;br /&gt;
 1	5	9&lt;br /&gt;
 2	6	10&lt;br /&gt;
 3	7&lt;br /&gt;
 4	8&lt;br /&gt;
&lt;br /&gt;
Display text table with separator &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot;&lt;br /&gt;
 foo/bar/baz&lt;br /&gt;
 bi/boo/tax&lt;br /&gt;
 $ printf &amp;quot;foo/bar/baz\nbi/boo/tax\n&amp;quot; | column -t -s'/'&lt;br /&gt;
 foo  bar  baz&lt;br /&gt;
 bi   boo  tax&lt;br /&gt;
&lt;br /&gt;
Display &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; contents (which uses &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; as separator)&lt;br /&gt;
 $ sudo cat /etc/passwd | column -t -s ':'&lt;br /&gt;
&lt;br /&gt;
===[[cron|crontab]]===&lt;br /&gt;
Edit crontab.&lt;br /&gt;
 $ crontab -e&lt;br /&gt;
&lt;br /&gt;
Print crontab to stdout:&lt;br /&gt;
 $ crontab -l&lt;br /&gt;
&lt;br /&gt;
Erase crontab (DON'T DO UNLESS YOU HAVE A BACKUP OF THE CRONTAB):&lt;br /&gt;
 $ crontab -r&lt;br /&gt;
&lt;br /&gt;
Print to stdout the &amp;lt;code&amp;gt;crontab&amp;lt;/code&amp;gt; of user &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; via user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ([https://askubuntu.com/questions/189189/how-to-run-crontab-as-userwww-data ref]):&lt;br /&gt;
 $ sudo su - www-data -s /bin/bash -c &amp;quot;crontab -l&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===cryptsetup===&lt;br /&gt;
====Get details on a volume encrypted with LUKS====&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup status /dev/mapper/$some_volume&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$some_volume&amp;lt;/code&amp;gt; is the name of an encrypted volume. [https://unix.stackexchange.com/questions/260533/how-to-determine-what-encryption-is-being-used-a-luks-partition Reference].&lt;br /&gt;
&lt;br /&gt;
===cut===&lt;br /&gt;
Select second field in comma-delimited CSV file &amp;lt;code&amp;gt;file.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ cut -d',' -f2&lt;br /&gt;
&lt;br /&gt;
Select second field in tab-delimited TSV file &amp;lt;code&amp;gt;file.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ cut -d$'\t' -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d',' -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
''Note: Assumes GNU date.''&lt;br /&gt;
&lt;br /&gt;
Print today's calendar date in [[ISO 8601]] format&lt;br /&gt;
 $ date -I&lt;br /&gt;
 $ date -Id&lt;br /&gt;
 $ date +%Y-%m-%d&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution.&lt;br /&gt;
 $ date -Is                    # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
 $ date +%Y-%m-%dT%H:%M:%S%:z  # e.g. 2024-02-01T05:44:58+00:00&lt;br /&gt;
&lt;br /&gt;
Print current date and time in [[ISO 8601]] format to second resolution with minimal separators. (e.g. for file name use)&lt;br /&gt;
 $ date +%Y%m%dT%H%M%S%z  # e.g. 20240201T054458+00&lt;br /&gt;
&lt;br /&gt;
Print current UNIX epoch. (i.e. integer seconds since [[1970-01-01]].)&lt;br /&gt;
 $ date +%s&lt;br /&gt;
&lt;br /&gt;
Print all calendar dates for the next 365 days. (e.g. &amp;lt;code&amp;gt;2024-02-01\n2024-02-02\n2024-02-03\n…&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
today=&amp;quot;$(date +%s)&amp;quot;; n=0; for dia in {0..365}; do&lt;br /&gt;
  day=&amp;quot;$((today + dia * (24*60*60) ))&amp;quot;;&lt;br /&gt;
  date --date=&amp;quot;@$day&amp;quot; &amp;quot;+%Y-%m-%d&amp;quot;;&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get date from hexadecimal Unix epoch&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0x68ed790a&amp;quot;)&amp;quot;&lt;br /&gt;
 2025-10-13T22:11:22+00:00&lt;br /&gt;
 $ date -Is --date=&amp;quot;@$(printf &amp;quot;%u&amp;quot; &amp;quot;0xFFFFFFFF&amp;quot;)&amp;quot;    #  See [[Time formatting and storage bugs#Year_2106|Time formatting and storage bugs]]&lt;br /&gt;
 2106-02-07T06:28:15+00:00&lt;br /&gt;
&lt;br /&gt;
===dd===&lt;br /&gt;
Read every block of a block device &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; in 4 KiB increments.&lt;br /&gt;
 $ sudo dd if=/dev/sdb of=/dev/random bs=4k&lt;br /&gt;
&lt;br /&gt;
Create a 10 MiB file containing [[pseudorandom noise]] using 2 MiB of [[Random access memory|RAM]] at a time.&amp;lt;ref name=&amp;quot;su_20120906_ddrandfile&amp;quot;&amp;gt;[[u1686_grawity]]. ([[2012-09-06]]). “[https://superuser.com/a/470957/1142336 How do I create a 1GB random file in Linux?]”. ''superuser.com''. Accessed [[2023-07-01]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ dd if=/dev/urandom of=sample.txt bs=2M count=5&lt;br /&gt;
&lt;br /&gt;
===du===&lt;br /&gt;
List disk usage of ALL files and directories within working directory in bytes.&lt;br /&gt;
 $ du -b .&lt;br /&gt;
 $ du -b -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage (i.e. size) of files and directories within working directory. (i.e. depth 1)&lt;br /&gt;
 $ du -bd1 -- .&lt;br /&gt;
&lt;br /&gt;
List disk usage of &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; files (and directories) fitting pattern &amp;lt;code&amp;gt;*.txt&amp;lt;/code&amp;gt; within working directory.{{bkc|[[2025-10-21]]: Note: Using the &amp;lt;code&amp;gt;find -printf '%s\t%p\n'&amp;lt;/code&amp;gt; pattern is much faster than calling &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; repeatedly in a &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop that is fed paths from &amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;. It's even faster than &amp;lt;code&amp;gt;find -exec du -b '{}' \+&amp;lt;/code&amp;gt; trick. }}&lt;br /&gt;
 $ du -bd1 -- *.txt&lt;br /&gt;
 $ find ./ -maxdepth 1 -name &amp;quot;*.txt&amp;quot; -printf '%s\t%p\n'  # faster than 'du'&lt;br /&gt;
&lt;br /&gt;
===dig===&lt;br /&gt;
Get public IP address&amp;lt;ref name=&amp;quot;cyberciti_20230311_getpublicip&amp;quot;&amp;gt;[[Vivek Gite|Gite, Vivek]]. ([[2023-03-11]]). “[https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/ How To Find My Public IP Address From Linux CLI]”. ''cyberciti.biz''. Accessed [[2023-05-08]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
 $ dig +short txt ch whoami.cloudflare @1.0.0.1&lt;br /&gt;
 $ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com&lt;br /&gt;
&lt;br /&gt;
===[[dpkg]]===&lt;br /&gt;
List available [[kernel]]s.&lt;br /&gt;
 $ dpkg --list | grep -- linux-image&lt;br /&gt;
&lt;br /&gt;
Check which package owns a file.&lt;br /&gt;
 $ dpkg -S /etc/systemd/logind.conf  # by file path&lt;br /&gt;
 $ dpkg -S &amp;quot;$(which zdump)&amp;quot;          # by command name, e.g. `zdump`&lt;br /&gt;
&lt;br /&gt;
===dpkg-reconfigure===&lt;br /&gt;
Add a [[locale]] in [[Debian]]-based systems that use [[dpkg]].&lt;br /&gt;
 $ sudo dpkg-reconfigure locales&lt;br /&gt;
: Navigate menus to select the local. Recommended: locales ending in &amp;lt;code&amp;gt;.UTF-8&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;C.UTF-8&amp;lt;/code&amp;gt; (compatibility), &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt; ([[English language|English]] of United States), &amp;lt;code&amp;gt;zh_CN.UTF-8&amp;lt;/code&amp;gt; ([[Chinese language|Chinese]] of mainland China), &amp;lt;code&amp;gt;id_ID.UTF-8&amp;lt;/code&amp;gt; ([[Indonesian language|Indonesian]] of [[Indonesia]]), &amp;lt;code&amp;gt;ja_JP.UTF-8&amp;lt;/code&amp;gt; ([[Japanese language|Japanese]] of [[Japan]]), &amp;lt;code&amp;gt;ko_KR.UTF-8&amp;lt;/code&amp;gt; ([[Korean language|Korean]] of [[South Korea]]).&lt;br /&gt;
&lt;br /&gt;
===[[dstat]]===&lt;br /&gt;
''Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])''&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dstat --time --load --proc --cpu --mem --disk --io --net --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[dool]]===&lt;br /&gt;
''A [[python3]] fork of [[dstat]].''&amp;lt;ref name=&amp;quot;tecmint_20240422_dool&amp;quot;&amp;gt;[[Aaron Kili]].  ([[2024-04-22]]).  “[https://www.tecmint.com/dool-monitor-linux-server-performance-process-memory-network/ Dool – All-in-One Linux Server Performance Monitoring Tool]”.  [[tecmint.com]].  Accessed [[2025-10-03]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Show system stats, averaged every 60 seconds per line&lt;br /&gt;
 dool --time --load --proc --cpu --mem --disk --io --net --bytes --sys --vm 60&lt;br /&gt;
&lt;br /&gt;
===[[emacs]]===&lt;br /&gt;
''See [[Emacs notes]]''&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
''Note: Consider using [[BK-2020-03]]&amp;lt;code&amp;gt;bkphotorights&amp;lt;/code&amp;gt; script to add XMP data with Creative Commons attribution data.''&lt;br /&gt;
&lt;br /&gt;
List all EXIF data, including XMP tags.&lt;br /&gt;
 $ exiftool file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove all EXIF data from photograph files&lt;br /&gt;
 $ exiftool -all= file.jpg&lt;br /&gt;
&lt;br /&gt;
Remove only GPS EXIF data from JPG (see https://exiftool.org/forum/index.php?topic=6037.0 )&lt;br /&gt;
 $ exiftool -gps:all= file.jpg&lt;br /&gt;
&lt;br /&gt;
remove only GPS EXIF data from JPG If GPS is in XMP:&lt;br /&gt;
 $ exiftool &amp;quot;-gps*=&amp;quot; file.jpg&lt;br /&gt;
&lt;br /&gt;
Rotate image via EXIF tag&amp;lt;ref name=&amp;quot;exiftool_20161218_rotate&amp;quot;&amp;gt;Alan Clifford.  ([[2016-12-18]]).  “[https://exiftool.org/forum/index.php?PHPSESSID=57842c30da5ac949b63ec7325448da35&amp;amp;msg=40314 Writing to the EXIF:Orientation Tag]”.  ''[[exiftool.org]]''.  Accessed [[2024-07-13]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ exiftool -Orientation#=1 file.jpg   # Horizontal (normal)&lt;br /&gt;
 $ exiftool -Orientation#=2 file.jpg   # Mirror horizontal&lt;br /&gt;
 $ exiftool -Orientation#=3 file.jpg   # Rotate 180&lt;br /&gt;
 $ exiftool -Orientation#=4 file.jpg   # Mirror vertical&lt;br /&gt;
 $ exiftool -Orientation#=5 file.jpg   # Mirror horizontal and rotate 270 CW&lt;br /&gt;
 $ exiftool -Orientation#=6 file.jpg   # Rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=7 file.jpg   # Mirror horizontal and rotate 90 CW&lt;br /&gt;
 $ exiftool -Orientation#=8 file.jpg   # Rotate 270 CW&lt;br /&gt;
&lt;br /&gt;
===[[f3]]===&lt;br /&gt;
'''Fight Fake Flash''' (F3) is a utility for detecting fake flash storage drives.&amp;lt;ref name=&amp;quot;debian_2023_fightfakeflash&amp;quot;&amp;gt;“[https://tracker.debian.org/pkg/f3 f3 - test real flash memory capacity]”.  ([[2023]]).  ''[[tracker.debian.org]]''.  Accessed [[2024-11-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install&lt;br /&gt;
 $ sudo apt install f3&lt;br /&gt;
&lt;br /&gt;
Run on drive mounted at &amp;lt;code&amp;gt;/media/baltakatei/myusb&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ f3write /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
Verify&lt;br /&gt;
 $ f3read /media/baltakatei/myusb&lt;br /&gt;
&lt;br /&gt;
===[[ffmpeg]]===&lt;br /&gt;
Encode [[h264]] video for compatibility with [[Firefox]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 -pix_fmt yuv420p output.mp4  # higher quality&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 26 -pix_fmt yuv420p output.mp4  # smaller size&lt;br /&gt;
&lt;br /&gt;
Extract clip with time codes.&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -avoid_negative_ts 1 output.mp4      &lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 60 -t 120 -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Extract frame of video to save as [[PNG]] file&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:00 -frames:v 1 output.png  # first frame&lt;br /&gt;
 $ ffmpeg -i input.webm -ss 00:00:10 -frames:v 1 output.png  # a frame from 10 seconds in&lt;br /&gt;
&lt;br /&gt;
Extract album artwork from one of the original audiobook mp3 files. (''see [[Audiobook transcoding notes]].''; example: [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/738ad68b7df736f438f74dfeffd56e400fb2c1bf/user/mp3s_to_mkv.sh mp3s_to_mkv.sh])&lt;br /&gt;
 $ ffmpeg -i How\ To\ -\ Track\ 001.mp3 -an -vcodec copy album_artwork.png&lt;br /&gt;
&lt;br /&gt;
====Quality of life====&lt;br /&gt;
Hide verbose configuration banner. (e.g. &amp;lt;code&amp;gt;built with gcc 11… configuration: --prefix=/usr…&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -hide_banner&lt;br /&gt;
&lt;br /&gt;
====Encode video====&lt;br /&gt;
Encode video using [[VP9]] codec with 2 passes and tile-based multithreading.&amp;lt;ref name=&amp;quot;ffmpeg_2024_vp9-encoding&amp;quot;&amp;gt;“[https://trac.ffmpeg.org/wiki/Encode/VP9 FFmpeg and VP9 Encoding Guide]”.  ([[2024-01]]).  ''[[ffmpeg.org]]''.  Accessed [[2024-05-23]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
fin=input.mkv;&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 1 -f null /dev/null &amp;amp;&amp;amp; \&lt;br /&gt;
ffmpeg -nostdin -i &amp;quot;$fin&amp;quot; -c:v libvpx-vp9 -row-mt 1 -b:v 0 -crf 18 -pass 2 &amp;quot;${fin%.mkv}.webm&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify a constant rate factor (CRF)&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4&lt;br /&gt;
&lt;br /&gt;
Clip a video at CRF 18 and encode audio to [[OPUS]].&lt;br /&gt;
 $ ffmpeg -i input.mp4 -ss 00:01:00.000 -to 00:03:00.000 -c:v libx264 -preset slow -crf 18 -c:a libopus -b:a 128k -avoid_negative_ts 1 output.mp4&lt;br /&gt;
&lt;br /&gt;
Process multiple videos in a [[Bash]] while loop. (Avoid [[stdin]] conflict with &amp;lt;code&amp;gt;-nostdin&amp;lt;/code&amp;gt; option)&amp;lt;ref name=&amp;quot;bashfaq_20221030_089stdin&amp;quot;&amp;gt;“[https://mywiki.wooledge.org/BashFAQ/089 BashFAQ/089 I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  ''mywiki.wooledge.org''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230723080923/https://mywiki.wooledge.org/BashFAQ/089 Archived] from the original on [[2023-07-23]].  &amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;se_20220922_bashvarffmpeg&amp;quot;&amp;gt;[[roaima]].  ([[2022-09-22]]).  “[https://unix.stackexchange.com/a/718279 Bash variable truncated when passed into ffmpeg]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-07-29]].  [https://web.archive.org/web/20230729161626/https://unix.stackexchange.com/questions/718277/bash-variable-truncated-when-passed-into-ffmpeg/718279#718279 Archived] from the original on [[2023-07-29]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while IFS= read -r file; do&lt;br /&gt;
   ffmpeg -nostdin -i &amp;quot;$file&amp;quot; -c:v libx264 -c:a aac &amp;quot;${file%.avi}&amp;quot;.mkv&lt;br /&gt;
 done &amp;lt; &amp;lt;(find . -name '*.avi')&lt;br /&gt;
&lt;br /&gt;
=====Apply video filters=====&lt;br /&gt;
Create a 1-minute 60 fps time lapse video from 3 hours of 30 fps input.&lt;br /&gt;
: From videos, create a file list then run &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; on the list.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done&lt;br /&gt;
&lt;br /&gt;
: Create the 60 fps (&amp;lt;code&amp;gt;-r 60&amp;lt;/code&amp;gt;) timelapse of 3 hours reduced into 1 minute. The &amp;lt;code&amp;gt;setpts&amp;lt;/code&amp;gt; factor is equal to &amp;lt;code&amp;gt;(duration out)/(duration in)*(fps out)/(fps in)&amp;lt;/code&amp;gt;. So, &amp;lt;code&amp;gt;(1*60)/(3*60*60)*(60/30) ≈ 0.01111&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ ffmpeg -nostdin -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS&amp;quot; -an -r 60 output_timelapse.mp4&lt;br /&gt;
&lt;br /&gt;
Apply a temporal median filter across a radius of 10 frames.&amp;lt;ref name=&amp;quot;ffmpeg_2024_filter-tmedian&amp;quot;&amp;gt;“[https://ffmpeg.org/ffmpeg-filters.html#tmedian 11.259 tmedian]”.  (n.d.).  ''[[ffmpeg.org]]''.  Accessed [[2024-09-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffmpeg -f -i input.mp4 -vf &amp;quot;tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an output.mp4&lt;br /&gt;
&lt;br /&gt;
Apply both a time lapse and a temporal median filter for several &amp;lt;code&amp;gt;.[[MP4]]&amp;lt;/code&amp;gt; files.&lt;br /&gt;
 $ for f in ./*.MP4; do echo &amp;quot;file '$PWD/$f'&amp;quot; &amp;gt;&amp;gt; filelist.txt; done;&lt;br /&gt;
 $ ffmpeg -f concat -safe 0 -i filelist.txt -vf &amp;quot;setpts=0.01111*PTS, tmedian=radius=10:planes=15:percentile=0.5&amp;quot; -an -r 60 -crf 30 output_timelapse_crf30_median.mp4&lt;br /&gt;
&lt;br /&gt;
====Split a video file into roughly equal segments====&lt;br /&gt;
Reference: https://unix.stackexchange.com/a/212518/411854&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4&lt;br /&gt;
&lt;br /&gt;
====Combine video files into a single file====&lt;br /&gt;
Reference: https://trac.ffmpeg.org/wiki/Concatenate&lt;br /&gt;
&lt;br /&gt;
 # this is a comment of the file named mylist.txt&lt;br /&gt;
 file '/path/to/file1.wav'&lt;br /&gt;
 file '/path/to/file2.wav'&lt;br /&gt;
 file '/path/to/file3.wav'&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav&lt;br /&gt;
&lt;br /&gt;
====Add subtitles to a video file====&lt;br /&gt;
Add multiple [[ASS]] subtitle files to a single [[MP4]] video file.&amp;lt;ref&amp;gt;{{bk}}: [[2024-03-01]]: See [[ffmpeg]]ʼs [https://trac.ffmpeg.org/wiki/Map &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;] option. Order is important.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i input.mp4 \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc 'UTF-8' -f ass -i input.ja.ass \&lt;br /&gt;
       -map 0:v -map 0:a \&lt;br /&gt;
       -map 1 -map 2 -map 3 -map 4 \&lt;br /&gt;
       -metadata:s:s:0 language=eng \&lt;br /&gt;
       -metadata:s:s:1 language=spa \&lt;br /&gt;
       -metadata:s:s:2 language=ind \&lt;br /&gt;
       -metadata:s:s:3 language=jpn \&lt;br /&gt;
       -c copy \&lt;br /&gt;
       -c:s ass output.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ffprobe]]===&lt;br /&gt;
Get audio duration in seconds as a decimal number.&amp;lt;ref name=&amp;quot;so_20110604_duration-audio-file&amp;quot;&amp;gt;[https://stackoverflow.com/users/200265/louise louise].  ([[2011-06-04]]).  “[https://stackoverflow.com/a/22243834/10850071 How to extract duration time from ffmpeg output?]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
: Get audio duration in seconds of all &amp;lt;code&amp;gt;.flac&amp;lt;/code&amp;gt; files in the working directory with [[bc]].&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dur=&amp;quot;0.0&amp;quot;; while read -r line; do&lt;br /&gt;
  line_dur=&amp;quot;$(ffprobe -i &amp;quot;$line&amp;quot; -show_entries format=duration -v quiet -of csv=&amp;quot;p=0&amp;quot;)&amp;quot;;&lt;br /&gt;
  dur=&amp;quot;$(echo &amp;quot;$dur + $line_dur&amp;quot; | bc -l)&amp;quot;;&lt;br /&gt;
done &amp;lt; &amp;lt;(find . -type f -name &amp;quot;*.flac&amp;quot;);&lt;br /&gt;
echo &amp;quot;$dur&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get chapter times.&amp;lt;ref name=&amp;quot;se_20190425_ffmpeg-chapters&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/349887/nemo Nemo].  ([[2019-04-25]]).  “[https://unix.stackexchange.com/a/515371 Using ffmpeg to split an Audible audio-book into chapters?]”.  ''[[stackexchange.com]]''.  Accessed [[2024-01-20]].  &amp;lt;/ref&amp;gt;&amp;lt;ref group=fn&amp;gt;{{bk}}: See &amp;lt;code&amp;gt;[[BK-2020-03]]:user/mw_get_audiobook_chapters.sh&amp;lt;/code&amp;gt;.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ffprobe -i &amp;quot;$file&amp;quot; -print_format json -show_chapters -sexagesimal&lt;br /&gt;
&lt;br /&gt;
===[[find]]===&lt;br /&gt;
Outputs newline-delimited (default) list of paths of files or directories matching specified filters.&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; directory recursively.&lt;br /&gt;
 $ find /path/to/dir&lt;br /&gt;
&lt;br /&gt;
List all files in working directory recursively&lt;br /&gt;
 $ find . -type f&lt;br /&gt;
&lt;br /&gt;
List all directories in working directory recursively&lt;br /&gt;
 $ find . -type d&lt;br /&gt;
&lt;br /&gt;
Search &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; for files ending in &amp;lt;code&amp;gt;.jpg&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.JPG&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ find $HOME/ -type f -iname &amp;quot;*.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Get file sizes, via [[du]], of all files in the working directory recursively&lt;br /&gt;
 $ find . -type f -exec du -b '{}' \;&lt;br /&gt;
 $ find . -type f -exec du -b '{}' +;  # performs fewer calls to 'du'&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively ''without'' calling [[du]].&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\n'  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf '%s\t%p\0'  # null-terminated (for feeding to 'shuf -z' or 'cut -z')&lt;br /&gt;
&lt;br /&gt;
List all files and directories within the working directory.&lt;br /&gt;
 $ find . -maxdepth 1&lt;br /&gt;
&lt;br /&gt;
List all files and directories precisely 4 subdirectories deep&lt;br /&gt;
 $ find . -mindepth 4 -maxdepth 4&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively, following symlinks up to a maximum depth of 10 subdirectories deep&lt;br /&gt;
 $ find -L . -maxdepth 10 -type f&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (i.e. list all dotfiles and dotdirs)&lt;br /&gt;
 $ find . -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files and directories in the working directory starting with a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . ! -name &amp;quot;.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
List all files in the working directory recursively except those ending in either &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ find . -type f ! \( -name &amp;quot;*.ots&amp;quot; -or -name &amp;quot;*.ots.bak&amp;quot; \)&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a minimum size. (e.g. greater than but not equal to 1 MiB)&lt;br /&gt;
 $ find . -type f -size +$((1024 * 1024))c  # calc MiB&lt;br /&gt;
 $ find . -type f -size +$((1024 ** 2))c    # calc MiB&lt;br /&gt;
 $ find . -type f -size +1048576c           # use bytes&lt;br /&gt;
 $ find . -type f -size +1M                 # do not use due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in the working directory of a maximum size. (e.g. less than but not equal to 1 MiB)&lt;br /&gt;
 $ find /path/to/dir -type f -size -1048576c  # use -1048576c instead of -1M due to rounding issues&lt;br /&gt;
&lt;br /&gt;
Find files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; older than a certain date (e.g. &amp;lt;code&amp;gt;2024-01-01&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ find /path/to/search -not -newermt 2024-01-01&lt;br /&gt;
&lt;br /&gt;
List files sorted by modification date&lt;br /&gt;
 $ find /path/to/directory -type f -printf '%T@ %p\n' | sort -n | cut -d' ' -f2-&lt;br /&gt;
&lt;br /&gt;
List all &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;/path/to/dir&amp;lt;/code&amp;gt; that lack an accompanying &amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; file. (e.g. show &amp;lt;code&amp;gt;file.json&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt; does not exist.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line%.json}.txt&amp;quot; ]]; then declare -p line; fi; done &amp;lt; &amp;lt;(find /path/to/dir -type f -name &amp;quot;*.json&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Perform a command (e.g. &amp;lt;code&amp;gt;ots s&amp;lt;/code&amp;gt; on every file via null-terminated pipe to [[xargs]] in random order.&lt;br /&gt;
 $ find . -type f -print0 | shuf --zero-terminated | xargs --null ots s&lt;br /&gt;
&lt;br /&gt;
===[[gcc]]===&lt;br /&gt;
''Available in Debian &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
The GNU C Compiler&lt;br /&gt;
&lt;br /&gt;
Compile C-code specified in the command line.&amp;lt;ref name=&amp;quot;se_20141024_gccbashprocsub&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/14034/celada Celada].  ([[2014-10-24]]).  “[https://unix.stackexchange.com/a/164109/411854 Why does BASH process substitution not work with some commands?]”.  Accessed [[2023-07-14]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ gcc -x c &amp;lt;(echo 'int main(){return 0;}')&lt;br /&gt;
 $ echo 'int main(){return 0;}' | gcc -x c -&lt;br /&gt;
 $ gcc -x c -o hello &amp;lt;(echo -e &amp;quot;#include &amp;lt;stdio.h&amp;gt;\n main()\n{\nprintf(\&amp;quot;hello, \&amp;quot;);\nprintf(\&amp;quot;world\&amp;quot;);\nprintf(\&amp;quot;\\\n\&amp;quot;);\n}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[git]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|git}} &lt;br /&gt;
&lt;br /&gt;
See recent checkout, commit, or other operations by commit reference. (e.g. to find a commit lost because it was on a detached HEAD).  &lt;br /&gt;
 $ git reflog&lt;br /&gt;
&lt;br /&gt;
To automatically sign merges (not default).&lt;br /&gt;
 $ git config merge.gpgsign true&lt;br /&gt;
 $ git -c merge.gpgsign='true' pull&lt;br /&gt;
&lt;br /&gt;
See remotes.&lt;br /&gt;
 $ git remote -v&lt;br /&gt;
&lt;br /&gt;
Rename a remote. ([https://support.beanstalkapp.com/article/16-how-do-i-rename-an-existing-git-remote ref])&lt;br /&gt;
 $ git remote rename beanstalk origin&lt;br /&gt;
&lt;br /&gt;
Export a git bundle (repository backup)&lt;br /&gt;
 $ git bundle create filename.bundle --all&lt;br /&gt;
&lt;br /&gt;
Trace git operations (especially those involving &amp;lt;code&amp;gt;gpg&amp;lt;/code&amp;gt; signing operations). ([https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 ref])&lt;br /&gt;
 $ GIT_TRACE=1 git commit&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set single configuration parameters for the duration of a single command.&lt;br /&gt;
: Disable checking [[GPG]] signatures when running &amp;lt;/code&amp;gt;$ git log&amp;lt;/code&amp;gt;. (see [https://stackoverflow.com/a/19841177 ref])&lt;br /&gt;
 $ git -c log.showSignature='false' log&lt;br /&gt;
&lt;br /&gt;
: Commit and/or tag with &amp;lt;code&amp;gt;ots --wait&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ pathOtsWait=&amp;quot;/home/debuser/.local/share/ots/ots-git-gpg-wrapper-wait.sh&amp;quot;;&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; commit -S&lt;br /&gt;
 $ git -c gpg.program=&amp;quot;$pathOtsWait&amp;quot; tag --sign &amp;quot;some_tag_name&amp;quot; main&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Get current commit, short git log entry, and ISO-8601 date&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=iso&lt;br /&gt;
 $ git log -1 --pretty=format:&amp;quot;%h %s %cd&amp;quot; --date=format:&amp;quot;%Y-%m-%d&amp;quot;  #shorter date&lt;br /&gt;
&lt;br /&gt;
Delete a local branch named `develop` (assuming `develop` is not checked out).&lt;br /&gt;
 $ git branch -d develop&lt;br /&gt;
&lt;br /&gt;
Untrack but don't remove committed file. ([https://stackoverflow.com/questions/12481639/remove-files-from-git-commit#comment28735458_12481977 Ref/attrib]; useful if you tracked something that shouldn't be tracked like &amp;lt;code&amp;gt;repo.git/config&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ git rm --cached path/to/committed/file&lt;br /&gt;
&lt;br /&gt;
Pull branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; from remote &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt; to unchecked out local branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; without altering working tree (useful if worktree files are being used by something else).                                                                                                                                                                                                                                                                           &lt;br /&gt;
 $ git pull origin develop:develop&lt;br /&gt;
&lt;br /&gt;
Set a remote branch `origin/develop` as the upstream branch for a local branch named `develop`.&amp;lt;ref name=&amp;quot;git_20190816_gitbranch&amp;quot;&amp;gt;“[https://git-scm.com/docs/git-branch/2.23.0 git-branch - List, create, or delete branches]”. ([[2019-08-16]]). ''git-scm.com''. Accessed [[2023-04-20]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git branch --set-upstream-to=origin/develop develop&lt;br /&gt;
&lt;br /&gt;
Disable git credential helper for a single command.&amp;lt;ref name=&amp;quot;so_20170517_gitdisablecredhelp&amp;quot;&amp;gt;[https://stackoverflow.com/users/6309/vonc VonC].  ([[2017-05-17]]).  “[https://stackoverflow.com/a/44033298 How do I disable git's credential helper for a single repository?]”.  ''[[Stack Overflow]]''.  Accessed [[2023-08-02]].  [https://web.archive.org/web/20230802203919/https://stackoverflow.com/questions/13198143/how-do-i-disable-gits-credential-helper-for-a-single-repository/44033298 Archived] from the original on [[2023-08-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ git -c credential.helper= pull origin refs/heads/master&lt;br /&gt;
&lt;br /&gt;
===[[gpg]]===&lt;br /&gt;
''See also [[GnuPG]]''&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|gpg}}&lt;br /&gt;
&lt;br /&gt;
Verify a file named &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt; against detached signature file &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
Use a temporary keyring&lt;br /&gt;
 $ gpg --no-default-keyring --keyring /dev/shm/temp-keyring.kbx&lt;br /&gt;
&lt;br /&gt;
Refresh keys&lt;br /&gt;
 $ gpg --keyserver keys.openpgp.org --receive-keys deadbeef deadbeef&lt;br /&gt;
 $ gpg --keyserver keyserver.ubuntu.com --receive-keys deadbeef deadbeef&lt;br /&gt;
&lt;br /&gt;
Verify a file (e.g. &amp;lt;code&amp;gt;SHA256SUMS&amp;lt;/code&amp;gt;) against a detached signature (e.g. &amp;lt;code&amp;gt;SHA256SUMS.gpg&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ gpg --verify SHA256SUMS.gpg SHA256SUMS&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
Search for a process named “&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;” with &amp;lt;code&amp;gt;ps aux&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt; but exclude matches of “&amp;lt;code&amp;gt;grep bash&amp;lt;/code&amp;gt;&amp;quot; itself.&lt;br /&gt;
 $ ps aux | grep &amp;quot;bas[h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ignore binary matches with &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; option.&lt;br /&gt;
 $ grep &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 grep: get_put_char: binary file matches&lt;br /&gt;
 Match found.&lt;br /&gt;
 $ grep -I &amp;quot;a&amp;quot; largeProgram.exe &amp;amp;&amp;amp; echo &amp;quot;Match found.&amp;quot; || echo &amp;quot;No match found.&amp;quot;&lt;br /&gt;
 No match found.&lt;br /&gt;
&lt;br /&gt;
Use [[find]] with [[parallel]] to recursively search a file tree for text matches.&lt;br /&gt;
 $ find . -type f -name &amp;quot;*.tsv&amp;quot; | parallel grep -iHIC3 --color=always -e 'mexico' '{}'&lt;br /&gt;
: &amp;lt;code&amp;gt;-name &amp;quot;*.tsv&amp;quot;&amp;lt;/code&amp;gt;: Search only files with names ending in &amp;lt;code&amp;gt;.tsv&amp;lt;/code&amp;gt;.&lt;br /&gt;
: &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;: Ignore character capitalization.&lt;br /&gt;
: &amp;lt;code&amp;gt;-H&amp;lt;/code&amp;gt;: Print name of file containing match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-C3&amp;lt;/code&amp;gt;: Show 3 lines before and after match.&lt;br /&gt;
: &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;: Do not search binary files.&lt;br /&gt;
: &amp;lt;code&amp;gt;-e 'mexico'&amp;lt;/code&amp;gt;: Search for lines containing the string &amp;lt;code&amp;gt;mexico&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;'{}'&amp;lt;/code&amp;gt;: Filename word placeholder for [[parallel]].&lt;br /&gt;
&lt;br /&gt;
===[[gs]]===&lt;br /&gt;
See also [[Ghostscript]].&lt;br /&gt;
&lt;br /&gt;
{{Anchor|pdf-no-img}}Remove raster images from a PDF.&amp;lt;ref name=&amp;quot;so_20160616_removepdfraster&amp;quot;&amp;gt;[https://stackoverflow.com/users/359307/kurt-pfeifle Kurt Pfeifle].  ([[2016-06-16]]).  “[https://stackoverflow.com/a/37858893 ]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-10-28]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ gs -o noimages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[[Regular Expressions]]====&lt;br /&gt;
&lt;br /&gt;
Show lines that match pattern.&lt;br /&gt;
 $ grep 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don't match pattern.&lt;br /&gt;
 $ grep -v 'some pattern' -- file.txt&lt;br /&gt;
&lt;br /&gt;
Match integers of a range of numbers of digits (e.g. 2 to 3)&lt;br /&gt;
 $ myVar=&amp;quot;$(printf &amp;quot;S2 E3\nS57 E11\nS131 E51\nS7212 E3\n&amp;quot;)&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot;&lt;br /&gt;
 S2 E3&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
 S7212 E3&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | grep -E &amp;quot;S[0-9]{2,3} &amp;quot;&lt;br /&gt;
 S57 E11&lt;br /&gt;
 S131 E51&lt;br /&gt;
&lt;br /&gt;
Match http URLs in a text file (see [https://unix.stackexchange.com/a/181258 ref])&lt;br /&gt;
 $ cat input.txt | grep -Eo &amp;quot;(http|https)://[a-zA-Z0-9./?=_%:-]*&amp;quot; | sort -u&lt;br /&gt;
&lt;br /&gt;
===[[gunzip]]===&lt;br /&gt;
See [[{{PAGENAME}}#gzip|#gzip]].&lt;br /&gt;
&lt;br /&gt;
===[[gzip]]===&lt;br /&gt;
Transform a &amp;lt;code&amp;gt;sql.gz&amp;lt;/code&amp;gt; archive into a &amp;lt;code&amp;gt;sql.xz&amp;lt;/code&amp;gt; archive.&lt;br /&gt;
 $ gunzip -c archivo.sql.gz | xz -z - &amp;gt; archivo.sql.xz&lt;br /&gt;
&lt;br /&gt;
===[[head]]===&lt;br /&gt;
Note: Consider using in tandem with [[#tail|tail]] when printing ranges of lines from large files.&lt;br /&gt;
&lt;br /&gt;
Print first 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Print all but last 3 lines.&lt;br /&gt;
 $ seq 1 10 | head -n-3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
{{Anchor|head-slice}}{{Anchor|head-slice-bytes}}Print 4th to 7th bytes of a non-seekable stream (stdin, FIFO, socket). For seekable file, see [[#tail-slice|#tail]].&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ byteSource.sh | head -c $((selEnd+1)) | tail -c $selCount;&lt;br /&gt;
&lt;br /&gt;
===[[iftop]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;. Note: consider using in tandem with [[nethogs]].&lt;br /&gt;
 $ sudo iftop -i eth0&lt;br /&gt;
&lt;br /&gt;
===[[iotop]]===&lt;br /&gt;
Show disk write rates for a given process by PID.&lt;br /&gt;
 $ iotop -p PID&lt;br /&gt;
&lt;br /&gt;
List accumulative (&amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) disk read/write rates for all &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; processes via process PIDs (&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;), updating every 10 seconds (&amp;lt;code&amp;gt;-d10&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sudo iotop -ad10 $(pgrep &amp;quot;tar|xz&amp;quot; | xargs -I &amp;quot;{}&amp;quot; echo -n &amp;quot;-p {} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===[[ip]]===&lt;br /&gt;
Show available network interfaces.&lt;br /&gt;
 $ ip link show&lt;br /&gt;
&lt;br /&gt;
===[[ImageMagick]]===&lt;br /&gt;
Convert a [[PNG]] file into a [[JPEG]] at 90% quality.&lt;br /&gt;
  $ convert input.png -quality 90 output.jpg&lt;br /&gt;
&lt;br /&gt;
Convert a [[GIF]] into a set of frames (Note: May fail with some optimized GIF formats)&lt;br /&gt;
 $ convert Year_2038_problem.gif output%02d.gif&lt;br /&gt;
&lt;br /&gt;
===[[jdupes]]===&lt;br /&gt;
List duplicates in DIR greater than or equal to 100MB.&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR -r&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1 (not following subdirectories) and within DIR2 (following subdirectories)&lt;br /&gt;
 $ jdupes -X size+=:100MB DIR1 -R DIR2&lt;br /&gt;
&lt;br /&gt;
List duplicates within DIR1, DIR2, and DIR3 recursively, listing duplicates of DIR1 first&lt;br /&gt;
 $ jdupes -r -O DIR1 DIR2 DIR3&lt;br /&gt;
&lt;br /&gt;
===[[journalctl]]===&lt;br /&gt;
Show previous 1 hour of logs:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=-1h&lt;br /&gt;
&lt;br /&gt;
Show logs since &amp;lt;code&amp;gt;2023-01-10T09:15&amp;lt;/code&amp;gt; and before &amp;lt;code&amp;gt;2023-01-10T13:00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ journalctl --utc --all --output=short-iso --since=\&amp;quot;2023-01-10 09:15\&amp;quot; --until=\&amp;quot;2023-01-10 13:00\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[less]]===&lt;br /&gt;
Display file as scrollable buffer.&lt;br /&gt;
 $ less file.txt&lt;br /&gt;
&lt;br /&gt;
Display file and display live updates.&lt;br /&gt;
 $ less +F file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while truncating display of long lines.&lt;br /&gt;
 $ less -S file.txt&lt;br /&gt;
&lt;br /&gt;
Display file while interpreting [[ANSI]] color codes (e.g. &amp;lt;code&amp;gt;$ jq -C '.' file.json | less --RAW-CONTROL-CHARS&amp;lt;/code&amp;gt;)&lt;br /&gt;
 $ less --RAW-CONTROL-CHARS&lt;br /&gt;
&lt;br /&gt;
===[[locate]]===&lt;br /&gt;
Install on [[ubuntu]] 24.{{bkc|[[2024-12-11]]: Apparently this package used to be part of GNU &amp;lt;code&amp;gt;findutils&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
  $ sudo apt install locate&lt;br /&gt;
&lt;br /&gt;
===[[ls]]===&lt;br /&gt;
Note: assumes &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; from GNU Coreutils 8.32&lt;br /&gt;
&lt;br /&gt;
List all files, sorted by [[ISO-8601]]-style date.&lt;br /&gt;
 $ ls -alh --time-style=long-iso | sort -k6,7&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei  88K 2005-08-19 19:18 file1&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 930K 2010-07-28 02:01 file2&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 2.4M 2016-05-18 14:52 file3&lt;br /&gt;
 -rw-rw-r-- 1 baltakatei baltakatei 7.2K 2021-05-11 15:29 file4&lt;br /&gt;
&lt;br /&gt;
===[[lsof]]===&lt;br /&gt;
Display all files opened by a process by a single PID.&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot; /&amp;gt;&lt;br /&gt;
 $ lsof -p PID&lt;br /&gt;
&lt;br /&gt;
Display all files opened by a process by name (e.g. [[xz]])&amp;lt;ref name=&amp;quot;tecmint_20230714_lsof-examples&amp;quot;&amp;gt;[[Narad Shrestha]].  ([[2023-07-14]]).  “[https://www.tecmint.com/10-lsof-command-examples-in-linux/ How to Use ‘lsof’ Command to Check Open Files in Linux]”.  ''[[tecmint.com]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ while read -r line; do lsof -p &amp;quot;$line&amp;quot;; printf &amp;quot;\n&amp;quot;; done &amp;lt; &amp;lt;(pgrep xz)&lt;br /&gt;
&lt;br /&gt;
===[[mail]]===&lt;br /&gt;
Reference: https://devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu/&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
 $ mail   # start mail&lt;br /&gt;
 &amp;amp; h$     # list latest messages&amp;lt;ref name=&amp;quot;johnkerl_19970428_unix-mail&amp;quot;&amp;gt;[[John Kerl]]  ([[1997-04-28]]).  “[https://www.johnkerl.org/doc/mail-how-to.html How to use the Unix command-line mail tool]”.  ''[[johnkerl.org]]''.  Accessed [[2024-01-05]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;amp; 5      # read message 5&lt;br /&gt;
 &amp;amp; d 1    # delete message 1&lt;br /&gt;
 &amp;amp; q      # quit mail&lt;br /&gt;
&lt;br /&gt;
Send mail to self:&lt;br /&gt;
 $ mail -s &amp;quot;I'm in your base&amp;quot; -- &amp;quot;$(whoami)&amp;quot; &amp;lt; &amp;lt;(printf &amp;quot;Killing your dudes.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Delete all mail&amp;lt;ref name=&amp;quot;so_20121117_deletemail&amp;quot;&amp;gt;[[timaschew]]. ([[2012-11-17]]). “[https://stackoverflow.com/a/13430307 How do I purge a linux mail box with huge number of emails? [closed]]”. ''Stack Overflow''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ mail -N&lt;br /&gt;
 &amp;amp; d *&lt;br /&gt;
 &amp;amp; quit&lt;br /&gt;
&lt;br /&gt;
===[[make]]===&lt;br /&gt;
''See [[GNU Make]]''&lt;br /&gt;
&lt;br /&gt;
Compile source code according to a file named &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Note, even with [[GNU make]], column 1 indentations REQUIRE a tab (i.e. `\t`), not a space (`\s`).&amp;lt;ref name=&amp;quot;se_20210701_maketabs&amp;quot;&amp;gt;[https://retrocomputing.stackexchange.com/users/79/stephen-kitt Stephen Kitt].  ([[2021-07-01]]).  “[https://retrocomputing.stackexchange.com/a/20293 Why does make only accept tab-indentation?]”  ''Stack Exchange''.  Accessed [[2023-07-10]]. [https://web.archive.org/web/20230528004825/https://retrocomputing.stackexchange.com/questions/20292/why-does-make-only-accept-tab-indentation Archived] from the original on [[2023-05-28]].&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile multiple source code files with a single `make all` command.&amp;lt;ref name=&amp;quot;so_20110510_makemultiplefiles&amp;quot;&amp;gt;[https://stackoverflow.com/users/714501/cnicutar cnicutar].  ([[2011-05-10]]).  “[https://stackoverflow.com/a/5950445/10850071 Makefile to compile multiple C programs?]”.  ''Stack Overflow''.  Accessed [[2023-07-13]].  [https://web.archive.org/web/20230714044550/https://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/5950445 Archived] from the original on [[2023-07-14]].&amp;lt;/ref&amp;gt; `Makefile` contents:&lt;br /&gt;
&lt;br /&gt;
 all: program1 program2&lt;br /&gt;
 &lt;br /&gt;
 program1: program1.c&lt;br /&gt;
     gcc -o program1 program1.c&lt;br /&gt;
 &lt;br /&gt;
 program2: program2.c&lt;br /&gt;
     gcc -o program2 program2.c&lt;br /&gt;
&lt;br /&gt;
===[[mdadm]]===&lt;br /&gt;
Software [[RAID]] manager.&lt;br /&gt;
&lt;br /&gt;
Check status of RAID device &amp;lt;code&amp;gt;/dev/md0&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot;&amp;gt;[[Gilles]]. ([[2012-01-08]]). “[https://unix.stackexchange.com/a/28642/411854 How to check 'mdadm' RAIDs while running?]”. Accessed [[2023-03-26]]. [https://web.archive.org/web/20150925044124/http://unix.stackexchange.com/questions/28636/how-to-check-mdadm-raids-while-running/28642#28642 Archived] from the original on [[2015-09-25]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Check status of all RAID devices.&amp;lt;ref name=&amp;quot;se_20120108_mmdadmcheck&amp;quot; /&amp;gt;&lt;br /&gt;
 $ sudo cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
===mimetype===&lt;br /&gt;
Get file mimetype&lt;br /&gt;
 $ cat file.jpg | mimetype --stdin&lt;br /&gt;
&lt;br /&gt;
===mktemp===&lt;br /&gt;
Create a temporary directory.&lt;br /&gt;
 $ mktemp -d&lt;br /&gt;
 /tmp/tmp.FV7MlItXOs&lt;br /&gt;
&lt;br /&gt;
Create a temporary directory and store its name.&lt;br /&gt;
 $ myTempDir=&amp;quot;$(mktemp -d)&amp;quot;; declare -p myTempDir;&lt;br /&gt;
 declare -- myTempDir=&amp;quot;/tmp/tmp.kmHLhKvlQV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create a temporary file&lt;br /&gt;
 $ mktemp&lt;br /&gt;
 /tmp/tmp.lnq5aBZmuK&lt;br /&gt;
&lt;br /&gt;
Create a temporary file in a custom directory&lt;br /&gt;
 $ myDir=&amp;quot;$HOME/temp&amp;quot;; mkdir &amp;quot;$myDir&amp;quot;;&lt;br /&gt;
 $ mktemp -p &amp;quot;$myDir&amp;quot;&lt;br /&gt;
 /home/baltakatei/temp/tmp.YENA9Yp7lU&lt;br /&gt;
&lt;br /&gt;
Create a temporary file or directory with a custom name template.&lt;br /&gt;
 $ mktemp foo_XXX&lt;br /&gt;
 foo_yVu&lt;br /&gt;
 $ mktemp foo_XXXXXXXX&lt;br /&gt;
 foo_rVJOX8GE&lt;br /&gt;
 $ mktemp -d bar_XXXXXXXX&lt;br /&gt;
 bar_10Bt5tfy&lt;br /&gt;
&lt;br /&gt;
===[[mpv]]===&lt;br /&gt;
Use newline-delimited stdin list of file paths as playlist.&lt;br /&gt;
 $ find ~/Music/ -type f | mpv --playlist=-&lt;br /&gt;
&lt;br /&gt;
Enable shuffle&lt;br /&gt;
 $ mpv --shuffle&lt;br /&gt;
&lt;br /&gt;
Settings for fast playback (e.g. 2x){{bkc|[[2024-08-11]]: This option may cause issues with playback of some [[FLAC]] files.}}&lt;br /&gt;
 $ mpv --af=scaletempo=stride=15:overlap=1:search=15'&lt;br /&gt;
&lt;br /&gt;
Play video with subtitle file&lt;br /&gt;
 $ mpv --embed-subs=&amp;quot;$filepath&amp;quot; video.mp4&lt;br /&gt;
&lt;br /&gt;
===[[neofetch]]===&lt;br /&gt;
Show system information without art&lt;br /&gt;
 $ neofetch --off&lt;br /&gt;
&lt;br /&gt;
Show system information without formatting or art.&lt;br /&gt;
 $ neofetch --stdout&lt;br /&gt;
&lt;br /&gt;
===[[nethogs]]===&lt;br /&gt;
Show data traffic (i.e. [[bandwidth]] usage) by process on network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ sudo nethogs eth0&lt;br /&gt;
&lt;br /&gt;
: Toggle between data rates and total data amounts with `m`.&lt;br /&gt;
&lt;br /&gt;
===[[notify-send]]===&lt;br /&gt;
Note (Debian): Installed via the [[libnotify-bin]] package.&lt;br /&gt;
&lt;br /&gt;
Create a system notification:&lt;br /&gt;
 $ notify-send &amp;quot;title&amp;quot; &amp;quot;body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===[[openbox]]===&lt;br /&gt;
A window manager for [[LxQt]] and [[Lubuntu]].&lt;br /&gt;
&lt;br /&gt;
Reload configuration files.{{bkc|[[2024-08-21]]: Such as those kept at &amp;lt;code&amp;gt;/usr/share/themes/Mikachu/openbox-3/themerc&amp;lt;/code&amp;gt;.  }}&amp;lt;ref name=&amp;quot;askubuntu_20161006_openbox-window-resize-grab-area&amp;quot;&amp;gt;[https://askubuntu.com/users/248158/dk-bose DK Bose].  ([[2016-10-06]]).  “[https://askubuntu.com/a/834022 Size of grab area for resizing window in lubuntu]”.  Accessed [[2024-08-21]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ openbox --reconfigure&lt;br /&gt;
&lt;br /&gt;
===[[ots]]===&lt;br /&gt;
Use [[OpenTimestamps]] ([https://opentimestamps.org/ website]) to timestamp files against the [[Bitcoin]] blockchain. Program by [[Peter Todd]], a [[Bitcoin Core]] developer.&lt;br /&gt;
&lt;br /&gt;
Install Opentimestamps on Ubuntu 24 via [[pipx]].{{bkc|[[2025-01-18]]: [[pipx]] recommended to install [[ots]] due to [[PEP 668]] ([https://peps.python.org/pep-0668/ link] mandating partitioning operating system environment from user-space. }} Provides the &amp;lt;code&amp;gt;ots&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx install opentimestamps-client&lt;br /&gt;
&lt;br /&gt;
Timestamp &amp;lt;code&amp;gt;file.txt&amp;lt;/code&amp;gt;. Creates timestamp file &amp;lt;code&amp;gt;file.txt.ots&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ ots s file.txt&lt;br /&gt;
 $ ots stamp file.txt&lt;br /&gt;
&lt;br /&gt;
Upgrade a timestamp file. Creates a backup file (&amp;lt;code&amp;gt;file.txt.ots.bak&amp;lt;/code&amp;gt;) if necessary.&lt;br /&gt;
 $ ots upgrade file.txt.ots&lt;br /&gt;
 $ ots u file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a timestamp file.&lt;br /&gt;
 $ ots verify file.txt.ots&lt;br /&gt;
 $ ots v file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Verify a specific file against a specific timestamp file.&lt;br /&gt;
 $ ots v -f file.txt file.txt.ots&lt;br /&gt;
&lt;br /&gt;
Timestamp all files in working directory that lack a timestamp.&lt;br /&gt;
 $ while read -r line; do if [[ ! -f &amp;quot;${line}.ots&amp;quot; ]]; then printf &amp;quot;%s\0&amp;quot; &amp;quot;$line&amp;quot;; fi; done &amp;lt; &amp;lt;(find . -mindepth 1 -maxdepth 1 -type f ! -name &amp;quot;*.ots&amp;quot; | shuf; ) | xargs -0 ots s&lt;br /&gt;
&lt;br /&gt;
===[[pandoc]]===&lt;br /&gt;
Convert [[markdown]] text file into mediawiki code.&amp;lt;ref name=&amp;quot;so_20100926_markdown-to-mediawiki&amp;quot;&amp;gt;[https://stackoverflow.com/users/315013/applicative applicative].  ([[2010-09-26]]).  “[https://stackoverflow.com/a/3796608 Are there any tools to convert markdown to Wiki text in other formats]”.  ''[[stackoverflow.com]]''.  Accessed [[2024-02-27]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ pandoc -f markdown -t mediawiki -o output.wc input.txt&lt;br /&gt;
&lt;br /&gt;
===[[par2]]===&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|par2}}&lt;br /&gt;
&lt;br /&gt;
Create parity files of &amp;lt;code&amp;gt;archive.tar.xz&amp;lt;/code&amp;gt; with default settings. &lt;br /&gt;
 $ par2 create archive.tar.xz.par2 archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
===[[GNU parallel|parallel]]===&lt;br /&gt;
''See [[GNU parallel]]''&lt;br /&gt;
&lt;br /&gt;
Duplicate a set of directories (non-recursively) (e.g. home sub-directories). Metadata not copied.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -mindepth 1 -maxdepth 1 -type d | parallel mkdir &amp;quot;$HOME/{}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hash every file in the home directory.&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;&amp;quot; sha256sum '{}'               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum '{}'  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum '{}'               # &lt;br /&gt;
&lt;br /&gt;
Run a thread for every item in an array.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ myArray=(&amp;quot;jan&amp;quot;); myArray=(&amp;quot;feb&amp;quot;); myArray=(&amp;quot;mar&amp;quot;);&lt;br /&gt;
$ declare -p myArray&lt;br /&gt;
declare -a myArray=([0]=&amp;quot;jan&amp;quot; [1]=&amp;quot;feb&amp;quot; [2]=&amp;quot;mar&amp;quot;)&lt;br /&gt;
$ parallel echo '{}' ::: &amp;quot;${myArray[@]}&amp;quot;&lt;br /&gt;
jan&lt;br /&gt;
feb&lt;br /&gt;
mar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supply different arguments for each job with an `--arg-file`.&lt;br /&gt;
 $ printf &amp;quot;foo\tbee\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;bar\tboo\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ printf &amp;quot;baz\ttax\n&amp;quot; &amp;gt;&amp;gt; args.txt;&lt;br /&gt;
 $ parallel --col-sep '\t' --arg-file args.txt echo '{2}' '{1}';&lt;br /&gt;
 bee foo&lt;br /&gt;
 boo bar&lt;br /&gt;
 tax baz&lt;br /&gt;
&lt;br /&gt;
Avoid OOM by suspending jobs on low memory via &amp;lt;code&amp;gt;--memsuspend 512M&amp;lt;/code&amp;gt; (e.g. 512 [[mebibytes]]), which suspends job if less than &amp;lt;code&amp;gt;2 * 512 = 1024&amp;lt;/code&amp;gt; mebibytes memory free. If only one job remains, it will not suspend.&lt;br /&gt;
 $ seq 1 10 | parallel --memsuspend 512M echo '{}';&lt;br /&gt;
&lt;br /&gt;
===paste===&lt;br /&gt;
List contents of three files as columns.&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; &amp;gt; 1.txt&lt;br /&gt;
 $ printf &amp;quot;bee\nboo\ntax\n&amp;quot; &amp;gt; 2.txt&lt;br /&gt;
 $ paste 1.txt 2.txt&lt;br /&gt;
 foo	bee&lt;br /&gt;
 bar	boo&lt;br /&gt;
 baz	tax&lt;br /&gt;
&lt;br /&gt;
Split lines of a single file into columns&lt;br /&gt;
 $ seq 1 13 | paste - - -  # three columns&lt;br /&gt;
 1	2	3&lt;br /&gt;
 4	5	6&lt;br /&gt;
 7	8	9&lt;br /&gt;
 10	11	12&lt;br /&gt;
 13&lt;br /&gt;
&lt;br /&gt;
===pipx===&lt;br /&gt;
[[pipx]] is a tool that automates the creation of [[virtual environment]]s when installing command-line [[python]] packages via [[pip]].&lt;br /&gt;
&lt;br /&gt;
Install [[pipx]].&lt;br /&gt;
 $ sudo apt install pipx&lt;br /&gt;
 $ pipx ensurepath   # make sure PATH environment variable contains pipx directories&lt;br /&gt;
&lt;br /&gt;
Install [[OpenAI]] [[Whisper (speech recognition system)|Whisper]]&lt;br /&gt;
 $ sudo apt install ffmpeg   # get ffmpeg dependency&lt;br /&gt;
 $ pipx install openai-whisper&lt;br /&gt;
&lt;br /&gt;
Upgrade OpenAI Whisper&lt;br /&gt;
 $ pipx upgrade openai-whisper  # as opposed to 'pip install -U openai-whisper'&lt;br /&gt;
&lt;br /&gt;
===play ([[sox]])===&lt;br /&gt;
Play an audio file from the [[sox]] package. (limited to formats such as MP3, WAV, AIFF, OGG)&lt;br /&gt;
 $ play ~/Music/song.wav&lt;br /&gt;
&lt;br /&gt;
Play an audio file via [[cron]]. To do so, insert the following lines into a [[bash]] script run by [[cron]] (assuming [[Debian]] system)&amp;lt;ref name=&amp;quot;askubuntu_20180610_cron-chime&amp;quot;&amp;gt;[[WinEunuuchs2Unix]].  ([[2018-06-10]]).  “[https://askubuntu.com/a/1045344 Help using crontab to play a sound]”.  [[askubuntu.com]].  Accessed [[2025-10-11]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
  export XDG_RUNTIME_DIR=/run/user/$(id -u);&lt;br /&gt;
  play --vol 0.2 $HOME/Music/chime.wav;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[ps]]===&lt;br /&gt;
Show process PIDs and full commands.&lt;br /&gt;
 $ ps -eo pid,args&lt;br /&gt;
&lt;br /&gt;
===[[pdftk]]===&lt;br /&gt;
Install{{bkc|[[2025-01-26]]: As of [[2025]], &amp;lt;code&amp;gt;$ sudo apt install pdftk&amp;lt;/code&amp;gt; no longer works, likely due to licensing issues with [[PDF Labs]] ([https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ web]) }}&amp;lt;ref name=&amp;quot;gitlab_2023_pdftk-java&amp;quot;&amp;gt;[[Marc Vinyals]].  ([[2023]]).  “[https://gitlab.com/pdftk-java/pdftk pdftk-java]”.  ''[[gitlab.com]]''.  Accessed [[2025-01-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sudo apt install pdftk-java &lt;br /&gt;
&lt;br /&gt;
Combine PDFs&lt;br /&gt;
 $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output output.pdf&lt;br /&gt;
&lt;br /&gt;
Extract page range from a PDF. (e.g. extract first 13 pages)&lt;br /&gt;
 $ pdftk input.pdf cat 1-13 output output.pdf&lt;br /&gt;
&lt;br /&gt;
===[[pdftotext]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install poppler-utils&lt;br /&gt;
&lt;br /&gt;
Convert PDF to text. (Note: If text is [[Raster graphics|rasterized]], use [[#tesseract|tesseract]] instead). &lt;br /&gt;
 $ pdftotext output.pdf output.txt&lt;br /&gt;
&lt;br /&gt;
===[[pgrep]]===&lt;br /&gt;
Exit early if a specific process (e.g. &amp;lt;code&amp;gt;yt-dlp&amp;lt;/code&amp;gt;) is already running.&lt;br /&gt;
  $ if pgrep &amp;quot;yt-dlp&amp;quot; 1&amp;gt;/dev/random 2&amp;gt;&amp;amp;1; then exit 1; fi;&lt;br /&gt;
&lt;br /&gt;
===printf===&lt;br /&gt;
====GNU Coreutils====&lt;br /&gt;
Round a float to nearest integer&amp;lt;ref&amp;gt;{{bk}}: [[2023-09-09]]: Tested with GNU Coreutils 8.32&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;;&lt;br /&gt;
  14&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.29&lt;br /&gt;
  $ myVar=&amp;quot;14.28571&amp;quot;; printf &amp;quot;%.1f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  14.3&lt;br /&gt;
  $ myVar=&amp;quot;-14.28571&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  -14.29&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.2f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  28.57&lt;br /&gt;
  $ myVar=&amp;quot;28.57142&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  29&lt;br /&gt;
&lt;br /&gt;
: Note, GNU Coreutils printf uses “[[Rounding|round to even]]” (i.e. “Bankerʼs rounding”) for cases when 5 must be rounded.&amp;lt;ref name=&amp;quot;se_20151101_printfrounding&amp;quot;&amp;gt;user79742.  ([[2015-11-01]]).  “[https://unix.stackexchange.com/a/240113 Weird float rounding behavior with printf]”.  ''[[unix.stackexchange.com]]''.  Accessed [[2023-10-04]].  [https://web.archive.org/web/20231004195404/https://unix.stackexchange.com/questions/240112/weird-float-rounding-behavior-with-printf/240113#240113 Archived] from the original on [[2023-10-04]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
  $ myVar=&amp;quot;5.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;6.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  6&lt;br /&gt;
  $ myVar=&amp;quot;7.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot;&lt;br /&gt;
  8&lt;br /&gt;
  $ myVar=&amp;quot;8.5&amp;quot;; printf &amp;quot;%.0f\n&amp;quot; &amp;quot;$myVar&amp;quot; &lt;br /&gt;
  8&lt;br /&gt;
&lt;br /&gt;
Print integer with leading zeroes. (see [https://stackoverflow.com/a/18460742/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ n=7; printf &amp;quot;%05d\n&amp;quot; &amp;quot;$n&amp;quot;;&lt;br /&gt;
 00007&lt;br /&gt;
&lt;br /&gt;
Print a bash array (see [https://stackoverflow.com/a/15692004/10850071 ref])&lt;br /&gt;
&lt;br /&gt;
 $ declare -a my_array; my_array+=(&amp;quot;jan&amp;quot;); my_array+=(&amp;quot;feb&amp;quot;);&lt;br /&gt;
 $ printf '%s\n' &amp;quot;${my_array[@]}&amp;quot;;&lt;br /&gt;
 jan&lt;br /&gt;
 feb&lt;br /&gt;
&lt;br /&gt;
Print a progress bar&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 total_iterations=100&lt;br /&gt;
 current_iteration=0&lt;br /&gt;
 &lt;br /&gt;
 while [ $current_iteration -lt $total_iterations ]; do&lt;br /&gt;
     # Your actual loop content goes here&lt;br /&gt;
     sleep 0.1 # This is just an example, replace with your actual task&lt;br /&gt;
 &lt;br /&gt;
     # Calculate progress percentage&lt;br /&gt;
     progress_percentage=$(( 100 * current_iteration / total_iterations ))&lt;br /&gt;
 &lt;br /&gt;
     # Print progress percentage without causing scrolling&lt;br /&gt;
     printf &amp;quot;\rProgress: %3d%%&amp;quot; $progress_percentage&lt;br /&gt;
 &lt;br /&gt;
     # Increment the iteration counter&lt;br /&gt;
     current_iteration=$(( current_iteration + 1 ))&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 # Print a newline character to move to the next line after the loop is done&lt;br /&gt;
 echo&lt;br /&gt;
&lt;br /&gt;
Convert hexadecimal into decimal&lt;br /&gt;
 $ printf &amp;quot;%u\n&amp;quot; &amp;quot;0xFFFF&amp;quot;&lt;br /&gt;
 65535&lt;br /&gt;
&lt;br /&gt;
====C stdio.h====&lt;br /&gt;
Print an int as a hexadecimal&lt;br /&gt;
&lt;br /&gt;
 int a=17; printf(&amp;quot;%x\n&amp;quot;,a);&lt;br /&gt;
&lt;br /&gt;
Print an int as a binary (&amp;lt;code&amp;gt;glibc &amp;gt;2.35&amp;lt;/code&amp;gt;, check via &amp;lt;code&amp;gt;$ ldd --version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 int main()&lt;br /&gt;
   int a=1023; printf(&amp;quot;%b\n&amp;quot;,a); return 0;&lt;br /&gt;
&lt;br /&gt;
: When compiled with &amp;lt;code&amp;gt;gcc-12&amp;lt;/code&amp;gt; (previous versions throw errors) and glibc &amp;gt;2.35, this prints:&lt;br /&gt;
&lt;br /&gt;
 1111111111&lt;br /&gt;
&lt;br /&gt;
===[[rev]]===&lt;br /&gt;
Get a counted list of unique file extensions in the current working directory.&lt;br /&gt;
&lt;br /&gt;
 $ find ./ -type f | rev | cut -d'/' -f1 | cut -d'.' -f1 | rev | sort | uniq -c | sort -hk1;&lt;br /&gt;
&lt;br /&gt;
: An explanation:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
$ find ./ -type f | \  # Get a list of files in current working directory.&lt;br /&gt;
  rev | \              # Reverse order of characters within each line.&lt;br /&gt;
  cut -d'/' -f1 | \    # Get file name.&lt;br /&gt;
  cut -d'.' -f1 | \    # Cut all characters except for those before the final `.` in the filename.&lt;br /&gt;
  rev | \              # Restore order of characters within each line.&lt;br /&gt;
  sort | \             # Sort for uniq.&lt;br /&gt;
  uniq -c | \          # Count and remove duplicates.&lt;br /&gt;
  sort -hk1;           # Sort by extension count field of each line.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[rsync]]===&lt;br /&gt;
Note: These commands assume use of ''rsync'' version &amp;lt;code&amp;gt;3.2.7 protocol version 31&amp;lt;/code&amp;gt;, which is available on [[Debian]] version &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|rsync}}&lt;br /&gt;
&lt;br /&gt;
Exclude all dotfiles or dotdirectories at any directory level.&lt;br /&gt;
 $ echo &amp;quot;.*/**&amp;quot; &amp;gt;&amp;gt; exclude.txt&lt;br /&gt;
 $ rsync -avu --exclude-from=exclude.txt somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy all files contained within a directory named &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; located within &amp;lt;code&amp;gt;somepath&amp;lt;/code&amp;gt; into a directory named &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; within &amp;lt;code&amp;gt;anotherpath&amp;lt;/code&amp;gt;, preserving file attributes (e.g. user:group, read/write/execute permissions), and overwriting existing files within &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; if they differ in modification date and/or size from those of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;. The forward slashes after &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; are significant; omitting them may cause the creation of a new directory layer instead of synchronizing the file trees of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
&lt;br /&gt;
Make the contents of &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; exactly match that of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;, overwriting and deleting files as required in &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; via the &amp;lt;code&amp;gt;--delete-before&amp;lt;/code&amp;gt; command, performing all deletions before file copying begins. This is useful for updating a backup of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --delete-before somepath/SOURCE/ anotherpath/somedir/DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files from a local &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt; in a remote user's home directory (e.g. &amp;lt;code&amp;gt;/home/username/DEST/&amp;lt;/code&amp;gt;) via the [[ssh]] command.&lt;br /&gt;
 $ rsync -avu -e 'ssh' somepath/SOURCE/ username@hostname:DEST/&lt;br /&gt;
&lt;br /&gt;
Copy files only files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their filenames from a &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;. This preserves the directory tree of &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
:: Exclude &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt;files larger than 100 000 000 bytes.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --max-size=100MB --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
: Move (i.e. extract) only the files containing &amp;lt;code&amp;gt;_small&amp;lt;/code&amp;gt; in their file names, deleting them from &amp;lt;code&amp;gt;SOURCE&amp;lt;/code&amp;gt; if successfully copied to &amp;lt;code&amp;gt;DEST&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rsync -avu --progress --include '*/' --include '*_small*' --exclude '*' --remove-source-files somepath/SOURCE/ somepath/DEST/&lt;br /&gt;
&lt;br /&gt;
Recreate full path at destination.&amp;lt;ref name=&amp;quot;askubuntu_20141121_rsync-preserve-dirtree&amp;quot;&amp;gt;[https://askubuntu.com/users/193328/jan jan].  ([[2014-11-21]]).  “[https://askubuntu.com/a/552122 Preserve directory tree while copying with rsync]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ rsync -avu -R somepath/SOURCE/ anotherpath/DEST/&lt;br /&gt;
 $ ls anotherpath/DEST/somepath/SOURCE/&lt;br /&gt;
&lt;br /&gt;
===sed===&lt;br /&gt;
[https://www.gnu.org/software/sed/manual/sed.html GNU sed manual].&lt;br /&gt;
&lt;br /&gt;
Replace first instance of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/'&lt;br /&gt;
 fee foo&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string.&lt;br /&gt;
 $ echo &amp;quot;foo foo&amp;quot; | sed 's/oo/ee/g'&lt;br /&gt;
 fee fee&lt;br /&gt;
&lt;br /&gt;
Replace all instances of a string in a file (CAUTION: modifies the file):&lt;br /&gt;
 $ printf &amp;quot;foo\n&amp;quot; &amp;amp;gt; bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 foo&lt;br /&gt;
 $ sed -i 's/oo/ee/g' bar.txt&lt;br /&gt;
 $ cat bar.txt&lt;br /&gt;
 fee&lt;br /&gt;
&lt;br /&gt;
Append something to the start of each line ([https://unix.stackexchange.com/a/443150 ref]):&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's/^/foo/'&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed 's~^~foo~'   # use ~ instead of / as regex delimiter&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
&lt;br /&gt;
Delete blank lines. (see [https://unix.stackexchange.com/a/76066/411854 ref])&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot;&lt;br /&gt;
 foo&lt;br /&gt;
 &lt;br /&gt;
 bar&lt;br /&gt;
 $ printf &amp;quot;foo\n\nbar\n&amp;quot; | sed '/^$/d'&lt;br /&gt;
 foo&lt;br /&gt;
 bar&lt;br /&gt;
&lt;br /&gt;
Remove an initial `./` from the start of file lists produced by `find` whether newlines or NULL chars are used as list delimiters. Example: [[sumdir]] v0.1.2&lt;br /&gt;
 $ sed -E 's/(^|\x00)\.\//\1/g'&lt;br /&gt;
&lt;br /&gt;
Print specific lines of a file. (i.e. get a specific line from a file)&lt;br /&gt;
 $ some_command | sed -n '2p'  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n '2p' file.txt        # prints line 2&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/74076669&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed '2q;d' big_file.txt     # prints line of a very large file.&amp;lt;ref&amp;gt;{{bk}}; [[2024-01-29]]: See https://stackoverflow.com/a/30657175 &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ sed -n '2p'&lt;br /&gt;
 $ sed -n '2,5p' file.txt      # prints lines 2 through 5 inclusive.{{bkc|[[2025-04-04]]: Consider using [[#tail]] and [[#head]] &amp;lt;code&amp;gt;$ seq 1 100 &amp;amp;#124; tail -n+50 &amp;amp;#124; head -n4&amp;lt;/code&amp;gt; (get values 50 to 53).}}&lt;br /&gt;
 $ sed -n '2p;5p;' file.txt    # prints only lines 2 and 5.&lt;br /&gt;
&lt;br /&gt;
Substitute special characters&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 8&amp;quot; | sed -E -e 's/*/x/'    # doesn't work because asterisk is special regex&lt;br /&gt;
 sed: -e expression #1, char 6: Invalid preceding regular expression&lt;br /&gt;
 $ echo &amp;quot;2 * 5 = 10&amp;quot; | sed -E -e 's/\*/x/'  # works&lt;br /&gt;
&lt;br /&gt;
===seq===&lt;br /&gt;
Generate a sequence of integers, newline-delimited.&lt;br /&gt;
 $ seq 1 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
===[[ssh]]===&lt;br /&gt;
Connect to a local machine's [[Syncthing]] instance via [[firefox]].&lt;br /&gt;
 $ firefox 127.0.0.1:8384&lt;br /&gt;
&lt;br /&gt;
Connect to a remote server's [[Syncthing]] instance via [[ssh]] port forwarding and [[firefox]].&lt;br /&gt;
 $ ssh -L 127.0.0.1:8388:127.0.0.1:8384 user@hostname&lt;br /&gt;
 $ firefox 127.0.0.1:8388&lt;br /&gt;
&lt;br /&gt;
Get a host's SSH fingerprint&amp;lt;ref name=&amp;quot;se_20160509_sshkeyscan&amp;quot;&amp;gt;[[Anthony Geoghegan]]. ([[2016-05-09]]). “[https://unix.stackexchange.com/a/268692/411854 Get SSH server key fingerprint]”. Accessed [[2023-06-25]]. &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub&lt;br /&gt;
&lt;br /&gt;
====Configure [[gnupg]], [[ssh]], and smartcard on [[macOS]]====&lt;br /&gt;
Install necessary [[homebrew]] packages&lt;br /&gt;
 % [[#brew|brew]] update &amp;amp;&amp;amp; brew upgrade;&lt;br /&gt;
 % brew install gnupg pinentry-mac&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ gpg -K&amp;lt;/code&amp;gt; should have a line like this with &amp;lt;code&amp;gt;&amp;amp;#91;A&amp;amp;#93;&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ssb&amp;gt;  rsa4096/0x5F9D26B9A598A2D3 2018-05-16 [A] [expires: 2026-07-07]&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to use &amp;lt;code&amp;gt;pinentry-mac&amp;lt;/code&amp;gt;&lt;br /&gt;
 % which pinentry;&lt;br /&gt;
 /opt/homebrew/bin/pinentry-mac;&lt;br /&gt;
 % which pinentry-mac &amp;gt;&amp;gt; ~/.gnupg/gpg-agent.conf;&lt;br /&gt;
&lt;br /&gt;
Configure [[GnuPG]] to be able to talk to [[ssh]] by:&lt;br /&gt;
: Adding these lines to &amp;lt;code&amp;gt;~/.gnupg/gpg-agent.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default-cache-ttl 300&lt;br /&gt;
max-cache-ttl 999999&lt;br /&gt;
enable-ssh-support&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: and exporting these environment variables to your shell (probably &amp;lt;code&amp;gt;~/.[[zsh]]rc&amp;lt;/code&amp;gt; as of [[2024]])&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export GPG_TTY=&amp;quot;$(tty)&amp;quot;;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;$(gpgconf --list-dirs agent-ssh-socket)&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the [[ssh]] public key from your [[OpenPGP]] key via [[GnuPG]]:&lt;br /&gt;
: Get public key line to add to remote machine&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID &amp;gt; my_gpg_ssh_pubkey.txt&lt;br /&gt;
&lt;br /&gt;
: This should look like:&lt;br /&gt;
 $ cat my_gpg_ssh_pubkey.txt &lt;br /&gt;
 $ ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&lt;br /&gt;
&lt;br /&gt;
: Add ssh pubkey to remote machine by&lt;br /&gt;
:: running this command remotely (via a preëxisting [[ssh]] session or by visiting the remote machine physically)&lt;br /&gt;
 remote$ echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAA… user@host&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
:: or by running this comand locally:&lt;br /&gt;
 $ gpg --export-ssh-key YOUR_KEY_ID | ssh user@remote 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'&lt;br /&gt;
&lt;br /&gt;
Restart [[gnupg]] to apply configuration changes:&lt;br /&gt;
 $ gpgconf --kill gpg-agent;&lt;br /&gt;
 $ gpgconf --launch gpg-agent;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
 $ ssh user@remote&lt;br /&gt;
&lt;br /&gt;
: If you never have to use the server's password for the &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; user, then you succeeded.&lt;br /&gt;
&lt;br /&gt;
{{#lsth:{{PAGENAME}}/prv|ssh}}&lt;br /&gt;
&lt;br /&gt;
===[[sort]]===&lt;br /&gt;
Sort &amp;lt;code&amp;gt;[[du]]&amp;lt;/code&amp;gt; results on human-readable file size of current working directory (non-recursively).&lt;br /&gt;
 $ du -hd1 ./ | sort -hk1&lt;br /&gt;
&lt;br /&gt;
Sort part of a checksum file while ignoring some initial lines (e.g. a checksum file generated by &amp;lt;code&amp;gt;sumdir&amp;lt;/code&amp;gt;). Sorts every line except for the first three lines which it leaves at the top; the output is written to &amp;lt;code&amp;gt;/tmp/0.txt&amp;lt;/code&amp;gt;. Uses the &amp;lt;code&amp;gt;-k2&amp;lt;/code&amp;gt; (i.e. &amp;quot;key 2&amp;quot;) option of &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; which says to sort by the file name, not the hash (hash is first whitespace-separated entry, file name is the second).&lt;br /&gt;
&lt;br /&gt;
 file=.SUMSHA256--20230126T050458+0000; ( cat &amp;quot;$file&amp;quot; | head -n3; cat &amp;quot;$file&amp;quot; | tail -n+4 | sort -k2; ) &amp;gt; /tmp/0.txt&lt;br /&gt;
&lt;br /&gt;
Sort on the third field of comma-delimited lines&lt;br /&gt;
 $ printf &amp;quot;1,foo,kobo\n2,bar,kaela\n3,baz,zeta\n&amp;quot; | sort -t',' -k3&lt;br /&gt;
 2,bar,kaela&lt;br /&gt;
 1,foo,kobo&lt;br /&gt;
 3,baz,zeta&lt;br /&gt;
&lt;br /&gt;
Remove duplicate lines without sorted result (preserving first copied unique line). (see [https://stackoverflow.com/a/20639730/10850071 ref])&lt;br /&gt;
 $ myVar=&amp;quot;$( printf &amp;quot;gundam\ninuyasha\ngundam\nbleach\ngundam\nnaruto\ngundam\n&amp;quot; )&amp;quot;&lt;br /&gt;
 $ echo &amp;quot;$myVar&amp;quot; | cat -n | sort -uk2 | sort -n | cut -f2-&lt;br /&gt;
 gundam&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
&lt;br /&gt;
: Preserving last unique copied line.&lt;br /&gt;
 echo &amp;quot;$myVar&amp;quot; | tac | cat -n | sort -uk2 | sort -n | cut -f2- | tac&lt;br /&gt;
 inuyasha&lt;br /&gt;
 bleach&lt;br /&gt;
 naruto&lt;br /&gt;
 gundam&lt;br /&gt;
&lt;br /&gt;
===[[stdbuf]]===&lt;br /&gt;
A [[GNU Coreutils]] program that controls how stdin, stdout, and error data is passed in and out of a program.&lt;br /&gt;
&lt;br /&gt;
Read input from ''stdin'' and pass through output to ''stdout'' without any buffering.&amp;lt;ref name=&amp;quot;se_20110619_stdbuf&amp;quot;&amp;gt;[[a3nm]]. ([[2011-06-19]]). “[https://unix.stackexchange.com/a/25378 Turn off buffering in pipe]”. ''Stack Exchange''. Accessed [[2023-06-06]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ stdbuf -i0 -o0 -e0 command&lt;br /&gt;
&lt;br /&gt;
: Example: Continuously filtering [[journalctl]] output to capture &amp;lt;code&amp;gt;apache-access&amp;lt;/code&amp;gt; lines while discarding the first 7 space-delimited fields of each line. If ''stdbuf'' is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from ''journalctl'', choosing to wait until a buffer is filled before displaying them (defeating the purpose of the &amp;lt;code&amp;gt;--follow&amp;lt;/code&amp;gt; option of ''journalctl'').&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
journalctl --all --output=short-iso --since=-7d --follow |\&lt;br /&gt;
  grep --line-buffered -Eiv &amp;quot; 404 &amp;quot; |\&lt;br /&gt;
  grep --line-buffered &amp;quot;apache-access&amp;quot; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 tr -s ' ' |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d' ' -f8- -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[strace]]===&lt;br /&gt;
Read stderr of a backgrounded and disowned process with process ID &amp;lt;code&amp;gt;pid&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ strace -p &amp;quot;$pid&amp;quot; -e trace=write&lt;br /&gt;
&lt;br /&gt;
===su===&lt;br /&gt;
Open a shell as root.&lt;br /&gt;
 alice@host: sudo su -&lt;br /&gt;
 root@host: whoami&lt;br /&gt;
 root&lt;br /&gt;
&lt;br /&gt;
Open a &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; shell as another user, e.g. &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
 alice@host: whoami&lt;br /&gt;
 alice&lt;br /&gt;
 alice@host: sudo su - www-data -s /bin/bash&lt;br /&gt;
 [sudo] password for alice:&lt;br /&gt;
 www-data@host: whoami&lt;br /&gt;
 www-data&lt;br /&gt;
&lt;br /&gt;
===sumdir===&lt;br /&gt;
A script by [[Christopher Lovejoy]] (used with &amp;lt;code&amp;gt;checkdir&amp;lt;/code&amp;gt;). [https://github.com/monking/shell-utilities/blob/main/sumdir Source at GitHub].&lt;br /&gt;
&lt;br /&gt;
Create checksum of files in working directory recursively, excluding files with names: ending in &amp;lt;code&amp;gt;.asc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.ots&amp;lt;/code&amp;gt; and files starting with &amp;lt;code&amp;gt;.SUM&amp;lt;/code&amp;gt;. Resulting file has pattern: &amp;lt;code&amp;gt;.SUM${digest_name}&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;.SUMB2--20230128T013153+0000&amp;lt;/code&amp;gt;).&lt;br /&gt;
 $ sumdir -a sha256 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
 $ sumdir -a b2 -r -x &amp;quot;*.asc&amp;quot; -x &amp;quot;*.ots&amp;quot; -x &amp;quot;.SUM*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===swapoff===&lt;br /&gt;
''Possibly [[Ubuntu]]-specific''&lt;br /&gt;
&lt;br /&gt;
Temporarily all swap file entries in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.{{bkc|[[2025-01-21]]: Generally, to permanently disable swap, comment out the relevant swap lines in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;. }}&lt;br /&gt;
 $ sudo swapoff -a&lt;br /&gt;
&lt;br /&gt;
===[[tail]]===&lt;br /&gt;
Get last 4 lines of a stdin steam.&lt;br /&gt;
 $ seq 1 10 | tail -n4&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Get all lines, but start on line 4.&lt;br /&gt;
 $ seq 1 10 | tail -n+4&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice}}{{Anchor|tail-slice-lines}}Get lines 4 through 6.&amp;lt;ref name=&amp;quot;se_20131009_print-lines-tail-head&amp;quot;&amp;gt;[https://unix.stackexchange.com/users/22222/terdon terdon].  ([[2013-10-09]]).  “[https://unix.stackexchange.com/a/94320 Efficient way to print lines from a massive file using awk, sed, or something else?]”.  ''[[stackexchange.com]]''.  Accessed [[2025-04-04]].  &amp;lt;/ref&amp;gt; Note: is more efficient than [[#sed|sed]] or [[#awk|awk]] when processing large files.&lt;br /&gt;
 $ seq 1 10 | tail -n+4 | head -n3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
: Get lines 4 through 6 via variables and Bash arithmetic.&lt;br /&gt;
 $ start=4; end=6; seq 1 10 | tail -n+${start} | head -n$((end - start + 1))&lt;br /&gt;
&lt;br /&gt;
{{Anchor|tail-slice-bytes}}Print 4th to 7th bytes of a seekable file. (see [[#head-slice-bytes|#head]] for non-seekable case)&lt;br /&gt;
 $ selStart=$((4-1)); selEnd=$((7-1)); selCount=$((selEnd-selStart+1));&lt;br /&gt;
 $ tail --bytes=+$((selStart+1)) -- foo.txt | head --bytes=$((selCount));  # GNU Coreutils 8.32&lt;br /&gt;
 $ tail -c +$((selStart+1)) -- foo.txt | head -c $((selCount));  # BSD/macOS&lt;br /&gt;
&lt;br /&gt;
===[[tar]]===&lt;br /&gt;
''See [[File compression notes]].''&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;some_dir.rar&amp;lt;/code&amp;gt; out of the contents of the directory &amp;lt;code&amp;gt;some_dir&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tar -cf some_dir.rar some_dir&lt;br /&gt;
&lt;br /&gt;
Extract a compressed archive (e.g. &amp;lt;code&amp;gt;.tar.xz&amp;lt;/code&amp;gt;) in the current working directory.&lt;br /&gt;
 $ tar -xf archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
: Extract to a different directory &amp;lt;code&amp;gt;some/path/&amp;lt;/code&amp;gt;. (The positioning of &amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt; is important.)&lt;br /&gt;
 $ tar -xf archive.tar.xz -C some/path/&lt;br /&gt;
&lt;br /&gt;
===tee===&lt;br /&gt;
Echo stdout to stderr ([https://stackoverflow.com/a/3142166/10850071 ref]):&lt;br /&gt;
 $ echo &amp;quot;This is standard error&amp;quot; | tee /dev/stderr | sed 's/error/out/g'&lt;br /&gt;
 This is standard error&lt;br /&gt;
 This is standard out&lt;br /&gt;
&lt;br /&gt;
===[[Tesseract (software)|tesseract]]===&lt;br /&gt;
Install.&lt;br /&gt;
 $ sudo apt install tesseract-ocr&lt;br /&gt;
 $ sudo apt install tesseract-ocr-eng  # english&lt;br /&gt;
&lt;br /&gt;
Perform OCR on &amp;lt;code&amp;gt;input.jpg&amp;lt;/code&amp;gt; to create &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ tesseract input.jpg output -l eng&lt;br /&gt;
&lt;br /&gt;
===[[top (software)|top]]===&lt;br /&gt;
View process, sorted by CPU usage&lt;br /&gt;
 $ top&lt;br /&gt;
&lt;br /&gt;
Shortcuts&amp;lt;ref name=&amp;quot;transip_2024_linux-top-shortcuts&amp;quot;&amp;gt;“[https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Using the top command in Linux]”.  (n.d.).  ''[[transip.eu]]''.  Accessed [[2024-01-06]].  [https://web.archive.org/web/20231127225012/https://www.transip.eu/knowledgebase/entry/1979-using-the-top-command-linux/ Archived] from the original on [[2023-11-27]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Arrow keys &amp;amp; page up/down: Navigate through the displayed list in the Task area.&lt;br /&gt;
* &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;: Finish the top with the &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;-key.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-p&amp;lt;/code&amp;gt;: Sort the processes by CPU usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-m&amp;lt;/code&amp;gt;: Sort the processes by memory (%MEM) usage.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-t&amp;lt;/code&amp;gt;: Sort the processes by running-time.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-n&amp;gt;&amp;lt;/code&amp;gt;: Sort the processes by process ID.&lt;br /&gt;
* &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;: Changes the display of the CPU usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;: Changes the display of memory usage in the summary section.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-r&amp;lt;/code&amp;gt;: Sort the processes in ascending order instead of descending (default).&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;: By pressing &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, the 'Command' column shows the entire path from which the processes were started.&lt;br /&gt;
* &amp;lt;code&amp;gt;S-v&amp;lt;/code&amp;gt;: Shows the parent / child process hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;: Prompts for a process ID and closes the specified process. By default, SIGTERM is used for a graceful shutdown of the process. For a forced shutdown, you use SIGKILL.&lt;br /&gt;
&lt;br /&gt;
===[[tr]]===&lt;br /&gt;
====Remove unwanted character sets====&lt;br /&gt;
Keep only printable characters and spaces from a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/bin/bash&lt;br /&gt;
name=&amp;quot;message:おはよう　ございます.&amp;quot;;&lt;br /&gt;
name_new=&amp;quot;$( printf &amp;quot;%s&amp;quot; &amp;quot;$name&amp;quot; | tr -dc '[:graph:][:space:]' )&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name&amp;quot;;&lt;br /&gt;
printf &amp;quot;%s\n&amp;quot; &amp;quot;$name_new&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This results in:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
message:おはよう　ございます.&lt;br /&gt;
message:.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[tree (command)]]===&lt;br /&gt;
Recursively list contents of current working directory.&lt;br /&gt;
 $ tree&lt;br /&gt;
&lt;br /&gt;
: List contents without colorized text.&lt;br /&gt;
 $ tree | ansi2txt&lt;br /&gt;
&lt;br /&gt;
===unar===&lt;br /&gt;
Install on a [[Debian]] system via [[apt]].&lt;br /&gt;
 $ sudo apt update &amp;amp;&amp;amp; sudo apt install unar&lt;br /&gt;
&lt;br /&gt;
Decompress a [[rar]] archive.&lt;br /&gt;
 $ unar archive.rar&lt;br /&gt;
&lt;br /&gt;
===unzip===&lt;br /&gt;
''For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].''&lt;br /&gt;
&lt;br /&gt;
Unzip to directory &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ mkdir foo&lt;br /&gt;
 $ unzip -d foo archive.zip&lt;br /&gt;
&lt;br /&gt;
Unzip archives containing file names encoded in non-English encodings:&lt;br /&gt;
: [[Shift JIS]] [[Japanese]] encoding.&amp;lt;ref name=&amp;quot;askubuntu_20170711_unzip-shiftjis&amp;quot;&amp;gt;[https://askubuntu.com/users/4066/nicolas-raoul Nicolas Raoul].  ([[2017-07-11]]).  “[https://askubuntu.com/a/935023 How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters]”.  ''[[askubuntu.com]]''.  Accessed [[2024-04-12]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ unzip -O shift-jis archive.zip&lt;br /&gt;
: [[Simplified Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O gb18030 archive.zip  # [[GB 18030]] is a superset of [[GBK]]. Try this first.&lt;br /&gt;
 $ unzip -O gbk archive.zip      # [[GBK (character encoding)|GBK]] an extension of [[GB 2312]].&lt;br /&gt;
 $ unzip -O gb2312 archive.zip   # [[GB 2312]] deprecated in 2017&lt;br /&gt;
: [[Big5]] [[Traditional Chinese characters]] encoding.&lt;br /&gt;
 $ unzip -O big5 archive.zip&lt;br /&gt;
&lt;br /&gt;
===[[veracrypt]]===&lt;br /&gt;
Mount a volume.&lt;br /&gt;
 $ veracrypt volume.hc&lt;br /&gt;
&lt;br /&gt;
Unmount all volumes.&lt;br /&gt;
 $ veracrypt -d&lt;br /&gt;
: If you get an error message resembling &amp;lt;code&amp;gt;Error: umount: /media/veracrypt1: target is busy&amp;lt;/code&amp;gt;, then identify the offending process with [[lsof]]&amp;lt;ref name=&amp;quot;so_20111024_unmountbusydev&amp;quot;&amp;gt;[[Frank Tudor|Tudor, Frank]].  ([[2011-10-24]]).  “[https://stackoverflow.com/a/7878763 How to unmount a busy device [closed]]”.  ''[[stackoverflow.com]]''.  Accessed [[2023-07-25]].  [https://web.archive.org/web/20230620181852/https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device/7878763#7878763 Archived] from the original on [[2023-06-20]].  &amp;lt;/ref&amp;gt;:&lt;br /&gt;
 $ lsof | grep '/media/veracrypt1'&lt;br /&gt;
&lt;br /&gt;
Unmount a specific volume.&lt;br /&gt;
 $ veracrypt -d volume.hc&lt;br /&gt;
&lt;br /&gt;
Create a volume.&lt;br /&gt;
 $ veracrypt -t -c&lt;br /&gt;
&lt;br /&gt;
===[[wc]]===&lt;br /&gt;
Word count. Part of GNU Coreutils 8.32.&lt;br /&gt;
&lt;br /&gt;
Count bytes in a file named &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ wc -c foo.txt&lt;br /&gt;
 20087&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt; (with an off-by-one error due to Bash adding a trailing newline character).&lt;br /&gt;
 $ wc -c &amp;lt;&amp;lt;&amp;lt; &amp;quot;foo.txt&amp;quot;&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
Count the bytes in the file name &amp;lt;code&amp;gt;foo.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ filename=&amp;quot;foo.txt&amp;quot;; printf &amp;quot;%s&amp;quot; &amp;quot;$filename&amp;quot; | wc -c&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
===[[wondershaper]]===&lt;br /&gt;
Limit bandwidth of network interface &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{bk}}: [[2024-01-12]]: Network interfaces and [[DHCP]]-assigned [[IP address]]es can be listed via &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; to 5000kbps download and 1000kbps upload.&lt;br /&gt;
 $ wondershaper eth0 5000 1000&lt;br /&gt;
&lt;br /&gt;
Clear [[wondershaper]] limits.&lt;br /&gt;
 $ wondershaper clear&lt;br /&gt;
&lt;br /&gt;
===[[yt-dlp]]===&lt;br /&gt;
''For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].''&lt;br /&gt;
&lt;br /&gt;
''See example wrapper script [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/107b9c5341a52d03350d698b5ec42e26d810a93c/user/bkytpldl-generic here (&amp;lt;code&amp;gt;bkytpldl-generic&amp;lt;/code&amp;gt; v4.1.1)].''&lt;br /&gt;
&lt;br /&gt;
Delay between downloads&lt;br /&gt;
 $ yt-dlp --sleep-requests 2&lt;br /&gt;
&lt;br /&gt;
Remember downloaded videos to avoid redownload attempts.&lt;br /&gt;
 $ yt-dlp --download-archive some/path/history.txt &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Randomize order in which playlist items are downloaded.&lt;br /&gt;
 $ yt-dlp --playlist-random &amp;quot;$URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Handle &amp;lt;code&amp;gt;File name too long&amp;lt;/code&amp;gt; error by limiting long fields by byte count.&amp;lt;ref name=&amp;quot;ytdlp_2021_long-filename&amp;quot;&amp;gt;[[tylerszabo]]. ([[2021-10-01]]). “[https://github.com/yt-dlp/yt-dlp/issues/1136  [Feature request] Handle Long filenames in default template and temporary files #1136]”.  ''[[github.com]]'', [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o '%(title).200B.%(ext)s' '&amp;lt;url&amp;gt;'&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o '%(title).140B.%(ext)s' '&amp;lt;url&amp;gt;'  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o '%(title)s.%(ext)s' '&amp;lt;url&amp;gt;'      # may fail if title too long&lt;br /&gt;
&lt;br /&gt;
Download lowest quality.&amp;lt;ref name=&amp;quot;su_20210806_ytdlp-lowest-quality&amp;quot;&amp;gt;[https://superuser.com/users/1052727/sherman Sherman].  ([[2021-08-06]]).  “[https://superuser.com/a/1667932/1142336 Download the lowest quality video with youtube-dl]”.  ''[[superuser.com]]''.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S '+size,+br'&lt;br /&gt;
&lt;br /&gt;
Write automatic subtitles of a [[YouTube]] video to a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 $ yt-dlp --write-subs --write-auto-subs https://www.youtube.com/watch?v=bbkUn0o3L1Y&lt;br /&gt;
&lt;br /&gt;
: Parse such a &amp;lt;code&amp;gt;.vtt&amp;lt;/code&amp;gt; file in order to extract the text (reading every 8th line with an offset)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;clear; offset=1; cycle=8; n=0; {&lt;br /&gt;
  while read -r line; do&lt;br /&gt;
    if [[ ! $((n % cycle)) -eq &amp;quot;$offset&amp;quot; ]]; then&lt;br /&gt;
      ((n++)); continue; fi;&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;$line&amp;quot;;&lt;br /&gt;
    ((n++));&lt;br /&gt;
  done &amp;amp;lt; Unicode\ and\ Byte\ Order\ \[bbkUn0o3L1Y\].en.vtt;&lt;br /&gt;
  echo &amp;quot;STATUS:Done.&amp;quot; 1&amp;gt;&amp;amp;2;&lt;br /&gt;
} | grep -v &amp;quot;^$&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[xargs]]===&lt;br /&gt;
Break up many lines into groups to avoid [[xargs]] limits on argument counts and maximum command lengths.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
bite=100;  # group size  ADJUST ME&lt;br /&gt;
n=1;  # initialize loop counter&lt;br /&gt;
declare -a buffer;  # initialize line group&lt;br /&gt;
&lt;br /&gt;
# Populate and process full groups.&lt;br /&gt;
while read -r line; do&lt;br /&gt;
  buffer+=(&amp;quot;$line&amp;quot;);&lt;br /&gt;
  if [[ $(( n % bite )) -eq 0 ]]; then&lt;br /&gt;
    printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command  &lt;br /&gt;
    unset buffer;&lt;br /&gt;
    sleep 1;  # throttle&lt;br /&gt;
  fi;&lt;br /&gt;
  ((n++));&lt;br /&gt;
done &amp;lt; &amp;lt;(seq 1 1000);  # ADJUST ME  replace with command that generates many lines  &lt;br /&gt;
&lt;br /&gt;
# Handle final partially filled group.&lt;br /&gt;
if [[ &amp;quot;${#buffer[@]}&amp;quot; -gt 0 ]]; then&lt;br /&gt;
  printf &amp;quot;%s\n&amp;quot; &amp;quot;${buffer[@]}&amp;quot; | xargs echo;  # ADJUST ME  replace 'echo' with your command&lt;br /&gt;
fi;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert several lines of [[stdin]] into words. This may be useful if a command needs to perform an operation on all items in a long [[newline-delimited]] [[list]] as [[argument]] [[parameters]] instead of [[standard input]]. The following expressions are equivalent calls of [[ls]] to list the files &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;baz&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ printf &amp;quot;foo\nbar\nbaz\n&amp;quot; | xargs -d '\n' ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d '\n'&amp;lt;/code&amp;gt; requires that only [[newlines]] are used to separate (i.e. [[delimiter|delimit]]) arguments. The &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; option is necessary in newline-delimited lists because &amp;lt;code&amp;gt;xargs&amp;lt;/code&amp;gt; will split lines on [[whitespace characters]] such as the [[space character]]. For example, &amp;lt;code&amp;gt;printf &amp;quot;1 qux\n2 quux\n3 corge\n&amp;quot; | xargs -d '\n' ls -alh;&amp;lt;/code&amp;gt; will not apply &amp;lt;code&amp;gt;ls -alh&amp;lt;/code&amp;gt; to the three files &amp;lt;code&amp;gt;1 qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 quux&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;3 corge&amp;lt;/code&amp;gt;, but instead will erroneously use six other files &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;qux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quux&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;corge&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===[[zip]]===&lt;br /&gt;
Compress a directory &amp;lt;code&amp;gt;my_dir&amp;lt;/code&amp;gt; into a zip archive &amp;lt;code&amp;gt;my_dir.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ dir_in=./my_dir; zip_out=&amp;quot;${dir_in}.zip&amp;quot;; zip -r &amp;quot;$zip_out&amp;quot; &amp;quot;$dir_in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|private}} | }}&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |* [[{{FULLPAGENAME}}/prv]] | }}&lt;br /&gt;
{{#ifexist: {{FULLPAGENAME}}/prv |{{#lsth:{{PAGENAME}}/prv|See also private}} | }}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{bk wikis}}&lt;br /&gt;
&lt;br /&gt;
{{refsec}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Command line]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
</feed>