Black and White Rainbow Published on March 12, 2009
by Black and White Rainbow

Black and White Rainbow's blog

Browse posts
Mad
Posted on July 18, 2009
1 comment (latest 8 weeks ago)
Une question de point de vue
Posted on June 11, 2009
Get a smarter-er browser...
Posted on March 29, 2009
Les palindromes...
Posted on March 18, 2009
Command-fu, let's get geeky...
The big scary Google
Posted on February 27, 2009
Some music...
Posted on February 20, 2009
L'évolution d'internet...
Posted on February 7, 2009
Du groupe et des individus...
Posted on January 26, 2009

More information

This post is public
Attribution + non Commercial + no Derivs
  1. Read 89 times

Command-fu, let's get geeky...

Thursday March 12, 2009 at 09:22PM

Il y a quelques mois, je me suis trouvé plongé dans un milieu où il ne fait pas bon d'utiliser une souris pour copier, déplacer, créer, modifier des fichiers. Un monde où les outils disponible en ligne de commande sont puissants et nombreux. Un peu poussé, un peu tiré, j'ai appris avec plaisir les bases du command-fu. Bien sur cette discipline n'a pas de sens sous MSWindows (est-ce qu'un chirurgien utilise un marteau ?(1)) et heureusement, j'ai changé d'OS.

Il peut sembler difficile et pénible de changer de système d'exploitation et de modifier toute ses habitudes. Dans un premier temps c'est déstabilisant en effet. Mais on voit vite apparaitre des avantages dont on ne rêvait même pas (on s'habitue vite au chocolat sans moutarde)...

Perks !

Du point de vue manichéen geekeux c'est BIEN (par opposition au MAL) ; on a plus de choix (notamment pour le bureau qui peut se décliné dans de nombreuses variantes) ; beaucoup moins de souci à se faire du point de vue de la sécurité ; une facilité déconcertante pour l'installation/la suppression des programmes (on lance le gestionnaire de paquet, on coche, on valide !)

Et bien sur, le command-fu : l'art de combiner les frappes, sur le clavier, avec intelligence. Pour faire en une ligne ce qu'on ferait en une bonne dizaine (centaine ?) de clic. Voici quelques exemples :

Sauvegarder l'arborescence d'un dossier (vous voulez partager la liste des mp3 de votre dossier musique ?) dans un fichier.

ls -R >arborescence.txt

Cette commande est très simple : "ls" sert à lister les fichiers elle est ici utilisée avec l'option "-R" qui indique que la recherche doit être récursive (quand on trouve un répertoire, on liste les fichiers présents dans celui ci). La sortie (l'endroit où "va" le résultat) de cette commande est redirigée grâce au symbole ">" vers le fichier "arborescence.txt"



