Historique des commandes

bash enregistre toutes vos commandes dans le fichier .bash_history de votre répertoire personnel. Plusieurs options et outils vous permettent d’en tirer le maximum.

Voyons d’abord comment le configurer. Quatre variables l’affectent:

HISTFILE: nom du fichier d’historique. Si la variable est vide, alors c’est ~/.bash_history. Si la variable n’est pas définie, alors il n’y aura pas d’historique.

HISTSIZE (ou HISTFILESIZE): définit le nombre de commandes que le fichier peut enregistrer. S’il y en a trop, les plus vieilles sont éliminées.

HISTCONTROL: définit les options:

  • ignoredups: ne pas enregistrer les duplicatas successifs.
  • ignorespace: ne pas enregistrer les commandes qui sont précédées d’une espace.
  • ignoreboth: activer ignoredups et ignorespace

HISTTIMEFORMAT: spécifie le format d’affichage de l’horodatage de la commande. Si le format n’est pas spécifié, l’horodatage n’est pas affiché. La syntaxe de spécification du format est identique à celle de la commande date. Exemple: HISTTIMEFORMAT=’%y/%m/%d %T ‘

Comment spécifier

Il y a au moins 3 façons:

  • interactivement: n’affecte que la fenêtre où la commande sera donnée.
    Exemple: HISTCONTROL=ignoredups
    Non-persistant (perdu après un redémarrage).
  • dans ~/.bashrc: n’affecte qu’un usager
    On peut éditer .bashrc ou faire echo HISTCONTROL=ignoredups >> ~/.bashrc
  • dans /etc/bashrc: affecte tous les usagers
    On peut éditer /etc/bashrc ou faire:
    echo HISTCONTROL=ignoredups >> /etc/bashrc

Comment afficher l’historique

La commande history permet d’afficher l’historique. Chaque ligne contiendra le numéro séquenciel, l’horodatage (si défini) et la commande. La commande history a plusieurs options dont une pour vider l’historique (voir man history).

On peut aussi afficher le contenu du fichier .bash_history mais, à ce moment, il n’y aura pas de numéro séquenciel ou d’horodatage. Il faut aussi noter que les commandes courantes seront ajoutées au fichier seulement lorsque la fenêtre sera fermée.

Comment utiliser l’historique

Il y a plusieurs façons:

  • Les flèches ⬆ et ⬇ permettent d’accéder séquentiellement aux commandes récentes.
  • ctrl-r cmd permet de chercher la plus récente cmd dans l’historique. Un ctrl-r supplémentaire accède à la cmd précédente. Les flèches ⬆ et ⬇ permettent d’obtenir la commande précédente ou suivante. Les fléches ⬅ ou ➡ permettent de sortir de la recherche.
  • La commande fc permet d’afficher ou d’éditer les dernières commandes:
    • fc                 permet d’éditer la dernière commande puis de l’exécuter
    • fc -3 -1     permet d’éditer les 3 dernières commandes puis de les exécuter.
    • fc -l            affiche les 16 dernières commandes
    • fc -l -3 -1 affiche les 3 dernières commandes
    • fc -s  [abc=def] cmd localise la dernière cmd, remplace abc par def partout dans la ligne puis l’exécute.

Cette dernière commande (fc -s) est très utile et plusieurs ont pris l’habitude de lui assigner un alias alias r=’fc -s’ dans .bashrc. Cela permet, par exemple:

cp ab25.txt ab25.org
r ab2=yz6 cp

La deuxième commande effectuera:     cp yz65.txt yz65.org

 

screen

screen n’est pas facile à décrire. En gros, il permet de créer une couche entre le système d’exploitation (le kernel) et une ou plusieurs applications. Il permet d’activer plusieurs applications dans une seule fenêtre d’affichage. Il est souvent utilisé avec les applications textuelles pour les détacher/attacher de leur écran.

En général, screen n’est pas installé par défaut mais il s’installe facilement avec votre gestionnaire de paquets.

Démarrage de screen

Le démarrage est simple:

screen prog

si prog n’est pas spécifié, un shell (bash) sera démarré

Détacher une tâche

Si prog s’exécute et est visible dans la fenêtre screen, on peut les séparer (détacher). La fenêtre gérée par screen se fermera automatiquement. Il y a deux façons:

  • dans la fenêtre de l’application (gérée par screen), presser ^a suivi de d. Le préfixe ^a est requis pour éviter que le d soit traité par l’application.
  • dans une fenêtre bash: screen -d

