Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 18 novembre 2018

Installer et configurer cheat

Il y a quelques temps déjà, j'avais présenté le projet Cheat de Chris Allen Lane, qui permet de retrouver rapidement des exemples d'utilisation pour les commandes Unix.

On va voir aujourd'hui comment l'installer, le configurer et créer nos propres "cheat sheets".

Installer cheat

cheat est écrit en Python et s'installe donc par un:

sudo pip install cheat

On vérifie la version:

cheat -v
cheat 2.3.1

Configurer cheat

On va ajouter dans notre .bashrc:

export CHEATCOLORS=true

comme cela nos antisèches seront plus jolies !

Puis on va installer le script d'autocomplétion pour Bash:

sudo curl -L https://raw.githubusercontent.com/chrisallenlane/cheat/master/cheat/autocompletion/cheat.bash -o /etc/bash_completion.d/cheat

Maintenant, cheat propose les commandes disponibles quand on appuie sur TAB. Ne pas hésiter à entrer une lettre avant TAB, sinon il nous propose 191 commandes ...

L'autocomplétion n'est pas implémentée sur les options de la commande, c'est dommage.

Ajouter une nouvelle cheatsheet

Pour ajouter une nouvelle sheet sur la commande mycmd:

cheat -e mycmd

Et vous aller alors éditer le fichier ~/.cheat/mycmd.

Si vous souhaitez changer le répertoire des "user cheat", il faut procéder comme ceci:

export CHEATPATH='/path/to/my/cheats'

Les antisèches installées par défaut sont placées dans /usr/local/lib/python3.4/dist-packages/cheat/cheatsheets.

Mettre à jour cheat

Pour mettre à jour cheat:

sudo pip install --upgrade cheat

Voilà. Happy cheating :-)

lundi 22 août 2016

Les résultats de le commande ping avec un timestamp

La commande ping qui permet de tester la présence d'une machine envoie une requête par seconde et écrit sur la sortie standard quelque chose comme:

ping Freebox-Server.local
PING Freebox-Server.local (192.168.0.254) 56(84) bytes of data.
64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=1 ttl=64 time=4.23 ms
64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=2 ttl=64 time=3.31 ms
64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=3 ttl=64 time=3.36 ms
64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=4 ttl=64 time=3.32 ms

On peut modifier cet intervalle d'une seconde:

ping -i 60 Freebox-Server.local

Par contre on ne dispose pas de la date et de l'heure de chaque requête sur la sortie à l'écran.

Certes on peut utiliser le flag -D pour afficher le timestamp Unix:

ping -D -i 60 Freebox-Server.local
PING Freebox-Server.local (192.168.0.254) 56(84) bytes of data.
[1471846085.423179] 64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=1 ttl=64 time=3.65 ms
[1471846145.587672] 64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=2 ttl=64 time=3.40 ms

Mais ce n'est pas très parlant pour un être humain !

On pourrait certes obtenir ensuite la date par:

date -d @1471846085
lundi 22 août 2016, 08:08:05 (UTC+0200)

Mais cela ne simplifie pas les choses.

En fait, pour obtenir le timestamp sur la sortie de la commande ping, il ne faut pas se focaliser sur la commande ping elle-même mais il suffit de parser sa sortie. Par exemple:

ping Freebox-Server.local | while read line; do echo "$(date): $line"; done
lundi 22 août 2016, 08:11:21 (UTC+0200): PING Freebox-Server.local (192.168.0.254) 56(84) bytes of data.
lundi 22 août 2016, 08:11:21 (UTC+0200): 64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=1 ttl=64 time=3.30 ms
lundi 22 août 2016, 08:11:22 (UTC+0200): 64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=2 ttl=64 time=3.39 ms
lundi 22 août 2016, 08:11:23 (UTC+0200): 64 bytes from Freebox-Server.local (192.168.0.254): icmp_req=3 ttl=64 time=3.32 ms

En faisant comme cela, on peut ajouter les informations de date et d'heure sur la sortie de n'importe quelle commande et ce simplement par quelques commandes Shell.

dimanche 24 août 2014

Protégez vos fichiers importants de la suppression accidentelle sous Linux

Il nous arrive à tous un jour ou l'autre de chercher un fichier sous Linux et de ne plus le retrouver ...

Ainsi récemment j'ai malheureusement supprimé un fichier contenant tout un tas de commandes pratiques dont je ne me souviens pas forcément :-(

Afin de ne pas refaire la même erreur par la suite, j'ai cherché quelle solution mettre en place pour éviter que cela se reproduise.

En ligne de commande, dès lors qu'on a défini un alias sur la commande rm comme suit dans .bashrc ou dans .bash_aliases:

alias rm='rm -i'

On est prévenu lorsqu'on tente de supprimer le fichier:

user@machine:~/Bureau$ rm Important.txt 
rm: remove regular empty file `Important.txt'? 

Et si on ne saisit pas "Yes" celui-ci n'est pas supprimé.

C'est bien mais le gestionnaire de fichiers, Thunar sous Xfce dans mon cas, n'en a que faire de l'alias de la commande rm et le fichier part à la corbeille. Certes, avec la corbeille tout n'est pas encore perdu.

Une solution toute simple consiste à placer tous vos fichiers importants dans un répertoire donné et dans un deuxième temps à enlever les droits d'écriture de ce dernier. En effet, comme sous Linux et sous Unix les droits de suppressions d'un fichier sont ceux du répertoire qui le contient, on ne pourra supprimer aucun fichier du répertoire contenant nos documents importants.

Attention, cette méthode n'empêche pas d'ouvrir le fichier avec un éditeur et donc de supprimer tout ou partie de son contenu (par exemple par Ctrl-A puis Ctrl-X), puisqu'on a les droits de lecture et d'écriture sur le fichier !

Une autre contrepartie de cette solution est que pour créer un nouveau fichier, il faudra temporairement remettre les droits d'écriture sur le répertoire en question. Mais, si on oublie ensuite d'enlever ces droits d'écriture après la création du nouveau fichier on perd évidemment la protection recherchée sur nos fichiers ... On peut par exemple pour éviter ce problème créer plusieurs fichiers vides dès le début et que l'on éditera ensuite.

- page 1 de 2