====== Shell ======
Le shell ou invite de commande (command prompt) ou terminal virtuel est une interface en ligne de commande pour accéder à l'OS. Il permet d'exécuter les programme disponibles dans les répertoires listés dans la variable d'environnement ''path''.
* [[http://www.commentcamarche.net/contents/linux/linshell.php3|Le shell sur CCM]]
* [[http://penguin.dcs.bbk.ac.uk/academic/unix/linux/shells/index.php|Autre article]]
* [[http://cyberzoide.developpez.com/unix/shell.php3|Mémo pas mal fait]]
* [[shell_builtins|Shell Built-ins]]
* Shells:
* Linux:
* sh (Bourne Shell, minimal [UNIX philosophy desgined: one program <-> one function])
* ksh (Korn Shell, amélioration de sh)
* csh (C Shell, amélioration de sh: fonctions implémentée en C plutôt que dans des programmes séparés)
* bash (Bourne again Shell, amélioration de sh, monde linux)
* Tcsh (Tenex C Shell)
* zsh (Zero Shell)
* rsh (Remote Shell)
* ash (Almquist Shell, portage linux de sh)
* dash (Debian Almquist Shell)
* Windows:
* DOS
* Cygwin (bash)
* Interfaces:
* Linux:
* xterm
* terminal
* Windows:
* cmd.exe
* [[mintty]].exe (sur Cygwin)
* [[http://www.cygwin.com/faq/faq.using.html#faq.using.copy-and-paste|Astuce]] sur Cygwin
* [[http://www.linuxfocus.org/English/September2001/article216.shtml|Commandes]] partiques bash
* [[http://linux.about.com/od/commands/l/blcmdl1_find.htm|Manuel complet de find]]
* Tout ce que vous avez toujours voulu savoir sur les [[http://www.losurs.org/docs/redirection|redirections]]
===== Shell commands =====
[[http://www.gnu.org/software/coreutils/faq/coreutils-faq.html#Why-can-only-root-chown-files_003f|Astuces et explications du comportement de quelques utilitaires GNU Coreutils]]
* Edition
* ed (basic)
* edit
* ex
* vi (visual ex)
* [[shell:sed]] (stream)
* awk (pattern matching)
* [[http://jp.barralis.com/linux-man/man1/tr.1.php|tr]] (manips rapides)
* Archivage
* tar (archiver GNU)
* cpio (archiver UNIX)
* pax (archiver, essai de standardisation)
* compress
* gzip (GNU, utilise Deflate)
* bzip2 (comprime mieux que Deflate, mais plus lent, parallélisable)
* lzma (comprime mieux que bzip2, mais plus lent)
* lzo
* xz (comprime avec lzma, wrapper)
* rzip (compression de fichier massifs (plusieurs centaines de Mo et potentiellement redondant à longue distance))
* [[rsync]] (synchronisation de répertoires)
* Explorer FS
* ls (-l(L minuscule): détail)
* cd
* pwd
* [[find]] (advanced ls)
* m?locate (recherche via index)
* Manipulation fichier
* cp
* mv
* rm
* mkdir
* rmdir
* ln (-s: [[symbolic link]])
* touch (met à jour la date de modification)
* chmod
* chown
* umask (UserMask, masque pour la mise en place des droits lors de la création d'un fichier).
* Gestion de text
* echo|print (dépend du shell)
* cat
* head
* tail
* grep
* wc (WordCount, peut compter des caractères, des mots ou des lignes)
* [[shell:comm]] (Output common lines between 2 files)
* Gestion d'évolution
* diff
* merge
* patch
* Environnement
* set
* export
* env
* ps
* uname
* kill
* whoami
* which (localisation de l'executable)
* du (DiskUsage) & df (DiskFree)
* test
* [
* nice
* man
* [[date]]
* Utilitaires spécifiques
* lsusb
* pkill
* chroot (Changer la racine pour un processus, et donc possiblement lui faire utiliser des bibliothèques en version spécifiques, différentes de celles du système (ex.: 32bits sur 64bits, version d'un langage, ect).
* [[mount]] (mount -a pour rejouer la fstab, pmount pour monter des pluggable devices)
* Réseau
* Netcat (ouvrir des connexions réseau, "couteau-suisse du réseau", [[http://www.sweetnam.eu/index.php/Using_Netcat_for_Backup|exemple pour backup fichier]])
* [[wget]]
* curl
===== Astuces =====
Un terminal récupère son entrée sur un fichier texte (stdin ou script). Il parse donc ce texte et agit en conséquence. Toutes les problématiques qui tournent autour du codage des caractères sont donc présentes.
==== Ctrl-H ====
Lors d'une connexion à distance sur un hôte UNIX en ksh depuis un client windows, par exemple, ce genre de problème peut se présenter.
Les backspace ou les déplacements via les touches flèches du clavier sont envoyés à l'hôte distant, mais pas forcément imprimés par le terminal client. Il s'en suit des comportement étranges:
* Co-existance apparente de deux fichiers du même nom dans un répertoire.
* Diverses erreur du shell.
Pour contourner ce problème, on peut par exemple configurer PuTTY pour gérer les backspace comme des Ctrl-H.
==== Debug ====
Activer l'affichage des données de debug du shell : ''set -xv''. NB : les outputs de debug sortent sur stderr.
Astuce : changer la Prompt String : ''PS4="---$(date +%T)> "''
Il est possible de mixer ce mode debug avec une redirection : ''exec 2> dump.txt 1>&2''
__Résumé__ : PS4="---$(date +%T)> "
set -xv
exec 2> dump.txt 1>&2
==== Lister les plus gros fichiers ====
du -a /var | sort -n -r | head -n 10
==== Calculs arythémtiques ====
a=$(($b+$c))
==== Manipuler le (x)term ====
# Set window title
echo -ne "\033]2;"$m"\007"
# In mintty, set the mapping for ANSI colors
echo -ne '\e]4;4;#4965D6\a' # blue