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.
- 6.1. Les commandes de bases (17)
- 6.2. Commandes avancées (22)
- 6.3. La commande sed (14)
- Qu'est-ce que le Shell
- Pourquoi est-il important de maîtriser la ligne de commande sous Linux ?
- Comment fonctionne le Shell ?
- Comment trouver un fichier ?
- Comment renommer plusieurs fichiers à la fois ?
- Comment trouver un fichier avec une taille spécifique ?
- Comment empêcher la fermeture du terminal ?
- Comment afficher ce que le script exécute ?
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)
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.
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...).
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 |
Code bash : | Sélectionner tout |
find . -type f -name '*chaine*' -execdir sh -c 'echo mv "$1" "$(echo "$1" | sed "s/chaine/chene/")"' sh {} \;
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/'
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 foo à txt 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.
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
- 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
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 |
Code bash : | Sélectionner tout |
$SHELL
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} |
+ touch main.c
+ cd /tmp/
+ mkdir /tmp/toto
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 çaLes 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 © 2024 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.