Bash share
|En ce lieu bidimensionnel demeure quelques commandes savoureuses de Bourne Shell, certifiées sans viande de cheval ni gaz toxique. Méritent-elles une large diffusion ? Sans aucun doute !
Je vous invite chaleureusement à jeter un œil aux sources quand elles sont présentées ! ;)
Bash Optimisation
Vous connaissez certainement le Ctrl+R pour chercher dans votre Bash History, ou encore la commande !per qui affiche la dernière commande commençant par l’occurrence qui suit le point d’exclamation ( ici “per” ). Voici une vrai bonne idée qui devrait être activée par défaut sur Linux. Avec ce petit tweak, il vous suffira de taper le début d’une commande, puis de naviguer dans l’historique avec les flèches haut et bas pour lister uniquement les commandes correspondant à votre saisie…
Pour accéder à cette petite fonctionnalité supacool, il vous faut créer .inputrc dans votre home et y coller les quatre lignes ci-dessous. Relancez ensuite votre session.
"\e[A": history-search-backward "\e[B": history-search-forward set show-all-if-ambiguous on set completion-ignore-case on
source : korben.info <- lifehacker.com
Une commande dans le vent
Message codé et spiritualité…
0x0ff@kali:~# for i in 234 254 288 322 331; do curl -sL http://www.ietf.org/rfc/rfc2574.txt | awk -v i="$i" 'NR==i {print substr($1,1,1)}'; done
Local Proxy
Voici une commande magique que j’ai découvert ici et qui permet de monter un proxy SOCKS local :
0x0ff@kali:~# ssh -N -D 0.0.0.0:1080 localhost
@climagic
Je vous conseille de suivre le compte Twitter @climagic, un vrai délice ! Voici un petit extrait…
Quel âge avez-vous en jours ?
0x0ff@kali:~# echo $(( $(( $( date +%s ) - $( date -d "2013-04-21" +%s ) )) / 86400 ))
Ping de la passerelle
0x0ff@kali:~# pgw(){ ping $( ip route list 0/0 | awk '{ print $3 }' ); } 0x0ff@kali:~# pgw
Rechercher les fichiers que l’utilisateur Apache peut lire
0x0ff@kali:~# find . -name '*.txt' \( -user apache -o \( \! -user apache -a -perm /044 \) \)
Obfuscation
Dissimuler une commande est toujours pratique. Atelier camouflage pour la commande cat /etc/shadow… Et à propos de rien, avec netcat que se passerait-il ?.. ;)
Perl
encode
0x0ff@kali:~# perl -e '$s=unpack("H*","cat /etc/shadow"); print $s;' 636174202f6574632f736861646f77
Execute
0x0ff@kali:~# perl -e '$s="636174202f6574632f736861646f77";$s=~s/(..)/chr(hex($1))/eg; print `$s`;' 0x0ff@kali:~# perl -e '$s=pack("H*","636174202f6574632f736861646f77"); print `$s;`'
Bash
Encode
0x0ff@kali:~# echo "cat /etc/shadow" |base64 Y2F0IC9ldGMvc2hhZG93Cg==
Execute
0x0ff@kali:~# $(echo "Y2F0IC9ldGMvc2hhZG93" |base64 -d)
Bash alternatif
Impression de caractère
Voici une solution pour saisir certains caractères lorsque vous ne disposez que d’un clavier limité. Typique des empilements de VMs et bureaux à distance…
0x0ff@kali:~# perl -e 'print chr(35);' # Print # 0x0ff@kali:~# perl -e 'print chr(64);' # Print @ 0x0ff@kali:~# perl -e 'print chr(92);' # Print \ 0x0ff@kali:~# perl -e 'print chr(124);' # Print |
ls contrefait
Un coquin a subtilisé votre binaire ‘ls‘ ? Pas de panique :
0x0ff@kali:~# for file in *; do echo $file; done
Parsing
8<- – -Cut here- – –
Vous trouvez sed/awk un peu trop compliqué pour une utilisation quotidienne ? La commande grep ne vous donne pas entière satisfaction ? Essayez cut !
0x0ff@kali:~# echo '0x0ff.info' |cut -d '.' -f 1 # (-d)élimiter (-f)ield 0x0ff 0x0ff@kali:~# echo '0x0ff.info' |cut -d '.' -f 2 info
Grep et l’esprit de contraction
D’ailleurs en parlant de grep, saviez-vous que grep peut exclure un pattern plutôt que de le chercher ?
0x0ff@kali:~# cat file.txt Ligne cool ! Ligne pas cool ! 0x0ff@kali:~# cat file.txt |grep -v "pas cool" Ligne cool !
Plutôt pratique pour extraire les lignes non commentées d’un fichier de configuration un peu trop chargé :
0x0ff@kali:~# cat /etc/privoxy/config | grep -v "^#" user-manual /usr/share/doc/privoxy/user-manual confdir /etc/privoxy logdir /var/log/privoxy actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on. actionsfile default.action # Main actions file actionsfile user.action # User customizations filterfile default.filter logfile logfile listen-address localhost:8118 toggle 1 enable-remote-toggle 0 enable-remote-http-toggle 0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 forwarded-connect-retries 0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 socket-timeout 300 handle-as-empty-doc-returns-ok 1 forward-socks5 / 127.0.0.1:9050 .
Réduction des budgets, 20% de caractères en moins !
Pour finir, je vous conseille la lecture de cet article, qui parle de régimes minceur adaptés à vos commandes bash un peu bouboules.
Petit teaser pour vous donner envie de cliquer : diff est une commande permettant d’identifier les différences entre deux fichiers. Pratique pour comparer un fichier de configuration et son backup. Les deux lignes ci-dessous représentent la même commande…
Avant
0x0ff@kali:~# diff prout prout.2
Après
0x0ff@kali:~# diff prout{.2,}
Et vous, quels alias/fonctions/combinaisons de touches/tips/tricks/gimmicks/tweaks/cheats font le linuxien que vous êtes ?