La même chose mais avec un filtre (vous voulez partager la liste de vos fichiers mp3 mais ils sont mélangés avec d'autres type de fichiers ?)

ls -R | grep .mp3 >mp3_files.txt

On reconnait le "ls -R" qui liste les fichiers récursivement. On reconnait aussi la redirection de la sortie de la commande ">mp3_files.txt". Mais il y a une partie inconnue au centre. Le caractère "|" (prononcer pipe (à l'anglaise)) indique que le résultat (en réalité pas le résultat, mais la sortie) de la première commande est passé à la seconde commande. Ici, l'arborescence délivrée par "ls -R" est utilisée par la commande "grep .mp3" qui agit comme un filtre en ne gardant que les éléments qui contiennent ".mp3".



Un non initié utiliserai sans doute deux étapes : "ls -R >temp" et "grep .mp3 temp >mp3_files.txt" en créant au passage un fichier "temp"

Déplacer des fichiers dans un répertoire créé à la volé.

mkdir texts && mv *.txt texts/

la première commande crée un répertoire (MaKe DIRectory) nommé "texts". Si la commande n'échoue pas (l'échec peut être du à la présence d'un fichier appelé "texts" par exemple) tout les fichiers d'extension txt (c'est le sens de "*.txt") sont déplacés (MoVe) vers le répertoire "texts". La condition de réussite de la première commande est réalisée par "&&".



Les exemples de command-fu qui font gagner parfois des secondes parfois des minutes peuvent s'énumérer sur de nombreuses lignes. Ils ne sont souvent utile que pour des geeks et/ou des codeurs, je ne parlerais pas de ceux-là. Je tiens encore à rassurer les accros de l'interface graphique qui ne se sente pas capable de naviguer avec w3m (je ne fait pas ça tout les jours), d'écrire avec vim (je fais ça tout les jours), de télécharger avec wget (ça m'arrive) ou de lire ses mails avec mail (ça aussi). Il existe de très bon logiciels avec une interface graphique fantastique. Notamment Dolphin qui ridiculise l'explorateur de MSWindows (en même temps...), Okular qui remplace AcrobatReader en ajoutant de bonnes idées (ajout de notes, copie de texte, surlignage...) à la lecture des PDF, Digikam qui rassemble la gestion d'une bibliothèque d'image et les fonctions d'édition nécessaires dans un même logiciel...

The list goes on !

Évidemment, Linux n'est pas parfait (2) et souffre de quelques faiblesses (certaines imputtable à sa Liberté qui le prive du soutien des fabricants de hardware). Mais, pour ceux qui ont un peu de temps, un soupçon de motivation et idéalement un ami dans "le milieu"(3), ça vaut le coup !

(1) If the only tool you have is a hammer, then everything looks like a nail...
(2) "Si j'étais parfaite je serais insupportable !" me disait récemment une amie
(3) "Je ne suis pas dans le milieu, il n'y a pas de milieu !" me disait il y a quelques temps une (autre) amie

(la conversation continue)

Sujet qui devait nécessairement entrainer des réactions.

La première est une dédicace a l'auteur original d'une des citations précédentes...

Voilà la seconde que j'ai reçu en noir (ce qui est assez étrange quand la page de lecture a un fond noir...) avec quelques commentaires non-indentés (ça veut dire sans espace, ni tabulation, ni décalage vers la droite).



Salut,
Salut ! (<- ça c'est un commentaire)

Évidemment, tu ne pouvais manquer de me faire réagir.
Évidemment... (<- ça aussi (j'arrête))

En vrac :
  • cette discipline (le command-fu) a un sens sous MS-Windows. Les outils GNU me sont devenus tellement nécessaires dans ma vie de tous les jours que je ne supporte que très peu de temps l'absence d'outils comme find et diff, que je télécharge souvent bien vite quand j'ai vraiment besoin d'être sous Windows. (Grâce à Cygwin, les outils GNU sont plutôt bien supportés sous Windows.)
On peut effectivement le faire... Mais ce n'est pas très intéressant : on récupère le beurre mais pas l'argent du beurre ! Soyons réalistes exigeons l'impossible ! (comme me disait récemment un ami (dans un espagnol impeccable (mais légèrement teinté d'un accent argentin))...) Blagues mises à part, le changement d'OS est préférable IMHO.
  • GNU manque encore un peu de la facilité du Mac quant à l'installation/désinstallation de programmes. Sous Mac, il suffit de prendre l'objet "application" (qui n'est qu'un vague fichier zip), et de le transporter dans son répertoire Applications, pour installer un logiciel. Sinon, tous les logiciels sont installés et gérés dans une "Sandbox", avec un espace mémoire différent, et cette Sandbox est présentée sous la forme d'une clef USB. Je trouve ça très bien pensé.
GNU n'est pas (encore ?) parfait... A propos, GNU est un sigle qui signifie GNU's Not Unix, c'est à dire (GNU' Not Unix)'s Not Unix c'est à dire ((GNU's Not Unix)'s Not Unix)'s Not Unix, c'est à dire..
  • La commande "ls -R | grep .mp3 >mp3_files.txt" est intéressante, mais chopera aussi les fichiers nommés "machin.mp3.wav". (J'en ai sur mon ordi.) L'idéal est :
find ./ -type f -name "*.mp3"
Là, ça te prend vraiment tous les fichiers dont l'extension est mp3, du répertoire courant et de ses sous-répertoires.
Effectivement... Je crois qu'il y a aussi une option regexp pour grep mais je n'ai pas testé.
Libre à toi ensuite de l'écrire dans un fichier et, pour donner une astuce supplémentaire : non pas en écrasant l'éventuel fichier nommé mp3_files.txt par un fichier contenant les info trouvées, mais plutôt en ajoutant les informations trouvées au fichier qui existe déjà éventuellement :
find ./ -type f -name "*.mp3" >> mp3_files.txt
Je retiens !

Au passage, c'est amusant, parce qu'en fait, de mon point de vue, un non-initié aurait plutôt pensé en priorité à faire :
b=` find ./ -type f -name "*.mp3"` && echo b > mp3_files.txt
... on doit pas avoir la même définition de non-initié.
Je ne crois pas qu'il y ait de définition officielle. Pour ma part, je n'aime pas trop utiliser echo pour lancer de nouvelles commandes, on peut écrire exactement la même chose en remplaçant directement le "echo b" par la valeur de b.

Récemment, je me suis pris la tête sur le Mac de ma coloc'
Si je ne me retenais pas je dirais qu'il suffit d'utiliser un ordinateur à la place d'un Mac. Mais je vais me retenir !
parce qu'elle avait plein de fichiers doublons. Les fichiers en double avaient la particularité d'être de la forme "machintruc 1.mp3", tous les autres étant nommés "machintruc.mp3". J'aurais pu faire plus compliqué, mais j'ai simplement utilisé les expressions régulières Perl :
find ./ -type f -name "* 1.mp3" -exec rm -f '{}' \;
Et j'aurais même pu faire un peu plus compliqué, en vérifiant avec des boucles que tous les fichiers que je supprimais avait bien un doublon, et dans ce cas, il existe le très puissant (et lent) programme fdupes, qui vérifie que les sommes md5 ne sont pas redondantes.
Pour les lecteurs qui ne le savent pas, le système d'exploitation de Mac (MacOS) est une version modifiée d'une branche de Linux. La quasi-intégralité des commandes sont utilisable (même si "make" et "gcc" sont dans la catégorie MacOS Develloper Tools)...

Enfin, je remarque que tu conclues ton article sur "Linux n'est pas parfait", mais tu oublies de crier à l'imperfection et au manque d'innovation de la part de Microsoft.
Tu as raison. Comme le dit si bien Jean-Bernard Pouy (ou bien était-ce un de ses collègues ?) : "Il faut enfoncer les portes ouvertes ; il y a toujours un imbécile pour les refermer." Microsoft a plusieurs années de retard dans quasiment tout les domaines, il utilise ses clients comme des béta-testeurs et s'assoie sur des lauriers périmés. La plus grande contribution qu'il apporte au monde c'est un exemple de rupture de symétrie beaucoup plus simple que tout ceux fourni par la physique théorique. Voilà !

Ciao,


CU!


(la conversation continue encore)

Pour les lecteurs qui ne le savent pas, le système d'exploitation de Mac (MacOS) est une version modifiée d'une branche de Linux. La quasi-intégralité des commandes sont utilisable (même si "make" et "gcc" sont dans la catégorie MacOS Develloper Tools) ...
Ça n'intéressera peut-être pas tes lecteurs, mais en fait, Mac OS X n'a rien à voir avec Linux. (*) Historiquement, le noyau de Mac OS X est un microkernel (**) basé sur le kernel Mach, lui-même basé sur un kernel BSD.
Et bien peut-être pas et peut-être bien... :
BSD : Berkeley Software Distribution, une famille de systèmes d'exploitation informatique dérivée d'UNIX (donc c'est une version modifiée d'une branche dérivée de la souche Unix et pas Linux (my bad)...)


(*) s'ils avaient utilisé Linux, ils auraient dû tout licencier sous GPL, du moins tous les logiciels du noyau, et je ne pense pas que ça leur aurait plu. La FSF met légèrement en garde contre Mac OS X :
http://www.gnu.org/philosophy/apsl.fr.html

(**) vieux troll : vaut-il mieux un kernel monolithique comme Linux ou un microkernel ?
translate into English

Add your comment

Reply to this comment

Edit your comment

Please sign in to post a comment Sign in now?


rss Latest comments – Subscribe to the feed of comments related to this post.

 

Català | Čeština nové | 中文 | Deutsch | English | Español | Esperanto | Ελληνικά | Français | Galego | Italiano | Nederlands | Português | More...