<?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-08-11T01:45:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Pok%C3%A9mon_Go_notes&amp;diff=198222</id>
		<title>Pokémon Go notes</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Pok%C3%A9mon_Go_notes&amp;diff=198222"/>
		<updated>2026-06-20T21:19:49Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{bk}}ʼs notes for [[Pokémon Go]].    {{#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;
==Terminology==&lt;br /&gt;
; CP&lt;br /&gt;
: (a.k.a. &#039;&#039;&#039;Combat Power&#039;&#039;&#039;) A rough measure of Pokemon strength visible even for uncaught Pokemon in the wild. A function of attack, defense, stamina, and level.&amp;lt;ref&amp;gt;[[Kratos]].  ([[2018-02-05]]).  “[https://pokemongohub.net/post/wiki/cp-mechanics/ Pokémon GO Combat Power: Ultimate Guide]”.  &#039;&#039;[[pokemonhub.net]]&#039;&#039;.  Accessed [[2025-11-02]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Type chart&amp;lt;ref name=&amp;quot;pgohub_2025_pgo-type-chart&amp;quot;&amp;gt;“[https://db.pokemongohub.net/tools/type-chart Pokémon GO Type Chart]”.  (n.d.).  &#039;&#039;[[pokemongohub.net]]&#039;&#039;.  Accessed [[2025-10-15]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:right;&amp;quot; | Weak against&lt;br /&gt;
! Type&lt;br /&gt;
! Strong against&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Rock, &#039;&#039;&#039;Ghost&#039;&#039;&#039;, Steel&lt;br /&gt;
| Normal&lt;br /&gt;
| (none)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Flying, Poison, Bug, &#039;&#039;&#039;Ghost&#039;&#039;&#039;, Psychic, Fairy&lt;br /&gt;
| Fighting&lt;br /&gt;
| Normal, Rock, Steel, Ice, Dark&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Rock, Steel, Electric&lt;br /&gt;
| Flying&lt;br /&gt;
| Fighting, Bug, Grass&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Poison, Ground, Rock, Ghost, &#039;&#039;&#039;Steel&#039;&#039;&#039;&lt;br /&gt;
| Poison&lt;br /&gt;
| Grass, Fairy&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &#039;&#039;&#039;Flying&#039;&#039;&#039;, Bug, Grass&lt;br /&gt;
| Ground&lt;br /&gt;
| Poison, Rock, Steel, Fire, Electric&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Fighting, Ground, Steel&lt;br /&gt;
| Rock&lt;br /&gt;
| Flying, Bug, Fire, Ice&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Fighting, Flying, Poison, Ghost, Steel, Fire, Fairy&lt;br /&gt;
| Bug&lt;br /&gt;
| Grass, Psychic, Dark&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &#039;&#039;&#039;Normal&#039;&#039;&#039;, Dark&lt;br /&gt;
| Ghost&lt;br /&gt;
| Ghost, Psychic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Steel, Fire, Water, Electric&lt;br /&gt;
| Steel&lt;br /&gt;
| Rock, Ice, Fairy &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Rock, Fire, Water, Dragon&lt;br /&gt;
| Fire&lt;br /&gt;
| Bug, Steel, Grass, Ice&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Water, Grass, Dragon&lt;br /&gt;
| Water&lt;br /&gt;
| Ground, Rock, Fire&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Flying, Poison, Bug, Steel, Fire, Grass, Dragon&lt;br /&gt;
| Grass&lt;br /&gt;
| Ground, Rock, Water&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | &#039;&#039;&#039;Ground&#039;&#039;&#039;, Grass, Electric, Dragon&lt;br /&gt;
| Electric&lt;br /&gt;
| Flying, Water&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Steel, Psychic, &#039;&#039;&#039;Dark&#039;&#039;&#039;&lt;br /&gt;
| Psychic&lt;br /&gt;
| Fighting, Poison&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Steel, Fire, Water, Ice&lt;br /&gt;
| Ice&lt;br /&gt;
| Flying, Ground, Grass, Dragon&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Steel, &#039;&#039;&#039;Fairy&#039;&#039;&#039;&lt;br /&gt;
| Dragon&lt;br /&gt;
| Dragon&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Fighting, Dark, Fairy&lt;br /&gt;
| Dark&lt;br /&gt;
| Ghost, Psychic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot; | Poison, Steel, Fire&lt;br /&gt;
| Fairy&lt;br /&gt;
| Fighting, Dragon, Dark&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Walking groups==&lt;br /&gt;
* [https://db.pokemongohub.net/pokemon-list/buddy-distance/1 1 km] ([[Mewtwo]], [[Gyarados]], [[Pidgeot]], [[Aggron]], [[Beedrill]])&lt;br /&gt;
* [https://db.pokemongohub.net/pokemon-list/buddy-distance/3 3 km] ([[Heracross]], [[Alakazam]], [[Charizard]], [[Swampert]], [[Gengar]], [[Blaziken]], [[Sceptile]], [[Blastoise]], [[Kangaskhan]], [[Houndoom]], [[Slowbro]], [[Lopunny]], [[Venusaur]], [[Banette]], [[Manectric]], [[Abomasnow]], [[Sharpedo]], [[Glalie]], [[Camperupt]])&lt;br /&gt;
* [https://db.pokemongohub.net/pokemon-list/buddy-distance/5 5 km] ([[Garchomp]], [[Tyranitar]], [[Salamence]], [[Metagross]], [[Gallade]], [[Gardevoir]], [[Ampharos]], [[Pinsir]], [[Aerodactyl]], [[Scizor]], [[Lucario]], [[Steelix]], [[Absol]])&lt;br /&gt;
* [https://db.pokemongohub.net/pokemon-list/buddy-distance/20 20 km] ([[Kyogre]], [[Groudon]], [[Rayquaza]], [[Latios]], [[Latias]], [[Diancie]])&lt;br /&gt;
&lt;br /&gt;
==Perfect IV CPs==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Date&lt;br /&gt;
! 4* CP&lt;br /&gt;
! 4* CP WB&lt;br /&gt;
|-&lt;br /&gt;
| [[Mega Malamar]]&lt;br /&gt;
| [[2026-03-01]]&lt;br /&gt;
| 1347&lt;br /&gt;
| 1685 ☁️🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Mega Dragonite]]&lt;br /&gt;
| [[2026-02-28]]&lt;br /&gt;
| 2167&lt;br /&gt;
| 2709 🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Mega Victreebel]]&lt;br /&gt;
| [[2026-02-28]]&lt;br /&gt;
| 1389&lt;br /&gt;
| 1736 ☀️☁️&lt;br /&gt;
|-&lt;br /&gt;
| [[Xerneas]]&lt;br /&gt;
| [[2026-02-28]]&lt;br /&gt;
| 2160&lt;br /&gt;
| 2701 ☁️&lt;br /&gt;
|-&lt;br /&gt;
| [[Yveltal]]&lt;br /&gt;
| [[2026-02-28]]&lt;br /&gt;
| 2160&lt;br /&gt;
| 2701 ☁️🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Kyurem]]&lt;br /&gt;
| [[2026-02-27]]&lt;br /&gt;
| 2040&lt;br /&gt;
| 2553 🍃🌨️&lt;br /&gt;
|-&lt;br /&gt;
| [[Zekrom]]&lt;br /&gt;
| [[2026-02-27]]&lt;br /&gt;
| 2307&lt;br /&gt;
| 2884 🍃☂️&lt;br /&gt;
|-&lt;br /&gt;
| [[Articuno]]&lt;br /&gt;
| [[2026-03-04]]&lt;br /&gt;
| 1743&lt;br /&gt;
| 2179 🌨️🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Zapdos]]&lt;br /&gt;
| [[2026-03-04]]&lt;br /&gt;
| 2015&lt;br /&gt;
| 2519 ☂️🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Moltres]]&lt;br /&gt;
| [[2026-03-04]]&lt;br /&gt;
| 1980&lt;br /&gt;
| 2475 ☀️🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Tapu Fini]]&lt;br /&gt;
| [[2026-05-27]]&lt;br /&gt;
| 1632&lt;br /&gt;
| 2041 🌨️☁️&lt;br /&gt;
|-&lt;br /&gt;
| [[Reshiram]]&lt;br /&gt;
| [[2026-06-03]]&lt;br /&gt;
| 2307&lt;br /&gt;
| 2884 🍃☀️&lt;br /&gt;
|-&lt;br /&gt;
| [[Zekrom]]&lt;br /&gt;
| [[2026-06-10]]&lt;br /&gt;
| 2307&lt;br /&gt;
| 2884 🍃🌨️&lt;br /&gt;
|-&lt;br /&gt;
| [[Necrozma]]&lt;br /&gt;
| [[2026-06-17]]&lt;br /&gt;
| 2104&lt;br /&gt;
| 2630 🍃&lt;br /&gt;
|-&lt;br /&gt;
| [[Kartana]]&lt;br /&gt;
| [[2026-06-24]]&lt;br /&gt;
| 2101&lt;br /&gt;
| 2626 ☀️❄️&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Team Rocket opponents==&lt;br /&gt;
===Cliff===&lt;br /&gt;
* [[Larvitar]], [[Honchcrow]], [[Tyranitar]]&lt;br /&gt;
&lt;br /&gt;
===Sierra===&lt;br /&gt;
* [[Feebas]], [[Staraptor]], _&lt;br /&gt;
&lt;br /&gt;
==Cost groups==&lt;br /&gt;
Baby Pokémon (i.e. hatched from eggs) generally are in a lower cost group than what they evolve into. Therefore, power them up before evolving in order to save stardust and candy. As of [[2025-10]], the only exceptions to non-baby Pokémon going up in cost group is the evolution of [[Hisuian Sneasel]] and [[Hisuian Qwilfish]]. Otherwise, evolution does not affect stardust or candy costs when powering up a Pokémon un [[Pokémon GO]].&amp;lt;ref name=&amp;quot;nickblack_2025_pgoq&amp;quot;&amp;gt;[[Nick Black]].  ([[2025]]).  “[https://nick-black.com/pgo-quantitative.pdf Pokémon GO: A Quantitative Approach]”.  &#039;&#039;[[nick-black.cpm]]&#039;&#039;.  Accessed [[2025-10-26]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pokémon search strings==&lt;br /&gt;
See [https://pokemongohub.net/post/guide/pokemon-go-search-bar-cheat-sheet/ cheat sheet].&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;0-2defense,0-2hp&amp;amp;!shadow&amp;lt;/code&amp;gt;&lt;br /&gt;
: Pokémon with level 0-2 IVs in defense and stamina that are also not shadow. Useful for identifying Pokémon to transfer (trash).&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;3*&amp;amp;mega0&amp;amp;megaevolve&amp;lt;/code&amp;gt;&lt;br /&gt;
: Pokémon that are 3-star, have never been mega-evolved and can be mega-evolved now.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;3*&amp;amp;4attack&amp;amp;3-4defense&amp;amp;3-4hp&amp;amp;evolve&amp;amp;evolvenew&amp;lt;/code&amp;gt;&lt;br /&gt;
: Pokémon worth evolving. They are 3-star, have max attack IV, have high defense, have high stamina, will evolve into something not in the Pokédex, and can be evolved now with items at hand.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;1&amp;amp;!xxs&amp;amp;!xxl&amp;amp;!favorite&amp;amp;!dynamax&amp;amp;!gigantamax&amp;amp;!shadow&amp;amp;!4*&amp;amp;0*,1*,2*&amp;lt;/code&amp;gt;&lt;br /&gt;
: Transfer Pokémon by number (Bulbasaur: 1)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;!shadow&amp;amp;63,64,66,67,74,75,92,93,524,525,532,533,588,616,708,710&amp;lt;/code&amp;gt;&lt;br /&gt;
: Pokémon that evolve with a trade for 0 candy.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;shadow&amp;amp;10-12,13-15,16-18,19-20,41-42,74-76,129-130,165-166,169,261-262,293-295,304-306,320-321,325-326,333-334,339-340,396-398,399-400,504-505,509-510,519-521,557-558,580-581,590-591,661-663,731-733,736-738,759-760&amp;lt;/code&amp;gt;&lt;br /&gt;
: 1k stardust for purification&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;1-9,152-160,252-260,387-395,495-503,650-658,722-730,810-818,906-914&amp;lt;/code&amp;gt;&lt;br /&gt;
: Starter pokémon&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;water&amp;amp;@1water&amp;amp;@2water&amp;lt;/code&amp;gt;&lt;br /&gt;
: Pokemon that are water type AND have a water-type fast move AND have a water-type charged attack&lt;br /&gt;
&lt;br /&gt;
==Friend search strings==&lt;br /&gt;
; &amp;lt;code&amp;gt;interactable&amp;amp;!lucky&amp;lt;/code&amp;gt;&lt;br /&gt;
: Friends not interacted with in past day and aren&#039;t lucky.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;interactable&amp;amp;giftable&amp;amp;friendlevel3-4&amp;lt;/code&amp;gt;&lt;br /&gt;
: Friends to give gifts to first.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;friendlevel1-3&amp;lt;/code&amp;gt;&lt;br /&gt;
: Friends of level 1 through 3.&amp;lt;ref name=&amp;quot;gohub_20241210_pgo-friend-search&amp;quot;&amp;gt;“[https://pokemongohub.net/post/guide/tricks-to-navigate-and-optimize-your-pokemon-go-friends-list/ Tricks to Navigate and Optimize Your Pokémon GO Friends List]”. ([[2024-12-10]]).  &#039;&#039;[[pokemongohub.net]]&#039;&#039;.  Accessed [[2026-03-01]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;giftable&amp;lt;/code&amp;gt;&lt;br /&gt;
: Friends not sent a gift to.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
Pokemon GO redemption code format: &amp;lt;code&amp;gt;https://store.pokemongo.com/offer-redemption?passcode=DEADBEEFDEADB&amp;lt;/code&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;
* [[Wikipedia:{{PAGENAME}}]]&lt;br /&gt;
* [[List of Pokémon]]&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://pokemongo.com/ Main website]&lt;br /&gt;
* [[Nick Black]]ʼs &#039;&#039;[[Pokémon Go: A Quantitative Approach]] ([https://nick-black.com/pgo-quantitative.pdf PDF])&lt;br /&gt;
* [https://bulbapedia.bulbagarden.net/wiki/List_of_Pok%C3%A9mon_by_National_Pok%C3%A9dex_number Bulbapedia List of Pokémon by National Pokédex number]&lt;br /&gt;
{{Refsec}}&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=The_Archimedes_Engine&amp;diff=198221</id>
		<title>The Archimedes Engine</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=The_Archimedes_Engine&amp;diff=198221"/>
		<updated>2026-06-19T08:04:04Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Redirected page to Exodus: The Archimedes Engine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Exodus: The Archimedes Engine]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Exodus:_The_Archimedes_Engine&amp;diff=198220</id>
		<title>Exodus: The Archimedes Engine</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Exodus:_The_Archimedes_Engine&amp;diff=198220"/>
		<updated>2026-06-19T08:03:26Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; &amp;#039;&amp;#039;&amp;#039;The Archimedes Engine&amp;#039;&amp;#039;&amp;#039; is a 2024 science fiction book by Peter F. Hamilton that establishes lore for an unreleased video game by Archetype Entertai...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;The Archimedes Engine&#039;&#039;&#039; is a [[2024]] [[science fiction]] book by [[Peter F. Hamilton]] that establishes [[lore]] for an unreleased [[video game]] by [[Archetype Entertainment]] called &#039;&#039;[[Exodus (2027 game)|Exodus]]&#039;&#039;. It is followed by the sequel &#039;&#039;[[Exodus: The Helium Sea]]&#039;&#039; ([[2026]]).    {{#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: &#039;&#039;[[Exodus: The Helium Sea]]&#039;&#039;&lt;br /&gt;
* Author: [[Peter F. Hamilton]]&lt;br /&gt;
* Publication date: [[2026]]&lt;br /&gt;
* Publisher: [[Random House Worlds]]&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
===People===&lt;br /&gt;
; Aljan&lt;br /&gt;
: (c15) A son of Terence and brother to Vanilda.&lt;br /&gt;
&lt;br /&gt;
; Annabeth&lt;br /&gt;
: (c?) Medic and girlfriend of Terence. (c7) Dumps Terence due to his long work hours.&lt;br /&gt;
&lt;br /&gt;
; Asahi-Iryna&lt;br /&gt;
: (c25) The archon assigned by Ualana-Shoigu to replace archon Makaio-Faraji.&lt;br /&gt;
&lt;br /&gt;
; Avone-Valerio, General&lt;br /&gt;
: (c28) Imperial Knight assigned by Queen Helena-Thyra to take over Gondiar in retribution for the assassination of Makaio-Faraji. (c29) A missile strike from their forces kills the marchioness after Imperial ghosts are shot by a sniper while en route to capture Otylia.&lt;br /&gt;
&lt;br /&gt;
; Bekket&lt;br /&gt;
: (c4) A first life male partner of Helena-Chione and sire of Thyra.&lt;br /&gt;
&lt;br /&gt;
; Bensath, Sergeant&lt;br /&gt;
: (c18) A mercenary hired by Gyvoy for raiding a Celestial compound on Kajval. (c22) A mercenary hired by Gyvoy for raiding a factory on Kingsnest.&lt;br /&gt;
&lt;br /&gt;
; Clavissa &lt;br /&gt;
: (c8) One of the congregant daughters of Helena-Chione. Ambushes Thyra with other daughters but fails. (c15) Daughter of Jolav-Dabny. Injured by a bloodlien and rescued by congregant daughter Thyra during their Second Trial. (c30) Agrees to spy on Helena-Thyra for her father, Jolav-Dabny, and his friend, Gahiji-Calder.&lt;br /&gt;
&lt;br /&gt;
; Colvin&lt;br /&gt;
: (c7) A Stanvar8 gang member who Terance interrogates for information on Dagon. Mysteriously self-immolates during an interrogation.&lt;br /&gt;
&lt;br /&gt;
; Dagon&lt;br /&gt;
: (c7) A focus of Terenceʼs investigations into the Q-I-X movement. Linked to the death of Younes and Colvin.&lt;br /&gt;
&lt;br /&gt;
; Delfina&lt;br /&gt;
: (c15) Daughter of Ualana-Lyon. Dies during the Second Trial.&lt;br /&gt;
&lt;br /&gt;
; Dushan&lt;br /&gt;
: (c16) Son (?) of Otylia and Josias. Sibling of Laurella.&lt;br /&gt;
&lt;br /&gt;
; Eleanor&lt;br /&gt;
: (a.k.a. “Ellie”) A human stranded on Anoosha when their spacecraft crashes. Helps Finn after he lands in a tree.&lt;br /&gt;
&lt;br /&gt;
; Elohim&lt;br /&gt;
: (c1) An ancient starfaring people who terraformed many planets and constructed the Gates of Heaven. Presumably control the course of Dolod via its Archimedes Engine.&lt;br /&gt;
&lt;br /&gt;
; Eulaie&lt;br /&gt;
: (c31) A congregant daughter of Helena-Thyra who eliminated two other congregant daughters in First Trial.&lt;br /&gt;
&lt;br /&gt;
; Faraji&lt;br /&gt;
: (c1) A curious young boy destined to host Makaio‑Yalbo’s mindline. See &#039;&#039;&#039;Makaio-Faraji&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Finn&lt;br /&gt;
: (c1) A Uranic human capable of manipulating livestone. Thrown from a plane above the Camurdy Mountains on Anoosha. Rescued by Ellie and Josias.&lt;br /&gt;
&lt;br /&gt;
; Gahiji-Calder&lt;br /&gt;
: (c2) Chief archon of Wynid for Helena-Chione. (c23) Queen Helena-Thyra replaces Gahiji-Calder with Ualana-Shoigu as chief archon. (c25) Conspires with Jolav-Dabny and Makaio-Faraji to investigate anomalous behavior of Ualana-Shoigu and Queen Helena-Thyra.&lt;br /&gt;
&lt;br /&gt;
; Gyvoy&lt;br /&gt;
: (c6) A traveler of the Enfoe Traveler Dynasty whom Finn knows. (c18) Accompanies Finn to the Hoa Quinzu in order to retrieve a Celestial dropship for descending into Dolod&#039;s atmosphere when it arrives at Kelowan. (c?) Accompanies Finn to retrieve the Archimedes Engine operating system from Kingsnest. (c30) Terence finds the real Gyvoyʼs corpse enclosed within livestone in the Stanvar8&#039;s Dark Paradise club, indicating the Gyvoy accompanying Finn on the &#039;&#039;Diligent&#039;&#039; is a imposter. (c34) Retrieves a large quantity of antimatter from an Archimedes Engine engine station of Dolod and loads it onto &#039;&#039;Arcadiaʼs Moon&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Helena-Chione&lt;br /&gt;
: (c4) Gives birth to only a single daughter: Thyra. (c21) Is dominated by Thyra with neural weaponry. Gives up her memories to Thyra who becomes Helena-Thyra. Dies.&lt;br /&gt;
&lt;br /&gt;
; Helena-Thyra&lt;br /&gt;
: See &#039;&#039;&#039;Thyra&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Iuntin-Detlef&lt;br /&gt;
: (c20) Senior representative of the Guillrameo family. Murders Ualana-Lyon.&lt;br /&gt;
&lt;br /&gt;
; Jimena&lt;br /&gt;
: (c7) A forensics technician who assists Terenceʼs investigation of Younesʼs murder.&lt;br /&gt;
&lt;br /&gt;
; Jolav-Dabny&lt;br /&gt;
: (c15) Father of Clavissa who was wounded during the Second Trial and saved by Thyra. Consoles Ualana-Lyon following their loss of Delfina (c25) Conspires with Gahiji-Calder and Makaio-Faraji to investigate anomalous behavior of Ualana-Shoigu and Queen Helena-Thyra.&lt;br /&gt;
&lt;br /&gt;
; Josias Aponi&lt;br /&gt;
: (c1) A human stranded on Anoosha when their spacecraft crashes. Helps Finn. (c3) Leader of the arkship &#039;&#039;Diligent&#039;&#039; and its human refugees who arrived at the Kelowan system from the Sol system asteroid &#039;&#039;Eunomia&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Laurella&lt;br /&gt;
: (c16) Daughter of Otylia and Josias. Sister of Dushan.&lt;br /&gt;
&lt;br /&gt;
; Liliana&lt;br /&gt;
: (c1) Throws Finn out an airplane above the Camurdy Mountains of Anoosha. (c2) Captures Finn as a Quinitai family double-agent in order to maintain Anooshaʼs government. (c17) Murders Marcellu. (c20) Helps Iuntin-Detlef murder Ualana-Lyon. (c29) Helps convince Josias to become a figurehead for human liberation on Gondiar. (c34) Helps Gyvoy secure anti-matter aboard &#039;&#039;Arcadiaʼs Moon&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Luus-Marcela, Queen&lt;br /&gt;
: (c2) Queen of Bassa of the Crown Dominion.&lt;br /&gt;
&lt;br /&gt;
; Makaio‑Yalbo&lt;br /&gt;
: (c1) A Celestial Archon of the Wynid Royal House overseeing the Crown Dominion’s interests. (c10) Accepts the suggestion of his supervisor, Wynidʼs chief archon, Gahiji-Laurent, to move his mindline on, becoming Makaio-Faraji.&lt;br /&gt;
&lt;br /&gt;
; Makaio-Faraji&lt;br /&gt;
: (c10) A Celestial Archon who inherits Makaio-Yalboʼs mindline. (c27) Is assassinated by a concluder at the Roundhouse Mansion on Gondiar while speaking with Terence. (c25) Has sons Neusch and Soltz.&lt;br /&gt;
&lt;br /&gt;
; Malquilvo-Beaumont, Lord&lt;br /&gt;
: (c15) Accuses Thyra of murdering his daughter Valeri and Ualana-Lyonʼs daughter Delfina during the Second Trial. Helena-Chione immediately executes him upon reading Thyraʼs memories and finding no evidence of foul play.&lt;br /&gt;
&lt;br /&gt;
; Marchioness&lt;br /&gt;
: (c0; a.k.a. &#039;&#039;&#039;Mary Kathleen Jalgori-Tobu&#039;&#039;&#039;) 43rd Marchioness of Santa Rosa. Finnʼs mother. (c6) Approves the sale of Finnʼs Hafnir to Josias and his people. (c29) Killed in a missile strike during General Avoneʼs takeover of Gondiar.&lt;br /&gt;
&lt;br /&gt;
; Medusa&lt;br /&gt;
: (c?) Subordinate of Marcellu. (c?) Recruited by archon Sahdin (?) after Marcellu is assassinated. (c?) Captured by Terence after bombing near High Rosa. (c?) Hidden from Avone by Terence as coma patient in Santa Rosa hospice.&lt;br /&gt;
&lt;br /&gt;
; Moaksha&lt;br /&gt;
: (c3) A race engineered as biological memory storage. Have bodies resembling centaurs with 5 lower limbs and a humanoid torso and arms at the front. Produce the chemical &#039;&#039;rekaul&#039;&#039; which is valued for its ability to enhance memories when consumed.&lt;br /&gt;
&lt;br /&gt;
; Neusch&lt;br /&gt;
: (c?) Son of Makaio-Faraji. (c?) Does not receive Makaio&#039;s mind line due to Makaio&#039;s assassination on Gondiar. (c30) Is in cahoots with Jolav-Dabny and Gahiji-Calder and present on the Kelowan system. Is assigned to assist Clavissa if she requires help while spying on Thyra.&lt;br /&gt;
&lt;br /&gt;
; Olomo&lt;br /&gt;
: (c1) An Archon of the Heresy Dominion who secretly informs Makaio‑Yalbo about the existence of Dolod and its trajectory towards Kelowan.&lt;br /&gt;
&lt;br /&gt;
; Otylia&lt;br /&gt;
: (c1) Finn’s twin sister who practiced sculpting livestone with him during childhood. (c12) Turns Okkwell Manor into a Gath sanctuary. Finn takes her suggestion to use Gath labor to maintain the &#039;&#039;Diligent&#039;&#039; after most of the human crew settle on Hafnir.&lt;br /&gt;
&lt;br /&gt;
; Oujanya &lt;br /&gt;
: (c21) Princess congregant for Helena-Chione. (c23) Mentally dominated by Helena-Thyra into changing her career track from economics student to Navy officer. (c30) Accompanies Helena-Thyra as she leads the unified Imperial Navy.&lt;br /&gt;
&lt;br /&gt;
; Pablo&lt;br /&gt;
: (c12) A Gath who Otylia takes in after being beaten by their employes for not participating in a cage fight. (c33) Hears Ellie scream while working on plumbing on the &#039;&#039;Diligent&#039;&#039;. Causes Ellie to question her own memory.&lt;br /&gt;
&lt;br /&gt;
; Radwarno-Werkas&lt;br /&gt;
: (c33) Commander of Empress Carolienʼs Twenty-Third Squadron assigned to escort Queen Helena-Thyraʼs Royal Fleet.&lt;br /&gt;
&lt;br /&gt;
; Serrilda-Kroja, Admiral&lt;br /&gt;
: (c31) An admiral who accompanies Helena-Thyra on the &#039;&#039;Dracaenae&#039;&#039; as she leads her Royal Fleet fleet from Wynid to Kelowan.&lt;br /&gt;
&lt;br /&gt;
; Soltz&lt;br /&gt;
: (c25) A son of Makaio-Faraji and brother to Neusch.&lt;br /&gt;
&lt;br /&gt;
; Stanvar8&lt;br /&gt;
: (c?) A criminal organization of Santa Rosa. (c?) Gutted after Terence forced by the governor of Gondiar to divulge all his archon intelligence network which includes sources within Stanvar8 following the bombing near High Rosa. (c30) Terence explores the dead organization&#039;s headquarters near the Dark Paradise club of the Haywood Block on Oldmixon Avenue in Santa Rosa.&lt;br /&gt;
&lt;br /&gt;
; Stethos-Remi&lt;br /&gt;
: Court datamaster for Helena-Thyra who accompanies her on the &#039;&#039;Dracaenae&#039;&#039; as she leads her Royal Fleet from Wynid to Kelowan.&lt;br /&gt;
&lt;br /&gt;
; Terence Wilson-Fletcher&lt;br /&gt;
: (c5) A Santa Rosa probationary constable. Recruited by archon agent Lenertz Mo, who is also his supervisor, to gather intelligence outside of law enforcement channels on the Q-I-X (Queen in Exile) movement which seeks to depose Queen Zuberi-Dulcina from power in the Kelowan system. (c7) Investigates an off-worlder named Dagon resulting in mysterious deaths of Stanvar8 gang members Younes and Colvin. (c27) Witnesses Makaio-Farajiʼs assassination by a concluder and receives the dying archonʼs personality as a rider.&lt;br /&gt;
&lt;br /&gt;
; Thyra&lt;br /&gt;
: (c4) Daughter of Helena-Chione and Bekket. (c15) Is accused by Lord Malquilvo-Beaumont of murdering congregant daughters Valeri and Delfina during the Second Trial. Privately recounts to her father, Bekket, how she turned bloodliens against Valeri, Delfina, and Clavissa during the Second Trial with her neural weaponry. (c21) Forcibly succeeds Helena-Chione with a neural weapon while they are alone in a steam room, becoming &#039;&#039;&#039;Helena-Thyra&#039;&#039;&#039;. (c23) replaces Gahiji-Calder with Ualana-Shoigu as chief archon.&lt;br /&gt;
&lt;br /&gt;
; Toše&lt;br /&gt;
: (c14) Murders Tabia with a concluder. (c29) Helps convince Josias to become a figurehead for human liberation movement on Gondiar.&lt;br /&gt;
&lt;br /&gt;
; Valeri&lt;br /&gt;
: (c15) Daughter of Lord Malquilvo-Beaumont. Killed during the Second Trial.&lt;br /&gt;
&lt;br /&gt;
; Vanilda&lt;br /&gt;
: (c19) Terence&#039;s daughter with Jimena and sister to Aljan. (c24) Confronts Terence about her support of the human liberation movement of Gondiar. (c30) Rejects fleeing Gondiar with Otylia in order to accompany her father, Terence, as he covertly pursues Liliana and Tose. Accompanies Terence and Jimena as they investigate Stanvar8&#039;s Dark Paradise for clues about Liliana, Tose, and the faction they support.&lt;br /&gt;
&lt;br /&gt;
; Younes&lt;br /&gt;
: (c7) Murdered in connection with Terenceʼs investigation of Dagon.&lt;br /&gt;
&lt;br /&gt;
; Zuberi-Dulcina, Queen&lt;br /&gt;
: (c2) The Queen of Kelowan who attempted the subvert the Imperial Celestials with neural weaponry and an evolution dogma. Defeated by the other five queens of the Crown Dominion seven thousand years ago who carved up the Kelowan system and executed Zuberiʼs family. The Accords among the Queens of the Crown Dominion were made following her execution. (c30) Led an evolution project opposed by the Crown Dominion.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; Anoosha&lt;br /&gt;
: (c1) A planet within the Poseidon Nebula where Finn is dropped from a plane above its southern hemisphere. The planet hosts humans who mine ores and minerals. Governed by Queen Carolien of Verakʼs Grand Families. (c30) Destination of Otylia and Zelinda as they flee Gondiar aboard the &#039;&#039;Polkadav&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Biniji&lt;br /&gt;
: (c15) A terraformed Eden moon of gas giant Golwaki in the Wynid system. Location of the Second Trial where Thyra competes.&lt;br /&gt;
&lt;br /&gt;
; Boksrock&lt;br /&gt;
: (c32) The innermost world of the Kelowan system.&lt;br /&gt;
&lt;br /&gt;
; Cherag Harbor&lt;br /&gt;
: (c31) An anchor asteroid atop the Lyonesse orbital tower on Lidon, Malakbel.&lt;br /&gt;
&lt;br /&gt;
; de Verya&lt;br /&gt;
: (c18) A gas giant in the Hoa Quinzu system where a Mara Yama fleet is refueling at that Finn and company notice while visiting Kajval.&lt;br /&gt;
&lt;br /&gt;
; Eunomia&lt;br /&gt;
: (c3) A Sol system asteroid where the &#039;&#039;Diligent&#039;&#039; was built and loaded.&lt;br /&gt;
&lt;br /&gt;
; Gondiar&lt;br /&gt;
: (c3) A solid giant low-density world with four times the surface area as Earth. Covered 45 percent by ocean. Population: 2 billion; demographics: mostly human, negligible Celestials. Finn owns 20 000 km&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; uninhabited land here which he promises to Josiah in exchange for the arkship &#039;&#039;Diligent&#039;&#039;. Gondiar produces agricultural products to feed to the planet Kelowan.&lt;br /&gt;
&lt;br /&gt;
; Hafnir&lt;br /&gt;
: (c3) Undeveloped coastal land on Gondiar owned by Finn. Finn offers the land in exchange for the arkship &#039;&#039;Diligent&#039;&#039;. (c6) With some negotiating by Josias, Finnʼs mother, the marchioness, approves the transaction.&lt;br /&gt;
&lt;br /&gt;
; HeSea&lt;br /&gt;
: (c1) A half–light-year diameter helium‑3 cloud within the Pillar of Zeus Nebula. Created long ago after a macroplanet composed of helium-3 mysteriously underwent a mini-nova.&lt;br /&gt;
&lt;br /&gt;
; Hoa Quinzu&lt;br /&gt;
: (c18) A system of the Ratarajan Dominion, home of the reclusive Ratarajan Celestials. Contains three habitable planets. One planet, Kajval, is the destination for Finn and Gyvoy for securing a Celestial dropship. Contains a Mara Yama fleet refueling at the gas giant de Verya.&lt;br /&gt;
&lt;br /&gt;
; JK67b&lt;br /&gt;
: (c1) A star system of the Gomatu Celstials undergoing a Dyson sphere megastructure construction. Was the destination of Dolod until it changed course 7 000 years ago for the Kelowan star system instead.&lt;br /&gt;
&lt;br /&gt;
; Kajval&lt;br /&gt;
: (c18) A world in the Hoa Quinzu system wrecked by a Crystal Gun. Finn, Gyvoy, Ellie, and company retrieve a Celestial dropship but suffer heavy losses due to saberstones.&lt;br /&gt;
&lt;br /&gt;
; Kelowan, system&lt;br /&gt;
: (c1) A star system that is the capital of the Crown Dominion. Current destination for the iron exotic Dolod. (c3) The arrival location of the &#039;&#039;Diligent&#039;&#039; and its refugees from Sol led by Josias Aponi. (c31) Has a gas giant named Lapetiie 8.7 AU away from the systemʼs star.&lt;br /&gt;
&lt;br /&gt;
; Kelowan, planet&lt;br /&gt;
: (c2) A planet in the Kelowan system that hosts the capital of the Crown Dominion. (c3) Hosts estates of Grand Families. Imports food produced and exported from Gondiar rather than maintain a polluting agricultural industry.&lt;br /&gt;
&lt;br /&gt;
; Lapetiie&lt;br /&gt;
: (c31) A gas giant 8.7 AU from Kelowanʼs star.&lt;br /&gt;
&lt;br /&gt;
; Lidon&lt;br /&gt;
: (c2) A human-controlled planet in the Malakbel system. A destination Finn considers to travel to after leaving Gondiar.&lt;br /&gt;
&lt;br /&gt;
; Malakbel&lt;br /&gt;
: (c11) A white dwarf system. Its only habitable planet is Lidon. The star collapsed during the Formation War. Plasma streams from the unstable star and the surrounding planetary nebula occlude most space ship activity. Marcellu meets Sahdiah in an asteriod here.&lt;br /&gt;
&lt;br /&gt;
; Pana-Seok&lt;br /&gt;
: (c17) A city located on top of Anooshaʼs orbital tower.&lt;br /&gt;
&lt;br /&gt;
; Pillar of Zeus&lt;br /&gt;
: (c1) A nebula in the Centauri Cluster.&lt;br /&gt;
&lt;br /&gt;
; Poseidon Nebula&lt;br /&gt;
: (c1) A nebula visible in the skies of Anoosha.&lt;br /&gt;
&lt;br /&gt;
; Roundhouse Mansion&lt;br /&gt;
: (c27) Where Makaio-Faraji is assassinated by a concluder.&lt;br /&gt;
&lt;br /&gt;
; Tinaja&lt;br /&gt;
: (c1) A star system connected to the Kelowan system via a Gate of Heaven.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; &#039;&#039;Aeacus&#039;&#039;&lt;br /&gt;
: (c31) A ship on Gondiar Makaio-Faraji reserved for emergencies.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Arcadiaʼs Moon&#039;&#039;&lt;br /&gt;
: (c11) A ship captained by Andino. Is a geodesic sphere of trusses. (c31) Spotted by Neuce at Cherag Harbor, Lidon, Malakbel, while Neuce backtracked Tošeʼs journey from Gondiar, Kelowan. Neuce noticed &#039;&#039;Arcadiaʼs Moon&#039;&#039; traveled back to Gondiar disguised as the &#039;&#039;Infinite Totality&#039;&#039;, arriving shortly before General Avone-Valerio.&lt;br /&gt;
&lt;br /&gt;
; Archimedes Engine&lt;br /&gt;
: (c1) An Elohim device used to move planets.&lt;br /&gt;
&lt;br /&gt;
; Concluder&lt;br /&gt;
: (c14) A remnant era rifle. (c24) Terence learns Zikar provided Toše with a sensor array for augmenting his concluder long-range sniping capabilities. (c27) A concluder sniper assassinates archon Makaio-Faraji at the Governorʼs Roundhouse Mansion on Gondiar.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Cybeleʼs Eagle&#039;&#039;&lt;br /&gt;
: (c24) A ship bound for Lidon that Terence found Toše boarded three years ago. (c31) A ship Neuce believes Toše rode to Lidon.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Diligent&#039;&#039;&lt;br /&gt;
: (c3) The arkship that carried Josias and his people from the Sol system to the Kelowan system.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Dracaenae&#039;&#039;&lt;br /&gt;
: (c30) Imperial ship carrying Helena-Thyra as she leads her Royal Fleet.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Gansvoort&#039;&#039;&lt;br /&gt;
: (c31) A ship Neuce believed Toše used to fly to Lidon from Kelowan. Terence believes Liliana negotiated with this ship.&lt;br /&gt;
&lt;br /&gt;
; Helium-3&lt;br /&gt;
: (c1) A fusion fuel used in starships and fusion generators of the Centauri Cluster.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Infinite Totality&#039;&#039;&lt;br /&gt;
: (c31) A disguise for the &#039;&#039;Arcadiaʼs Moon&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Nethrus&#039;&#039;&lt;br /&gt;
: (c30) Imperial frigate selected by Helena-Thyra as fleet herald for her Royal Fleet.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Polkadav&#039;&#039;&lt;br /&gt;
: (c30) Ship in the Kelowan system that carries Otylia and Zelinda from High Rosa, Gondiar to Pana-Seok, Anoosha.&lt;br /&gt;
&lt;br /&gt;
; saberstones&lt;br /&gt;
: (c18) Round rolling machines resembling stones on Kajval that eat armor and flesh.&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Starlightʼs Shore&#039;&#039;&lt;br /&gt;
: (c30) An Enfoe Dynasty starship. A fast courier with limited cargo capacity.&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
&lt;br /&gt;
====Chapters 0-9====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Chapter summaries (c0-9)&lt;br /&gt;
|-&lt;br /&gt;
! Chapter&lt;br /&gt;
! Description&lt;br /&gt;
! Characters&lt;br /&gt;
|-&lt;br /&gt;
| c0&lt;br /&gt;
| Introduction&lt;br /&gt;
40 000 years ago, humans created arkships and departed Earth. The initial arkships that arrived at the Centauri Cluster settled it and expanded into Celestial civilization. Subsequent arkships continue to arrive and their relatively primitive peoples are redirected towards protected irrelevant worlds.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POV Finn: Finn is bound and cast out from a plane above the Camurdy Mountains of the planet Anoosha. A rescue drone prevents a fatal landing. Ellie finds Finn and verifies he is human. Finn identifies as a Uranic human. Ellie cuts him down from a tree, performs first aid, then hobbles with him to her camp with Josias Aponi near their crashed lander. Hypothermic, Finn has Ellie drag him to a livestone outcrop which he shapes into a warm indoor habitat. Finn loses consciousness.&lt;br /&gt;
&lt;br /&gt;
POV Makaio-Yalbo: Archon of the Now and Forever Queen of Wynid, Makaio-Yalbo and his future mindline vessel, Faraji, meet with Archon of the Heresy Dominion, Olomo. Olomo tells Makaio-Yalbo that his faction discovered an iron exotic gas giant traveling through the Poseidon Nebula. Olomo explains the iron exotic, presumably launched during the Remnant era by the Elohim, was originally traveling towards JK67b and the Gomatu Celstialsʼs Dyson sphere under construction there. Olomo says his faction has named the planet Dolod. However, 7 000 years ago, the gas giantʼs Archimedes Engine changed course near a brown dwarf of the Pillar of Zeus so the new destination is Kelowan, capital of the Crown Dominion. Makaio-Yalbo and Olomo speculate on the economic implications of harvesting cheap iron from Dolod and whether the Archimedes Engine stops the planet or not at Kelowan.&lt;br /&gt;
| Finn, Ellie, Josiah, Makaio-Yalbo, Faraji, Olomo&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POV Finn: Finn accepts a job to attack Quinitai politicians. Finn sleeps with Liliana, leader of the combat operation. Finn is trapped by xeefoam. Finn is released and finds Liliana was a double-agent for Quinitai security. Liliana chooses to banish Finn to a remote location instead of killing him.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Finn wakes up. Josiah explains his origins from the Sol system; Josiah is the leader of the arkship &#039;&#039;Diligent&#039;&#039; which had initially traveled in the opposite direction of the Centauri Cluster when they received the Green Worlds signal. Finn offers Josiah land on Gondiar for &#039;&#039;Diligent&#039;&#039; settlers to colonize in exchange for the &#039;&#039;Diligent&#039;&#039; itself.  Finn, Josiah, and Ellie discover a Moaksha rekaul harvesting operation. They infiltrate the drug trafficker castle and liberate the Moaksha captives. They travel away in a skimmerfoil Finn captures.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Helena-Chione experiences an anomalous pregnancy of only a single egg, her daughter Thyra.&lt;br /&gt;
| Helena, Bekket&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Constable Terence is recruited to a clandestine investigation of human rebels against Celestial power.&lt;br /&gt;
| Terence, Younes&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Finn, Ellie, and Josias travel from Anoosha to Santa Rosa, Kelowan. Josias identifies Uramics was changelings, offending Finn. Terence escorts Finn and company to his mother&#039;s palace. Finn reünites with his twin, Otellia (?). Otellia brags about using Finn&#039;s money for changeling philanthropy. Finn presents Josias and Ellie to his mother. Josias reveals the &#039;&#039;Diligent&#039;&#039;, like all ark ships, uses an entropy drive. Josias offers to commercially develop Finn&#039;s la&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=User:Baltakatei/Sandbox&amp;diff=198219</id>
		<title>User:Baltakatei/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=User:Baltakatei/Sandbox&amp;diff=198219"/>
		<updated>2026-06-18T22:26:42Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sandboxes==&lt;br /&gt;
* [[User:Baltakatei/Sandbox/Journal templates]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;memory file&amp;amp;lt;&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Sb&amp;diff=198218</id>
		<title>Sb</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Sb&amp;diff=198218"/>
		<updated>2026-06-18T22:26:22Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Changed redirect target from User:Baltakatei/sandbox to User:Baltakatei/Sandbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Baltakatei/Sandbox]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Sb&amp;diff=198217</id>
		<title>Sb</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Sb&amp;diff=198217"/>
		<updated>2026-06-18T22:25:38Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Redirected page to User:Baltakatei/sandbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Baltakatei/sandbox]]&lt;/div&gt;</summary>
		<author><name>Baltakatei</name></author>
	</entry>
	<entry>
		<id>https://reboil.com/mediawiki/index.php?title=Exodus:_The_Helium_Sea&amp;diff=198216</id>
		<title>Exodus: The Helium Sea</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Exodus:_The_Helium_Sea&amp;diff=198216"/>
		<updated>2026-06-17T09:12:11Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; &amp;#039;&amp;#039;&amp;#039;Exodus: The Helium Sea&amp;#039;&amp;#039;&amp;#039; is a science fiction novel by Peter F. Hamilton to the unreleased Archetype Entertainment video game &amp;#039;&amp;#039;Exodus (2027 video g...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;Exodus: The Helium Sea&#039;&#039;&#039; is a [[science fiction]] [[novel]] by [[Peter F. Hamilton]] to the unreleased [[Archetype Entertainment]] [[video game]] &#039;&#039;[[Exodus (2027 video game)|Exodus]]&#039;&#039;. It is the sequel to &#039;&#039;[[Exodus: The Archimedes Engine]]&#039;&#039; ([[2024]]). {{#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;
; Dagon&lt;br /&gt;
: (b2c0) A spawn sibling of Liliana. Colonel and a commander of Zuberi&#039;s Royal Guard. Also received genome edits. &lt;br /&gt;
&lt;br /&gt;
; Iuntin-Ky&lt;br /&gt;
: (b2c0) Chief Archon of Queen Zuberi for millennia.&lt;br /&gt;
&lt;br /&gt;
; Liliana&lt;br /&gt;
: (b2c0) An ex-Princess of Zuberi and a scientist who helped invent and deploy mind dominating technologies to consolidate Queen Zuberi&#039;s control. Modified the genomes of Princess Khepri and her less fortunate sisters en vivo. &lt;br /&gt;
&lt;br /&gt;
; Mara Yama&lt;br /&gt;
: (b2c0) A nomadic Celestial people. Their bodies can take on a zero-gravity form and a combat terrestrial form.&lt;br /&gt;
&lt;br /&gt;
; Zuberi-Dulcina&lt;br /&gt;
: (b2c0) Monarch of Kelowan.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
; Kelowan (system)&lt;br /&gt;
: (b2c0) A star system in the Centauri Cluster. Seat of government for Queen Zuberi.&lt;br /&gt;
&lt;br /&gt;
; Tinaja (system)&lt;br /&gt;
: (b2c0) A star system connected to the Kelowan system via a Gate of Heaven.&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
; Accords&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
; Evolution Project&lt;br /&gt;
: (b2c0) An initiative by Queen Zuberi to modify the biology of her dynasty to achieve immortality and power to conquer the Elohim. Involved inventing neural compulsion.&lt;br /&gt;
&lt;br /&gt;
; live stone &lt;br /&gt;
: (b2c0) A passively growing building material that responds to Celestial neural commands. {{bkc|[[2026-06-17]]: See the buildings of Makathran (?) in Hamilton&#039;s earlier [[Commonwealth Saga]] novel &#039;&#039;[[The Evolutionary Void]]&#039;&#039;. }}&lt;br /&gt;
&lt;br /&gt;
===Narrative===&lt;br /&gt;
====Chapters 0-9====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+ Chapter summaries (c0-9)&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;
| &lt;br /&gt;
| Introduction&lt;br /&gt;
| 40 000 years ago, humans created arkships and departed Earth. The initial arkships that arrived at the Centauri Cluster settled it and expanded into Celestial civilization. Subsequent arkships continue to arrive and their relatively primitive peoples are redirected towards protected irrelevant worlds.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Prelude: The First Fall of Kelowan&lt;br /&gt;
| &lt;br /&gt;
| POV Liliana: Warships of the other 5 Queens of the Dominion descend upon all 13 habitable planets of the Kelowan system in order to sack Queen Zuberi-Dulcina and her dynasty. Liliana reflects that she is scheduled for execution by the invaders due to her status as ex-Princess to Zuberi. Liliana inspects a Mara Yama captured about a decade ago and kept in free-fall form. Liliana completes a DNA rewrite of Princess Khepri, granting her great physical power and the amortality as Zuberi&#039;s final vessel. Zuberi arrives on her carriage constructed of melded bodies of political dissidents. A brief description of Duchess Immalan who protested against Zuberi. A brief history of Zuberi and Liliana&#039;s schemes to deploy mind-dominating technologies to improve their own biology to compete with and overtake the Elohim. Zuberi uses a taboo technique to copy, not transfer, her mind into Kepri. Liliana oversees the literal liquidation of the captive Maru Yama. Zuberi, Khepri, Liliana, and Colonel Dagon all evacuate the palace. Zuberi departs separately in her flesh carriage. Liliana, Dagon, and Iuntin depart with guards and the unconscious Khepri to a monorail station 2000 km away. Dagon informs Liliana of the plan to fight the Accord Armada. They board a stealth spaceplane bound for the nondescript freighter &#039;&#039;Morieux&#039;&#039;.  The Kelowan Navy breaks stealth and engages the Accord Navy as the &#039;&#039;Morieux&#039;&#039; departs towards the Tinaja Gate of Heaven.&lt;br /&gt;
| Liliana, Zuberi-Dulcina, Khepri, Dagon, Iuntin-Ky&lt;br /&gt;
|-&lt;br /&gt;
| c1&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=Gthumb&amp;diff=198215</id>
		<title>Gthumb</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Gthumb&amp;diff=198215"/>
		<updated>2026-06-16T23:29:28Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; &amp;#039;&amp;#039;&amp;#039;gThumb&amp;#039;&amp;#039;&amp;#039; is a FOSS image viewer designed for GNOME.     {{#ifexist: {{FULLPAGENAME}}/prv |&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{#lst:{{PAGENAME}}/prv|lede-prv}} | }}  ==Stats==  ==Cu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;gThumb&#039;&#039;&#039; is a [[FOSS]] [[image viewer]] designed for [[GNOME]].     {{#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;
==Custom Commands==&lt;br /&gt;
These are custom commands and shortcuts.&lt;br /&gt;
&lt;br /&gt;
; [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/develop/user/gthumb/rmall.org?ref_type=heads rmall]&lt;br /&gt;
: ([[BK-2020-03]]) Remove a file and adjacent sidecar files to a &amp;lt;code&amp;gt;.trash&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
; [https://gitlab.com/baltakatei/baltakatei-exdev/-/blob/develop/user/gthumb/keep.org?ref_type=heads keep]&lt;br /&gt;
: ([[BK-2020-03]]) Preserve a file by moving it to a &amp;lt;code&amp;gt;keep&amp;lt;/code&amp;gt; directory.&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=United_States_Department_of_Justice&amp;diff=198214</id>
		<title>United States Department of Justice</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=United_States_Department_of_Justice&amp;diff=198214"/>
		<updated>2026-06-15T18:37:54Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; The &amp;#039;&amp;#039;&amp;#039;United States Department of Justice&amp;#039;&amp;#039;&amp;#039; is the federal executive department responsible for enforcing Law of the Unite...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &#039;&#039;&#039;United States Department of Justice&#039;&#039;&#039; is the [[United States federal executive departments|federal executive department]] responsible for enforcing [[Law of the United States|federal law]], prosecuting [[federal crimes]], and representing the [[United States]] in legal matters. It is led by the [[United States Attorney General]] who is appointed by the [[United States President|President]] and confirmed by the [[United States Senate|Senate]].     {{#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-06]]: [[US DOJ]] approves [[Paramount]]&#039;s 111 billion USD acquisition of [[Warner Bros.]]. &amp;lt;ref name=&amp;quot;demnow_20260615_paramount-acquires-wb&amp;quot;&amp;gt;[[Amy Goodman]]; [[Craig Aaron]] (guest).  “[https://www.democracynow.org/2026/6/15/paramount_warner_bros_merger_david_ellison DOJ Approves Paramount-Warner Bros. Merger Amid Fears Trump Allies Will Tighten Grip on Media]”.  &#039;&#039;[[democracynow.org]]&#039;&#039;.  Accessed [[2026-06-15]].  “The Trump administration has approved [[Paramount]]’s $111 billion bid to acquire [[Warner Bros. Discovery]]. On Friday, the [[US DOJ|Justice Department]]’s Antitrust Division said that it saw no evidence that the media megamerger would harm consumers, writing instead the deal would, quote, “increase competition across the media and entertainment ecosystem,” unquote. If completed, the merger would consolidate two major movie studios, two top streaming services, and news outlets [[CNN]] and [[CBS News]], as well as [[HBO]] — all under the control of the [[Ellison family]]. Paramount’s biggest shareholder is the billionaire [[Larry Ellison]], a close ally of [[Donald Trump|Trump]]. Paramount’s CEO is Ellison’s son, [[David Ellison]]. Last year, his company, [[Skydance Media|Skydance]], took control of Paramount, including [[CBS]]. Shortly after the [[Paramount-Skydance merger]] was approved, Ellison installed the right-wing journalist [[Bari Weiss]] as editor-in-chief of CBS News. And we all know what happened next: the gutting of CBS’s premier news investigative hour, [[60 Minutes]], where the latest casualty was [[Scott Pelley]], who was just recently fired.”  &amp;lt;/ref&amp;gt;&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=Class_of_%2709_(franchise)&amp;diff=198213</id>
		<title>Class of &#039;09 (franchise)</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Class_of_%2709_(franchise)&amp;diff=198213"/>
		<updated>2026-06-11T18:23:28Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;Class of &#039;09&#039;&#039;&#039; is a self-described “rejection simulator” in contrast to a [[dating simulator]], a class of [[visual novel]] that it resembles in most aspects except purpose: the [[video game]] explores the negative consequences of parental neglect and mismanagement of [[high school]]s in the [[United States]].&lt;br /&gt;
&lt;br /&gt;
The main character of the first game is Nicole, a teenager whom the player must guide through a gauntlet of hazards such as teacher [[pedophilia]], [[drug addiction]], [[teen drinking]], cult indoctrination ([[white nationalism]]), [[suicide]], [[self-harm]], [[stalking]], and [[rape]]. Overcoming the overwhelming odds stacked against her successful graduation and survival often requires the player to choose ruthlessly self-interested actions that empower Nicole to manipulate her world-be manipulators.     {{#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=Class_of_%2709_(franchise)&amp;diff=198212</id>
		<title>Class of &#039;09 (franchise)</title>
		<link rel="alternate" type="text/html" href="https://reboil.com/mediawiki/index.php?title=Class_of_%2709_(franchise)&amp;diff=198212"/>
		<updated>2026-06-11T18:22:59Z</updated>

		<summary type="html">&lt;p&gt;Baltakatei: Created page with &amp;quot; &amp;#039;&amp;#039;&amp;#039;Class of &amp;#039;09&amp;#039;&amp;#039;&amp;#039; is a self-described “reflection simulator” in contrast to a dating simulator, a class of visual novel that it resembles in most aspects except...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;Class of &#039;09&#039;&#039;&#039; is a self-described “reflection simulator” in contrast to a [[dating simulator]], a class of [[visual novel]] that it resembles in most aspects except purpose: the [[video game]] explores the negative consequences of parental neglect and mismanagement of [[high school]]s in the [[United States]].&lt;br /&gt;
&lt;br /&gt;
The main character of the first game is Nicole, a teenager whom the player must guide through a gauntlet of hazards such as teacher [[pedophilia]], [[drug addiction]], [[teen drinking]], cult indoctrination ([[white nationalism]]), [[suicide]], [[self-harm]], [[stalking]], and [[rape]]. Overcoming the overwhelming odds stacked against her successful graduation and survival often requires the player to choose ruthlessly self-interested actions that empower Nicole to manipulate her world-be manipulators.     {{#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=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;
* &#039;&#039;&#039;14:19-07 (21:19+00)&#039;&#039;&#039;: 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;* &#039;&#039;&#039;&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)|&#039;&#039;t={{{t|}}}?&#039;&#039;}}&amp;lt;/span&amp;gt;&#039;&#039;&#039;: {{{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;
* &#039;&#039;&#039;14:19-07 (21:19+00)&#039;&#039;&#039;: 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;* &#039;&#039;&#039;{{#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)|&#039;&#039;t={{{t|}}}?&#039;&#039;}}&#039;&#039;&#039;: {{{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; &amp;#039;&amp;#039;&amp;#039;Cryptonomicon&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Cryptonomicon&#039;&#039;&#039; 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; &amp;#039;&amp;#039;&amp;#039;The Expanse&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;The Expanse&#039;&#039;&#039; 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;
* &#039;&#039;[[Leviathan Wakes]]&#039;&#039; (2011)&lt;br /&gt;
* &#039;&#039;[[Caliban&#039;s War]]&#039;&#039; (2012)&lt;br /&gt;
* &#039;&#039;[[Abbadon&#039;s Gate]]&#039;&#039; (2013)&lt;br /&gt;
* &#039;&#039;[[Cibola Burn]]&#039;&#039; (2014)&lt;br /&gt;
* &#039;&#039;[[Nemesis Games]]&#039;&#039; (2015)&lt;br /&gt;
* &#039;&#039;[[Babylon&#039;s Ashes]]&#039;&#039; (2016)&lt;br /&gt;
* &#039;&#039;[[Persepolis Rising]]&#039;&#039; (2017)&lt;br /&gt;
* &#039;&#039;[[Tiamat&#039;s Wrath]]&#039;&#039; (2019)&lt;br /&gt;
* &#039;&#039;[[Leviathan Falls]]&#039;&#039; (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]]). &#039;&#039;mediawiki.org&#039;&#039;. 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&#039;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]]). &#039;&#039;mediawiki.org&#039;&#039;. 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]] &#039;&#039;GET&#039;&#039; 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&#039;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&#039;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&#039;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 &#039;.query.tokens.logintoken&#039;)&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&#039;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 &#039;.query.pages[].revisions[0][&amp;quot;*&amp;quot;]&#039; &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]]). &#039;&#039;mediawiki.com&#039;&#039;. 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 &#039;{}&#039;&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.).  &#039;&#039;[[mediawiki.org]]&#039;&#039;.  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;
&#039;&#039;See [[HTML notes]]&#039;&#039;&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]]).  &#039;&#039;[[WHATWG]]&#039;&#039;.  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]]).  &#039;&#039;[[mediawiki.org]]&#039;&#039;.  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;
&#039;&#039;See https://meta.wikimedia.org/wiki/Help:Special_characters &#039;&#039;&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; | &#039;&#039;&#039;&#039;&#039;AGLAIA&#039;&#039;&#039;&#039;&#039; || style=&amp;quot;padding: 10px;&amp;quot; | &#039;&#039;&#039;&#039;&#039;BRILLIANCE&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &#039;&#039;&#039;&#039;&#039;EUPHROSYNE&#039;&#039;&#039;&#039;&#039; || style=&amp;quot;padding: 10px;&amp;quot; | &#039;&#039;&#039;&#039;&#039;JOY&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &#039;&#039;&#039;&#039;&#039;THALIA&#039;&#039;&#039;&#039;&#039; || style=&amp;quot;padding: 10px;&amp;quot; | &#039;&#039;&#039;&#039;&#039;BLOOM&#039;&#039;&#039;&#039;&#039;&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;
&#039;&#039;See https://www.mediawiki.org/wiki/Help:Transclusion&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Substitution===&lt;br /&gt;
&#039;&#039;See https://www.mediawiki.org/wiki/Help:Substitution&#039;&#039;&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]]). &#039;&#039;mediawiki.org&#039;&#039;. 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;
&#039;&#039;See https://www.mediawiki.org/wiki/Manual:Upgrading&#039;&#039;&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.). &#039;&#039;mediawiki.org&#039;&#039;. 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&#039;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&#039;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]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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)?]”.  &#039;&#039;askubuntu.com&#039;&#039;.  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&#039; &#039; -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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;foo&#039;)&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 &#039;baz&#039;)&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 &#039;.txt$&#039;)&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&#039;t do it easily&amp;quot; | sed -E -e &#039;s/can&#039;\&#039;&#039;t/can/&#039;  # 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 &#039;s/6/7/g&#039;;              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed &#039;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;
&#039;&#039;See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control &#039;&#039;&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;
&#039;&#039;See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].&#039;&#039;&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.). &#039;&#039;[[gnu.org]]&#039;&#039;.  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]”.  &#039;&#039;[[tldp.org]]&#039;&#039;.  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 &#039;0&#039;, print &#039;7&#039; 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 &#039;4&#039;, print &#039;3&#039; 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 &#039;bar&#039; 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 &#039;bar&#039;ʼ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]%$&#039;\t&#039;*}&amp;quot;;  # cutoff starts at last tab &#039;\t&#039;&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$&#039;\t&#039;*}&amp;quot;  # cutoff starts at first tab &#039;\t&#039;&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=&#039;&#039; 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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;.[] | &amp;quot;\(.authors); \(.title)&amp;quot; &#039; | 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 &#039;&#039;others&#039;&#039; 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 &#039;&#039;group&#039;&#039; 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 &#039;&#039;directories&#039;&#039; openable (i.e. executable) by &#039;&#039;user&#039;&#039; 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 &#039;&#039;files&#039;&#039; 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 &#039;&#039;user&#039;&#039;, &#039;&#039;group&#039;&#039;, and &#039;&#039;others&#039;&#039; (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&#039; &#039; -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d&#039; &#039; -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 &#039; &#039; | 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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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&#039;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;
&#039;&#039;See [[#ImageMagick]]&#039;&#039;&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&#039;/&#039;&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 &#039;:&#039;&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&#039;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&#039;,&#039; -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$&#039;\t&#039; -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d&#039;,&#039; -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
=== [[date]] ===&lt;br /&gt;
&#039;&#039;Note: Assumes GNU date.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print today&#039;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]”.  &#039;&#039;[[blogspot.com]]&#039;&#039;.  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?]”. &#039;&#039;superuser.com&#039;&#039;. 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 &#039;%s\t%p\n&#039;&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&#039;s even faster than &amp;lt;code&amp;gt;find -exec du -b &#039;{}&#039; \+&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 &#039;%s\t%p\n&#039;  # faster than &#039;du&#039;&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]”. &#039;&#039;cyberciti.biz&#039;&#039;. 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;
&#039;&#039;Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])&#039;&#039;&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;
&#039;&#039;A [[python3]] fork of [[dstat]].&#039;&#039;&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;
&#039;&#039;See [[Emacs notes]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== [[exiftool]] ===&lt;br /&gt;
&#039;&#039;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.&#039;&#039;&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]”.  &#039;&#039;[[exiftool.org]]&#039;&#039;.  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;
&#039;&#039;&#039;Fight Fake Flash&#039;&#039;&#039; (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]]).  &#039;&#039;[[tracker.debian.org]]&#039;&#039;.  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. (&#039;&#039;see [[Audiobook transcoding notes]].&#039;&#039;; 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]”.  &#039;&#039;[[ycombinator.com]]&#039;&#039;.  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 &#039;*.JPG&#039; -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i &#039;*.JPG&#039; -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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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&#039;m reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  &#039;&#039;mywiki.wooledge.org&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;*.avi&#039;)&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 &#039;$PWD/$f&#039;&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.).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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 &#039;$PWD/$f&#039;&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 &#039;/path/to/file1.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file2.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file3.wav&#039;&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 &#039;UTF-8&#039; -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;{}&#039; \;&lt;br /&gt;
 $ find . -type f -exec du -b &#039;{}&#039; +;  # performs fewer calls to &#039;du&#039;&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively &#039;&#039;without&#039;&#039; calling [[du]].&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\n&#039;  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\0&#039;  # null-terminated (for feeding to &#039;shuf -z&#039; or &#039;cut -z&#039;)&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 &#039;%T@ %p\n&#039; | sort -n | cut -d&#039; &#039; -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;
&#039;&#039;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 &#039;int main(){return 0;}&#039;)&lt;br /&gt;
 $ echo &#039;int main(){return 0;}&#039; | 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=&#039;true&#039; 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&#039;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&#039;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=&#039;false&#039; 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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;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&#039;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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;s credential helper for a single repository?]”.  &#039;&#039;[[Stack Overflow]]&#039;&#039;.  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;
&#039;&#039;See also [[GnuPG]]&#039;&#039;&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 &#039;mexico&#039; &#039;{}&#039;&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 &#039;mexico&#039;&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;&#039;{}&#039;&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 ]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;some pattern&#039; -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don&#039;t match pattern.&lt;br /&gt;
 $ grep -v &#039;some pattern&#039; -- 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 &#039;.&#039; 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]”.  &#039;&#039;[[tecmint.com]]&#039;&#039;.  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]”.  &#039;&#039;[[johnkerl.org]]&#039;&#039;.  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&#039;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]]”. &#039;&#039;Stack Overflow&#039;&#039;. 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;
&#039;&#039;See [[GNU Make]]&#039;&#039;&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?]”  &#039;&#039;Stack Exchange&#039;&#039;.  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?]”.  &#039;&#039;Stack Overflow&#039;&#039;.  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 &#039;mdadm&#039; 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&#039;&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 &#039;some_dir&#039; 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]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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;
&#039;&#039;See [[GNU parallel]]&#039;&#039;&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 &#039;{}&#039;               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum &#039;{}&#039;  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum &#039;{}&#039;               # &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 &#039;{}&#039; ::: &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 &#039;\t&#039; --arg-file args.txt echo &#039;{2}&#039; &#039;{1}&#039;;&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 &#039;{}&#039;;&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 &#039;pip install -U openai-whisper&#039;&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]”.  &#039;&#039;[[gitlab.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;%s\n&#039; &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&#039;.&#039; -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&#039;.&#039; -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 &#039;&#039;rsync&#039;&#039; 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&#039;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 &#039;ssh&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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 &#039;s/oo/ee/&#039;&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 &#039;s/oo/ee/g&#039;&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 &#039;s/oo/ee/g&#039; 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 &#039;s/^/foo/&#039;&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed &#039;s~^~foo~&#039;   # 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 &#039;/^$/d&#039;&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 &#039;s/(^|\x00)\.\//\1/g&#039;&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 &#039;2p&#039;  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n &#039;2p&#039; 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 &#039;2q;d&#039; 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 &#039;2p&#039;&lt;br /&gt;
 $ sed -n &#039;2,5p&#039; 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 &#039;2p;5p;&#039; 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 &#039;s/*/x/&#039;    # doesn&#039;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 &#039;s/\*/x/&#039;  # 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;
&#039;&#039;Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.&#039;&#039;&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&#039;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&#039;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&#039;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 &#039;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&#039;&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&#039;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&#039;,&#039; -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 &#039;&#039;stdin&#039;&#039; and pass through output to &#039;&#039;stdout&#039;&#039; 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]”. &#039;&#039;Stack Exchange&#039;&#039;. 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 &#039;&#039;stdbuf&#039;&#039; is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from &#039;&#039;journalctl&#039;&#039;, 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 &#039;&#039;journalctl&#039;&#039;).&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 &#039; &#039; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d&#039; &#039; -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;
&#039;&#039;Possibly [[Ubuntu]]-specific&#039;&#039;&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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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;
&#039;&#039;See [[File compression notes]].&#039;&#039;&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 &#039;s/error/out/g&#039;&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 &#039;{}&#039; &#039;{.}&#039; -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;&#039;{}&#039;&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;&#039;{.}&#039;&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.).  &#039;&#039;[[transip.eu]]&#039;&#039;.  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 &#039;Command&#039; 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 &#039;s/[[:blank:]]*#.*//&#039; | tr -s &#039;\n&#039;;&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 &#039;[:graph:][:space:]&#039; )&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;
&#039;&#039;For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].&#039;&#039;&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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;/media/veracrypt1&#039;&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;
&#039;&#039;For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;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)].&#039;&#039;&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]”.  &#039;&#039;[[github.com]]&#039;&#039;, [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o &#039;%(title).200B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o &#039;%(title).140B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o &#039;%(title)s.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;      # 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]”.  &#039;&#039;[[superuser.com]]&#039;&#039;.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S &#039;+size,+br&#039;&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 &#039;echo&#039; 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 &#039;echo&#039; 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 &#039;\n&#039; ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d &#039;\n&#039;&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 &#039;\n&#039; 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 &#039;&#039;&#039;upcase-region&#039;&#039;&#039;.&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]]&#039;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 &#039;&#039;&#039;downcase-region&#039;&#039;&#039;.&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 &#039;&#039;&#039;downcase-word&#039;&#039;&#039;.&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]]&#039;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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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]”.  &#039;&#039;[[gnu.org]]&#039;&#039;.  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&#039;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&#039;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]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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)?]”.  &#039;&#039;askubuntu.com&#039;&#039;.  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&#039; &#039; -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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;foo&#039;)&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 &#039;baz&#039;)&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 &#039;.txt$&#039;)&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&#039;t do it easily&amp;quot; | sed -E -e &#039;s/can&#039;\&#039;&#039;t/can/&#039;  # 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 &#039;s/6/7/g&#039;;              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed &#039;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;
&#039;&#039;See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control &#039;&#039;&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;
&#039;&#039;See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].&#039;&#039;&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.). &#039;&#039;[[gnu.org]]&#039;&#039;.  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]”.  &#039;&#039;[[tldp.org]]&#039;&#039;.  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 &#039;0&#039;, print &#039;7&#039; 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 &#039;4&#039;, print &#039;3&#039; 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 &#039;bar&#039; 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 &#039;bar&#039;ʼ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]%$&#039;\t&#039;*}&amp;quot;;  # cutoff starts at last tab &#039;\t&#039;&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$&#039;\t&#039;*}&amp;quot;  # cutoff starts at first tab &#039;\t&#039;&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=&#039;&#039; 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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;.[] | &amp;quot;\(.authors); \(.title)&amp;quot; &#039; | 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 &#039;&#039;others&#039;&#039; 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 &#039;&#039;group&#039;&#039; 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 &#039;&#039;directories&#039;&#039; openable (i.e. executable) by &#039;&#039;user&#039;&#039; 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 &#039;&#039;files&#039;&#039; 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 &#039;&#039;user&#039;&#039;, &#039;&#039;group&#039;&#039;, and &#039;&#039;others&#039;&#039; (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&#039; &#039; -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d&#039; &#039; -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 &#039; &#039; | 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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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&#039;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;
&#039;&#039;See [[#ImageMagick]]&#039;&#039;&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&#039;/&#039;&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 &#039;:&#039;&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&#039;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&#039;,&#039; -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$&#039;\t&#039; -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d&#039;,&#039; -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
=== [[date]] ===&lt;br /&gt;
&#039;&#039;Note: Assumes GNU date.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print today&#039;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]”.  &#039;&#039;[[blogspot.com]]&#039;&#039;.  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?]”. &#039;&#039;superuser.com&#039;&#039;. 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 &#039;%s\t%p\n&#039;&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&#039;s even faster than &amp;lt;code&amp;gt;find -exec du -b &#039;{}&#039; \+&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 &#039;%s\t%p\n&#039;  # faster than &#039;du&#039;&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]”. &#039;&#039;cyberciti.biz&#039;&#039;. 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;
&#039;&#039;Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])&#039;&#039;&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;
&#039;&#039;A [[python3]] fork of [[dstat]].&#039;&#039;&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;
&#039;&#039;See [[Emacs notes]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== [[exiftool]] ===&lt;br /&gt;
&#039;&#039;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.&#039;&#039;&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]”.  &#039;&#039;[[exiftool.org]]&#039;&#039;.  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;
&#039;&#039;&#039;Fight Fake Flash&#039;&#039;&#039; (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]]).  &#039;&#039;[[tracker.debian.org]]&#039;&#039;.  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. (&#039;&#039;see [[Audiobook transcoding notes]].&#039;&#039;; 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]”.  &#039;&#039;[[ycombinator.com]]&#039;&#039;.  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 &#039;*.JPG&#039; -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i &#039;*.JPG&#039; -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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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&#039;m reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  &#039;&#039;mywiki.wooledge.org&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;*.avi&#039;)&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 &#039;$PWD/$f&#039;&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.).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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 &#039;$PWD/$f&#039;&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 &#039;/path/to/file1.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file2.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file3.wav&#039;&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 &#039;UTF-8&#039; -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;{}&#039; \;&lt;br /&gt;
 $ find . -type f -exec du -b &#039;{}&#039; +;  # performs fewer calls to &#039;du&#039;&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively &#039;&#039;without&#039;&#039; calling [[du]].&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\n&#039;  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\0&#039;  # null-terminated (for feeding to &#039;shuf -z&#039; or &#039;cut -z&#039;)&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 &#039;%T@ %p\n&#039; | sort -n | cut -d&#039; &#039; -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;
&#039;&#039;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 &#039;int main(){return 0;}&#039;)&lt;br /&gt;
 $ echo &#039;int main(){return 0;}&#039; | 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=&#039;true&#039; 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&#039;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&#039;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=&#039;false&#039; 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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;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&#039;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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;s credential helper for a single repository?]”.  &#039;&#039;[[Stack Overflow]]&#039;&#039;.  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;
&#039;&#039;See also [[GnuPG]]&#039;&#039;&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 &#039;mexico&#039; &#039;{}&#039;&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 &#039;mexico&#039;&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;&#039;{}&#039;&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 ]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;some pattern&#039; -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don&#039;t match pattern.&lt;br /&gt;
 $ grep -v &#039;some pattern&#039; -- 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 &#039;.&#039; 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]”.  &#039;&#039;[[tecmint.com]]&#039;&#039;.  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]”.  &#039;&#039;[[johnkerl.org]]&#039;&#039;.  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&#039;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]]”. &#039;&#039;Stack Overflow&#039;&#039;. 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;
&#039;&#039;See [[GNU Make]]&#039;&#039;&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?]”  &#039;&#039;Stack Exchange&#039;&#039;.  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?]”.  &#039;&#039;Stack Overflow&#039;&#039;.  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 &#039;mdadm&#039; 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&#039;&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 &#039;some_dir&#039; 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]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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;
&#039;&#039;See [[GNU parallel]]&#039;&#039;&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 &#039;{}&#039;               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum &#039;{}&#039;  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum &#039;{}&#039;               # &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 &#039;{}&#039; ::: &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 &#039;\t&#039; --arg-file args.txt echo &#039;{2}&#039; &#039;{1}&#039;;&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 &#039;{}&#039;;&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 &#039;pip install -U openai-whisper&#039;&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]”.  &#039;&#039;[[gitlab.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;%s\n&#039; &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&#039;.&#039; -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&#039;.&#039; -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 &#039;&#039;rsync&#039;&#039; 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&#039;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 &#039;ssh&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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 &#039;s/oo/ee/&#039;&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 &#039;s/oo/ee/g&#039;&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 &#039;s/oo/ee/g&#039; 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 &#039;s/^/foo/&#039;&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed &#039;s~^~foo~&#039;   # 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 &#039;/^$/d&#039;&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 &#039;s/(^|\x00)\.\//\1/g&#039;&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 &#039;2p&#039;  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n &#039;2p&#039; 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 &#039;2q;d&#039; 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 &#039;2p&#039;&lt;br /&gt;
 $ sed -n &#039;2,5p&#039; 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 &#039;2p;5p;&#039; 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 &#039;s/*/x/&#039;    # doesn&#039;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 &#039;s/\*/x/&#039;  # 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;
&#039;&#039;Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.&#039;&#039;&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&#039;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&#039;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&#039;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 &#039;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&#039;&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&#039;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&#039;,&#039; -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 &#039;&#039;stdin&#039;&#039; and pass through output to &#039;&#039;stdout&#039;&#039; 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]”. &#039;&#039;Stack Exchange&#039;&#039;. 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 &#039;&#039;stdbuf&#039;&#039; is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from &#039;&#039;journalctl&#039;&#039;, 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 &#039;&#039;journalctl&#039;&#039;).&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 &#039; &#039; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d&#039; &#039; -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;
&#039;&#039;Possibly [[Ubuntu]]-specific&#039;&#039;&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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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;
&#039;&#039;See [[File compression notes]].&#039;&#039;&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 &#039;s/error/out/g&#039;&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 &#039;{}&#039; &#039;{.}&#039; -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;&#039;{}&#039;&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;&#039;{.}&#039;&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.).  &#039;&#039;[[transip.eu]]&#039;&#039;.  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 &#039;Command&#039; 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 &#039;s/[[:blank:]]*#.*//&#039; | tr -s &#039;\n&#039;;&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 &#039;[:graph:][:space:]&#039; )&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;
&#039;&#039;For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].&#039;&#039;&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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;/media/veracrypt1&#039;&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;
&#039;&#039;For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;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)].&#039;&#039;&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]”.  &#039;&#039;[[github.com]]&#039;&#039;, [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o &#039;%(title).200B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o &#039;%(title).140B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o &#039;%(title)s.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;      # 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]”.  &#039;&#039;[[superuser.com]]&#039;&#039;.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S &#039;+size,+br&#039;&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 &#039;echo&#039; 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 &#039;echo&#039; 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 &#039;\n&#039; ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d &#039;\n&#039;&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 &#039;\n&#039; 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; &amp;#039;&amp;#039;&amp;#039;Kitty&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Kitty&#039;&#039;&#039; 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;
&#039;&#039;kitty&#039;&#039; 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 &#039;&#039;kitty-terminfo&#039;&#039; package on remote systems being SSH&#039;d into via &#039;&#039;kitty&#039;&#039; 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 &#039;&#039;kitty shell&#039;&#039; 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&#039;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]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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)?]”.  &#039;&#039;askubuntu.com&#039;&#039;.  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&#039; &#039; -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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;foo&#039;)&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 &#039;baz&#039;)&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 &#039;.txt$&#039;)&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&#039;t do it easily&amp;quot; | sed -E -e &#039;s/can&#039;\&#039;&#039;t/can/&#039;  # 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 &#039;s/6/7/g&#039;;              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed &#039;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;
&#039;&#039;See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control &#039;&#039;&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;
&#039;&#039;See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].&#039;&#039;&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.). &#039;&#039;[[gnu.org]]&#039;&#039;.  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]”.  &#039;&#039;[[tldp.org]]&#039;&#039;.  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 &#039;0&#039;, print &#039;7&#039; 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 &#039;4&#039;, print &#039;3&#039; 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 &#039;bar&#039; 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 &#039;bar&#039;ʼ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]%$&#039;\t&#039;*}&amp;quot;;  # cutoff starts at last tab &#039;\t&#039;&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$&#039;\t&#039;*}&amp;quot;  # cutoff starts at first tab &#039;\t&#039;&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=&#039;&#039; 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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;.[] | &amp;quot;\(.authors); \(.title)&amp;quot; &#039; | 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 &#039;&#039;others&#039;&#039; 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 &#039;&#039;group&#039;&#039; 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 &#039;&#039;directories&#039;&#039; openable (i.e. executable) by &#039;&#039;user&#039;&#039; 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 &#039;&#039;files&#039;&#039; 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 &#039;&#039;user&#039;&#039;, &#039;&#039;group&#039;&#039;, and &#039;&#039;others&#039;&#039; (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&#039; &#039; -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d&#039; &#039; -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 &#039; &#039; | 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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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&#039;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;
&#039;&#039;See [[#ImageMagick]]&#039;&#039;&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&#039;/&#039;&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 &#039;:&#039;&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&#039;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&#039;,&#039; -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$&#039;\t&#039; -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d&#039;,&#039; -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
&#039;&#039;Note: Assumes GNU date.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print today&#039;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]”.  &#039;&#039;[[blogspot.com]]&#039;&#039;.  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?]”. &#039;&#039;superuser.com&#039;&#039;. 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 &#039;%s\t%p\n&#039;&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&#039;s even faster than &amp;lt;code&amp;gt;find -exec du -b &#039;{}&#039; \+&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 &#039;%s\t%p\n&#039;  # faster than &#039;du&#039;&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]”. &#039;&#039;cyberciti.biz&#039;&#039;. 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;
&#039;&#039;Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])&#039;&#039;&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;
&#039;&#039;A [[python3]] fork of [[dstat]].&#039;&#039;&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;
&#039;&#039;See [[Emacs notes]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
&#039;&#039;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.&#039;&#039;&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]”.  &#039;&#039;[[exiftool.org]]&#039;&#039;.  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;
&#039;&#039;&#039;Fight Fake Flash&#039;&#039;&#039; (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]]).  &#039;&#039;[[tracker.debian.org]]&#039;&#039;.  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. (&#039;&#039;see [[Audiobook transcoding notes]].&#039;&#039;; 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]”.  &#039;&#039;[[ycombinator.com]]&#039;&#039;.  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 &#039;*.JPG&#039; -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i &#039;*.JPG&#039; -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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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&#039;m reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  &#039;&#039;mywiki.wooledge.org&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;*.avi&#039;)&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 &#039;$PWD/$f&#039;&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.).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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 &#039;$PWD/$f&#039;&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 &#039;/path/to/file1.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file2.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file3.wav&#039;&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 &#039;UTF-8&#039; -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;{}&#039; \;&lt;br /&gt;
 $ find . -type f -exec du -b &#039;{}&#039; +;  # performs fewer calls to &#039;du&#039;&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively &#039;&#039;without&#039;&#039; calling [[du]].&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\n&#039;  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\0&#039;  # null-terminated (for feeding to &#039;shuf -z&#039; or &#039;cut -z&#039;)&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 &#039;%T@ %p\n&#039; | sort -n | cut -d&#039; &#039; -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;
&#039;&#039;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 &#039;int main(){return 0;}&#039;)&lt;br /&gt;
 $ echo &#039;int main(){return 0;}&#039; | 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=&#039;true&#039; 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&#039;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&#039;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=&#039;false&#039; 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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;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&#039;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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;s credential helper for a single repository?]”.  &#039;&#039;[[Stack Overflow]]&#039;&#039;.  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;
&#039;&#039;See also [[GnuPG]]&#039;&#039;&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 &#039;mexico&#039; &#039;{}&#039;&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 &#039;mexico&#039;&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;&#039;{}&#039;&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 ]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;some pattern&#039; -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don&#039;t match pattern.&lt;br /&gt;
 $ grep -v &#039;some pattern&#039; -- 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 &#039;.&#039; 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]”.  &#039;&#039;[[tecmint.com]]&#039;&#039;.  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]”.  &#039;&#039;[[johnkerl.org]]&#039;&#039;.  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&#039;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]]”. &#039;&#039;Stack Overflow&#039;&#039;. 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;
&#039;&#039;See [[GNU Make]]&#039;&#039;&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?]”  &#039;&#039;Stack Exchange&#039;&#039;.  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?]”.  &#039;&#039;Stack Overflow&#039;&#039;.  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 &#039;mdadm&#039; 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&#039;&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]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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;
&#039;&#039;See [[GNU parallel]]&#039;&#039;&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 &#039;{}&#039;               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum &#039;{}&#039;  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum &#039;{}&#039;               # &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 &#039;{}&#039; ::: &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 &#039;\t&#039; --arg-file args.txt echo &#039;{2}&#039; &#039;{1}&#039;;&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 &#039;{}&#039;;&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 &#039;pip install -U openai-whisper&#039;&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]”.  &#039;&#039;[[gitlab.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;%s\n&#039; &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&#039;.&#039; -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&#039;.&#039; -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 &#039;&#039;rsync&#039;&#039; 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&#039;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 &#039;ssh&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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 &#039;s/oo/ee/&#039;&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 &#039;s/oo/ee/g&#039;&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 &#039;s/oo/ee/g&#039; 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 &#039;s/^/foo/&#039;&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed &#039;s~^~foo~&#039;   # 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 &#039;/^$/d&#039;&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 &#039;s/(^|\x00)\.\//\1/g&#039;&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 &#039;2p&#039;  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n &#039;2p&#039; 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 &#039;2q;d&#039; 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 &#039;2p&#039;&lt;br /&gt;
 $ sed -n &#039;2,5p&#039; 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 &#039;2p;5p;&#039; 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 &#039;s/*/x/&#039;    # doesn&#039;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 &#039;s/\*/x/&#039;  # 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;
&#039;&#039;Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.&#039;&#039;&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&#039;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&#039;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&#039;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 &#039;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&#039;&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&#039;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&#039;,&#039; -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 &#039;&#039;stdin&#039;&#039; and pass through output to &#039;&#039;stdout&#039;&#039; 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]”. &#039;&#039;Stack Exchange&#039;&#039;. 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 &#039;&#039;stdbuf&#039;&#039; is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from &#039;&#039;journalctl&#039;&#039;, 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 &#039;&#039;journalctl&#039;&#039;).&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 &#039; &#039; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d&#039; &#039; -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;
&#039;&#039;Possibly [[Ubuntu]]-specific&#039;&#039;&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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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;
&#039;&#039;See [[File compression notes]].&#039;&#039;&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 &#039;s/error/out/g&#039;&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 &#039;{}&#039; &#039;{.}&#039; -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;&#039;{}&#039;&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;&#039;{.}&#039;&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.).  &#039;&#039;[[transip.eu]]&#039;&#039;.  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 &#039;Command&#039; 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 &#039;s/[[:blank:]]*#.*//&#039; | tr -s &#039;\n&#039;;&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 &#039;[:graph:][:space:]&#039; )&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;
&#039;&#039;For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].&#039;&#039;&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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;/media/veracrypt1&#039;&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;
&#039;&#039;For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;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)].&#039;&#039;&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]”.  &#039;&#039;[[github.com]]&#039;&#039;, [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o &#039;%(title).200B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o &#039;%(title).140B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o &#039;%(title)s.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;      # 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]”.  &#039;&#039;[[superuser.com]]&#039;&#039;.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S &#039;+size,+br&#039;&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 &#039;echo&#039; 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 &#039;echo&#039; 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 &#039;\n&#039; ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d &#039;\n&#039;&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 &#039;\n&#039; 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&#039;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]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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)?]”.  &#039;&#039;askubuntu.com&#039;&#039;.  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&#039; &#039; -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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;foo&#039;)&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 &#039;baz&#039;)&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 &#039;.txt$&#039;)&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&#039;t do it easily&amp;quot; | sed -E -e &#039;s/can&#039;\&#039;&#039;t/can/&#039;  # 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 &#039;s/6/7/g&#039;;              # Uses pipe format.&lt;br /&gt;
 777&lt;br /&gt;
 $ myVar=&amp;quot;666&amp;quot;; sed &#039;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;
&#039;&#039;See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Job-Control &#039;&#039;&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;
&#039;&#039;See [https://tldp.org/LDP/abs/html/string-manipulation.html Manipulating Strings].&#039;&#039;&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.). &#039;&#039;[[gnu.org]]&#039;&#039;.  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]”.  &#039;&#039;[[tldp.org]]&#039;&#039;.  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 &#039;0&#039;, print &#039;7&#039; 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 &#039;4&#039;, print &#039;3&#039; 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 &#039;bar&#039; 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 &#039;bar&#039;ʼ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]%$&#039;\t&#039;*}&amp;quot;;  # cutoff starts at last tab &#039;\t&#039;&lt;br /&gt;
 foo	bar&lt;br /&gt;
 $ echo &amp;quot;${myArr[3]%%$&#039;\t&#039;*}&amp;quot;  # cutoff starts at first tab &#039;\t&#039;&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=&#039;&#039; 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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;.[] | &amp;quot;\(.authors); \(.title)&amp;quot; &#039; | 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 &#039;&#039;others&#039;&#039; 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 &#039;&#039;group&#039;&#039; 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 &#039;&#039;directories&#039;&#039; openable (i.e. executable) by &#039;&#039;user&#039;&#039; 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 &#039;&#039;files&#039;&#039; 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 &#039;&#039;user&#039;&#039;, &#039;&#039;group&#039;&#039;, and &#039;&#039;others&#039;&#039; (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&#039; &#039; -f2)&amp;quot;; name=&amp;quot;$(echo &amp;quot;$line&amp;quot; | cut -d&#039; &#039; -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 &#039; &#039; | 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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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 &#039;&#039;user&#039;&#039; &amp;lt;code&amp;gt;debuser&amp;lt;/code&amp;gt; and &#039;&#039;group&#039;&#039; &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&#039;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;
&#039;&#039;See [[#ImageMagick]]&#039;&#039;&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&#039;/&#039;&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 &#039;:&#039;&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&#039;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&#039;,&#039; -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$&#039;\t&#039; -f2 file.tsv&lt;br /&gt;
&lt;br /&gt;
Select fields 3 through 7 in comma-delimited CSV file.&lt;br /&gt;
 $ cut -d&#039;,&#039; -f3-7 file.csv&lt;br /&gt;
&lt;br /&gt;
===[[date]]===&lt;br /&gt;
&#039;&#039;Note: Assumes GNU date.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print today&#039;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]”.  &#039;&#039;[[blogspot.com]]&#039;&#039;.  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?]”. &#039;&#039;superuser.com&#039;&#039;. 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 &#039;%s\t%p\n&#039;&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&#039;s even faster than &amp;lt;code&amp;gt;find -exec du -b &#039;{}&#039; \+&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 &#039;%s\t%p\n&#039;  # faster than &#039;du&#039;&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]”. &#039;&#039;cyberciti.biz&#039;&#039;. 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;
&#039;&#039;Consider using [[dool]] ([https://github.com/scottchiefbaker/dool GitHub])&#039;&#039;&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;
&#039;&#039;A [[python3]] fork of [[dstat]].&#039;&#039;&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;
&#039;&#039;See [[Emacs notes]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[[exiftool]]===&lt;br /&gt;
&#039;&#039;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.&#039;&#039;&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]”.  &#039;&#039;[[exiftool.org]]&#039;&#039;.  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;
&#039;&#039;&#039;Fight Fake Flash&#039;&#039;&#039; (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]]).  &#039;&#039;[[tracker.debian.org]]&#039;&#039;.  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. (&#039;&#039;see [[Audiobook transcoding notes]].&#039;&#039;; 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]”.  &#039;&#039;[[ycombinator.com]]&#039;&#039;.  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 &#039;*.JPG&#039; -c:v libx264 -r 60 -preset veryslow -crf 18 -pix_fmt yuvj420p output4.mp4&lt;br /&gt;
 $ ffmpeg -nostdin -pattern_type glob -i &#039;*.JPG&#039; -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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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&#039;m reading a file line by line and running ssh or ffmpeg, only the first line gets processed!]”.  ([[2022-10-30]]).  &#039;&#039;mywiki.wooledge.org&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;*.avi&#039;)&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 &#039;$PWD/$f&#039;&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.).  &#039;&#039;[[ffmpeg.org]]&#039;&#039;.  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 &#039;$PWD/$f&#039;&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 &#039;/path/to/file1.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file2.wav&#039;&lt;br /&gt;
 file &#039;/path/to/file3.wav&#039;&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 &#039;UTF-8&#039; -f ass -i input.en-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.es-US.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -f ass -i input.id.ass \&lt;br /&gt;
       -sub_charenc &#039;UTF-8&#039; -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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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 &#039;{}&#039; \;&lt;br /&gt;
 $ find . -type f -exec du -b &#039;{}&#039; +;  # performs fewer calls to &#039;du&#039;&lt;br /&gt;
&lt;br /&gt;
: Get file sizes of all files in the working directory recursively &#039;&#039;without&#039;&#039; calling [[du]].&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\n&#039;  # newline-terminated&lt;br /&gt;
 $ find . -type f -printf &#039;%s\t%p\0&#039;  # null-terminated (for feeding to &#039;shuf -z&#039; or &#039;cut -z&#039;)&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 &#039;%T@ %p\n&#039; | sort -n | cut -d&#039; &#039; -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;
&#039;&#039;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 &#039;int main(){return 0;}&#039;)&lt;br /&gt;
 $ echo &#039;int main(){return 0;}&#039; | 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=&#039;true&#039; 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&#039;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&#039;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=&#039;false&#039; 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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;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&#039;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]]). &#039;&#039;git-scm.com&#039;&#039;. 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&#039;s credential helper for a single repository?]”.  &#039;&#039;[[Stack Overflow]]&#039;&#039;.  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;
&#039;&#039;See also [[GnuPG]]&#039;&#039;&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 &#039;mexico&#039; &#039;{}&#039;&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 &#039;mexico&#039;&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;&#039;{}&#039;&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 ]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;some pattern&#039; -- file.txt&lt;br /&gt;
&lt;br /&gt;
Show lines that don&#039;t match pattern.&lt;br /&gt;
 $ grep -v &#039;some pattern&#039; -- 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 &#039;.&#039; 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]”.  &#039;&#039;[[tecmint.com]]&#039;&#039;.  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]”.  &#039;&#039;[[johnkerl.org]]&#039;&#039;.  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&#039;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]]”. &#039;&#039;Stack Overflow&#039;&#039;. 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;
&#039;&#039;See [[GNU Make]]&#039;&#039;&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?]”  &#039;&#039;Stack Exchange&#039;&#039;.  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?]”.  &#039;&#039;Stack Overflow&#039;&#039;.  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 &#039;mdadm&#039; 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&#039;&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]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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;
&#039;&#039;See [[GNU parallel]]&#039;&#039;&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 &#039;{}&#039;               # use all CPUs&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel --jobs=&amp;quot;25%&amp;quot; sha256sum &#039;{}&#039;  # use at most 25% of CPU cores&lt;br /&gt;
 $ find &amp;quot;$HOME&amp;quot; -type f | parallel sha256sum &#039;{}&#039;               # &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 &#039;{}&#039; ::: &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 &#039;\t&#039; --arg-file args.txt echo &#039;{2}&#039; &#039;{1}&#039;;&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 &#039;{}&#039;;&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 &#039;pip install -U openai-whisper&#039;&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]”.  &#039;&#039;[[gitlab.com]]&#039;&#039;.  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?]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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]”.  &#039;&#039;[[unix.stackexchange.com]]&#039;&#039;.  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 &#039;%s\n&#039; &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&#039;.&#039; -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&#039;.&#039; -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 &#039;&#039;rsync&#039;&#039; 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&#039;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 &#039;ssh&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; 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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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 &#039;*/&#039; --include &#039;*_small*&#039; --exclude &#039;*&#039; --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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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 &#039;s/oo/ee/&#039;&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 &#039;s/oo/ee/g&#039;&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 &#039;s/oo/ee/g&#039; 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 &#039;s/^/foo/&#039;&lt;br /&gt;
 foobar&lt;br /&gt;
 foobaz&lt;br /&gt;
 $ printf &amp;quot;bar\nbaz\n&amp;quot; | sed &#039;s~^~foo~&#039;   # 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 &#039;/^$/d&#039;&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 &#039;s/(^|\x00)\.\//\1/g&#039;&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 &#039;2p&#039;  # prints line 2 of standard input&lt;br /&gt;
 $ sed -n &#039;2p&#039; 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 &#039;2q;d&#039; 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 &#039;2p&#039;&lt;br /&gt;
 $ sed -n &#039;2,5p&#039; 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 &#039;2p;5p;&#039; 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 &#039;s/*/x/&#039;    # doesn&#039;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 &#039;s/\*/x/&#039;  # 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;
&#039;&#039;Installable via &amp;lt;code&amp;gt;apt install secure-delete&amp;lt;/code&amp;gt;.&#039;&#039;&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&#039;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&#039;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&#039;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 &#039;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&#039;&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&#039;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&#039;,&#039; -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 &#039;&#039;stdin&#039;&#039; and pass through output to &#039;&#039;stdout&#039;&#039; 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]”. &#039;&#039;Stack Exchange&#039;&#039;. 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 &#039;&#039;stdbuf&#039;&#039; is not used in this type of scenario, [[tr]] and [[cut]] may fail to immediately display important lines as they arrive from &#039;&#039;journalctl&#039;&#039;, 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 &#039;&#039;journalctl&#039;&#039;).&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 &#039; &#039; |\&lt;br /&gt;
  stdbuf -i0 -o0 -e0 cut -d&#039; &#039; -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;
&#039;&#039;Possibly [[Ubuntu]]-specific&#039;&#039;&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?]”.  &#039;&#039;[[stackexchange.com]]&#039;&#039;.  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;
&#039;&#039;See [[File compression notes]].&#039;&#039;&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 &#039;s/error/out/g&#039;&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 &#039;{}&#039; &#039;{.}&#039; -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;&#039;{}&#039;&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;&#039;{.}&#039;&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.).  &#039;&#039;[[transip.eu]]&#039;&#039;.  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 &#039;Command&#039; 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 &#039;s/[[:blank:]]*#.*//&#039; | tr -s &#039;\n&#039;;&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 &#039;[:graph:][:space:]&#039; )&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;
&#039;&#039;For &amp;lt;code&amp;gt;.rar&amp;lt;/code&amp;gt; files, see [[#unar]].&#039;&#039;&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]”.  &#039;&#039;[[askubuntu.com]]&#039;&#039;.  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]]”.  &#039;&#039;[[stackoverflow.com]]&#039;&#039;.  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 &#039;/media/veracrypt1&#039;&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;
&#039;&#039;For all options, see [[yt-dlp]] GitHub page [https://github.com/yt-dlp/yt-dlp here].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;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)].&#039;&#039;&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]”.  &#039;&#039;[[github.com]]&#039;&#039;, [[yt-dlp]].  Accessed [[2024-07-25]].  “&amp;lt;code&amp;gt;$ yt-dlp -o &#039;%(title).200B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;&amp;lt;/code&amp;gt;”.  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -o &#039;%(title).140B.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;  # limits title to 140 bytes&lt;br /&gt;
 $ yt-dlp -o &#039;%(title)s.%(ext)s&#039; &#039;&amp;lt;url&amp;gt;&#039;      # 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]”.  &#039;&#039;[[superuser.com]]&#039;&#039;.  Accessed [[2024-02-10]].  &amp;lt;/ref&amp;gt;&lt;br /&gt;
 $ yt-dlp -S &#039;+size,+br&#039;&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 &#039;echo&#039; 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 &#039;echo&#039; 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 &#039;\n&#039; ls -alh;&lt;br /&gt;
 $ ls -alh foo bar baz;&lt;br /&gt;
: Note: &amp;lt;code&amp;gt;-d &#039;\n&#039;&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 &#039;\n&#039; 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; &amp;#039;&amp;#039;&amp;#039;Bribery&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Bribery&#039;&#039;&#039; 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; &amp;#039;&amp;#039;&amp;#039;Vulo Lives&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Vulo Lives&#039;&#039;&#039; 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 &#039;&#039;The Shadow and João Goulart&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/jYCicuWszVQ&amp;amp;t=497 &#039;&#039;The Creature from the Northern Woods&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/ivpz6hR7uGk&amp;amp;t=462 &#039;&#039;The Watcher and Juan José Torres&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/fuHz85fnjWY&amp;amp;t=587 &#039;&#039;The Hand that Guides the Butcher&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/FORY0r4qLOg&amp;amp;t=564 &#039;&#039;The Coming of the Valuable Fiend&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/5Y6QTgcoYvQ&amp;amp;t=591 &#039;&#039;The Train on the Second Track&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/izZ8Jm8BPJI&amp;amp;t=628 &#039;&#039;The Falconer and the Dirty Bird&#039;&#039;]&lt;br /&gt;
* [https://youtu.be/n2iRUgn0Mes&amp;amp;t=572 &#039;&#039;The Story of the Midnight Hunter&#039;&#039;]&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;
&#039;&#039;&#039;Project Hail Mary&#039;&#039;&#039; 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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;&#039;Martin Dubois&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Ilyukhina&lt;br /&gt;
: (c1) Dead crewmate of the &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;&#039;Annie Shapiro&#039;&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;&#039;Hail Mary&#039;&#039;&#039; crew launches.&lt;br /&gt;
&lt;br /&gt;
; Erid&lt;br /&gt;
: (c14; a.k.a. &#039;&#039;&#039;40 Eridani A b&#039;&#039;&#039;) Rocky&#039;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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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 &#039;&#039;Hail Mary&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky&#039;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 &#039;&#039;Hail Mary&#039;&#039;.&lt;br /&gt;
| Grace, Rocky &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the &#039;&#039;Hail Mary&#039;&#039;. Rocky and Grace decide to disconnect the &#039;&#039;Blip-A&#039;&#039; so they can create artificial gravity to use Grace&#039;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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; crew watch a launch of cargo and supplies to construct the &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039; stable and Rocky&#039;s unmoving body. Grace hauls Rocky to an airlock connected to Rocky&#039;s atmosphere. Grace forces open a pathway for Rocky&#039;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&#039;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 &#039;&#039;Hail Mary&#039;&#039;’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&#039;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 &#039;&#039;Hail Mary&#039;&#039; to use the beatles&#039;s astrophage drives to adjust the orbit and rotation of the &#039;&#039; Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&lt;br /&gt;
| Grace, Stratt&lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Grace breeds the nitrogen-resistant Taumeba-35. Grace disinfects &#039;&#039;Hail Mary&#039;&#039; fuel tanks. Grace jettisons an uncleanable tank.  Rocky prepares a pumping system to transfer astrophage from the &#039;&#039;Blip-A&#039;&#039;.  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 &#039;&#039;Blip-A&#039;&#039; 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 &#039;&#039;Blip-A&#039;&#039; 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&#039;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 &#039;&#039;Blip-A&#039;&#039;’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&#039;s scientists have observed the luminance of Earth&#039;s star return to normal; presumably, Earth scientists received Grace&#039;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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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; &amp;#039;&amp;#039;&amp;#039;Providence Skies&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Providence Skies&#039;&#039;&#039; 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&#039;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&#039;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&#039;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; &amp;#039;&amp;#039;&amp;#039;Veracrypt&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Veracrypt&#039;&#039;&#039; 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]”.  &#039;&#039;[[techcrunch.com]]&#039;&#039;.  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 ]”.  &#039;&#039;[[sourceforge.net]]&#039;&#039;.  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; &amp;#039;&amp;#039;&amp;#039;Johann Karpp&amp;#039;&amp;#039;&amp;#039; (a.k.a. &amp;#039;&amp;#039;&amp;#039;Cervelet&amp;#039;&amp;#039;&amp;#039;) 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;
&#039;&#039;&#039;Johann Karpp&#039;&#039;&#039; (a.k.a. &#039;&#039;&#039;Cervelet&#039;&#039;&#039;) 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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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 &#039;&#039;Hail Mary&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky&#039;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 &#039;&#039;Hail Mary&#039;&#039;.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the &#039;&#039;Hail Mary&#039;&#039;. Rocky and Grace decide to disconnect the &#039;&#039;Blip-A&#039;&#039; so they can create artificial gravity to use Grace&#039;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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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 &#039;&#039;Hail Mary&#039;&#039; crew watch a launch of cargo and supplies to construct the &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039; stable and Rocky&#039;s unmoving body. Grace hauls Rocky to an airlock connected to Rocky&#039;s atmosphere. Grace forces open a pathway for Rocky&#039;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&#039;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 &#039;&#039;Hail Mary&#039;&#039;’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&#039;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 &#039;&#039;Hail Mary&#039;&#039; to use the beatles&#039;s astrophage drives to adjust the orbit and rotation of the &#039;&#039; Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c25&lt;br /&gt;
| Grace breeds the nitrogen-resistant Taumeba-35. Grace disinfects &#039;&#039;Hail Mary&#039;&#039; fuel tanks. Grace jettisons an uncleanable tank.  Rocky prepares a pumping system to transfer astrophage from the &#039;&#039;Blip-A&#039;&#039;.  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 &#039;&#039;Blip-A&#039;&#039; 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 &#039;&#039;Blip-A&#039;&#039; 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&#039;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 &#039;&#039;Blip-A&#039;&#039;’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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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; &amp;#039;&amp;#039;&amp;#039;Plants vs. Zombies&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Plants vs. Zombies&#039;&#039;&#039; 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;  &amp;#039;&amp;#039;&amp;#039;Children of Ruin&amp;#039;&amp;#039;&amp;#039; is a 2019 science fiction novel by Adrian Tchaikovsky. It is preceded by &amp;#039;&amp;#039;Children of Time&amp;#039;&amp;#039; and succeeded by &amp;#039;&amp;#039;[[Children of Memory]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Children of Ruin&#039;&#039;&#039; is a [[2019]] [[science fiction]] novel by [[Adrian Tchaikovsky]]. It is preceded by &#039;&#039;[[Children of Time]]&#039;&#039; and succeeded by &#039;&#039;[[Children of Memory]]&#039;&#039;.    {{#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: &#039;&#039;[[Children of Memory]]&#039;&#039;&lt;br /&gt;
* Prev: &#039;&#039;[[Children of Time]]&#039;&#039;&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 &#039;&#039;&#039;Yusef Baltil&#039;&#039;&#039;.&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&#039;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&#039;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&#039;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&#039;s World.&lt;br /&gt;
&lt;br /&gt;
; Lante&lt;br /&gt;
: One of Baltil&#039;s crew. A survivor of Earth&#039;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&#039;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&#039;s crew.&lt;br /&gt;
&lt;br /&gt;
; Selomi&lt;br /&gt;
: (Past 2.3): A female octopus descendant of one of Senkovi&#039;s experiments.&lt;br /&gt;
&lt;br /&gt;
; Senkovi&lt;br /&gt;
: See &#039;&#039;&#039;Dizra Senkovi&#039;&#039;&#039;.&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&#039;s World descended from human (lowercase) refugees who travelled from Earth to Kern&#039;s World via the Gilgamesh arkship. Fought a war with the Portids which resulted in the humans&#039; 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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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.). &#039;&#039;chat.openai.com&#039;&#039;. 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&#039;s brain implants activate, causing him to upload a model of his mind into the Lightfoot&#039;s computers. Model Meshna can suddenly comprehend Fabian&#039;s memory of a seaside. Meshna follows a Kern subroutine to a model of the battlefield Lightfoot Kern is maintaining, despite Meshna&#039;s cognitive load on her systems. Kern diagnoses Meshna&#039;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&#039;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&#039;s existence is a high priority so Kern&#039;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&#039;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&#039;s compatriots display approval of Paul&#039;s deed.&lt;br /&gt;
&lt;br /&gt;
Sudden danger via Paul&#039;s ship computer notifies Paul of danger. All of Paul&#039;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&#039;s implants in order to search for suitable emotional frameworks. Kern repairs Meshna&#039;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&#039;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&#039;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&#039;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&#039;s doctor, Lante, for failing to anticipate the alien life form&#039;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&#039;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&#039;s condition. Some of the alien life in Lortis&#039;s body remains. Baltil gives in to Lante&#039;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&#039;s  [[corpus callosum]], the bundle of nerve fibers that permits communication between the two hemispheres of the human brain; Lortis doesn&#039;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&#039;s brain passively analyzes the electrical signals it receives and constructs a model of Lortis&#039;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&#039;s body beyond its physical limits, tearing tendons and muscle in order to improve the body&#039;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&#039;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&#039;s joy at being able to colonize space by gleefully saying &amp;quot;We&#039;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&#039;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&#039;s systems. Senkovi warns the Damascus octopi the shuttle is very dangerous. Senkovi attempts to fight Baltil but is not a match for Baltil&#039;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&#039;s suit heater; Helena notices Portia&#039;s suit has full power stores. Portia informs Helena that the suits&#039; 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&#039;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&#039;s mind. Kern deletes inconvenient memories of a Dr. Douglev Hafmeyer (?) Who would have questioned Kern&#039;s original physical body&#039;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&#039;s Portid body and even to catch stray thoughts that he suspects are Kern&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;s Reaches convince his Crown to ally himself with Selomi&#039;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&#039;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&#039;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 &#039;&#039;The Requisitioner of Small Things&#039;&#039;. 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 &#039;&#039;That Part of Wonder that is Mine&#039;&#039;.&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&#039;s gravity well.&lt;br /&gt;
&lt;br /&gt;
Noah, Ruth, and Abigail move their ship out of Damascus orbit and to Nod&#039;s orbital station. The station&#039;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&#039;s gravity well. The rest of octopi civilization disapproves and prepares to stop Ruth and Abigail&#039;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&#039;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&#039;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&#039;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&#039;t speak with Kern&#039;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&#039;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&#039;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&#039;s name is &#039;&#039;Looking at a Thing from the Outside&#039;&#039;.&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 &#039;&#039;Shell that Echoes Only&#039;&#039;, an ally if the &#039;Profundity of Depth&#039;&#039; (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&#039;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&#039;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&#039;s latest notes describe the parasite organism and describes its data storage mechanism. Viola calculates the parasite&#039;s data storage capacity as much higher than even possible with old Empire or Portid technology. Viola announces the parasite is this alien world&#039;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&#039;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&#039;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&#039;s broadcasted report for clarification on the parasites&#039;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&#039;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&#039;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&#039;s orbit about Nod&#039;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&#039;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&#039;s World, and many other inhabited planets in its quest for novelty. Kern&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;s systems. Meshna tells Fabian he has taken over Kern&#039;s functions of running the Lightfoot. Kern is now running from Meshna&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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&#039;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;
&#039;&#039;&#039;Adrian Tchaikovsky&#039;&#039;&#039; (legal name: &#039;&#039;&#039;Adrian Czajkowski&#039;&#039;&#039;) 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 &#039;&#039;[[Children of Time]]&#039;&#039;&lt;br /&gt;
* [[2019]]: Published &#039;&#039;[[Children of Ruin]]&#039;&#039;&lt;br /&gt;
* [[2022]]: Published &#039;&#039;[[Children of Memory]]&#039;&#039;&lt;br /&gt;
* [[2026]]: Published &#039;&#039;[[Children of Strife]]&#039;&#039;&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; &amp;#039;&amp;#039;&amp;#039;Children of Strife&amp;#039;&amp;#039;&amp;#039; is a 2026 science fiction novel by Adrian Tchaikovsky that is the third sequel to &amp;#039;&amp;#039;Children of Time&amp;#039;&amp;#039;. It is preceded by &amp;#039;&amp;#039;Childre...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;Children of Strife&#039;&#039;&#039; is a [[2026]] [[science fiction]] novel by [[Adrian Tchaikovsky]] that is the third sequel to &#039;&#039;[[Children of Time]]&#039;&#039;. It is preceded by &#039;&#039;[[Children of Memory]]&#039;&#039;.     {{#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 &#039;&#039;Pancreator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Gerey Hartmand&lt;br /&gt;
: (b4c1.1) Tyrannical leader of the terraforming project aboard the &#039;&#039;Pancreator&#039;&#039;. 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 &#039;&#039;Pancreator&#039;&#039;, alongside Gerey Hartmand. Judged lacking by Kott.&lt;br /&gt;
&lt;br /&gt;
===Places===&lt;br /&gt;
===Things===&lt;br /&gt;
; &#039;&#039;Pancreator&#039;&#039;&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&#039;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&#039;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&#039;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&#039;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 &amp;#039;&amp;#039;&amp;#039;male&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;female&amp;#039;&amp;#039;&amp;#039; 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 &#039;&#039;&#039;male&#039;&#039;&#039; and &#039;&#039;&#039;female&#039;&#039;&#039; 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&#039;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 &#039;em both and bam you&#039;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 &#039;&#039;[[Hallelujah (Leonard Cohen song)|Hallelujah]]&#039;&#039; ([[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; &amp;#039;&amp;#039;&amp;#039;Yale University Press&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Yale University Press&#039;&#039;&#039; 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; &amp;#039;&amp;#039;&amp;#039;Dragonite&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Dragonite&#039;&#039;&#039; 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]”.  &#039;&#039;[[bacardi55.io]]&#039;&#039;.  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]”.  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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]]).  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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}&#039;T&#039;{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 &#039;s/en_SE:2000/i18n:2012/g&#039; /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]”.  &#039;&#039;[[bacardi55.io]]&#039;&#039;.  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]”.  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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]]).  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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}&#039;T&#039;{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 &#039;s/en_SE:2000/i18n:2012/g&#039; /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]”.  &#039;&#039;[[bacardi55.io]]&#039;&#039;.  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]”.  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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]]).  &#039;&#039;[[mozilla.org]]&#039;&#039;.  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}&#039;T&#039;{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 &#039;s/en_SE:2000/i18n:2012/g&#039; /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}}&#039;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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; designed to send results back to Earth. (c18) Designed by Steve Natch of University of British Columbia for the &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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 &#039;&#039;Hail Mary&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky&#039;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 &#039;&#039;Hail Mary&#039;&#039;.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the &#039;&#039;Hail Mary&#039;&#039;. Rocky and Grace decide to disconnect the &#039;&#039;Blip-A&#039;&#039; so they can create artificial gravity to use Grace&#039;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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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 &#039;&#039;Hail Mary&#039;&#039; crew watch a launch of cargo and supplies to construct the &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039; 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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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; &amp;#039;&amp;#039;&amp;#039;Azumanga Daioh&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Azumanga Daioh&#039;&#039;&#039; 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&#039;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. &#039;&#039;&#039;Minamo Kurosawa&#039;&#039;&#039;; 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. &#039;&#039;&#039;Koyomi Mizuhara&#039;&#039;&#039;; 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. &#039;&#039;&#039;Yukari Tanizaki&#039;&#039;&#039;; 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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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 &#039;&#039;Hail Mary&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039; will take 13 years to travel to [[Tau Ceti]] and another 13 to return results. Grace explains to Rocky how Rocky&#039;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 &#039;&#039;Hail Mary&#039;&#039;.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| c15&lt;br /&gt;
| Grace gives Rocky a tour of the &#039;&#039;Hail Mary&#039;&#039;. Rocky and Grace decide to disconnect the &#039;&#039;Blip-A&#039;&#039; so they can create artificial gravity to use Grace&#039;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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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; &amp;#039;&amp;#039;&amp;#039;Data erasure&amp;#039;&amp;#039;&amp;#039; 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;
&#039;&#039;&#039;Data erasure&#039;&#039;&#039; 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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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&#039;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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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, &#039;&#039;[[Project Hail Mary (film)]]&#039;&#039;, 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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Hail Mary&#039;&#039; 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 &#039;&#039;&#039;Ilyukhina&#039;&#039;&#039;&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 &#039;&#039;Hail Mary&#039;&#039;. 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 &#039;&#039;Blip-A&#039;&#039;.&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 &#039;&#039;Hail Mary&#039;&#039;ʼ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;
|+ &#039;&#039;[[Project Hail Mary]]&#039;&#039; 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 &#039;&#039;Hail Mary&#039;&#039; 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&#039;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&#039;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 &#039;&#039;Blip-A&#039;&#039;. &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 &#039;The Martian&#039; writer Andy Weir, &#039;Project Hail Mary.&#039;]”.  &#039;&#039;[[hollywoodreporter.com]]&#039;&#039;.  Accessed [[2025-10-31]].  “[[Ryan Gosling]] is attached to star in and produce an adaptation of the new novel from &#039;&#039;[[The Martian]]&#039;&#039; writer [[Andy Weir]], &#039;&#039;[[Project Hail Mary]]&#039;&#039;. ¶ 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>
</feed>