IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

FAQ LinuxConsultez toutes les FAQ

Nombre d'auteurs : 56, nombre de questions : 260, derni�re mise � jour : 27 juin 2022  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des contributions des membres du forum Linux de Developpez.com et de l'�quipe de r�daction. Merci � eux !

Nous sommes perp�tuellement � l'�coute de vos suggestions et corrections, n'h�sitez pas � nous en faire part sur le forum.

SommaireLe Shell (61)
pr�c�dent sommaire suivant
 

L'interpr�teur de ligne de commande (ou "shell") est une interface en mode texte, qui permet � un utilisateur d'interagir avec le noyau afin d'effectuer des op�rations diverses : afficher la date, lire un fichier, r�cup�rer des donn�es distantes...
Il comporte des commandes qui lui sont propres (commandes internes), et peut ex�cuter toutes les commandes disponibles sur le syst�me (commandes externes) pourvu que les ressources soient disponibles : on ne peut pas lancer un programme X* (gedit, firefox...) si X* n'est pas d�marr� !
Certaines commandes internes de l'interpr�teur de commandes sont aussi disponibles en tant que commandes externes : elles portent le m�me nom, mais n'ont pas obligatoirement les m�mes options, ou les m�mes options ne se comportent pas exactement de la m�me mani�re (c'est le cas de time).
Le fonctionnement apparent du shell est simple :
il attend que l'utilisateur appuie sur 'Entr�e' apr�s avoir saisi le nom d'une commande ;
il ex�cute la commande ;
il attend que l'utilisateur appuie sur 'Entr�e'...

Les Shells principaux sont :

  • Bash (bourne Shell)
  • Csh (C shell)
  • Ksh (Korn Shell)

Mis � jour le 9 novembre 2017 Christophe N_BaH

Contrairement � Windows, Linux peut �tre enti�rement pilot� en ligne de commande, par laquelle on a acc�s � toute sa puissance et toute sa configuration. L'interface graphique n'est qu'une couche applicative optionnelle, mais non n�cessaire pour des serveurs par exemple (qui ne font basiquement que r�pondre � des requ�tes r�seau).

Un administrateur syst�me se doit de ma�triser le Shell pour diverses raisons :

  • m�me si certaines distributions ou applications proposent des assistants de configuration graphiques, c'est en modifiant les fichiers de configuration textuels qu'on arrive � param�trer le plus finement le syst�me ;
  • le Shell et son langage sont tr�s puissants, et bien souvent, il est tr�s efficace de r�aliser quelques scripts simples pour automatiser certains traitements sur des serveurs ou modifier des configurations de services � la vol�e ;
  • par s�curit�, on �vite d'installer tout �l�ment non strictement n�cessaire sur un serveur (exemple typique : une interface graphique), et son administration � distance se fera la plupart du temps en ssh, qui est un protocole d'acc�s s�curis� � la console par le r�seau ;
  • la ma�trise du Shell permet de contr�ler le syst�me � 100 % (surveillance compl�te de l'activit� de la machine, d�marrage et arr�t d'applications, gestion du multit�che, recherches rapides, etc.) et est donc un moyen tr�s efficace d'administrer une machine

Une autre raison est que sous Linux toute la configuration est transparente, stock�e dans des fichiers textuels lisibles par tous et g�n�ralement bien document�s (commentaires). La configuration de pratiquement n'importe quel logiciel peut donc s'effectuer par un simple �diteur de texte ou � l'aide de scripts, o� le langage Perl est assez populaire puisqu'il est sp�cialement d�di� au traitement de cha�nes de caract�res.

M�me pour une utilisation de Linux en tant que station de travail o� des assistants graphiques vous facilitent les t�ches courantes (configuration de base, installation de logiciels, etc.), un minimum de notions de Shell s'av�reront n�cessaires d�s que vous devrez vous plonger dans certaines configurations un peu plus complexes par exemple la modification des param�tres du noyau ou autres �l�ments du syst�me.

Mis � jour le 23 octobre 2013 ok.Idriss ovh

Le Shell est un interpr�teur de commande en mode texte (ou console). Il permet de passer des ordres (commandes) au syst�me, et de "dialoguer" avec lui (on parle de shell interactif).
Il est possible de piloter enti�rement Linux en ligne de commande : d�marrer, suspendre et arr�ter des programmes, g�rer les services (programmes r�sidents en m�moire), configurer le syst�me (�dition de fichiers texte), g�rer les t�ches planifi�es, le multit�che, etc.

Une des premi�res choses � apprendre sous Linux est le Shell et ses commandes de base, car cela permet d'avoir une totale ma�trise du syst�me.

Techniquement, le Shell est une boucle infinie en C qui lit ce que l'utilisateur tape au clavier et r�agit :

  • soit il s'agit d'une commande interne du shell qui est ex�cut�e directement (fonction interne, ou builtin) ;
  • soit il lance un programme externe ;
  • il doit aussi interpr�ter les caract�res sp�ciaux (redirection, pipes...).

Mis � jour le 27 octobre 2013 ok.Idriss ovh

Il existe plusieurs fa�ons de proc�der pour trouver un fichier sous Linux. La m�thode la plus utilis�e est la commande locate :

Code bash : S�lectionner tout
$ locate nom_du_fichier

Cette commande affichera toutes les occurrences trouv�es. Que ce soit une partie du nom, d'un r�pertoire ou d'un fichier. Il se peut donc qu'il y ait beaucoup d'occurrences !

P.-S. Pour que la commande locate fonctionne, il faut pr�alablement cr�er sa base de donn�es utile. Il faut pour cela ex�cuter la commande updatedb en tant que root. Cette commande permet �galement de mettre � jour la base de donn�es (sinon les modifications du syst�me de fichier ne seront pas prises en compte) : il est donc judicieux de l'ex�cuter r�guli�rement (via un cron), par exemple.

Une autre m�thode est d'utiliser la commande find :
Code bash : S�lectionner tout
$ find / -name "fichier.txt"

Cette commande affichera tous les fichiers se nommant fichier.txt � partir du r�pertoire racine.
Il est possible d'utiliser les expressions r�guli�res :
Code bash : S�lectionner tout
$ find / -name "toto*"

Le r�sultat sera tous les fichiers et r�pertoires commen�ant par toto, suivi de n'importe quelle occurrence.
Pour �viter d'avoir les "permission denied" sur des r�pertoires :
Code bash : S�lectionner tout
find / -type f -name "le_fichier_a_chercher" 2>/dev/null

find est tr�s puissant, et permet aussi d'employer les expressions r�guli�res, comme le montre l'exemple suivant qui permet de trouver tous les fichiers contenant une cha�ne ou une regexp dans une arborescence :
Code bash : S�lectionner tout
1
2
find <repertoire_depart> -type f -exec grep -H "<chaine>" {} ; 
find <repertoire_depart> -type f -exec egrep -H "<regexp>" {} ;

Lorsqu'il s'agit de gros volumes de fichiers :
Code bash : S�lectionner tout
1
2
find <repertoire_depart> -type f | xargs grep -H "<chaine>" 
find <repertoire_depart> -type f | xargs egrep -H "<regexp>"

Renommer tous les fichiers contenant chaine en chene :
Code bash : S�lectionner tout
for f in ./*chaine*; do mv "$f" "${f/chaine/chene}"; done
---
En r�cursif sur une arborescence :
Code BASH : S�lectionner tout
1
2
shopt -s nullglob globstar 
for f in ./**/*chaine*; do mv "$f" "$(echo "$f" | sed 's/chaine/chene/')"; done
ou
Code bash : S�lectionner tout
find . -type f -name '*chaine*' -execdir sh -c 'echo mv "$1" "$(echo "$1" | sed "s/chaine/chene/")"' sh {} \;
cela m�rite quelques explications : quand on appelle sh avec l'option -c, les param�tres positionnels commencent � z�ro, c'est-�-dire que le premier argument sera le param�tre positionnel 0 ($0), alors que dans un script $0 est le nom du shell. Pour imiter ce comportement habituel, on ajoute la cha�ne sh comme premier argument.
De plus, on utilise -execdir plut�t que -exec, pour �viter [...voir infra l'explication de jack-ft]

Il y a m�me moyen d'effectuer des op�rations sur fichier en appelant des scripts externes ; par exemple : changer toutes les option=true en option=false dans tous les fichiers *.conf en r�cursif en gardant une copie de sauvegarde :
Code bash : S�lectionner tout
find . -type f -name "*.conf" | xargs perl -pi.save -e 's/option\=true/option\=false/'

Mis � jour le 23 octobre 2013 mathk nyal N_BaH ok.Idriss vosaray

Certes, mv permet de renommer des fichiers. Toutefois, l'outil n'est pas tr�s adapt� pour renommer un grand nombre de fichiers. Il est �vident que vous pourriez rapidement �crire une boucle for, ou m�me un script pour arriver � votre fin, mais pourquoi s'emb�ter alors qu'un outil est l� pour �a.
En effet, rename permet de renommer une multitude de fichiers et cela tr�s facilement.

Voici un exemple d'utilisation, permettant de changer l'extension de tous les fichiers de footxt du dossier courant :

Code bash : S�lectionner tout
rename 's/.foo/.txt/' *

Comme vous le voyez, la syntaxe est simple. Voici l'usage :
Code bash : S�lectionner tout
rename [ -v ] [ -n ] [ -f ] perlexpr [ fichiers ]

L'outil utilise les expressions r�guli�res de Perl.

Mis � jour le 23 juillet 2014 LittleWhite

La commande find pour trouver des fichiers propose l'option -size.
Ainsi pour trouver des fichiers de plus de 100 m�ga-octets, vous pouvez utiliser la commande :

Code bash : S�lectionner tout
find / -size +100M
On notera ici que la commande propose plusieurs suffixes :
  • b : pour des blocs de 512 octets ;
  • c : pour des octets ;
  • w : pour des mots de deux octets ;
  • k : pour des kilo-octets (unit�s de 1 024 octets) ;
  • M : pour des m�ga-octets (unit�s de 1 048 576 octets) ;
  • G : pour des giga-octets (unit�s de 1 073 741 824 octets) ;


Vous pouvez toujours effectuer une recherche plus pr�cise en pr�cisant plusieurs tailles :
Code bash : S�lectionner tout
find / -size +100M -size -1000M

Mis � jour le 22 ao�t 2014 LittleWhite

Lorsqu'on lance un script � travers l'interface graphique, le terminal se ferme � la fin de l'ex�cution du script, et ce qu'il y eu une erreur ou non.
Vous pouvez emp�cher la fermeture du terminal de multiples fa�ons. En voici deux int�ressantes :

Code bash : S�lectionner tout
1
2
echo "Appuyez sur entr�e..." 
read
Et
Code bash : S�lectionner tout
$SHELL
La premi�re m�thode attend que l'utilisateur appuie sur la touche � Entr�e � pour fermer le terminal. La seconde m�thode va ouvrir un second shell (que ce soit Bash ou autre) et donc permettre � l'utilisateur d�interagir avec ce dernier.

Mis � jour le 26 novembre 2017 LittleWhite mm_71

Vous venez de cr�er un script shell et vous souhaitez v�rifier les commandes ex�cut�s par le script (avec leurs options). Pour cela, bash propos� l'option -x. En l'utilisant, bash �crira les commandes lanc�es par le script.
Par exemple, pour le script suivant :

Code shell : S�lectionner tout
1
2
3
4
FOLD=/tmp/toto 
touch main.c 
cd /tmp/ 
mkdir ${FOLD}
Tout en s'ex�cutant, le script affichera :
+ FOLD=/tmp/toto
+ touch main.c
+ cd /tmp/
+ mkdir /tmp/toto

Il est aussi possible d'activer cette fonctionnalit� sur une portion pr�cise du code avec set -x (pour activer la trace) et set +x pour d�sactiver.

Mis � jour le 30 mai 2020 LittleWhite

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.