<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel><title>bsd | Hugo Ferreira</title>
    <link>https://hugo.ferreira.cc/tags/bsd/</link>
    <description>Recent content in Bsd by Hugo Ferreira</description>
    <image>
      <title>bsd | Hugo Ferreira</title>
      <url>https://hugo.ferreira.cc/hf-bw.jpg</url>
      <link>https://hugo.ferreira.cc/tags/bsd/</link>
    </image>
    <generator>Hugo -- 0.124.1</generator>
    <language>en</language>
    <copyright>2000–2024 by Hugo Ferreira · CC BY 4.0</copyright>
    <lastBuildDate>Thu, 28 Feb 2019 01:04:32 +0000</lastBuildDate>
    <atom:link href="https://hugo.ferreira.cc/tags/bsd/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>✂️ Unix</title>
      <link>https://hugo.ferreira.cc/unix/</link>
      <pubDate>Thu, 28 Feb 2019 01:04:32 +0000</pubDate>
      <guid>https://hugo.ferreira.cc/unix/</guid>
      <description>Small information nuggets and recipies about Unix</description>
      <content:encoded><![CDATA[<ul>
<li><a href="https://devhints.io/bash">bash cheatsheet</a></li>
<li><a href="https://devhints.io/zsh">zsh cheatsheet</a></li>
</ul>
<hr>
<p><em>(most recent on top)</em></p>
<h2 id="quick-curl-recipes">Quick <code>curl</code> recipes</h2>
<ul>
<li><a href="https://catonmat.net/cookbooks/curl">Curl Cookbook</a> <em>(with many other recipes)</em>
<ul>
<li><a href="https://catonmat.net/cookbooks/curl/debug-curl-requests">Debug Curl Requests (TLDR: Use -v or &ndash;trace arguments) – Curl Cookbook</a></li>
<li><a href="https://catonmat.net/cookbooks/curl/make-curl-slow">Make Curl Slow (TLDR: Use &ndash;limit-rate argument) – Curl Cookbook</a></li>
</ul>
</li>
</ul>
<h3 id="post-json-data">Post json data</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># `-d` implies `-X POST`</span>
</span></span><span class="line"><span class="cl">curl -H <span class="s1">&#39;Content-Type: application/json&#39;</span> -d <span class="s1">&#39;{&#34;key&#34;: &#34;value&#34;}&#39;</span> http://example.com
</span></span></code></pre></div><h3 id="curl-useful-options"><code>curl</code> useful options</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Silence the progress bar</span>
</span></span><span class="line"><span class="cl">curl -s http://example.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Show response headers</span>
</span></span><span class="line"><span class="cl">curl -i http://example.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Follow redirects</span>
</span></span><span class="line"><span class="cl">curl -L http://example.com
</span></span></code></pre></div><h2 id="check-and-make-sure-a-script-is-sourced">Check and make sure a script is sourced</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Exit if this script was not sourced as an import</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASH_SOURCE</span><span class="p">[0]</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">0</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="nb">echo</span> <span class="s2">&#34;Error: Must run as an import source&#34;</span>    <span class="c1"># stderr</span>
</span></span><span class="line"><span class="cl">    &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="nb">echo</span> <span class="s2">&#34;Try: source \&#34;</span><span class="si">${</span><span class="nv">BASH_SOURCE</span><span class="p">[0]</span><span class="si">}</span><span class="s2">\&#34;&#34;</span>      <span class="c1"># stderr</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div><h2 id="run-two-commands-in-parallel-and-wait-for-their-result">Run two commands in parallel and wait for their result</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">command1 <span class="p">&amp;</span>
</span></span><span class="line"><span class="cl">command2 <span class="p">&amp;</span>
</span></span><span class="line"><span class="cl"><span class="nb">wait</span> %1 <span class="o">&amp;&amp;</span> <span class="nb">wait</span> %2
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$?</span>
</span></span></code></pre></div><h2 id="read-secret-into-a-variable">Read secret into a variable</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">read</span> -s TOKEN                     <span class="c1"># silent typing</span>
</span></span><span class="line"><span class="cl"><span class="nb">read</span> -s -p <span class="s2">&#34;Token?&#34;</span> TOKEN         <span class="c1"># … with prompt</span>
</span></span></code></pre></div><h2 id="increment-a-counter--calculate-expressions">Increment a counter / calculate expressions</h2>
<ul>
<li><a href="https://stackoverflow.com/questions/2552130/bash-evaluate-a-mathematical-term/2552184#2552184">math - Bash: evaluate a mathematical term? - Stack Overflow</a></li>
</ul>
<p><em>… count from 0</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">let</span> <span class="nv">count</span><span class="o">=</span><span class="nv">$count</span>+1                <span class="c1"># count = 1, 2, 3, ...</span>
</span></span><span class="line"><span class="cl"><span class="o">((</span><span class="nv">count</span><span class="o">=</span>count+1<span class="o">))</span>                 <span class="c1"># count = 1, 2, 3, ...</span>
</span></span><span class="line"><span class="cl"><span class="nv">value</span><span class="o">=</span><span class="k">$((</span>count-1<span class="k">))</span>                <span class="c1"># value = 0, 1, 2, ...</span>
</span></span></code></pre></div><p><em>… count from N = 10</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">let</span> <span class="nv">count</span><span class="o">=</span><span class="si">${</span><span class="nv">count</span><span class="k">:-</span><span class="nv">10</span><span class="si">}</span>+1          <span class="c1"># count = 11, 12, 13, ...</span>
</span></span></code></pre></div><h2 id="group-and-count-number-of-multiple-occurrences-of-the-same-line">Group and count number of multiple occurrences of the same line</h2>
<ul>
<li><a href="https://unix.stackexchange.com/a/170044">Sort and count number of occurrence of lines - Unix &amp; Linux Stack Exchange</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sort file <span class="p">|</span> uniq -c <span class="p">|</span> sort -r
</span></span><span class="line"><span class="cl"><span class="c1">#   3 foo</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   2 bar</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   1 baz</span>
</span></span></code></pre></div><h2 id="remove-path-and-extension-from-a-filename">Remove path and extension from a filename</h2>
<ul>
<li>See also <a href="https://github.com/hugocf/dotfiles/blob/main/Documents/C/Code/Shell/scripts/remove_path_extension.sh">remove_path_extension.sh</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">full_path</span><span class="o">=</span>/some/example/directories/some.example.name.txt
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">full_path</span><span class="p">##*/</span><span class="si">}</span>              <span class="c1"># =&gt; some.example.name.txt</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">full_path</span><span class="p">%.*</span><span class="si">}</span>               <span class="c1"># =&gt; /some/example/directories/some.example.name</span>
</span></span></code></pre></div><h2 id="default-missing-variable-to-a-value">Default missing variable to a value</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">set</span> -u                            <span class="c1"># treat unset variables as errors</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">1</span><span class="k">:-</span><span class="si">}</span>                       <span class="c1"># =&gt; empty</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">1</span><span class="k">:-</span><span class="nv">0</span><span class="si">}</span>                      <span class="c1"># =&gt; 0</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">1</span><span class="k">:-</span><span class="nv">X</span><span class="si">}</span>                      <span class="c1"># =&gt; X</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">1</span><span class="k">:-</span><span class="nv">$var</span><span class="si">}</span>                   <span class="c1"># =&gt; example</span>
</span></span></code></pre></div><h2 id="use-multiline-heredoc-herestring-and-var-as-input">Use multiline heredoc, herestring, and var as input</h2>
<p><em>… same output</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">content
</span></span><span class="line"><span class="cl">string
</span></span></code></pre></div><p><em>… using heredoc</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cat <span class="s">&lt;&lt;WORD
</span></span></span><span class="line"><span class="cl"><span class="s">content
</span></span></span><span class="line"><span class="cl"><span class="s">string
</span></span></span><span class="line"><span class="cl"><span class="s">WORD</span>
</span></span></code></pre></div><p><em>… using herestring</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cat <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;content
</span></span></span><span class="line"><span class="cl"><span class="s2">string&#34;</span>
</span></span></code></pre></div><p><em>… using var in herestring</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">text</span><span class="o">=</span><span class="s2">&#34;\
</span></span></span><span class="line"><span class="cl"><span class="s2">content
</span></span></span><span class="line"><span class="cl"><span class="s2">string&#34;</span>
</span></span><span class="line"><span class="cl">cat <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$text</span><span class="s2">&#34;</span>
</span></span></code></pre></div><h2 id="view-zip-or-jar-files">View zip or jar files</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">view some.jar
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">unzip -c some.jar path/to/file.txt
</span></span></code></pre></div><h2 id="transforming-and-parsing-json">Transforming and parsing JSON</h2>
<ul>
<li><a href="https://stedolan.github.io/jq/manual/">jq Manual (development version)</a></li>
</ul>
<h3 id="jq-useful-options"><code>jq</code> useful options</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-c    --compact-output
</span></span><span class="line"><span class="cl">-r    --raw-output
</span></span><span class="line"><span class="cl">-S    --sort-keys
</span></span></code></pre></div><h3 id="feed-json-into-jq">Feed json into <code>jq</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;{&#34;example&#34;:&#34;value&#34;}&#39;</span>
</span></span></code></pre></div><p><em>… from a variable</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$json</span> <span class="p">|</span> jq .                 <span class="c1"># using pipe</span>
</span></span><span class="line"><span class="cl">jq . <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>                  <span class="c1"># using herestring</span>
</span></span></code></pre></div><p><em>… from a file</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span> &gt; /tmp/example.json
</span></span><span class="line"><span class="cl">jq . &lt; /tmp/example.json
</span></span></code></pre></div><h3 id="convert-to-new-array-with-a-subset-of-keys">Convert to new array with a subset of keys</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;[
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;a&#34;, &#34;id&#34;:1, &#34;extra&#34;:&#34;foo&#34;}, 
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;b&#34;, &#34;id&#34;:2, &#34;extra&#34;:&#34;bar&#34;}
</span></span></span><span class="line"><span class="cl"><span class="s1">]&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">jq -c <span class="s1">&#39;[.[] | { id, name }]&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># [{&#34;id&#34;:1,&#34;name&#34;:&#34;a&#34;},{&#34;id&#34;:2,&#34;name&#34;:&#34;b&#34;}]</span>
</span></span></code></pre></div><h3 id="select-array-elements">Select array elements</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;[{&#34;key&#34;:&#34;a&#34;}, {&#34;key&#34;:&#34;b&#34;}, {&#34;key&#34;:&#34;c&#34;}]&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$json</span> <span class="p">|</span> jq -c <span class="s1">&#39;.[0]&#39;</span>         <span class="c1"># =&gt; { &#34;key&#34;: &#34;a&#34; }</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$json</span> <span class="p">|</span> jq -c <span class="s1">&#39;first&#39;</span>        <span class="c1"># =&gt; { &#34;key&#34;: &#34;a&#34; }</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$json</span> <span class="p">|</span> jq -c <span class="s1">&#39;nth(1)&#39;</span>       <span class="c1"># =&gt; { &#34;key&#34;: &#34;b&#34; }</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$json</span> <span class="p">|</span> jq -c <span class="s1">&#39;last&#39;</span>         <span class="c1"># =&gt; { &#34;key&#34;: &#34;c&#34; }</span>
</span></span></code></pre></div><h3 id="array-elements-from-key-value-pairs">Array elements from key-value pairs</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;[{&#34;key&#34;:&#34;a&#34;, &#34;value&#34;:1}, {&#34;key&#34;:&#34;b&#34;, &#34;value&#34;:2}]&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">jq -c <span class="s1">&#39;from_entries&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>  <span class="c1"># =&gt; { &#34;a&#34;: 1, &#34;b&#34;: 2 }</span>
</span></span></code></pre></div><h3 id="array-elements-from-custom-key-value-strings">Array elements from custom key-value strings</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;[
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;a&#34;, &#34;id&#34;:1, &#34;extra&#34;:&#34;foo&#34;},
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;b&#34;, &#34;id&#34;:2, &#34;extra&#34;:&#34;bar&#34;}
</span></span></span><span class="line"><span class="cl"><span class="s1">]&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">jq -c <span class="s1">&#39;.[] | [{ &#34;key&#34;: .name, &#34;value&#34;: .id }] | from_entries&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># { &#34;a&#34;: 1, &#34;b&#34;: 2 }</span>
</span></span></code></pre></div><h3 id="default-null-to-empty-string">Default <code>null</code> to empty string</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;{&#34;example&#34;:&#34;value&#34;}&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">jq -r <span class="s1">&#39;.path.to.attr&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>           <span class="c1"># =&gt; null</span>
</span></span><span class="line"><span class="cl">jq -r <span class="s1">&#39;.path.to.attr // empty&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>  <span class="c1"># =&gt; </span>
</span></span></code></pre></div><h3 id="convert-json-to-csv">Convert json to CSV</h3>
<ul>
<li><a href="https://stackoverflow.com/questions/32960857/how-to-convert-arbitrary-simple-json-to-csv-using-jq#32965227">How to convert arbitrary simple JSON to CSV using jq? - Stack Overflow</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">json</span><span class="o">=</span><span class="s1">&#39;[
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;a&#34;, &#34;id&#34;:1, &#34;extra&#34;:&#34;foo&#34;}, 
</span></span></span><span class="line"><span class="cl"><span class="s1">  {&#34;name&#34;:&#34;b&#34;, &#34;id&#34;:2, &#34;extra&#34;:&#34;bar&#34;}
</span></span></span><span class="line"><span class="cl"><span class="s1">]&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">jq -r <span class="s1">&#39;(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv&#39;</span> <span class="o">&lt;&lt;&lt;</span> <span class="s2">&#34;</span><span class="nv">$json</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;extra&#34;,&#34;id&#34;,&#34;name&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;foo&#34;,1,&#34;a&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; &#34;bar&#34;,2,&#34;b&#34;</span>
</span></span></code></pre></div><h2 id="special-tips-about-sed">Special tips about <code>sed</code></h2>
<ul>
<li><a href="http://www.folkstalk.com/2012/01/sed-command-in-unix-examples.html">Sed Command in Unix and Linux Examples</a></li>
</ul>
<h3 id="sed-separators-are-configurable"><code>sed</code> separators are configurable</h3>
<p><em>… useful to avoid escaping <code>/</code></em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sed <span class="s1">&#39;s_http://_www._&#39;</span> file.txt
</span></span><span class="line"><span class="cl">sed <span class="s1">&#39;s#http://#www.#&#39;</span> file.txt
</span></span><span class="line"><span class="cl">sed <span class="s1">&#39;s|http://|www.|&#39;</span> file.txt
</span></span><span class="line"><span class="cl"><span class="c1"># http://example.com =&gt; www.example.com</span>
</span></span></code></pre></div><h3 id="refer-to-the-matched-search-in-sed">Refer to the matched search in <code>sed</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sed <span class="s1">&#39;s/unix/&amp; or linux/&#39;</span> file.txt
</span></span><span class="line"><span class="cl"><span class="c1"># unix os =&gt; unix or linux os</span>
</span></span></code></pre></div><h2 id="bouncing-systemd-services">Bouncing <code>systemd</code> services</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">cd</span> /etc/systemd/system            <span class="c1"># =&gt; servname.service</span>
</span></span><span class="line"><span class="cl">sudo systemctl stop servname      <span class="c1"># stop the service</span>
</span></span><span class="line"><span class="cl">sudo systemctl daemon-reload      <span class="c1"># reload changes from disk</span>
</span></span><span class="line"><span class="cl">sudo systemctl start servname     <span class="c1"># start the service</span>
</span></span><span class="line"><span class="cl">systemctl status ser*             <span class="c1"># what’s going on?</span>
</span></span></code></pre></div><h2 id="using-color-escape-sequences-with-echo">Using color escape sequences with <code>echo</code></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">$&#39;\e[1;34m&#39;</span><span class="s2">&#34;text&#34;</span><span class="s1">$&#39;\e[0m&#39;</span>
</span></span></code></pre></div><p><em>… using a variable instead of the escape sequence <strong>does no work!</strong></em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">FOO</span><span class="o">=</span><span class="s1">&#39;\e[1;34m&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$FOO</span><span class="s2">&#34;text&#34;</span><span class="s1">$&#39;\e[0m&#39;</span>           <span class="c1"># =&gt; \e[1;34mtext</span>
</span></span></code></pre></div><h2 id="bash-noop-command-colon">Bash noop command (colon)</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">$a</span> <span class="o">==</span> <span class="nv">$b</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    :                             <span class="c1"># noop</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div><h2 id="list-wildcard-directories-without-showing-its-contents">List wildcard directories without showing its contents</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ls -d pattern*
</span></span><span class="line"><span class="cl"><span class="c1"># foo       bar       baz</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ls -1d pattern*
</span></span><span class="line"><span class="cl"><span class="c1"># foo</span>
</span></span><span class="line"><span class="cl"><span class="c1"># bar</span>
</span></span><span class="line"><span class="cl"><span class="c1"># baz</span>
</span></span></code></pre></div><h2 id="continue-a-command-in-the-next-line">Continue a command in the next line</h2>
<ul>
<li><a href="http://www.cyberciti.biz/faq/howto-ask-bash-that-line-command-script-continues-next-line/">Bash Continue Command / Script On The Next Line</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">commannd1 -arg1 -arg2 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          -arg3 -arg4 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          -arg5 -arg6
</span></span></code></pre></div><h2 id="read-lines-from-a-file-one-at-a-time">Read lines from a file, one at a time</h2>
<ul>
<li><a href="http://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash/1521498#1521498">linux - Looping through the content of a file in Bash? - Stack Overflow</a></li>
<li><a href="https://stackoverflow.com/questions/10929453/read-a-file-line-by-line-assigning-the-value-to-a-variable/10929511#10929511">bash - Read a file line by line assigning the value to a variable - Stack Overflow</a></li>
</ul>
<p><em>… excludes the last line if it doesn’t end with a newline</em> ⚠️</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="k">while</span> <span class="nb">read</span> -r line<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="nv">$line</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span> &lt; <span class="nv">$filename</span>
</span></span></code></pre></div><p><em>… does not stop to enter data manually if the loop is interactive (i.e. reads from stdin)</em> ⚠️</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="k">while</span> <span class="nv">IFS</span><span class="o">=</span><span class="s1">&#39;&#39;</span> <span class="nb">read</span> -r line <span class="o">||</span> <span class="o">[[</span> -n <span class="s2">&#34;</span><span class="nv">$line</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="nv">$line</span>
</span></span><span class="line"><span class="cl">    <span class="nb">read</span> -r input                 <span class="c1"># grabs line from file</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="nv">$input</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span> &lt; <span class="nv">$filename</span>
</span></span></code></pre></div><h2 id="where-a-script-is-located-and-from-where-was-it-called">Where a script is located and from where was it called</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">readonly</span> <span class="nv">BASEDIR</span><span class="o">=</span><span class="k">$(</span><span class="nb">cd</span> <span class="s2">&#34;</span><span class="k">$(</span>dirname <span class="s2">&#34;</span><span class="nv">$0</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">pwd</span><span class="k">)</span> <span class="c1"># where the script is located</span>
</span></span><span class="line"><span class="cl"><span class="nb">readonly</span> <span class="nv">CALLDIR</span><span class="o">=</span><span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>                         <span class="c1"># where it was called from</span>
</span></span></code></pre></div><h2 id="check-for-environment-variables">Check for environment variables</h2>
<p><em>… make sure var <strong>is defined</strong></em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> <span class="nv">$ISDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="nb">echo</span> <span class="nv">$?</span>         <span class="c1"># =&gt; 0 (success)</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span> <span class="nv">$UNDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="nb">echo</span> <span class="nv">$?</span>         <span class="c1"># =&gt; 1 (error)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> <span class="nv">$ISDEFINED</span> <span class="o">]]</span> <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span>    <span class="c1"># =&gt; yes</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span> <span class="nv">$UNDEFINED</span> <span class="o">]]</span> <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span>    <span class="c1"># =&gt; not</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">$ISDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">else</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span><span class="p">;</span> <span class="k">fi</span>    <span class="c1"># =&gt; yes</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">$UNDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">else</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span><span class="p">;</span> <span class="k">fi</span>    <span class="c1"># =&gt; not</span>
</span></span></code></pre></div><p><em>… make sure var <strong>is not defined</strong></em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> -z <span class="nv">$ISDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="nb">echo</span> <span class="nv">$?</span>      <span class="c1"># =&gt; 1 (error)</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span> -z <span class="nv">$UNDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="nb">echo</span> <span class="nv">$?</span>      <span class="c1"># =&gt; 0 (success)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> -z <span class="nv">$ISDEFINED</span> <span class="o">]]</span> <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span>    <span class="c1"># =&gt; yes</span>
</span></span><span class="line"><span class="cl"><span class="o">[[</span> -z <span class="nv">$UNDEFINED</span> <span class="o">]]</span> <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span>    <span class="c1"># =&gt; not</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> -z <span class="nv">$ISDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span><span class="p">;</span> <span class="k">else</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">fi</span>  <span class="c1"># =&gt; yes</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> -z <span class="nv">$UNDEFINED</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;not&#34;</span><span class="p">;</span> <span class="k">else</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">fi</span>  <span class="c1"># =&gt; not</span>
</span></span></code></pre></div><h2 id="recursively-grep-files-with-specific-patterns">Recursively grep files with specific patterns</h2>
<p><em>… filter by file extensions</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">grep -ri <span class="s2">&#34;pattern&#34;</span> . --include <span class="s2">&#34;*.txt&#34;</span> --include <span class="s2">&#34;*.text&#34;</span>
</span></span><span class="line"><span class="cl">grep -ri <span class="s2">&#34;pattern&#34;</span> . --include <span class="s2">&#34;*.md&#34;</span> --exclude <span class="s2">&#34;README.*&#34;</span>
</span></span></code></pre></div><p><em>… filter by directories</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">grep <span class="s2">&#34;pattern&#34;</span> filemask* --exclude-dir <span class="s2">&#34;test&#34;</span> --exclude-dir <span class="s2">&#34;target&#34;</span>
</span></span></code></pre></div><h2 id="remove-an-environment-variable">Remove an environment variable</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">unset</span> ENV_VAR
</span></span></code></pre></div><h2 id="pass-boolean-values-as-parameters-to-bash-functions">Pass boolean values as parameters to bash functions</h2>
<ul>
<li><a href="http://stackoverflow.com/a/21210966/1380781">bash - How to declare and use boolean variables in shell script? - Stack Overflow</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">bool</span><span class="o">=</span><span class="nb">true</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="s2">&#34;</span><span class="nv">$bool</span><span class="s2">&#34;</span> <span class="o">=</span> <span class="nb">true</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">fi</span>            <span class="c1"># =&gt; yes</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="s2">&#34;</span><span class="nv">$bool</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="nb">true</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s2">&#34;yes&#34;</span><span class="p">;</span> <span class="k">fi</span>         <span class="c1"># =&gt; yes</span>
</span></span></code></pre></div><h2 id="return-values-from-bash-functions">Return values from bash functions</h2>
<ul>
<li><a href="http://nothingworks.donaitken.com/2012/04/returning-booleans-from-bash-functions">Returning booleans from Bash functions | // nothing works</a></li>
<li><a href="http://www.ibm.com/developerworks/library/l-bash-test/">Linux tip: Bash test and comparison functions</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">readonly</span> <span class="nv">SUCCESS</span><span class="o">=</span><span class="m">0</span>                <span class="c1"># exit status of bash commands</span>
</span></span></code></pre></div><p><em>… capture the return value of a function</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">get_value<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$variable</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">value</span><span class="o">=</span><span class="k">$(</span>get_value<span class="k">)</span>
</span></span></code></pre></div><p><em>… check if the last command executed with success</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">is_equal<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="o">[[</span> <span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="s2">&#34;</span><span class="nv">$2</span><span class="s2">&#34;</span> <span class="o">]]</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">is_equal <span class="o">&amp;&amp;</span> <span class="nb">echo</span> ok <span class="o">||</span> <span class="nb">echo</span> not ok          <span class="c1"># =&gt; ok</span>
</span></span><span class="line"><span class="cl">is_equal a b <span class="o">&amp;&amp;</span> <span class="nb">echo</span> ok <span class="o">||</span> <span class="nb">echo</span> not ok      <span class="c1"># =&gt; not ok</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">is_valid<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  grep -q <span class="s2">&#34;</span><span class="nv">$looking_for</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$file</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">is_valid <span class="o">&amp;&amp;</span> <span class="nb">echo</span> found <span class="o">||</span> <span class="nb">echo</span> not found
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; not found [shows stderr msg]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">is_valid</span> <span class="o">==</span> <span class="m">0</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> found
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> not found
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; not found [no stderr msg]</span>
</span></span></code></pre></div><h2 id="dereference-bash-variable-param-substitutionexpansion">Dereference bash variable param substitution/expansion</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">TEST</span><span class="o">=</span>foobar
</span></span><span class="line"><span class="cl"><span class="nv">var</span><span class="o">=</span><span class="s2">&#34;TEST&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="p">!var</span><span class="si">}</span><span class="s2">&#34;</span>                    <span class="c1"># =&gt; foobar</span>
</span></span></code></pre></div><h2 id="check-if-a-directory-is-empty">Check if a directory is empty</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> <span class="k">$(</span>find /some/dir/ -maxdepth <span class="m">0</span> -type d -empty 2&gt; /dev/null<span class="k">)</span> <span class="o">]]</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;Empty&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;Not empty or missing&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[[</span> <span class="s2">&#34;</span><span class="k">$(</span>ls -A /some/dir/ 2&gt; /dev/null<span class="k">)</span><span class="s2">&#34;</span> <span class="o">]]</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;Not empty&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;Empty or missing&#34;</span>
</span></span></code></pre></div><h2 id="look-for-empty-directories">Look for empty directories</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">find . -type d -empty
</span></span></code></pre></div><h2 id="exclude-hidden-dot-files-and-dirs-when-searching">Exclude hidden dot files and dirs when searching</h2>
<ul>
<li><a href="http://www.cyberciti.biz/faq/find-command-exclude-ignore-files/">Find command: Exclude or Ignore Files (e.g. Ignore All Hidden .dot Files )</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">find . -type file ! -name <span class="s2">&#34;.*&#34;</span>
</span></span><span class="line"><span class="cl">find . -type file ! <span class="se">\(</span> -name <span class="s2">&#34;.*&#34;</span> -or -path <span class="s2">&#34;*/.sync/*&#34;</span> <span class="se">\)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">find . -type file -not -name <span class="s2">&#34;.*&#34;</span>
</span></span><span class="line"><span class="cl">find . -type file -not -name <span class="s2">&#34;.*&#34;</span> -not -path <span class="s2">&#34;*/.sync/*&#34;</span>
</span></span><span class="line"><span class="cl">find . -type file -not <span class="se">\(</span> -name <span class="s2">&#34;.*&#34;</span> -or -path <span class="s2">&#34;*/.sync/*&#34;</span> <span class="se">\)</span>
</span></span></code></pre></div><h2 id="show-function-definition">Show function definition</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">declare</span> -f functionname
</span></span></code></pre></div><h2 id="check-open-files">Check open files</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">lsof <span class="p">|</span> grep file
</span></span></code></pre></div><h2 id="check-open-ports">Check open ports</h2>
<ul>
<li><a href="http://apple.stackexchange.com/a/117648/66527">terminal - How can I list my open network ports with netstat? - Ask Different</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo lsof -i -P <span class="p">|</span> grep :8080
</span></span></code></pre></div><h2 id="monitor-network-traffic">Monitor network traffic</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo tcpdump -ien1 -q
</span></span><span class="line"><span class="cl">sudo lsof -i:8080
</span></span></code></pre></div><h2 id="vi-survival-commands"><code>vi</code> survival commands</h2>
<h3 id="vi-exit"><code>vi</code> exit</h3>
<p><em>… exit and save</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">⇧-Z-Z
</span></span><span class="line"><span class="cl">:wq
</span></span><span class="line"><span class="cl">:x
</span></span></code></pre></div><p><em>… exit without saving</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">⇧-Z-Q
</span></span><span class="line"><span class="cl">:q!
</span></span></code></pre></div><h3 id="vi-settings"><code>vi</code> settings</h3>
<p><em>… in <code>~/.vimrc</code></em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">:set <span class="nv">backupdir</span><span class="o">=</span>~/tmp              <span class="c1"># backup files</span>
</span></span><span class="line"><span class="cl">:set <span class="nv">background</span><span class="o">=</span>dark              <span class="c1"># use lighter colors</span>
</span></span><span class="line"><span class="cl">:set <span class="nv">ff</span><span class="o">=</span>unix<span class="p">|</span>dos                  <span class="c1"># unix or dos file format</span>
</span></span></code></pre></div><h2 id="remove-trailing-newlines">Remove trailing newlines</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;</span><span class="k">$(</span>cat file<span class="k">)</span><span class="s2">&#34;</span> &gt; file
</span></span></code></pre></div><h2 id="convert-date-toform-epoch">Convert date to/form epoch</h2>
<p><em>… from epoch</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">date -r <span class="m">1234567890</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; Fri Feb 13 23:31:30 WET 2009</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">date -r <span class="m">1294897379</span> +<span class="s2">&#34;%Y-%m-%d %H:%M:%S&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; 2011-01-13 05:42:59</span>
</span></span></code></pre></div><p><em>… to epoch</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">date -jf <span class="s2">&#34;%Y-%m-%d %H:%M:%S&#34;</span> <span class="s2">&#34;2011-01-13 05:42:59&#34;</span> +%s
</span></span><span class="line"><span class="cl"><span class="c1"># =&gt; 1294897379</span>
</span></span></code></pre></div><h2 id="difference-between-2-dates">Difference between 2 dates</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">ruby</span> <span class="o">-</span><span class="n">r</span> <span class="s1">&#39;date&#39;</span> <span class="o">-</span><span class="n">e</span> <span class="s1">&#39;puts &#34;#{(Date.today - Date.new(2007,11,30)).to_i} days&#34;&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">python</span> <span class="o">-</span><span class="n">c</span> <span class="s2">&#34;import datetime as d; print((d.date.today() - d.date(2007,11,30)).days)&#34;</span>
</span></span></code></pre></div><h2 id="subtract-days-to-a-date">Subtract days to a date</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">expr -1 <span class="se">\*</span> <span class="m">24</span> <span class="se">\*</span> <span class="m">60</span> <span class="se">\*</span> <span class="m">60</span> + <span class="sb">`</span>date +%s<span class="sb">`</span> <span class="p">|</span> xargs date -r
</span></span><span class="line"><span class="cl">expr -1 <span class="se">\*</span> <span class="m">24</span> <span class="se">\*</span> <span class="m">60</span> <span class="se">\*</span> <span class="m">60</span> + <span class="sb">`</span>date +%s<span class="sb">`</span> <span class="p">|</span> xargs -I<span class="o">{}</span> date -r <span class="o">{}</span> +<span class="s2">&#34;%Y-%m-%d&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">ruby</span> <span class="o">-</span><span class="n">r</span> <span class="s1">&#39;date&#39;</span> <span class="o">-</span><span class="n">le</span> <span class="s1">&#39;puts &#34;#{Date.today - 1}&#34;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">ruby</span> <span class="o">-</span><span class="n">r</span> <span class="s1">&#39;date&#39;</span> <span class="o">-</span><span class="n">le</span> <span class="s1">&#39;puts &#34;#{Date.today &lt;&lt; 1}&#34;&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">python</span> <span class="o">-</span><span class="n">c</span> <span class="s2">&#34;import datetime as d; print(d.date.today() - d.timedelta(days=1))&#34;</span>
</span></span></code></pre></div><h2 id="current-week-number">Current week number</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">man strftime                      <span class="c1"># list of formats</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">date +%V
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">ruby</span> <span class="o">-</span><span class="n">e</span> <span class="s1">&#39;puts (Time.now).strftime(&#34;%V&#34;)&#39;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">python</span> <span class="o">-</span><span class="n">c</span> <span class="s2">&#34;import time; print(time.strftime(&#39;%W&#39;))&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">python</span> <span class="o">-</span><span class="n">c</span> <span class="s2">&#34;import datetime as d; print(d.date(2009,9,1).strftime(&#39;%W&#39;))&#34;</span>
</span></span></code></pre></div><h2 id="files-paches">Files paches</h2>
<p><em>… generate</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">diff -uraN olddir newdir &gt; patch.diff
</span></span></code></pre></div><p><em>… apply</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">patch -p1 &lt; patch.diff
</span></span></code></pre></div><h2 id="dos--unix--dos">Dos ➔ Unix ➔ Dos</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># ^M = ctrl-V ctrl-M</span>
</span></span></code></pre></div><p><em>… unix ➔ dos</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> sed -e <span class="s1">&#39;s/$/^M/&#39;</span> unix.file &gt; dos.file
</span></span></code></pre></div><p><em>… dos ➔ unix</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sed -e <span class="s1">&#39;s/^M//&#39;</span> dos.file &gt; unix.file
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">tr -d <span class="se">\\</span>r &lt; dos.file &gt; unix.newfile
</span></span></code></pre></div><h2 id="test-a-pop3-server">Test a POP3 server</h2>
<ul>
<li><a href="https://tools.ietf.org/html/rfc1939">RFC 1939 - Post Office Protocol - Version 3</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ telnet myserver <span class="m">110</span>
</span></span><span class="line"><span class="cl">user myusername
</span></span><span class="line"><span class="cl">pass mypassword
</span></span><span class="line"><span class="cl">stat <span class="p">|</span> list <span class="p">|</span> retr &lt;msgnbr&gt; <span class="p">|</span> dele &lt;msgnbr&gt;
</span></span><span class="line"><span class="cl">quit
</span></span></code></pre></div><h2 id="manage-postfix-mail-queues">Manage postfix mail queues</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo tail -f /var/log/postfix.log <span class="c1"># check what postfix is doing</span>
</span></span><span class="line"><span class="cl">mailq                             <span class="c1"># see what is in the queue (shows id)</span>
</span></span><span class="line"><span class="cl">postsuper -d id                   <span class="c1"># delete a mail from the queue</span>
</span></span><span class="line"><span class="cl">postsuper -d ALL                  <span class="c1"># delete all mail from the queue</span>
</span></span></code></pre></div><h2 id="unix-distribution-nameversion">Unix distribution name/version</h2>
<p><em>… depending on the distro</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dmesg <span class="p">|</span> head -1
</span></span><span class="line"><span class="cl">cat /proc/version
</span></span><span class="line"><span class="cl">cat /etc/issue                    <span class="c1"># human-readable</span>
</span></span><span class="line"><span class="cl">uname -a                          <span class="c1"># full summary</span>
</span></span></code></pre></div><h2 id="shell-redirections">Shell redirections</h2>
<ul>
<li><a href="https://wiki.bash-hackers.org/howto/redirection_tutorial">Illustrated Redirection Tutorial [Bash Hackers Wiki]</a></li>
<li><a href="https://stackoverflow.com/questions/2990414/echo-that-outputs-to-stderr/23550347#23550347">bash - echo that outputs to stderr - Stack Overflow</a></li>
</ul>
<h3 id="redirect-stdout">Redirect <code>stdout</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cmd &gt; /dev/null                   <span class="c1"># stdout to file</span>
</span></span><span class="line"><span class="cl">cmd &gt;<span class="p">&amp;</span><span class="m">2</span>                           <span class="c1"># stdout to stderr</span>
</span></span></code></pre></div><h3 id="redirect-stderr">Redirect <code>stderr</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cmd 2&gt; /dev/null                  <span class="c1"># stderr to file</span>
</span></span><span class="line"><span class="cl">cmd 2&gt;<span class="p">&amp;</span><span class="m">1</span>                          <span class="c1"># stderr to stdout</span>
</span></span></code></pre></div><h3 id="redirect-stdout-and-stderr">Redirect <code>stdout</code> and <code>stderr</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cmd <span class="p">&amp;</span>&gt; /dev/null                  <span class="c1"># both to file</span>
</span></span><span class="line"><span class="cl">cmd &gt; /dev/null 2&gt;<span class="p">&amp;</span><span class="m">1</span>              <span class="c1"># both to file</span>
</span></span><span class="line"><span class="cl">cmd 2&gt;<span class="p">&amp;</span><span class="m">1</span> <span class="p">|</span> cmd                    <span class="c1"># both to pipe</span>
</span></span><span class="line"><span class="cl">cmd 2&gt;<span class="p">&amp;</span><span class="m">1</span> <span class="p">|</span> tee file.txt           <span class="c1"># both to console and file</span>
</span></span></code></pre></div><h3 id="redirect-stdout-and-stderr-bash-4">Redirect <code>stdout</code> and <code>stderr</code> (bash 4)</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cmd <span class="p">&amp;</span>&gt;&gt; /dev/null                 <span class="c1"># both to file</span>
</span></span><span class="line"><span class="cl">cmd <span class="p">|&amp;</span> cmd                        <span class="c1"># both to pipe</span>
</span></span></code></pre></div><h2 id="common-lines-between-two-files">Common lines between two files</h2>
<ul>
<li><a href="https://unix.stackexchange.com/a/398143">text processing - Common lines between two files - Unix &amp; Linux Stack Exchange</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">comm -12 <span class="nv">$file1</span> <span class="nv">$file2</span>            <span class="c1"># assumes files are sorted</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">grep -Fxf <span class="nv">$file1</span> <span class="nv">$file2</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-perl" data-lang="perl"><span class="line"><span class="cl"><span class="n">perl</span> <span class="o">-</span><span class="ow">ne</span> <span class="s">&#39;print if ($seen{$_} .= @ARGV) =~ /10$/&#39;</span> <span class="nv">$file1</span> <span class="nv">$file2</span>
</span></span></code></pre></div><h2 id="compile-po-message-files-into-mo-data-files">Compile <code>.po</code> message files into <code>.mo</code> data files</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">msgfmt -o filename.mo filename.po
</span></span></code></pre></div><h2 id="create-a-fake-blank-file-of-any-size">Create a fake blank file of any size</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dd <span class="k">if</span><span class="o">=</span>/dev/zero <span class="nv">of</span><span class="o">=</span>myfile <span class="nv">bs</span><span class="o">=</span><span class="m">1024</span> <span class="nv">count</span><span class="o">=</span><span class="m">12</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 12+0 records in</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 12+0 records out</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 12288 bytes transferred in 0.000225 secs (54613333 bytes/sec)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ls -lh myfile 
</span></span><span class="line"><span class="cl"><span class="c1"># -rw-r--r--  1 hfr7756  staff    12K Sep 17 13:56 myfile</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">du -h myfile  
</span></span><span class="line"><span class="cl"><span class="c1"># 12K myfile</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">du --si myfile
</span></span><span class="line"><span class="cl"><span class="c1"># 12k myfile</span>
</span></span></code></pre></div><h2 id="split-very-long-xml-lines-in-tags">Split very long xml lines in tags</h2>
<p><em>… brute force format by inserting newlines</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># it&#39;s one single command line!</span>
</span></span><span class="line"><span class="cl">sed -e <span class="s1">&#39;s/\&gt;\&lt;/\&gt;\
</span></span></span><span class="line"><span class="cl"><span class="s1">\&lt;/g&#39;</span> input.xml &gt; output.xml
</span></span></code></pre></div><h2 id="port-forwarding-through-remote-host">Port forwarding through remote host</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ssh server -L 4321:servername:80
</span></span></code></pre></div><h2 id="encode-string-using-openssl">Encode string using openssl</h2>
<p><em>… from string</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;qwerty&#34;</span> <span class="p">|</span> openssl base64 <span class="c1"># =&gt; cXdlcnR5</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;qwerty&#34;</span> <span class="p">|</span> openssl md5    <span class="c1"># =&gt; d8578edf8458ce06fbc5bb76a58c5ca4</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;qwerty&#34;</span> <span class="p">|</span> openssl sha1   <span class="c1"># =&gt; b1b3773a05c0ed0176787a4f1574ff0075f7521e</span>
</span></span></code></pre></div><p><em>… from input</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">openssl base64
</span></span><span class="line"><span class="cl">^D
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">openssl md5
</span></span><span class="line"><span class="cl">^D
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">openssl sha1
</span></span><span class="line"><span class="cl">^D
</span></span></code></pre></div>]]></content:encoded>
    </item>
  </channel>
</rss>
