From d4fb4d3b9d74ef86f89cfdb6d74d8cc4f49ff2b0 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 6 Dec 2017 20:02:49 +0100
Subject: Saved the first version of the UNIX refcard.

---
 Makefile             |   4 +-
 unix-dev-refcard.tex | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 276 insertions(+), 2 deletions(-)
 create mode 100644 unix-dev-refcard.tex

diff --git a/Makefile b/Makefile
index 69dc01a..ecae510 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 
-all: chrysalide-refcard.pdf
+all: chrysalide-refcard.pdf unix-dev-refcard.pdf
 
 
 %.dvi: %.tex
@@ -10,4 +10,4 @@ all: chrysalide-refcard.pdf
 
 
 clean:
-	@find -maxdepth 1 -type f -not -name 'Makefile' -and -not -name 'chrysalide-refcard.tex' -exec rm -f "{}" \;
+	@find -maxdepth 1 -type f -not -name 'Makefile' -and -not -name '*.tex' -and -not -name '*xcf' -delete
diff --git a/unix-dev-refcard.tex b/unix-dev-refcard.tex
new file mode 100644
index 0000000..f74fea3
--- /dev/null
+++ b/unix-dev-refcard.tex
@@ -0,0 +1,274 @@
+
+% unix-dev-refcard.tex - concise carte de référence pour le développement sous UNIX
+%
+% Copyright (C) 2017 Cyrille Bagard
+%
+%  This card is free software; you can redistribute it and/or modify
+%  it under the terms of the GNU General Public License as published by
+%  the Free Software Foundation; either version 3 of the License, or
+%  (at your option) any later version.
+%
+%  This card is distributed in the hope that it will be useful,
+%  but WITHOUT ANY WARRANTY; without even the implied warranty of
+%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+%  GNU General Public License for more details.
+%
+%  You should have received a copy of the GNU General Public License
+%  along with this program; if not, write to the Free Software
+%  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+%
+
+
+\documentclass[landscape, 10pt]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper, top=1.0cm, bottom=0.7cm, left=0.7cm, right=0.7cm]{geometry}
+
+\usepackage{multicol}
+\usepackage{url}
+\usepackage{scrextend}
+\usepackage{xcolor}
+
+
+% Le code suivant permet de récupérer la police utilisée par les sections.
+%
+% Cf. http://tex.stackexchange.com/questions/73158/how-to-get-the-size-of-the-section-header
+
+\newcommand{\getsectionfont}{\setbox0=\vbox{\section*{a\xdef\TheSectionFont{\the\font}}}}
+\AtBeginDocument{\getsectionfont}
+
+% Pas de numérotation de page
+\pagestyle{empty}
+
+\begin{document}
+
+\title{Debugging --- Quick Reference Card}
+
+
+% Les commandes suivantes permettent de mesurer une zone de texte, en particulier une pseudo section donc.
+%
+% Cf. https://en.wikibooks.org/wiki/LaTeX/Lengths#Examples
+
+\newlength{\sectionheight}
+\newsavebox{\hiddensection}
+\savebox{\hiddensection}{\TheSectionFont
+  ABC
+}
+\settoheight{\sectionheight}{ \usebox{\hiddensection} }
+
+% On recrée une section artificielle. Elle n'apparaîtra pas dans un sommaire
+% (qui n'existera de toute façon jamais), mais comporte des bordures plus minces
+% que celles par défaut pour une section.
+
+\newcommand{\fakesection}[1]{
+  \vskip 1em
+  \noindent
+  \colorbox{black!70}{\parbox[c][1.6\sectionheight]{1.0\linewidth}{
+      \begin{addmargin}[1em]{1em}\TheSectionFont
+        {\color{white}#1}
+      \end{addmargin}
+    }
+  }
+}
+
+\begin{multicols}{3}
+
+
+% Création d'un titre
+
+\begin{center}
+  \huge{Happy UNIX developer life\\Quick Reference Card}
+  \vskip 1em
+  \large{@laughing\_bit --- \url{http://git.0xdeadc0de.fr/}}
+\end{center} 
+
+\vskip 1em
+\hrule
+\vskip 1em
+
+
+% Définition des commandes
+
+\newcommand{\cmd}[2]{
+  \begin{small}{\tt#1}\dotfill{#2}\par\end{small}
+}
+
+\newcommand{\alias}[1]{
+  {\tt alias #1}\par
+}
+
+
+\fakesection{Bash Basics}
+
+\cmd{!!}{Refer to the previous command}
+\cmd{!*}{Refer to all the arguments of the last command}
+\cmd{!\^{}}{Refer to the first word of the last command}
+\cmd{!\$}{Refer to the last word of the last command}
+
+\cmd{cmd1 \textbar\& cmd2}{Pipe stdout and stderr of \textit{cmd1} to \textit{cmd2}}
+
+\cmd{echo \$RANDOM}{Display a random number}
+\cmd{echo \$(( 0x10 + 1 ))}{Compute math formulas}
+
+\cmd{source \textasciitilde/.bashrc}{Reload the bash initialization file}
+
+\cmd{pushd / popd}{Stack working directories}
+\cmd{cp myfile\{,.bak\}}{Skip some writing}
+\cmd{ls -lhd !(*avi|*mkv)}{List all files which do not match}
+
+\cmd{\textbackslash command}{Escape any aliases for \textit{command}}
+
+\fakesection{Terminal shortcuts}
+
+\cmd{Ctrl-l}{Clear the screen}
+\cmd{Ctrl-a}{Go to the beginning of line}
+\cmd{Ctrl-e}{Go to the end of line}
+
+\cmd{Ctrl-k}{Delete from cursor to the end of line}
+\cmd{Ctrl-u}{Delete from cursor to the start of line}
+\cmd{Ctrl-w}{Delete from cursor to the start of word}
+\cmd{Ctrl-y}{Paste text cut using one of the above shortcuts}
+
+\cmd{Esc c / Alt-c}{Capitalize from cursor to end of word}
+\cmd{Esc u / Alt-u}{Upcase from cursor to end of word}
+\cmd{Esc l / Alt-l}{Downcase from cursor to end of word}
+
+\cmd{Alt-t}{Swap the current word with the previous one}
+\cmd{Ctrl-t}{Swap the current character with the previous one}
+
+\cmd{Esc Ctrl-e}{Expand the line content}
+
+\cmd{Ctrl-r}{Enter the reverse-search history}
+
+\fakesection{Useful tools}
+
+\cmd{colorgcc}{Colorize GCC compilation output}
+\cmd{hexedit}{View and edit binary files, in hex or ASCII}
+\cmd{vbindiff}{Visually compare binary files}
+\cmd{kcachegrind}{Visualize valgrind profiling output}
+\cmd{kompare}{View file differences using a nice GUI}
+\cmd{kmag}{Magnify a part of the screen}
+\cmd{screenruler}{Measure objects on the screen}
+\cmd{cloc / sloccount}{Count physical source lines of code}
+
+
+\fakesection{Shell tricks}
+
+\cmd{cat /proc/self/environ | tr "\textbackslash0" "\textbackslash n"}{Same as {\tt env}}
+\cmd{sed "s\#//\#/\#"}{Same as {\tt sed "s/\textbackslash/\textbackslash//\textbackslash//"}}
+\cmd{mount | column -t}{Show filesystems in a nice layout}
+\cmd{getconf LONG\_BIT}{Tell if the system is 32 bits or 64 bits}
+\cmd{sed -n 5p file}{Print the 5th line of \textit{file}}
+\cmd{tar tf file | xargs rm -rf}{Remove all extracted files}
+
+
+\fakesection{GDB - \textasciitilde/.gdbinit}
+
+\cmd{set confirm off}{Disable confirmation requests}
+\cmd{set disassembly-flavor intel}{Set the disassembly style}
+\cmd{set print pretty on}{Print structures in a nice way}
+\cmd{set history save}{Record command history in a file}
+\cmd{set print array on}{Print one item per line}
+
+
+\fakesection{GDB commands}
+
+\par{Commands can be run at startup using {\tt gdb -ex cmd}.}
+
+\medskip
+
+\cmd{target remote :1234}{Connect to a local server}
+
+\cmd{b where [if cond]}{Set a breakpoint (triggered if \textit{cond})}
+\cmd{commands id}{Run commands when the breakpoint \textit{id} is hit}
+\cmd{rb regexp}{Break on functions matching \textit{regexp}}
+
+\cmd{bt [full] [N/-N]}{Show \textit{N} frames of the call stack}
+\cmd{t a a cmd}{Apply \textit{cmd} to all threads (e.g. \textit{t a a bt 3})}
+\cmd{info f}{Print verbose info about the current frame}
+\cmd{finish}{Continue till end of function}
+
+\cmd{pt var}{Print info about the type of \textit{var}}
+\cmd{p *array@count}{Print the \textit{count} first items of \textit{array}}
+\cmd{info locals}{View all local variables}
+\cmd{info args}{View all function arguments}
+
+
+\fakesection{Valgrind options}
+
+\cmd{-{}-trace-children=yes}{Track wrapped binaries}
+\cmd{-{}-vgdb=full}{Activate the "gdbserver" functionality}
+\cmd{-{}-vgdb-error=0}{Break the program at startup}
+
+\cmd{-{}-fullpath-after=directory}{Extend path in stack traces}
+
+\cmd{-{}-suppressions=file}{Specify one list of errors to hide}
+\cmd{-{}-gen-suppressions=all}{Print error definitions}
+
+\cmd{-{}-read-var-info=yes}{Read variable info from DWARF3}
+
+
+\fakesection{Valgrind -{}-tool=memcheck}
+
+\cmd{-{}-leak-check=full}{Show each individual leak in detail}
+\cmd{-{}-show-reachable=yes}{Track all kinds of memory leak}
+\cmd{-{}-track-origins=yes}{Track the origin of uninitialised values}
+
+\fakesection{Valgrind -{}-tool=callgrind}
+
+\cmd{-{}-callgrind-out-file=dest}{Choose \textit{dest} as output}
+\cmd{-{}-dump-instr=yes}{Collect at per-instruction granularity}
+\cmd{-{}-collect-jumps=yes}{Collect info for conditional jumps}
+
+
+\fakesection{Valgrind -{}-tool=massif}
+
+\cmd{-{}-massif-out-file=dest}{Choose \textit{dest} as output}
+
+\cmd{-{}-depth=100}{Increase depth of recorded allocation trees}
+\cmd{-{}-threshold=0.05}{Set threshold as \% of total memory}
+
+\cmd{-{}-alloc-fn=g\_malloc}{Handle GLib allocations \#0}
+\cmd{-{}-alloc-fn=g\_malloc0}{Handle GLib allocations \#1}
+\cmd{-{}-alloc-fn=g\_realloc}{Handle GLib allocations \#2}
+\cmd{-{}-alloc-fn=g\_try\_malloc}{Handle GLib allocations \#3}
+\cmd{-{}-alloc-fn=g\_mem\_chunk\_alloc}{Handle GLib allocations \#4}
+
+\medskip
+
+\par{Use {\tt ms\_print -{}-threshold=X} to process stored data.}
+
+
+\fakesection{Alias advices}
+
+\cmd{man ascii}{Display the ASCII table}
+
+\cmd{gcc -dM -E - < /dev/null}{Dump preprocessor defines}
+\cmd{make -j\$( nproc )}{Run make using all found CPUs}
+
+\cmd{find -name "*\textasciitilde" -delete}{Remove backup files}
+\cmd{find -type d -empty -delete}{Remove empty directories}
+
+\cmd{xclip -selection clipboard}{Copy from stdin}
+\cmd{xclip -selection clipboard -o}{Paste to stdout}
+
+\cmd{kill -STOP \$( pidof firefox )}{Save some CPU usage}
+\cmd{kill -CONT \$( pidof firefox )}{Go to surf on the Web}
+
+\cmd{grep -{}-color=always}{Enjoy colors using {\tt less -R}}
+\cmd{grep -{}-include="*.[ch]"}{Search in code source only}
+
+\cmd{readelf -aW file}{Display wide info about \textit{file}}
+
+
+\vskip 2em
+\hrule
+\vskip 1em
+
+\centerline{This card may be distributed under the terms of the GPL v3}
+\centerline{Copyright \copyright\ {2017} Cyrille BAGARD}
+
+\end{multicols}
+\end{document}
-- 
cgit v0.11.2-87-g4458

