Bash share

bachar-approval

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

kaamelott_camouflage

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 ?