Reprendre une tâche

Si prog est une application détachée de sa fenêtre screen, on peut la ré-associer avec  l’une des 2 façons suivantes:

  • dans une fenêtre bash: screen -r nom
  • dans une fenêtre screen: ^a r nom

Dans les 2 cas, nom est le nom donné par screen à chacune des applications qu’il gère. Il n’est pas nécessaire de spécifier le nom au complet. Il suffit de spécifier les premiers caractères du nom. Si screen ne gère qu’une seule application, le nom est facultatif. Pour connaitre le nom des applications gérées, on utilise screen -list (dans une fenêtre bash).

Exemple (2 sessions vi dans la même fenêtre):

screen vi abc^ad         #dans la fenêtre viscreen vi xyz^adscreen -listThere are screens on:
     15780.pts-6.local4 (Detached)
     13865.pts-6.local4 (Detached)
2 Sockets in /home/u/tmp.
screen -r 13   # récupérer la session d'édition de abc

Conclusion

screen était populaire à l’époque où il n’y avait pas de gestionnaire de fenêtres. Aujourd’hui, on l’utilise sur des équipements à ressources limitées ou pour éviter d’interrompre une application s’il y a déconnexion de son terminal.

screen peut gérer plusieurs fenêtres. Une application peut être ouverte dans une fenêtre puis réactivée dans une autre. Pour plus de détails: man screen

 

Aide-mémoire: ffmpeg

ffmpeg est un utilitaire de création/gestion/conversion de fichier multi-média. Il s’utilise en ligne de commande et il est particulièrement apprécié pour sa performance et sa souplesse.

ffmpeg dispose d’une kyrielle d’options et, par conséquent, il n’est pas facile à documenter. La lecture de la documentation de ffmpeg est une tâche ardue qui peut même repousser certains débutants.

Le présent article a pour but de montrer que ffmpeg peut être d’utilisation facile. Plutôt que de documenter chacune des options, je vais présenter quelques recettes pré-cuites.

Structure de la ligne de commande

Une commande ffmpeg consiste à spécifier des flux d’entrée et un flux de sortie. On peut spécifier des options pour chacun de ces flux.

ffmpeg reconnait des centaines de formats de fichier. Le format d’un flux d’entrée est généralement auto-détecté mais peut être forcé par l’option -fmt.  Le format du flux de sortie est généralement spécifié par le suffixe du nom de fichier mais peut être forcé par l’option -fmt.

ffmpeg options_globales options_flux_0 -i fichier_flux_0 options_flux_n -i fichier_flux_n] ... options_flux_sortie fichier_flux_sortie

Extraire l’audio d’un flux multi-média (par exemple un film)

ffmpeg -i film.mp4  -q:a 0 -map a musiqueDuFilm.mp3

Cette commande spécifie:

  • le nom du fichier de film (film.mp4)
  • sélection du flux audio (-map a)
  • le nom du fichier de sortie (musiqueDuFilm.mp3)

Convertir un .mp4 pour un vieux lecteur DVD

On vous transmet un documentaire en format .mp4 que vous vous empressez de mettre dans votre lecteur DVD. Le lecteur vous répond que le fichier est incompatible. Pourtant vous avez utilisé ce lecteur plusieurs fois pour lire des .mp4.

Le fichier reçu serait-il corrompu? Oui, peut-être. Mais la cause probable est que l’encodage de votre fichier est trop récent pour que votre lecteur puisse le décoder. Il faut savoir que la norme MP4 a beaucoup évolué au cours des années et il y a donc plusieurs versions de MP4. Ces versions sont principalement justifiées par l’évolution des résolutions et les avancées des algorithmes de compression. La norme H264 (c’est le nom officiel du MP4) est définie en 7 différents profils (profile), chacun ayant près de 20 niveaux (level). Pas évident de s’y retrouver mais le document fr.wikipedia.org/wiki/H.264 peut vous y aider.

Si votre lecteur n’accepte pas plus que High/level3, alors vous pouvez convertir votre document avec:

ffmpeg -i fichier.mp4 -c:a copy -c:v libx264 -profile:v High -level 3 résultat.mp4

Références