diff options
Diffstat (limited to 'print.html')
-rw-r--r-- | print.html | 85 |
1 files changed, 84 insertions, 1 deletions
@@ -89,7 +89,7 @@ <nav id="sidebar" class="sidebar" aria-label="Table of contents"> <div class="sidebar-scrollbox"> - <ol class="chapter"><li class="chapter-item expanded affix "><a href="intro.html">Introduction</a></li><li class="chapter-item expanded "><a href="shells/index.html"><strong aria-hidden="true">1.</strong> Shells</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="shells/zsh.html"><strong aria-hidden="true">1.1.</strong> zsh</a></li><li class="chapter-item expanded "><a href="shells/bash.html"><strong aria-hidden="true">1.2.</strong> bash</a></li><li class="chapter-item expanded "><a href="shells/fish.html"><strong aria-hidden="true">1.3.</strong> fish</a></li></ol></li><li class="chapter-item expanded "><a href="cli/index.html"><strong aria-hidden="true">2.</strong> CLI foo</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="cli/awk.html"><strong aria-hidden="true">2.1.</strong> awk</a></li><li class="chapter-item expanded "><a href="cli/sed.html"><strong aria-hidden="true">2.2.</strong> sed</a></li><li class="chapter-item expanded "><a href="cli/column.html"><strong aria-hidden="true">2.3.</strong> column</a></li><li class="chapter-item expanded "><a href="cli/sort.html"><strong aria-hidden="true">2.4.</strong> sort</a></li><li class="chapter-item expanded "><a href="cli/tr.html"><strong aria-hidden="true">2.5.</strong> tr</a></li></ol></li><li class="chapter-item expanded "><a href="tools/index.html"><strong aria-hidden="true">3.</strong> Tools</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="tools/tmux.html"><strong aria-hidden="true">3.1.</strong> tmux</a></li><li class="chapter-item expanded "><a href="tools/emacs.html"><strong aria-hidden="true">3.2.</strong> emacs</a></li><li class="chapter-item expanded "><a href="tools/gpg.html"><strong aria-hidden="true">3.3.</strong> gpg</a></li><li class="chapter-item expanded "><a href="tools/radare2.html"><strong aria-hidden="true">3.4.</strong> radare2</a></li><li class="chapter-item expanded "><a href="tools/qemu.html"><strong aria-hidden="true">3.5.</strong> qemu</a></li><li class="chapter-item expanded "><a href="tools/pacman.html"><strong aria-hidden="true">3.6.</strong> pacman</a></li><li class="chapter-item expanded "><a href="tools/dot.html"><strong aria-hidden="true">3.7.</strong> dot</a></li><li class="chapter-item expanded "><a href="tools/ffmpeg.html"><strong aria-hidden="true">3.8.</strong> ffmpeg</a></li><li class="chapter-item expanded "><a href="tools/gnuplot.html"><strong aria-hidden="true">3.9.</strong> gnuplot</a></li><li class="chapter-item expanded "><a href="tools/restic.html"><strong aria-hidden="true">3.10.</strong> restic</a></li></ol></li><li class="chapter-item expanded "><a href="monitor/index.html"><strong aria-hidden="true">4.</strong> Resource analysis & monitor</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="monitor/lsof.html"><strong aria-hidden="true">4.1.</strong> lsof</a></li><li class="chapter-item expanded "><a href="monitor/pidstat.html"><strong aria-hidden="true">4.2.</strong> pidstat</a></li><li class="chapter-item expanded "><a href="monitor/pgrep.html"><strong aria-hidden="true">4.3.</strong> pgrep</a></li><li class="chapter-item expanded "><a href="monitor/ps.html"><strong aria-hidden="true">4.4.</strong> ps</a></li><li class="chapter-item expanded "><a href="monitor/pmap.html"><strong aria-hidden="true">4.5.</strong> pmap</a></li><li class="chapter-item expanded "><a href="monitor/pstack.html"><strong aria-hidden="true">4.6.</strong> pstack</a></li></ol></li><li class="chapter-item expanded "><a href="trace_profile/index.html"><strong aria-hidden="true">5.</strong> Trace and Profile</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="trace_profile/time.html"><strong aria-hidden="true">5.1.</strong> time</a></li><li class="chapter-item expanded "><a href="trace_profile/strace.html"><strong aria-hidden="true">5.2.</strong> strace</a></li><li class="chapter-item expanded "><a href="trace_profile/ltrace.html"><strong aria-hidden="true">5.3.</strong> ltrace</a></li><li class="chapter-item expanded "><a href="trace_profile/perf.html"><strong aria-hidden="true">5.4.</strong> perf</a></li><li class="chapter-item expanded "><a href="trace_profile/oprofile.html"><strong aria-hidden="true">5.5.</strong> OProfile</a></li><li class="chapter-item expanded "><a href="trace_profile/callgrind.html"><strong aria-hidden="true">5.6.</strong> callgrind</a></li></ol></li><li class="chapter-item expanded "><a href="debug/index.html"><strong aria-hidden="true">6.</strong> Debug</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="debug/gdb.html"><strong aria-hidden="true">6.1.</strong> gdb</a></li><li class="chapter-item expanded "><a href="debug/gdbserver.html"><strong aria-hidden="true">6.2.</strong> gdbserver</a></li></ol></li><li class="chapter-item expanded "><a href="binary/index.html"><strong aria-hidden="true">7.</strong> Binary</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="binary/od.html"><strong aria-hidden="true">7.1.</strong> od</a></li><li class="chapter-item expanded "><a href="binary/xxd.html"><strong aria-hidden="true">7.2.</strong> xxd</a></li><li class="chapter-item expanded "><a href="binary/readelf.html"><strong aria-hidden="true">7.3.</strong> readelf</a></li><li class="chapter-item expanded "><a href="binary/objdump.html"><strong aria-hidden="true">7.4.</strong> objdump</a></li><li class="chapter-item expanded "><a href="binary/nm.html"><strong aria-hidden="true">7.5.</strong> nm</a></li></ol></li><li class="chapter-item expanded "><a href="development/index.html"><strong aria-hidden="true">8.</strong> Development</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="development/c++filt.html"><strong aria-hidden="true">8.1.</strong> c++filt</a></li><li class="chapter-item expanded "><a href="development/c++.html"><strong aria-hidden="true">8.2.</strong> c++</a></li><li class="chapter-item expanded "><a href="development/glibc.html"><strong aria-hidden="true">8.3.</strong> glibc</a></li><li class="chapter-item expanded "><a href="development/gcc.html"><strong aria-hidden="true">8.4.</strong> gcc</a></li><li class="chapter-item expanded "><a href="development/git.html"><strong aria-hidden="true">8.5.</strong> git</a></li><li class="chapter-item expanded "><a href="development/cmake.html"><strong aria-hidden="true">8.6.</strong> cmake</a></li><li class="chapter-item expanded "><a href="development/make.html"><strong aria-hidden="true">8.7.</strong> make</a></li><li class="chapter-item expanded "><a href="development/ld.so.html"><strong aria-hidden="true">8.8.</strong> ld.so</a></li><li class="chapter-item expanded "><a href="development/symbolver.html"><strong aria-hidden="true">8.9.</strong> symbol versioning</a></li><li class="chapter-item expanded "><a href="development/python.html"><strong aria-hidden="true">8.10.</strong> python</a></li><li class="chapter-item expanded "><a href="development/gcov.html"><strong aria-hidden="true">8.11.</strong> gcov</a></li><li class="chapter-item expanded "><a href="development/pgo.html"><strong aria-hidden="true">8.12.</strong> pgo</a></li></ol></li><li class="chapter-item expanded "><a href="linux/index.html"><strong aria-hidden="true">9.</strong> Linux</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="linux/systemd.html"><strong aria-hidden="true">9.1.</strong> systemd</a></li><li class="chapter-item expanded "><a href="linux/coredump.html"><strong aria-hidden="true">9.2.</strong> coredump</a></li><li class="chapter-item expanded "><a href="linux/ptrace_scope.html"><strong aria-hidden="true">9.3.</strong> ptrace_scope</a></li><li class="chapter-item expanded "><a href="linux/cryptsetup.html"><strong aria-hidden="true">9.4.</strong> cryptsetup</a></li><li class="chapter-item expanded "><a href="linux/swap.html"><strong aria-hidden="true">9.5.</strong> swap</a></li><li class="chapter-item expanded "><a href="linux/input.html"><strong aria-hidden="true">9.6.</strong> input</a></li><li class="chapter-item expanded "><a href="linux/acl.html"><strong aria-hidden="true">9.7.</strong> acl</a></li><li class="chapter-item expanded "><a href="linux/zfs.html"><strong aria-hidden="true">9.8.</strong> zfs</a></li></ol></li><li class="chapter-item expanded "><a href="network/index.html"><strong aria-hidden="true">10.</strong> Network</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="network/ss.html"><strong aria-hidden="true">10.1.</strong> ss</a></li><li class="chapter-item expanded "><a href="network/tcpdump.html"><strong aria-hidden="true">10.2.</strong> tcpdump</a></li><li class="chapter-item expanded "><a href="network/tshark.html"><strong aria-hidden="true">10.3.</strong> tshark</a></li><li class="chapter-item expanded "><a href="network/firewall-cmd.html"><strong aria-hidden="true">10.4.</strong> firewall-cmd</a></li><li class="chapter-item expanded "><a href="network/nftables.html"><strong aria-hidden="true">10.5.</strong> nftables</a></li></ol></li><li class="chapter-item expanded "><a href="web/index.html"><strong aria-hidden="true">11.</strong> Web</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="web/html.html"><strong aria-hidden="true">11.1.</strong> html</a></li><li class="chapter-item expanded "><a href="web/css.html"><strong aria-hidden="true">11.2.</strong> css</a></li><li class="chapter-item expanded "><a href="web/chartjs.html"><strong aria-hidden="true">11.3.</strong> chartjs</a></li></ol></li><li class="chapter-item expanded "><a href="arch/index.html"><strong aria-hidden="true">12.</strong> Arch</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="arch/x86_64.html"><strong aria-hidden="true">12.1.</strong> x86_64</a></li><li class="chapter-item expanded "><a href="arch/armv8.html"><strong aria-hidden="true">12.2.</strong> armv8</a></li><li class="chapter-item expanded "><a href="arch/arm64.html"><strong aria-hidden="true">12.3.</strong> arm64</a></li><li class="chapter-item expanded "><a href="arch/armv7.html"><strong aria-hidden="true">12.4.</strong> armv7</a></li><li class="chapter-item expanded "><a href="arch/riscv.html"><strong aria-hidden="true">12.5.</strong> riscv</a></li></ol></li></ol> + <ol class="chapter"><li class="chapter-item expanded affix "><a href="intro.html">Introduction</a></li><li class="chapter-item expanded "><a href="shells/index.html"><strong aria-hidden="true">1.</strong> Shells</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="shells/zsh.html"><strong aria-hidden="true">1.1.</strong> zsh</a></li><li class="chapter-item expanded "><a href="shells/bash.html"><strong aria-hidden="true">1.2.</strong> bash</a></li><li class="chapter-item expanded "><a href="shells/fish.html"><strong aria-hidden="true">1.3.</strong> fish</a></li></ol></li><li class="chapter-item expanded "><a href="cli/index.html"><strong aria-hidden="true">2.</strong> CLI foo</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="cli/awk.html"><strong aria-hidden="true">2.1.</strong> awk</a></li><li class="chapter-item expanded "><a href="cli/sed.html"><strong aria-hidden="true">2.2.</strong> sed</a></li><li class="chapter-item expanded "><a href="cli/column.html"><strong aria-hidden="true">2.3.</strong> column</a></li><li class="chapter-item expanded "><a href="cli/sort.html"><strong aria-hidden="true">2.4.</strong> sort</a></li><li class="chapter-item expanded "><a href="cli/tr.html"><strong aria-hidden="true">2.5.</strong> tr</a></li></ol></li><li class="chapter-item expanded "><a href="tools/index.html"><strong aria-hidden="true">3.</strong> Tools</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="tools/tmux.html"><strong aria-hidden="true">3.1.</strong> tmux</a></li><li class="chapter-item expanded "><a href="tools/emacs.html"><strong aria-hidden="true">3.2.</strong> emacs</a></li><li class="chapter-item expanded "><a href="tools/gpg.html"><strong aria-hidden="true">3.3.</strong> gpg</a></li><li class="chapter-item expanded "><a href="tools/radare2.html"><strong aria-hidden="true">3.4.</strong> radare2</a></li><li class="chapter-item expanded "><a href="tools/qemu.html"><strong aria-hidden="true">3.5.</strong> qemu</a></li><li class="chapter-item expanded "><a href="tools/pacman.html"><strong aria-hidden="true">3.6.</strong> pacman</a></li><li class="chapter-item expanded "><a href="tools/dot.html"><strong aria-hidden="true">3.7.</strong> dot</a></li><li class="chapter-item expanded "><a href="tools/ffmpeg.html"><strong aria-hidden="true">3.8.</strong> ffmpeg</a></li><li class="chapter-item expanded "><a href="tools/gnuplot.html"><strong aria-hidden="true">3.9.</strong> gnuplot</a></li><li class="chapter-item expanded "><a href="tools/restic.html"><strong aria-hidden="true">3.10.</strong> restic</a></li><li class="chapter-item expanded "><a href="tools/qrencode.html"><strong aria-hidden="true">3.11.</strong> qrencode</a></li></ol></li><li class="chapter-item expanded "><a href="monitor/index.html"><strong aria-hidden="true">4.</strong> Resource analysis & monitor</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="monitor/lsof.html"><strong aria-hidden="true">4.1.</strong> lsof</a></li><li class="chapter-item expanded "><a href="monitor/pidstat.html"><strong aria-hidden="true">4.2.</strong> pidstat</a></li><li class="chapter-item expanded "><a href="monitor/pgrep.html"><strong aria-hidden="true">4.3.</strong> pgrep</a></li><li class="chapter-item expanded "><a href="monitor/ps.html"><strong aria-hidden="true">4.4.</strong> ps</a></li><li class="chapter-item expanded "><a href="monitor/pmap.html"><strong aria-hidden="true">4.5.</strong> pmap</a></li><li class="chapter-item expanded "><a href="monitor/pstack.html"><strong aria-hidden="true">4.6.</strong> pstack</a></li></ol></li><li class="chapter-item expanded "><a href="trace_profile/index.html"><strong aria-hidden="true">5.</strong> Trace and Profile</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="trace_profile/time.html"><strong aria-hidden="true">5.1.</strong> time</a></li><li class="chapter-item expanded "><a href="trace_profile/strace.html"><strong aria-hidden="true">5.2.</strong> strace</a></li><li class="chapter-item expanded "><a href="trace_profile/ltrace.html"><strong aria-hidden="true">5.3.</strong> ltrace</a></li><li class="chapter-item expanded "><a href="trace_profile/perf.html"><strong aria-hidden="true">5.4.</strong> perf</a></li><li class="chapter-item expanded "><a href="trace_profile/oprofile.html"><strong aria-hidden="true">5.5.</strong> OProfile</a></li><li class="chapter-item expanded "><a href="trace_profile/callgrind.html"><strong aria-hidden="true">5.6.</strong> callgrind</a></li></ol></li><li class="chapter-item expanded "><a href="debug/index.html"><strong aria-hidden="true">6.</strong> Debug</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="debug/gdb.html"><strong aria-hidden="true">6.1.</strong> gdb</a></li><li class="chapter-item expanded "><a href="debug/gdbserver.html"><strong aria-hidden="true">6.2.</strong> gdbserver</a></li></ol></li><li class="chapter-item expanded "><a href="binary/index.html"><strong aria-hidden="true">7.</strong> Binary</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="binary/od.html"><strong aria-hidden="true">7.1.</strong> od</a></li><li class="chapter-item expanded "><a href="binary/xxd.html"><strong aria-hidden="true">7.2.</strong> xxd</a></li><li class="chapter-item expanded "><a href="binary/readelf.html"><strong aria-hidden="true">7.3.</strong> readelf</a></li><li class="chapter-item expanded "><a href="binary/objdump.html"><strong aria-hidden="true">7.4.</strong> objdump</a></li><li class="chapter-item expanded "><a href="binary/nm.html"><strong aria-hidden="true">7.5.</strong> nm</a></li></ol></li><li class="chapter-item expanded "><a href="development/index.html"><strong aria-hidden="true">8.</strong> Development</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="development/c++filt.html"><strong aria-hidden="true">8.1.</strong> c++filt</a></li><li class="chapter-item expanded "><a href="development/c++.html"><strong aria-hidden="true">8.2.</strong> c++</a></li><li class="chapter-item expanded "><a href="development/glibc.html"><strong aria-hidden="true">8.3.</strong> glibc</a></li><li class="chapter-item expanded "><a href="development/gcc.html"><strong aria-hidden="true">8.4.</strong> gcc</a></li><li class="chapter-item expanded "><a href="development/git.html"><strong aria-hidden="true">8.5.</strong> git</a></li><li class="chapter-item expanded "><a href="development/cmake.html"><strong aria-hidden="true">8.6.</strong> cmake</a></li><li class="chapter-item expanded "><a href="development/make.html"><strong aria-hidden="true">8.7.</strong> make</a></li><li class="chapter-item expanded "><a href="development/ld.so.html"><strong aria-hidden="true">8.8.</strong> ld.so</a></li><li class="chapter-item expanded "><a href="development/symbolver.html"><strong aria-hidden="true">8.9.</strong> symbol versioning</a></li><li class="chapter-item expanded "><a href="development/python.html"><strong aria-hidden="true">8.10.</strong> python</a></li><li class="chapter-item expanded "><a href="development/gcov.html"><strong aria-hidden="true">8.11.</strong> gcov</a></li><li class="chapter-item expanded "><a href="development/pgo.html"><strong aria-hidden="true">8.12.</strong> pgo</a></li></ol></li><li class="chapter-item expanded "><a href="linux/index.html"><strong aria-hidden="true">9.</strong> Linux</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="linux/systemd.html"><strong aria-hidden="true">9.1.</strong> systemd</a></li><li class="chapter-item expanded "><a href="linux/coredump.html"><strong aria-hidden="true">9.2.</strong> coredump</a></li><li class="chapter-item expanded "><a href="linux/ptrace_scope.html"><strong aria-hidden="true">9.3.</strong> ptrace_scope</a></li><li class="chapter-item expanded "><a href="linux/cryptsetup.html"><strong aria-hidden="true">9.4.</strong> cryptsetup</a></li><li class="chapter-item expanded "><a href="linux/swap.html"><strong aria-hidden="true">9.5.</strong> swap</a></li><li class="chapter-item expanded "><a href="linux/input.html"><strong aria-hidden="true">9.6.</strong> input</a></li><li class="chapter-item expanded "><a href="linux/acl.html"><strong aria-hidden="true">9.7.</strong> acl</a></li><li class="chapter-item expanded "><a href="linux/zfs.html"><strong aria-hidden="true">9.8.</strong> zfs</a></li></ol></li><li class="chapter-item expanded "><a href="network/index.html"><strong aria-hidden="true">10.</strong> Network</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="network/ss.html"><strong aria-hidden="true">10.1.</strong> ss</a></li><li class="chapter-item expanded "><a href="network/tcpdump.html"><strong aria-hidden="true">10.2.</strong> tcpdump</a></li><li class="chapter-item expanded "><a href="network/tshark.html"><strong aria-hidden="true">10.3.</strong> tshark</a></li><li class="chapter-item expanded "><a href="network/firewall-cmd.html"><strong aria-hidden="true">10.4.</strong> firewall-cmd</a></li><li class="chapter-item expanded "><a href="network/nftables.html"><strong aria-hidden="true">10.5.</strong> nftables</a></li></ol></li><li class="chapter-item expanded "><a href="web/index.html"><strong aria-hidden="true">11.</strong> Web</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="web/html.html"><strong aria-hidden="true">11.1.</strong> html</a></li><li class="chapter-item expanded "><a href="web/css.html"><strong aria-hidden="true">11.2.</strong> css</a></li><li class="chapter-item expanded "><a href="web/chartjs.html"><strong aria-hidden="true">11.3.</strong> chartjs</a></li></ol></li><li class="chapter-item expanded "><a href="arch/index.html"><strong aria-hidden="true">12.</strong> Arch</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="arch/x86_64.html"><strong aria-hidden="true">12.1.</strong> x86_64</a></li><li class="chapter-item expanded "><a href="arch/armv8.html"><strong aria-hidden="true">12.2.</strong> armv8</a></li><li class="chapter-item expanded "><a href="arch/arm64.html"><strong aria-hidden="true">12.3.</strong> arm64</a></li><li class="chapter-item expanded "><a href="arch/armv7.html"><strong aria-hidden="true">12.4.</strong> armv7</a></li><li class="chapter-item expanded "><a href="arch/riscv.html"><strong aria-hidden="true">12.5.</strong> riscv</a></li></ol></li></ol> </div> <div id="sidebar-resize-handle" class="sidebar-resize-handle"> <div class="sidebar-resize-indicator"></div> @@ -376,6 +376,33 @@ if [[ $INPUT =~ $REGEX ]]; then echo "$match[2]" # 1234 fi </code></pre> +<h2 id="trap-handling"><a class="header" href="#trap-handling">Trap Handling</a></h2> +<pre><code class="language-zsh">trap "<CMDs>" <SIG>/EXIT + +# Show current trap handler. +trap -p +# List signal names. +trap -l +</code></pre> +<h4 id="example-run-handler-only-on-error-exit"><a class="header" href="#example-run-handler-only-on-error-exit">Example: Run handler only on error exit</a></h4> +<pre><code class="language-zsh">trap 'test $? -ne 0 && echo "run exit trap"' EXIT + +# -> no print +exit 0 +# -> print +exit 1 +</code></pre> +<h4 id="example-mutex-in-shell-script"><a class="header" href="#example-mutex-in-shell-script">Example: Mutex in shell script</a></h4> +<p>For example if a script is triggered in unsynchronized, we may want to ensure +that a single script instance runs.</p> +<pre><code class="language-zsh"># open file=LOCK with fd=100 +exec 100>LOCK +# take exclusive lock, wait maximal for 3600s +flock -w 3600 -x 100 || { echo "flock timeout"; exit 1; } + +# eg automatically release lock when script exits +trap "flock -u 100" EXIT +</code></pre> <h2 id="completion"><a class="header" href="#completion">Completion</a></h2> <h3 id="installation"><a class="header" href="#installation">Installation</a></h3> <p>Completion functions are provided via files and need to be placed in a location @@ -604,6 +631,33 @@ v=abc ; ( v=foo; echo $v; ) ; echo $v # foo # abc </code></pre> +<h2 id="trap-handling-1"><a class="header" href="#trap-handling-1">Trap Handling</a></h2> +<pre><code class="language-bash">trap "<CMDs>" <SIG>/EXIT + +# Show current trap handler. +trap -p +# List signal names. +trap -l +</code></pre> +<h4 id="example-run-handler-only-on-error-exit-1"><a class="header" href="#example-run-handler-only-on-error-exit-1">Example: Run handler only on error exit</a></h4> +<pre><code class="language-bash">trap 'test $? -ne 0 && echo "run exit trap"' EXIT + +# -> no print +exit 0 +# -> print +exit 1 +</code></pre> +<h4 id="example-mutex-in-shell-script-1"><a class="header" href="#example-mutex-in-shell-script-1">Example: Mutex in shell script</a></h4> +<p>For example if a script is triggered in unsynchronized, we may want to ensure +that a single script instance runs.</p> +<pre><code class="language-bash"># open file=LOCK with fd=100 +exec 100>LOCK +# take exclusive lock, wait maximal for 3600s +flock -w 3600 -x 100 || { echo "flock timeout"; exit 1; } + +# eg automatically release lock when script exits +trap "flock -u 100" EXIT +</code></pre> <h2 id="argument-parsing-with-getopts"><a class="header" href="#argument-parsing-with-getopts">Argument parsing with <code>getopts</code></a></h2> <p>The <code>getopts</code> builtin uses following global variables:</p> <ul> @@ -1304,6 +1358,7 @@ echo moose | tr -d 'os' <li><a href="tools/./ffmpeg.html">ffmpeg</a></li> <li><a href="tools/./gnuplot.html">gnuplot</a></li> <li><a href="tools/./restic.html">restic</a></li> +<li><a href="tools/./qrencode.html">qrencode</a></li> </ul> <div style="break-before: page; page-break-before: always;"></div><h1 id="tmux1"><a class="header" href="#tmux1">tmux(1)</a></h1> <p>Terminology:</p> @@ -2183,6 +2238,10 @@ plot "< head -n2 data.txt" # Plot with alternate title. plot "data.txt" title "moose" </code></pre> +<h2 id="example-specify-range-directly-during-plot"><a class="header" href="#example-specify-range-directly-during-plot">Example: Specify range directly during plot</a></h2> +<pre><code class="language-sh"># Plot two functions in the range 0-10. +plot [0:10] 10*x, 20*x +</code></pre> <h2 id="example-multiple-data-sets-in-plot"><a class="header" href="#example-multiple-data-sets-in-plot">Example: multiple data sets in plot</a></h2> <pre><code class="language-sh"># file: mem_lat.plot @@ -2243,6 +2302,14 @@ restic -r <repo> mount --path <abspath> <mntpoint> <li><a href="https://restic.readthedocs.io/en/stable/index.html"><code>restic</code> read the docs</a></li> <li><a href="https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html#sftp">sftp</a></li> </ul> +<div style="break-before: page; page-break-before: always;"></div><h1 id="qrencode1"><a class="header" href="#qrencode1">qrencode(1)</a></h1> +<p>Generate wifi qr code for WPA2 secured network.</p> +<pre><code class="language-sh"># Generate on terminal. +qrencode -t ansiutf8 'WIFI:S:<wifiname>;T:WPA2;P:<wifipasswd>;;' + +# Generate picture for printing. +qrencode -t png -o wifi.png 'WIFI:S:<wifiname>;T:WPA2;P:<wifipasswd>;;' +</code></pre> <div style="break-before: page; page-break-before: always;"></div><h1 id="resource-analysis--monitor"><a class="header" href="#resource-analysis--monitor">Resource analysis & monitor</a></h1> <ul> <li><a href="monitor/./lsof.html">lsof</a></li> @@ -2441,6 +2508,7 @@ opts: -y .......... translate fds (eg file path, socket) -yy ......... translate fds with all information (eg IP) -x .......... print non-ASCII chars as hex string + -v .......... print all arguments (non-abbreviated) </code></pre> <pre><code class="language-markdown"><expr>: trace=syscall[,syscall] .... trace only syscall listed @@ -2456,6 +2524,9 @@ opts: <p>Trace signals delivered to a running process:</p> <pre><code class="language-markdown">strace -e signal -e 'trace=!all' -p <pid> </code></pre> +<p>Show successful calls to <code>perf_event_open((2)</code> without abbreviating arguments.</p> +<pre><code class="language-markdown">strace -v -z -e trace=perf_event_open perf stat -e cycles ls +</code></pre> <div style="break-before: page; page-break-before: always;"></div><h1 id="ltrace1"><a class="header" href="#ltrace1">ltrace(1)</a></h1> <pre><code class="language-markdown">ltrace [opts] [prg] -f .......... follow child processes on fork(2) @@ -4541,6 +4612,7 @@ the same repository (shared .git folder).</p> git log -p <file> ......... show commit history + diffs for <file> git log --oneline <file> .. show commit history for <file> in compact format + git log -nN ............... show last N history entries </code></pre> <h2 id="diff--commit-info"><a class="header" href="#diff--commit-info">Diff & Commit Info</a></h2> <pre><code class="language-markdown"> git diff <commit>..<commit> [<file>] .... show changes between two arbitrary @@ -4610,6 +4682,17 @@ the same repository (shared .git folder).</p> git diff --submodule ...................... show commits that are part of the submodule diff </code></pre> +<h2 id="bisect"><a class="header" href="#bisect">Bisect</a></h2> +<pre><code class="language-markdown"> git bisect start BAD GOOD ........ start bisect process in range BAD..GOOD commits + git bisect good .................. mark current commit as good + git bisect bad ................... mark current commit as bad + + # Automate bisecting. + git bisect run <script> <args> ... run script to automate bisect process + exit 0 - mark commit as good + exit 1 - mark commit as bad + exit 125 - skip commit (eg doesn't build) +</code></pre> <h2 id="inspection-1"><a class="header" href="#inspection-1">Inspection</a></h2> <pre><code class="language-markdown"> git ls-tree [-r] <ref> .... show git tree for <ref>, -r to recursively ls sub-trees git show <obj> ............ show <obj> |