Unix / Linux - Guide rapide
Qu'est-ce que Unix?
Le système d'exploitation Unix est un ensemble de programmes qui servent de lien entre l'ordinateur et l'utilisateur.
Les programmes informatiques qui allouent les ressources système et coordonnent tous les détails des composants internes de l'ordinateur sont appelés les operating system ou la kernel.
Les utilisateurs communiquent avec le noyau via un programme appelé shell. Le shell est un interpréteur de ligne de commande; il traduit les commandes saisies par l'utilisateur et les convertit dans un langage compris par le noyau.
Unix a été développé à l'origine en 1969 par un groupe d'employés d'AT & T Ken Thompson, Dennis Ritchie, Douglas McIlroy et Joe Ossanna chez Bell Labs.
Il existe différentes variantes Unix disponibles sur le marché. Solaris Unix, AIX, HP Unix et BSD en sont quelques exemples. Linux est également une version d'Unix qui est disponible gratuitement.
Plusieurs personnes peuvent utiliser un ordinateur Unix en même temps; par conséquent, Unix est appelé un système multi-utilisateur.
Un utilisateur peut également exécuter plusieurs programmes en même temps; par conséquent, Unix est un environnement multitâche.
Architecture Unix
Voici un schéma de principe d'un système Unix -
Le concept principal qui unit toutes les versions d'Unix est les quatre principes de base suivants -
Kernel- Le noyau est le cœur du système d'exploitation. Il interagit avec le matériel et la plupart des tâches telles que la gestion de la mémoire, la planification des tâches et la gestion des fichiers.
Shell- Le shell est l'utilitaire qui traite vos requêtes. Lorsque vous saisissez une commande sur votre terminal, le shell interprète la commande et appelle le programme souhaité. Le shell utilise la syntaxe standard pour toutes les commandes. C Shell, Bourne Shell et Korn Shell sont les shells les plus connus disponibles avec la plupart des variantes Unix.
Commands and Utilities - Il existe diverses commandes et utilitaires que vous pouvez utiliser dans vos activités quotidiennes. cp, mv, cat et grep, etc. sont quelques exemples de commandes et d'utilitaires. Il y a plus de 250 commandes standard , plus nombreux autres fournis par 3 rd logiciels tiers. Toutes les commandes sont accompagnées de diverses options.
Files and Directories- Toutes les données d'Unix sont organisées en fichiers. Tous les fichiers sont ensuite organisés en répertoires. Ces répertoires sont ensuite organisés en une structure arborescente appeléefilesystem.
Démarrage du système
Si vous avez un ordinateur sur lequel est installé le système d'exploitation Unix, vous devez simplement allumer le système pour le faire fonctionner.
Dès que vous allumez le système, il commence à démarrer et finalement il vous invite à vous connecter au système, ce qui est une activité pour vous connecter au système et l'utiliser pour vos activités quotidiennes.
Connexion Unix
Lorsque vous vous connectez pour la première fois à un système Unix, vous voyez généralement une invite telle que la suivante -
login:
Ouvrir une session
Ayez à portée de main votre identifiant (identification de l'utilisateur) et votre mot de passe. Contactez votre administrateur système si vous ne les avez pas encore.
Saisissez votre identifiant à l'invite de connexion, puis appuyez sur ENTER. Votre identifiant estcase-sensitive, assurez-vous donc de le saisir exactement comme votre administrateur système vous l'a indiqué.
Tapez votre mot de passe à l'invite du mot de passe, puis appuyez sur ENTER. Votre mot de passe est également sensible à la casse.
Si vous fournissez l'ID utilisateur et le mot de passe corrects, vous serez autorisé à entrer dans le système. Lisez les informations et les messages qui s'affichent à l'écran, comme suit.
login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
Une invite de commande vous sera fournie (parfois appelée $prompt) où vous tapez toutes vos commandes. Par exemple, pour consulter le calendrier, vous devez taper lecal commande comme suit -
$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $
Changer le mot de passe
Tous les systèmes Unix nécessitent des mots de passe pour garantir que vos fichiers et données restent les vôtres et que le système lui-même est protégé des pirates et des pirates. Voici les étapes pour changer votre mot de passe -
Step 1 - Pour commencer, tapez le mot de passe à l'invite de commande comme indiqué ci-dessous.
Step 2 - Entrez votre ancien mot de passe, celui que vous utilisez actuellement.
Step 3- Tapez votre nouveau mot de passe. Gardez toujours votre mot de passe suffisamment complexe pour que personne ne puisse le deviner. Mais assurez-vous que vous vous en souvenez.
Step 4 - Vous devez vérifier le mot de passe en le saisissant à nouveau.
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Note- Nous avons ajouté un astérisque (*) ici juste pour montrer l'emplacement où vous devez entrer les mots de passe actuels et nouveaux sur votre système. Il ne vous montre aucun caractère lorsque vous tapez.
Liste des répertoires et des fichiers
Toutes les données sous Unix sont organisées en fichiers. Tous les fichiers sont organisés en répertoires. Ces répertoires sont organisés en une structure arborescente appelée le système de fichiers.
Vous pouvez utiliser le lscommande pour lister tous les fichiers ou répertoires disponibles dans un répertoire. Voici l'exemple d'utilisationls commande avec -l option.
$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $
Ici les entrées commençant par d.....représentent des répertoires. Par exemple, uml, univ et urlspedia sont des répertoires et le reste des entrées sont des fichiers.
Qui êtes vous?
Pendant que vous êtes connecté au système, vous voudrez peut-être savoir: Who am I?
Le moyen le plus simple de savoir "qui vous êtes" consiste à saisir le whoami commande -
$ whoami amrood $
Essayez-le sur votre système. Cette commande répertorie le nom de compte associé à la connexion actuelle. Tu peux essayerwho am i commande ainsi pour obtenir des informations sur vous-même.
Qui est connecté?
Parfois, vous voudrez peut-être savoir qui est connecté à l'ordinateur en même temps.
Il existe trois commandes disponibles pour vous obtenir ces informations, en fonction de ce que vous souhaitez savoir sur les autres utilisateurs: users, who, et w.
$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu ttyp2 Oct 4 09:08 (calliope)
qadir ttyp4 Oct 8 12:09 (dent)
$
Essaie le wcommande sur votre système pour vérifier la sortie. Cela répertorie les informations associées aux utilisateurs connectés au système.
Déconnecter
Lorsque vous avez terminé votre session, vous devez vous déconnecter du système. Cela permet de garantir que personne d'autre n'accède à vos fichiers.
To log out
Tapez simplement le logout à l'invite de commande, et le système nettoiera tout et interrompra la connexion.
Arrêt du système
La manière la plus cohérente d'arrêter correctement un système Unix via la ligne de commande est d'utiliser l'une des commandes suivantes -
Sr.No. | Commande et description |
---|---|
1 | halt Arrête immédiatement le système |
2 | init 0 Met le système hors tension à l'aide de scripts prédéfinis pour synchroniser et nettoyer le système avant de s'arrêter |
3 | init 6 Redémarre le système en l'éteignant complètement, puis en le redémarrant |
4 | poweroff Arrête le système en le mettant hors tension |
5 | reboot Redémarre le système |
6 | shutdown Arrête le système |
Vous devez généralement être le super utilisateur ou root (le compte le plus privilégié sur un système Unix) pour arrêter le système. Cependant, sur certaines boîtiers Unix autonomes ou personnels, un utilisateur administratif et parfois des utilisateurs réguliers peuvent le faire.
Dans ce chapitre, nous discuterons en détail de la gestion des fichiers sous Unix. Toutes les données sous Unix sont organisées en fichiers. Tous les fichiers sont organisés en répertoires. Ces répertoires sont organisés en une structure arborescente appelée le système de fichiers.
Lorsque vous travaillez avec Unix, d'une manière ou d'une autre, vous passez la plupart de votre temps à travailler avec des fichiers. Ce tutoriel vous aidera à comprendre comment créer et supprimer des fichiers, les copier et les renommer, créer des liens vers eux, etc.
Sous Unix, il existe trois types de fichiers de base -
Ordinary Files- Un fichier ordinaire est un fichier sur le système qui contient des données, du texte ou des instructions de programme. Dans ce didacticiel, vous examinez l'utilisation de fichiers ordinaires.
Directories- Les répertoires stockent des fichiers spéciaux et ordinaires. Pour les utilisateurs familiers avec Windows ou Mac OS, les répertoires Unix sont équivalents aux dossiers.
Special Files- Certains fichiers spéciaux permettent d'accéder au matériel tel que les disques durs, les lecteurs de CD-ROM, les modems et les adaptateurs Ethernet. D'autres fichiers spéciaux sont similaires à des alias ou des raccourcis et vous permettent d'accéder à un seul fichier en utilisant des noms différents.
Liste des fichiers
Pour lister les fichiers et répertoires stockés dans le répertoire courant, utilisez la commande suivante -
$ls
Voici l'exemple de sortie de la commande ci-dessus -
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
La commande ls soutient le -l option qui vous aiderait à obtenir plus d'informations sur les fichiers répertoriés -
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
Voici les informations sur toutes les colonnes répertoriées -
First Column- Représente le type de fichier et l'autorisation donnée sur le fichier. Vous trouverez ci-dessous la description de tous les types de fichiers.
Second Column - Représente le nombre de blocs de mémoire pris par le fichier ou le répertoire.
Third Column- Représente le propriétaire du fichier. C'est l'utilisateur Unix qui a créé ce fichier.
Fourth Column- Représente le groupe du propriétaire. Chaque utilisateur Unix aura un groupe associé.
Fifth Column - Représente la taille du fichier en octets.
Sixth Column - Représente la date et l'heure auxquelles ce fichier a été créé ou modifié pour la dernière fois.
Seventh Column - Représente le fichier ou le nom du répertoire.
dans le ls -l exemple de liste, chaque ligne de fichier commence par un d, -, ou l. Ces caractères indiquent le type de fichier répertorié.
Sr.No. | Préfixe et description |
---|---|
1 | - Fichier normal, tel qu'un fichier texte ASCII, un exécutable binaire ou un lien physique. |
2 | b Bloquer le fichier spécial. Bloquer le fichier de périphérique d'entrée / sortie tel qu'un disque dur physique. |
3 | c Fichier spécial de caractères. Fichier de périphérique d'entrée / sortie brut tel qu'un disque dur physique. |
4 | d Fichier de répertoire contenant une liste d'autres fichiers et répertoires. |
5 | l Fichier de lien symbolique. Liens sur n'importe quel fichier régulier. |
6 | p Tuyau nommé. Un mécanisme pour les communications interprocessus. |
sept | s Prise utilisée pour la communication interprocessus. |
Métacaractères
Les métacaractères ont une signification particulière sous Unix. Par exemple,* et ?sont des métacaractères. Nous utilisons* pour correspondre à 0 ou plusieurs caractères, un point d'interrogation (?) correspond à un seul caractère.
Par exemple -
$ls ch*.doc
Affiche tous les fichiers dont les noms commencent par ch et terminer par .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
Ici, *fonctionne comme un méta-caractère qui correspond à n'importe quel caractère. Si vous souhaitez afficher tous les fichiers se terminant par.doc, alors vous pouvez utiliser la commande suivante -
$ls *.doc
Fichiers cachés
Un fichier invisible en est un, dont le premier caractère est le point ou le caractère point (.). Les programmes Unix (y compris le shell) utilisent la plupart de ces fichiers pour stocker les informations de configuration.
Certains exemples courants de fichiers cachés incluent les fichiers -
.profile - Le script d'initialisation Bourne shell (sh)
.kshrc - Le script d'initialisation du shell Korn (ksh)
.cshrc - Le script d'initialisation du shell C (csh)
.rhosts - Le fichier de configuration du shell distant
Pour lister les fichiers invisibles, spécifiez le -a option pour ls -
$ ls -a
. .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
Single dot (.) - Ceci représente le répertoire actuel.
Double dot (..) - Ceci représente le répertoire parent.
Création de fichiers
Vous pouvez utiliser le viéditeur pour créer des fichiers ordinaires sur n'importe quel système Unix. Vous devez simplement donner la commande suivante -
$ vi filename
La commande ci-dessus ouvrira un fichier avec le nom de fichier donné. Maintenant, appuyez sur la toucheipour entrer dans le mode d'édition. Une fois que vous êtes en mode édition, vous pouvez commencer à écrire votre contenu dans le fichier comme dans le programme suivant -
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
Une fois que vous avez terminé avec le programme, suivez ces étapes -
Appuyez sur la touche esc pour sortir du mode d'édition.
Appuyez sur deux touches Shift + ZZ ensemble pour sortir complètement du fichier.
Vous aurez maintenant un fichier créé avec filename dans le répertoire courant.
$ vi filename $
Édition de fichiers
Vous pouvez modifier un fichier existant à l'aide du viéditeur. Nous discuterons en bref comment ouvrir un fichier existant -
$ vi filename
Une fois le fichier ouvert, vous pouvez entrer en mode édition en appuyant sur la touche ipuis vous pouvez continuer en éditant le fichier. Si vous souhaitez vous déplacer ici et là dans un fichier, vous devez d'abord sortir du mode d'édition en appuyant sur la toucheEsc. Après cela, vous pouvez utiliser les touches suivantes pour vous déplacer dans un fichier -
l touche pour se déplacer vers le côté droit.
h touche pour se déplacer vers le côté gauche.
k touche pour remonter dans le fichier.
j touche pour se déplacer vers le bas dans le fichier.
Ainsi, en utilisant les touches ci-dessus, vous pouvez positionner votre curseur là où vous souhaitez éditer. Une fois que vous êtes positionné, vous pouvez utiliser leitouche pour entrer en mode édition. Une fois que vous avez terminé l'édition de votre fichier, appuyez surEsc et enfin deux clés Shift + ZZ ensemble pour sortir complètement du fichier.
Afficher le contenu d'un fichier
Vous pouvez utiliser le catcommande pour voir le contenu d'un fichier. Voici un exemple simple pour voir le contenu du fichier créé ci-dessus -
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
Vous pouvez afficher les numéros de ligne en utilisant le -b option avec la cat commande comme suit -
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$
Compter les mots dans un fichier
Vous pouvez utiliser le wccommande pour obtenir un compte du nombre total de lignes, de mots et de caractères contenus dans un fichier. Voici un exemple simple pour voir les informations sur le fichier créé ci-dessus -
$ wc filename
2 19 103 filename
$
Voici le détail des quatre colonnes -
First Column - Représente le nombre total de lignes dans le fichier.
Second Column - Représente le nombre total de mots dans le fichier.
Third Column- Représente le nombre total d'octets dans le fichier. Il s'agit de la taille réelle du fichier.
Fourth Column - Représente le nom du fichier.
Vous pouvez donner plusieurs fichiers et obtenir des informations sur ces fichiers à la fois. Voici une syntaxe simple -
$ wc filename1 filename2 filename3
Copie de fichiers
Pour faire une copie d'un fichier, utilisez le cpcommander. La syntaxe de base de la commande est -
$ cp source_file destination_file
Voici l'exemple pour créer une copie du fichier existant filename.
$ cp filename copyfile
$
Vous trouverez maintenant un autre fichier copyfiledans votre répertoire actuel. Ce fichier sera exactement le même que le fichier d'originefilename.
Renommer les fichiers
Pour changer le nom d'un fichier, utilisez le mvcommander. Voici la syntaxe de base -
$ mv old_file new_file
Le programme suivant renomme le fichier existant filename à newfile.
$ mv filename newfile $
le mvLa commande déplacera complètement le fichier existant dans le nouveau fichier. Dans ce cas, vous trouverez uniquementnewfile dans votre répertoire actuel.
Suppression de fichiers
Pour supprimer un fichier existant, utilisez le rmcommander. Voici la syntaxe de base -
$ rm filename
Caution- Un fichier peut contenir des informations utiles. Il est toujours recommandé d'être prudent lors de l'utilisation de ceDeletecommander. Il vaut mieux utiliser le-i option avec rm commander.
Voici l'exemple qui montre comment supprimer complètement le fichier existant filename.
$ rm filename
$
Vous pouvez supprimer plusieurs fichiers à la fois avec la commande ci-dessous -
$ rm filename1 filename2 filename3
$
Flux Unix standard
Dans des circonstances normales, chaque programme Unix a trois flux (fichiers) ouverts pour lui au démarrage -
stdin- Ceci est appelé l' entrée standard et le descripteur de fichier associé est 0. Ceci est également représenté par STDIN. Le programme Unix lira l'entrée par défaut de STDIN.
stdout- Ceci est appelé sortie standard et le descripteur de fichier associé est 1. Ceci est également représenté par STDOUT. Le programme Unix écrira la sortie par défaut à STDOUT
stderr- Ceci est appelé erreur standard et le descripteur de fichier associé est 2. Ceci est également représenté par STDERR. Le programme Unix écrira tous les messages d'erreur dans STDERR.
Dans ce chapitre, nous discuterons en détail de la gestion des répertoires sous Unix.
Un répertoire est un fichier dont le seul travail consiste à stocker les noms de fichiers et les informations associées. Tous les fichiers, qu'ils soient ordinaires, spéciaux ou répertoires, sont contenus dans des répertoires.
Unix utilise une structure hiérarchique pour organiser les fichiers et les répertoires. Cette structure est souvent appelée arborescence de répertoires. L'arbre a un seul nœud racine, le caractère barre oblique (/), et tous les autres répertoires sont contenus en dessous.
Répertoire d'accueil
Le répertoire dans lequel vous vous trouvez lors de votre première connexion est appelé votre répertoire personnel.
Vous ferez une grande partie de votre travail dans votre répertoire personnel et les sous-répertoires que vous allez créer pour organiser vos fichiers.
Vous pouvez aller dans votre répertoire personnel à tout moment en utilisant la commande suivante -
$cd ~
$
Ici ~indique le répertoire de base. Supposons que vous deviez aller dans le répertoire personnel de n'importe quel autre utilisateur, utilisez la commande suivante -
$cd ~username
$
Pour aller dans votre dernier répertoire, vous pouvez utiliser la commande suivante -
$cd -
$
Noms de chemin absolus / relatifs
Les répertoires sont organisés dans une hiérarchie avec la racine (/) en haut. La position de tout fichier dans la hiérarchie est décrite par son chemin.
Les éléments d'un chemin sont séparés par un /. Un chemin d'accès est absolu, s'il est décrit par rapport à root, donc les chemins absolus commencent toujours par un /.
Voici quelques exemples de noms de fichiers absolus.
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
Un chemin d'accès peut également être relatif à votre répertoire de travail actuel. Les chemins d'accès relatifs ne commencent jamais par /. Par rapport au répertoire personnel de l'utilisateur amrood, certains chemins pourraient ressembler à ceci -
chem/notes
personal/res
Pour déterminer où vous vous trouvez dans la hiérarchie du système de fichiers à tout moment, entrez la commande pwd pour imprimer le répertoire de travail actuel -
$pwd
/user0/home/amrood
$
Liste des répertoires
Pour lister les fichiers dans un répertoire, vous pouvez utiliser la syntaxe suivante -
$ls dirname
Voici l'exemple pour lister tous les fichiers contenus dans /usr/local annuaire -
$ls /usr/local
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
Création de répertoires
Nous allons maintenant comprendre comment créer des répertoires. Les répertoires sont créés par la commande suivante -
$mkdir dirname
Ici, le répertoire est le chemin absolu ou relatif du répertoire que vous souhaitez créer. Par exemple, la commande -
$mkdir mydir $
Crée le répertoire mydirdans le répertoire courant. Voici un autre exemple -
$mkdir /tmp/test-dir $
Cette commande crée le répertoire test-dir dans le /tmpannuaire. lemkdir La commande ne produit aucune sortie si elle réussit à créer le répertoire demandé.
Si vous donnez plus d'un répertoire sur la ligne de commande, mkdircrée chacun des répertoires. Par exemple, -
$mkdir docs pub $
Crée les répertoires docs et pub sous le répertoire courant.
Création de répertoires parents
Nous allons maintenant comprendre comment créer des répertoires parents. Parfois, lorsque vous souhaitez créer un répertoire, son ou ses répertoires parents peuvent ne pas exister. Dans ce cas,mkdir émet un message d'erreur comme suit -
$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $
Dans de tels cas, vous pouvez spécifier le -p option à la mkdircommander. Il crée tous les répertoires nécessaires pour vous. Par exemple -
$mkdir -p /tmp/amrood/test $
La commande ci-dessus crée tous les répertoires parents requis.
Suppression de répertoires
Les répertoires peuvent être supprimés à l'aide du rmdir commande comme suit -
$rmdir dirname $
Note - Pour supprimer un répertoire, assurez-vous qu'il est vide, ce qui signifie qu'il ne devrait y avoir aucun fichier ou sous-répertoire dans ce répertoire.
Vous pouvez supprimer plusieurs répertoires à la fois comme suit -
$rmdir dirname1 dirname2 dirname3 $
La commande ci-dessus supprime les répertoires dirname1, dirname2 et dirname3, s'ils sont vides. lermdir La commande ne produit aucune sortie si elle réussit.
Changer de répertoire
Vous pouvez utiliser le cdcommande pour faire plus que simplement passer à un répertoire personnel. Vous pouvez l'utiliser pour accéder à n'importe quel répertoire en spécifiant un chemin absolu ou relatif valide. La syntaxe est la suivante -
$cd dirname $
Ici, dirnameest le nom du répertoire dans lequel vous souhaitez changer. Par exemple, la commande -
$cd /usr/local/bin $
Modifications du répertoire /usr/local/bin. Depuis ce répertoire, vous pouvezcd au répertoire /usr/home/amrood en utilisant le chemin relatif suivant -
$cd ../../home/amrood $
Renommer les répertoires
le mv (move)La commande peut également être utilisée pour renommer un répertoire. La syntaxe est la suivante -
$mv olddir newdir $
Vous pouvez renommer un répertoire mydir à yourdir comme suit -
$mv mydir yourdir $
Les répertoires. (point) et .. (point point)
le filename .(point) représente le répertoire de travail actuel; et lefilename .. (point point) représente le répertoire un niveau au-dessus du répertoire de travail actuel, souvent appelé répertoire parent.
Si nous entrons la commande pour afficher une liste des répertoires / fichiers de travail actuels et utilisons le -a option pour lister tous les fichiers et le -l option pour fournir la liste longue, nous recevrons le résultat suivant.
$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $
Dans ce chapitre, nous discuterons en détail de l'autorisation de fichier et des modes d'accès sous Unix. La propriété des fichiers est un composant important d'Unix qui fournit une méthode sécurisée pour stocker les fichiers. Chaque fichier sous Unix a les attributs suivants -
Owner permissions - Les autorisations du propriétaire déterminent les actions que le propriétaire du fichier peut effectuer sur le fichier.
Group permissions - Les autorisations du groupe déterminent les actions qu'un utilisateur, qui est membre du groupe auquel appartient un fichier, peut effectuer sur le fichier.
Other (world) permissions - Les autorisations pour les autres indiquent quelle action tous les autres utilisateurs peuvent effectuer sur le fichier.
Les indicateurs d'autorisation
Tout en utilisant ls -l commande, il affiche diverses informations relatives à l'autorisation de fichier comme suit -
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
Ici, la première colonne représente différents modes d'accès, c'est-à-dire la permission associée à un fichier ou un répertoire.
Les autorisations sont divisées en groupes de trois, et chaque position dans le groupe indique une autorisation spécifique, dans cet ordre: lecture (r), écriture (w), exécution (x) -
Les trois premiers caractères (2-4) représentent les autorisations du propriétaire du fichier. Par exemple,-rwxr-xr-- indique que le propriétaire a l'autorisation de lecture (r), d'écriture (w) et d'exécution (x).
Le deuxième groupe de trois caractères (5 à 7) comprend les autorisations du groupe auquel appartient le fichier. Par exemple,-rwxr-xr-- indique que le groupe a l'autorisation de lecture (r) et d'exécution (x), mais aucune autorisation d'écriture.
Le dernier groupe de trois caractères (8-10) représente les autorisations pour tout le monde. Par exemple,-rwxr-xr-- représente qu'il y a read (r) seule permission.
Modes d'accès aux fichiers
Les permissions d'un fichier sont la première ligne de défense dans la sécurité d'un système Unix. Les éléments de base des autorisations Unix sont lesread, write, et execute autorisations, qui ont été décrites ci-dessous -
Lis
Accorde la capacité de lire, c'est-à-dire d'afficher le contenu du fichier.
Écrire
Accorde la possibilité de modifier ou de supprimer le contenu du fichier.
Exécuter
L'utilisateur avec des autorisations d'exécution peut exécuter un fichier en tant que programme.
Modes d'accès à l'annuaire
Les modes d'accès aux répertoires sont répertoriés et organisés de la même manière que tout autre fichier. Il y a quelques différences qui doivent être mentionnées -
Lis
L'accès à un répertoire signifie que l'utilisateur peut lire le contenu. L'utilisateur peut consulter lefilenames à l'intérieur du répertoire.
Écrire
L'accès signifie que l'utilisateur peut ajouter ou supprimer des fichiers du répertoire.
Exécuter
L'exécution d'un répertoire n'a pas vraiment de sens, alors considérez cela comme une autorisation de passage.
Un utilisateur doit avoir execute accès au bin répertoire afin d'exécuter le ls ou la cd commander.
Modification des autorisations
Pour modifier le fichier ou les autorisations de répertoire, vous utilisez le chmod(changer de mode) commande. Il existe deux façons d'utiliser chmod - le mode symbolique et le mode absolu.
Utilisation de chmod en mode symbolique
Le moyen le plus simple pour un débutant de modifier les autorisations de fichier ou de répertoire consiste à utiliser le mode symbolique. Avec les autorisations symboliques, vous pouvez ajouter, supprimer ou spécifier le jeu d'autorisations souhaité à l'aide des opérateurs du tableau suivant.
Sr.No. | Opérateur Chmod et description |
---|---|
1 | + Ajoute les autorisations désignées à un fichier ou un répertoire. |
2 | - Supprime la ou les autorisations désignées d'un fichier ou d'un répertoire. |
3 | = Définit la ou les autorisations désignées. |
Voici un exemple utilisant testfile. Fonctionnementls -1 sur le fichier de test montre que les autorisations du fichier sont les suivantes -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Puis chaque exemple chmod La commande du tableau précédent est exécutée sur le fichier de test, suivie de ls –l, afin que vous puissiez voir les changements d'autorisation -
$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Voici comment vous pouvez combiner ces commandes sur une seule ligne -
$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Utilisation de chmod avec des autorisations absolues
La deuxième façon de modifier les autorisations avec la commande chmod consiste à utiliser un nombre pour spécifier chaque ensemble d'autorisations pour le fichier.
Chaque autorisation se voit attribuer une valeur, comme le montre le tableau suivant, et le total de chaque ensemble d'autorisations fournit un numéro pour cet ensemble.
Nombre | Représentation de la permission octale | Réf |
---|---|---|
0 | Aucune autorisation | --- |
1 | Exécuter l'autorisation | --X |
2 | Autorisation d'écriture | -w- |
3 | Autorisation d'exécution et d'écriture: 1 (exécution) + 2 (écriture) = 3 | -wx |
4 | Lire l'autorisation | r-- |
5 | Autorisation de lecture et d'exécution: 4 (lecture) + 1 (exécution) = 5 | rx |
6 | Autorisation de lecture et d'écriture: 4 (lecture) + 2 (écriture) = 6 | rw- |
7 | Toutes les autorisations: 4 (lecture) + 2 (écriture) + 1 (exécution) = 7 | rwx |
Voici un exemple utilisant le fichier test. Fonctionnementls -1 sur le fichier de test montre que les autorisations du fichier sont les suivantes -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Puis chaque exemple chmod La commande du tableau précédent est exécutée sur le fichier de test, suivie de ls –l, afin que vous puissiez voir les changements d'autorisation -
$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
Changer de propriétaire et de groupe
Lors de la création d'un compte sous Unix, il attribue un owner ID et un group IDà chaque utilisateur. Toutes les autorisations mentionnées ci-dessus sont également attribuées en fonction du propriétaire et des groupes.
Deux commandes sont disponibles pour changer le propriétaire et le groupe de fichiers -
chown - Le chown commande signifie "change owner" et est utilisé pour changer le propriétaire d'un fichier.
chgrp - Le chgrp commande signifie "change group" et est utilisé pour changer le groupe d'un fichier.
Changement de propriétaire
le chownLa commande change la propriété d'un fichier. La syntaxe de base est la suivante -
$ chown user filelist
La valeur de l'utilisateur peut être soit le name of a user sur le système ou le user id (uid) d'un utilisateur sur le système.
L'exemple suivant vous aidera à comprendre le concept -
$ chown amrood testfile $
Change le propriétaire du fichier donné en utilisateur amrood.
NOTE - Le super utilisateur, root, a la capacité illimitée de changer la propriété de n'importe quel fichier, mais les utilisateurs normaux ne peuvent changer la propriété que des fichiers qu'ils possèdent.
Changer la propriété du groupe
le chgrpLa commande modifie la propriété de groupe d'un fichier. La syntaxe de base est la suivante -
$ chgrp group filelist
La valeur du groupe peut être la name of a group sur le système ou the group ID (GID) d'un groupe sur le système.
L'exemple suivant vous aide à comprendre le concept -
$ chgrp special testfile
$
Change le groupe du fichier donné en special groupe.
Autorisation de fichiers SUID et SGID
Souvent, lorsqu'une commande est exécutée, elle devra être exécutée avec des privilèges spéciaux afin d'accomplir sa tâche.
Par exemple, lorsque vous modifiez votre mot de passe avec le passwd commande, votre nouveau mot de passe est stocké dans le fichier /etc/shadow.
En tant qu'utilisateur régulier, vous n'avez pas read ou writeaccéder à ce fichier pour des raisons de sécurité, mais lorsque vous modifiez votre mot de passe, vous devez disposer de l'autorisation d'écriture sur ce fichier. Cela signifie que lepasswd le programme doit vous donner des autorisations supplémentaires pour que vous puissiez écrire dans le fichier /etc/shadow.
Des autorisations supplémentaires sont accordées aux programmes via un mécanisme connu sous le nom de Set User ID (SUID) et Set Group ID (SGID) morceaux.
Lorsque vous exécutez un programme dont le bit SUID est activé, vous héritez des autorisations du propriétaire de ce programme. Les programmes qui n'ont pas le bit SUID défini sont exécutés avec les autorisations de l'utilisateur qui a démarré le programme.
C'est également le cas avec SGID. Normalement, les programmes s'exécutent avec les autorisations de votre groupe, mais à la place, votre groupe sera modifié uniquement pour ce programme par le propriétaire du groupe du programme.
Les bits SUID et SGID apparaîtront sous forme de lettre "s"si l'autorisation est disponible. Le SUID"s" bit sera situé dans les bits d'autorisation où les propriétaires execute la permission réside normalement.
Par exemple, la commande -
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
Montre que le bit SUID est défini et que la commande appartient à la racine. Une lettre majusculeS en position d'exécution au lieu d'une minuscule s indique que le bit d'exécution n'est pas défini.
Si le sticky bit est activé sur le répertoire, les fichiers ne peuvent être supprimés que si vous êtes l'un des utilisateurs suivants -
- Le propriétaire du répertoire collant
- Le propriétaire du fichier en cours de suppression
- Le super utilisateur, root
Pour définir les bits SUID et SGID pour n'importe quel répertoire, essayez la commande suivante -
$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $
Dans ce chapitre, nous discuterons en détail de l'environnement Unix. Un concept Unix important est leenvironment, qui est défini par les variables d'environnement. Certains sont définis par le système, d'autres par vous, d'autres encore par le shell, ou tout autre programme qui charge un autre programme.
Une variable est une chaîne de caractères à laquelle nous attribuons une valeur. La valeur attribuée peut être un nombre, du texte, un nom de fichier, un périphérique ou tout autre type de données.
Par exemple, nous définissons d'abord une variable TEST, puis nous accédons à sa valeur à l'aide du echo commande -
$TEST="Unix Programming" $echo $TEST
Il produit le résultat suivant.
Unix Programming
Notez que les variables d'environnement sont définies sans utiliser le $signe mais en y accédant, nous utilisons le signe $ comme préfixe. Ces variables conservent leurs valeurs jusqu'à ce que nous sortions du shell.
Lorsque vous vous connectez au système, le shell subit une phase appelée initializationpour mettre en place l'environnement. Il s'agit généralement d'un processus en deux étapes qui implique que le shell lise les fichiers suivants -
- /etc/profile
- profile
Le processus est le suivant -
Le shell vérifie si le fichier /etc/profile existe.
S'il existe, le shell le lit. Sinon, ce fichier est ignoré. Aucun message d'erreur ne s'affiche.
Le shell vérifie si le fichier .profileexiste dans votre répertoire personnel. Votre répertoire personnel est le répertoire dans lequel vous commencez après vous être connecté.
S'il existe, le shell le lit; sinon, le shell l'ignore. Aucun message d'erreur ne s'affiche.
Dès que ces deux fichiers ont été lus, le shell affiche une invite -
$
Il s'agit de l'invite où vous pouvez entrer des commandes afin de les exécuter.
Note - Le processus d'initialisation du shell détaillé ici s'applique à tous Bourne shells de type, mais certains fichiers supplémentaires sont utilisés par bash et ksh.
Le fichier .profile
Le fichier /etc/profile est géré par l'administrateur système de votre machine Unix et contient les informations d'initialisation du shell requises par tous les utilisateurs d'un système.
Le fichier .profileest sous votre contrôle. Vous pouvez ajouter autant d'informations de personnalisation du shell que vous le souhaitez à ce fichier. L'ensemble minimal d'informations que vous devez configurer comprend:
- Le type de terminal que vous utilisez.
- Une liste de répertoires dans lesquels localiser les commandes.
- Une liste de variables affectant l'aspect et la convivialité de votre terminal.
Vous pouvez vérifier votre .profiledisponible dans votre répertoire personnel. Ouvrez-le à l'aide de l'éditeur vi et vérifiez toutes les variables définies pour votre environnement.
Définition du type de terminal
Habituellement, le type de terminal que vous utilisez est automatiquement configuré soit par le login ou gettyprogrammes. Parfois, le processus de configuration automatique ne devine pas correctement votre terminal.
Si votre terminal n'est pas configuré correctement, la sortie des commandes peut paraître étrange ou vous ne pourrez peut-être pas interagir correctement avec le shell.
Pour s'assurer que ce n'est pas le cas, la plupart des utilisateurs définissent leur terminal sur le plus petit dénominateur commun de la manière suivante:
$TERM=vt100 $
Définition du CHEMIN
Lorsque vous tapez une commande sur l'invite de commande, le shell doit localiser la commande avant de pouvoir être exécutée.
La variable PATH spécifie les emplacements dans lesquels le shell doit rechercher les commandes. Habituellement, la variable Path est définie comme suit -
$PATH=/bin:/usr/bin $
Ici, chacune des entrées individuelles séparées par le caractère deux-points (:)sont des répertoires. Si vous demandez au shell d'exécuter une commande et qu'il ne la trouve dans aucun des répertoires indiqués dans la variable PATH, un message similaire au suivant apparaît -
$hello hello: not found $
Il existe des variables comme PS1 et PS2 qui sont discutées dans la section suivante.
Variables PS1 et PS2
Les caractères que le shell affiche comme invite de commande sont stockés dans la variable PS1. Vous pouvez changer cette variable pour qu'elle soit tout ce que vous voulez. Dès que vous le modifiez, il sera utilisé par le shell à partir de ce moment.
Par exemple, si vous avez émis la commande -
$PS1='=>'
=>
=>
=>
Votre invite deviendra =>. Pour définir la valeur dePS1 pour qu'il affiche le répertoire de travail, émettez la commande -
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
Le résultat de cette commande est que l'invite affiche le nom d'utilisateur de l'utilisateur, le nom de la machine (nom d'hôte) et le répertoire de travail.
Il y en a pas mal escape sequencesqui peuvent être utilisés comme arguments de valeur pour PS1; essayez de vous limiter au plus critique afin que l'invite ne vous submerge pas d'informations.
Sr.No. | Séquence d'échappement et description |
---|---|
1 | \t Heure actuelle, exprimée en HH: MM: SS |
2 | \d Date actuelle, exprimée en semaine, mois, date |
3 | \n Nouvelle ligne |
4 | \s Environnement shell actuel |
5 | \W Directeur de travail |
6 | \w Chemin complet du répertoire de travail |
sept | \u Nom d'utilisateur de l'utilisateur actuel |
8 | \h Nom d'hôte de la machine actuelle |
9 | \# Numéro de commande de la commande en cours. Augmente quand une nouvelle commande est entrée |
dix | \$ Si l'UID effectif est 0 (c'est-à-dire si vous êtes connecté en tant que root), terminez l'invite par le caractère #; sinon, utilisez le signe $ |
Vous pouvez effectuer la modification vous-même chaque fois que vous vous connectez, ou vous pouvez faire effectuer la modification automatiquement dans PS1 en l'ajoutant à votre .profile fichier.
Lorsque vous émettez une commande incomplète, le shell affiche une invite secondaire et attend que vous terminiez la commande et appuyez sur Enter encore.
L'invite secondaire par défaut est > (le signe supérieur à), mais peut être modifié en redéfinissant le PS2 variable shell -
Voici l'exemple qui utilise l'invite secondaire par défaut -
$ echo "this is a > test" this is a test $
L'exemple donné ci-dessous redéfinit PS2 avec une invite personnalisée -
$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$
Variables d'environnement
Voici la liste partielle des variables d'environnement importantes. Ces variables sont définies et accessibles comme indiqué ci-dessous -
Sr.No. | Variable et description |
---|---|
1 | DISPLAY Contient l'identifiant de l'affichage qui X11 les programmes doivent utiliser par défaut. |
2 | HOME Indique le répertoire personnel de l'utilisateur actuel: l'argument par défaut du cd built-in commander. |
3 | IFS Indique le Internal Field Separator qui est utilisé par l'analyseur pour la division de mot après l'expansion. |
4 | LANG LANG se développe vers les paramètres régionaux par défaut du système; LC_ALL peut être utilisé pour remplacer cela. Par exemple, si sa valeur estpt_BR, la langue est définie sur le portugais (brésilien) et la langue sur le Brésil. |
5 | LD_LIBRARY_PATH Un système Unix avec un éditeur de liens dynamique, contient une liste de répertoires par couleurs, dans lesquels l'éditeur de liens dynamique doit rechercher des objets partagés lors de la construction d'une image de processus après exec, avant de rechercher dans tout autre répertoire. |
6 | PATH Indique le chemin de recherche des commandes. C'est une liste de répertoires séparés par deux-points dans lesquels le shell recherche des commandes. |
sept | PWD Indique le répertoire de travail actuel défini par la commande cd. |
8 | RANDOM Génère un entier aléatoire compris entre 0 et 32 767 à chaque fois qu'il est référencé. |
9 | SHLVL Incrémente de un à chaque fois qu'une instance de bash est démarrée. Cette variable est utile pour déterminer si la commande de sortie intégrée met fin à la session en cours. |
dix | TERM Fait référence au type d'affichage. |
11 | TZ Fait référence au fuseau horaire. Il peut prendre des valeurs telles que GMT, AST, etc. |
12 | UID S'étend à l'ID utilisateur numérique de l'utilisateur actuel, initialisé au démarrage du shell. |
Voici l'exemple d'exemple montrant quelques variables d'environnement -
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
Dans ce chapitre, nous discuterons en détail de l'impression et du courrier électronique en tant qu'utilitaires de base d'Unix. Jusqu'à présent, nous avons essayé de comprendre le système d'exploitation Unix et la nature de ses commandes de base. Dans ce chapitre, nous allons apprendre quelques utilitaires Unix importants qui peuvent être utilisés dans notre vie de tous les jours.
Impression de fichiers
Avant d'imprimer un fichier sur un système Unix, vous souhaiterez peut-être le reformater pour ajuster les marges, mettre en évidence certains mots, etc. La plupart des fichiers peuvent également être imprimés sans reformatage, mais l'impression brute peut ne pas être aussi attrayante.
De nombreuses versions d'Unix incluent deux puissants formateurs de texte, nroff et troff.
La commande PR
le prLa commande effectue un formatage mineur des fichiers sur l'écran du terminal ou pour une imprimante. Par exemple, si vous avez une longue liste de noms dans un fichier, vous pouvez le formater à l'écran en deux colonnes ou plus.
Voici la syntaxe du pr commande -
pr option(s) filename(s)
le prmodifie le format du fichier uniquement à l'écran ou sur la copie imprimée; il ne modifie pas le fichier d'origine. Le tableau suivant répertorie certainspr options -
Sr.No. | Option et description |
---|---|
1 | -k Produit k colonnes de sortie |
2 | -d Espace double la sortie (pas sur tous pr versions) |
3 | -h "header" Prend l'élément suivant comme en-tête de rapport |
4 | -t Élimine l'impression de l'en-tête et des marges haut / bas |
5 | -l PAGE_LENGTH Définit la longueur de la page sur PAGE_LENGTH (66) lignes. Le nombre par défaut de lignes de texte est 56 |
6 | -o MARGIN Décale chaque ligne avec des espaces MARGIN (zéro) |
sept | -w PAGE_WIDTH Définit la largeur de la page sur PAGE_WIDTH (72) caractères pour la sortie de plusieurs colonnes de texte uniquement |
Avant d'utiliser pr, voici le contenu d'un exemple de fichier nommé food.
$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $
Utilisons le prcommande pour faire un rapport à deux colonnes avec l'en-tête Restaurants -
$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $
Les commandes lp et lpr
La commande lp ou lprimprime un fichier sur du papier par opposition à l'affichage à l'écran. Une fois que vous êtes prêt avec le formatage à l'aide depr , vous pouvez utiliser l’une de ces commandes pour imprimer votre fichier sur l’imprimante connectée à votre ordinateur.
Votre administrateur système a probablement configuré une imprimante par défaut sur votre site. Pour imprimer un fichier nomméfood sur l'imprimante par défaut, utilisez le lp ou lpr commande, comme dans l'exemple suivant -
$lp food request id is laserp-525 (1 file) $
le lp La commande affiche un ID que vous pouvez utiliser pour annuler le travail d'impression ou vérifier son état.
Si vous utilisez le lp commande, vous pouvez utiliser la commande -nNumoption pour imprimer le nombre de copies. Avec la commandelpr, vous pouvez utiliser -Num pour le même.
S'il y a plusieurs imprimantes connectées au réseau partagé, vous pouvez choisir une imprimante à l'aide de -dprinter option avec la commande lp et dans le même but, vous pouvez utiliser -Pprinteroption avec la commande lpr. Ici, l'imprimante est le nom de l'imprimante.
Les commandes lpstat et lpq
le lpstat La commande affiche ce qui se trouve dans la file d'attente de l'imprimante: les ID de demande, les propriétaires, la taille des fichiers, le moment où les travaux ont été envoyés pour impression et l'état des demandes.
Utilisation lpstat -osi vous souhaitez voir toutes les demandes de sortie autres que la vôtre. Les demandes sont affichées dans l'ordre où elles seront imprimées -
$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $
le lpq donne des informations légèrement différentes de celles lpstat -o -
$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $
Ici, la première ligne affiche l'état de l'imprimante. Si l'imprimante est désactivée ou manque de papier, vous pouvez voir différents messages sur cette première ligne.
Les commandes cancel et lprm
le cancel la commande met fin à une demande d'impression de lp command. lelprm la commande termine tout lpr requests. Vous pouvez spécifier soit l'ID de la demande (affiché par lp ou lpq), soit le nom de l'imprimante.
$cancel laserp-575 request "laserp-575" cancelled $
Pour annuler toute demande en cours d'impression, quel que soit son ID, entrez simplement annuler et le nom de l'imprimante -
$cancel laserp request "laserp-573" cancelled $
le lprmla commande annulera le travail actif s'il vous appartient. Sinon, vous pouvez donner des numéros de travail comme arguments ou utiliser undash (-) pour supprimer tous vos travaux -
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
le lprm La commande vous indique les noms de fichiers réels supprimés de la file d'attente de l'imprimante.
Envoi d'un e-mail
Vous utilisez la commande de messagerie Unix pour envoyer et recevoir du courrier. Voici la syntaxe pour envoyer un email -
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
Voici les options importantes liées aux commandes de messagerie
Sr.No. | Option et description |
---|---|
1 | -s Spécifie le sujet sur la ligne de commande. |
2 | -c Envoie des copies carbone à la liste des utilisateurs. La liste doit être une liste de noms séparés par des virgules. |
3 | -b Envoie des copies carbone aveugles à la liste. La liste doit être une liste de noms séparés par des virgules. |
Voici un exemple pour envoyer un message de test à [email protected].
$mail -s "Test Message" [email protected]
Vous devez ensuite taper votre message, suivi de "control-D"au début d'une ligne. Pour arrêter, tapez simplement point(.) comme suit -
Hi,
This is a test
.
Cc:
Vous pouvez envoyer un fichier complet à l'aide d'un redirect < operator comme suit -
$mail -s "Report 05/06/07" [email protected] < demo.txt
Pour vérifier les e-mails entrants sur votre système Unix, saisissez simplement l'e-mail comme suit -
$mail
no email
Dans ce chapitre, nous discuterons en détail des tubes et des filtres sous Unix. Vous pouvez connecter deux commandes ensemble afin que la sortie d'un programme devienne l'entrée du programme suivant. Deux commandes ou plus connectées de cette manière forment un tuyau.
Pour faire un tuyau, placez une barre verticale (|) sur la ligne de commande entre deux commandes.
Lorsqu'un programme prend son entrée d'un autre programme, il effectue une opération sur cette entrée et écrit le résultat sur la sortie standard. Il est appelé unfilter.
La commande grep
La commande grep recherche un fichier ou des fichiers pour les lignes qui ont un certain modèle. La syntaxe est -
$grep pattern file(s)
Le nom "grep" provient de la commande ed (un éditeur de ligne Unix) g/re/p ce qui signifie «rechercher globalement une expression régulière et imprimer toutes les lignes la contenant».
Une expression régulière est soit du texte brut (un mot, par exemple) et / ou des caractères spéciaux utilisés pour la mise en correspondance de modèles.
L'utilisation la plus simple de grep est de rechercher un modèle composé d'un seul mot. Il peut être utilisé dans un tube pour que seules les lignes des fichiers d'entrée contenant une chaîne donnée soient envoyées à la sortie standard. Si vous ne donnez pas à grep un nom de fichier à lire, il lit son entrée standard; c'est ainsi que fonctionnent tous les programmes de filtrage -
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
Il existe différentes options que vous pouvez utiliser avec le grep commande -
Sr.No. | Option et description |
---|---|
1 | -v Imprime toutes les lignes qui ne correspondent pas au motif. |
2 | -n Imprime la ligne correspondante et son numéro de ligne. |
3 | -l Imprime uniquement les noms des fichiers avec les lignes correspondantes (lettre «l») |
4 | -c Imprime uniquement le nombre de lignes correspondantes. |
5 | -i Correspond aux majuscules ou aux minuscules. |
Utilisons maintenant une expression régulière qui dit à grep de trouver des lignes avec "carol", suivi de zéro ou d'autres caractères abrégés dans une expression régulière par ". *"), puis suivi de "Aug" .−
Ici, nous utilisons le -i option pour avoir une recherche insensible à la casse -
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
La commande sort
le sortLa commande organise les lignes de texte par ordre alphabétique ou numérique. L'exemple suivant trie les lignes du fichier alimentaire -
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
le sortLa commande organise les lignes de texte par ordre alphabétique par défaut. Il existe de nombreuses options qui contrôlent le tri -
Sr.No. | La description |
---|---|
1 | -n Trie numériquement (exemple: 10 triera après 2), ignore les blancs et les tabulations. |
2 | -r Inverse l'ordre de tri. |
3 | -f Trie les majuscules et les minuscules ensemble. |
4 | +x Ignore d'abord x champs lors du tri. |
Plus de deux commandes peuvent être liées dans un tube. Prenant un exemple de tuyau précédent en utilisantgrep, nous pouvons encore trier les fichiers modifiés en août par ordre de taille.
Le tube suivant se compose des commandes ls, grep, et sort -
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
Ce tube trie tous les fichiers de votre répertoire modifiés en août par ordre de taille, et les imprime sur l'écran du terminal. L'option de tri + 4n saute quatre champs (les champs sont séparés par des blancs) puis trie les lignes dans l'ordre numérique.
Les commandes pg et autres
Une sortie longue peut normalement être compressée par vous sur l'écran, mais si vous exécutez du texte à travers plus ou utilisez le pgcommande comme filtre; l'affichage s'arrête une fois que l'écran est plein de texte.
Supposons que vous ayez une longue liste de répertoires. Pour faciliter la lecture de la liste triée, dirigez la sortie versmore comme suit -
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
L'écran se remplira une fois que l'écran sera plein de texte composé de lignes triées par ordre de taille de fichier. Au bas de l'écran se trouve lemore invite, où vous pouvez taper une commande pour vous déplacer dans le texte trié.
Une fois que vous avez terminé avec cet écran, vous pouvez utiliser l'une des commandes répertoriées dans la discussion du programme more.
Dans ce chapitre, nous discuterons en détail de la gestion des processus sous Unix. Lorsque vous exécutez un programme sur votre système Unix, le système crée un environnement spécial pour ce programme. Cet environnement contient tout ce dont le système a besoin pour exécuter le programme comme si aucun autre programme n'était en cours d'exécution sur le système.
Chaque fois que vous émettez une commande sous Unix, elle crée ou démarre un nouveau processus. Lorsque vous avez essayé lelspour lister le contenu du répertoire, vous avez démarré un processus. Un processus, en termes simples, est une instance d'un programme en cours d'exécution.
Le système d'exploitation suit les processus via un numéro d'identification à cinq chiffres appelé pid ou la process ID. Chaque processus du système a unpid.
Les pid finissent par se répéter car tous les nombres possibles sont épuisés et le pid suivant roule ou recommence. À tout moment, il n'y a pas deux processus avec le même pid dans le système car c'est le pid qu'Unix utilise pour suivre chaque processus.
Démarrer un processus
Lorsque vous démarrez un processus (exécutez une commande), vous pouvez l'exécuter de deux manières:
- Processus de premier plan
- Processus en arrière-plan
Processus de premier plan
Par défaut, chaque processus que vous démarrez s'exécute au premier plan. Il obtient son entrée du clavier et envoie sa sortie à l'écran.
Vous pouvez voir que cela se produit avec le lscommander. Si vous souhaitez lister tous les fichiers de votre répertoire actuel, vous pouvez utiliser la commande suivante -
$ls ch*.doc
Cela afficherait tous les fichiers, dont les noms commencent par ch et terminer par .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Le processus s'exécute au premier plan, la sortie est dirigée vers mon écran et si le ls commande veut une entrée (ce qu'elle ne fait pas), elle l'attend depuis le clavier.
Lorsqu'un programme s'exécute au premier plan et prend du temps, aucune autre commande ne peut être exécutée (démarrez d'autres processus) car l'invite ne serait pas disponible tant que le programme n'a pas terminé le traitement et n'est pas sorti.
Processus en arrière-plan
Un processus d'arrière-plan s'exécute sans être connecté à votre clavier. Si le processus d'arrière-plan nécessite une entrée au clavier, il attend.
L'avantage d'exécuter un processus en arrière-plan est que vous pouvez exécuter d'autres commandes; vous n'avez pas à attendre qu'il se termine pour en démarrer un autre!
Le moyen le plus simple de démarrer un processus en arrière-plan consiste à ajouter une esperluette (&) à la fin de la commande.
$ls ch*.doc &
Cela affiche tous les fichiers dont les noms commencent par ch et terminer par .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Ici, si le ls La commande veut une entrée (ce qu'elle ne fait pas), elle passe dans un état d'arrêt jusqu'à ce que nous la déplacions au premier plan et lui donnions les données du clavier.
Cette première ligne contient des informations sur le processus d'arrière-plan - le numéro de travail et l'ID de processus. Vous devez connaître le numéro de travail pour le manipuler entre l'arrière-plan et le premier plan.
Appuyez sur la touche Entrée et vous verrez ce qui suit -
[1] + Done ls ch*.doc &
$
La première ligne vous indique que le lsle processus d'arrière-plan de la commande se termine avec succès. Le second est une invite pour une autre commande.
Liste des processus en cours d'exécution
Il est facile de voir vos propres processus en exécutant le ps (état du processus) comme suit -
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
L'un des indicateurs les plus couramment utilisés pour ps est le -f (f pour full), qui fournit plus d'informations comme indiqué dans l'exemple suivant -
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
Voici la description de tous les champs affichés par ps -f commande -
Sr.No. | Colonne et description |
---|---|
1 | UID ID utilisateur auquel appartient ce processus (la personne qui l'exécute) |
2 | PID ID de processus |
3 | PPID ID de processus parent (l'ID du processus qui l'a démarré) |
4 | C Utilisation du processeur du processus |
5 | STIME Heure de début du processus |
6 | TTY Type de terminal associé au processus |
sept | TIME Temps CPU pris par le processus |
8 | CMD La commande qui a lancé ce processus |
Il existe d'autres options qui peuvent être utilisées avec ps commande -
Sr.No. | Option et description |
---|---|
1 | -a Affiche des informations sur tous les utilisateurs |
2 | -x Affiche des informations sur les processus sans terminaux |
3 | -u Affiche des informations supplémentaires comme l'option -f |
4 | -e Affiche des informations étendues |
Arrêt des processus
La fin d'un processus peut se faire de plusieurs manières différentes. Souvent, à partir d'une commande basée sur la console, l'envoi d'une touche CTRL + C (le caractère d'interruption par défaut) quittera la commande. Cela fonctionne lorsque le processus s'exécute en mode de premier plan.
Si un processus s'exécute en arrière-plan, vous devez obtenir son ID de tâche à l'aide du pscommander. Après cela, vous pouvez utiliser lekill commande pour tuer le processus comme suit -
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
Ici le kill la commande met fin au first_oneprocessus. Si un processus ignore une commande kill standard, vous pouvez utiliserkill -9 suivi de l'ID de processus comme suit -
$kill -9 6738
Terminated
Processus parents et enfants
Chaque processus unix a deux numéros d'identification qui lui sont attribués: l'ID de processus (pid) et l'ID de processus parent (ppid). Chaque processus utilisateur du système a un processus parent.
La plupart des commandes que vous exécutez ont le shell comme parent. Vérifier laps -f exemple où cette commande a répertorié à la fois l'ID de processus et l'ID de processus parent.
Processus zombies et orphelins
Normalement, lorsqu'un processus enfant est tué, le processus parent est mis à jour via un SIGCHLDsignal. Ensuite, le parent peut effectuer une autre tâche ou redémarrer un nouvel enfant si nécessaire. Cependant, parfois, le processus parent est tué avant que son enfant ne soit tué. Dans ce cas, le "parent de tous les processus", leinitprocessus, devient le nouveau PPID (ID de processus parent). Dans certains cas, ces processus sont appelés processus orphelins.
Lorsqu'un processus est tué, un ps la liste peut toujours afficher le processus avec un ZEtat. Il s'agit d'un processus zombie ou obsolète. Le processus est mort et n'est pas utilisé. Ces processus sont différents des processus orphelins. Ils ont terminé l'exécution mais trouvent toujours une entrée dans la table de processus.
Processus démon
Les démons sont des processus d'arrière-plan liés au système qui s'exécutent souvent avec les autorisations de requêtes racine et de services d'autres processus.
Un démon n'a pas de terminal de contrôle. Il ne peut pas ouvrir/dev/tty. Si vous faites un"ps -ef" et regardez le tty champ, tous les démons auront un ? pour le tty.
Pour être précis, un démon est un processus qui s'exécute en arrière-plan, attendant généralement qu'il se passe quelque chose avec lequel il est capable de travailler. Par exemple, un démon d'imprimante en attente de commandes d'impression.
Si vous avez un programme qui nécessite un long traitement, alors cela vaut la peine d'en faire un démon et de l'exécuter en arrière-plan.
Le commandement supérieur
le top La commande est un outil très utile pour afficher rapidement les processus triés selon différents critères.
Il s'agit d'un outil de diagnostic interactif qui se met à jour fréquemment et affiche des informations sur la mémoire physique et virtuelle, l'utilisation du processeur, les moyennes de charge et vos processus occupés.
Voici la syntaxe simple pour exécuter la commande top et pour voir les statistiques d'utilisation du processeur par différents processus -
$top
ID de tâche et ID de processus
Les processus en arrière-plan et suspendus sont généralement manipulés via job number (job ID). Ce numéro est différent de l'ID de processus et est utilisé car il est plus court.
De plus, un travail peut être constitué de plusieurs processus s'exécutant en série ou en même temps, en parallèle. L'utilisation de l'ID de tâche est plus facile que le suivi des processus individuels.
Dans ce chapitre, nous discuterons en détail des utilitaires de communication réseau sous Unix. Lorsque vous travaillez dans un environnement distribué, vous devez communiquer avec des utilisateurs distants et vous devez également accéder à des machines Unix distantes.
Il existe plusieurs utilitaires Unix qui aident les utilisateurs à calculer dans un environnement distribué en réseau. Ce chapitre en énumère quelques-uns.
L'utilitaire ping
le pingLa commande envoie une demande d'écho à un hôte disponible sur le réseau. En utilisant cette commande, vous pouvez vérifier si votre hôte distant répond bien ou non.
La commande ping est utile pour ce qui suit -
- Suivi et isolement des problèmes matériels et logiciels.
- Détermination de l'état du réseau et de divers hôtes étrangers.
- Tester, mesurer et gérer les réseaux.
Syntaxe
Voici la syntaxe simple pour utiliser la commande ftp -
$ping hostname or ip-address
La commande ci-dessus commence à imprimer une réponse après chaque seconde. Pour sortir de la commande, vous pouvez y mettre fin en appuyant surCNTRL + C clés.
Exemple
Voici un exemple pour vérifier la disponibilité d'un hôte disponible sur le réseau -
$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $
Si un hôte n'existe pas, vous recevrez la sortie suivante -
$ping giiiiiigle.com ping: unknown host giiiiigle.com $
L'utilitaire ftp
Ici, ftp signifie File Ttransfert Protocol. Cet utilitaire vous aide à télécharger et télécharger votre fichier d'un ordinateur vers un autre ordinateur.
L'utilitaire ftp a son propre ensemble de commandes de type Unix. Ces commandes vous aident à effectuer des tâches telles que -
Connectez-vous et connectez-vous à un hôte distant.
Parcourez les répertoires.
Liste le contenu du répertoire.
Mettez et obtenez des fichiers.
Transférer des fichiers comme ascii, ebcdic ou binary.
Syntaxe
Voici la syntaxe simple pour utiliser la commande ftp -
$ftp hostname or ip-address
La commande ci-dessus vous demandera l'ID de connexion et le mot de passe. Une fois que vous êtes authentifié, vous pouvez accéder au répertoire d'accueil du compte de connexion et vous pourrez exécuter diverses commandes.
Les tableaux suivants énumèrent quelques commandes importantes -
Sr.No. | Commande et description |
---|---|
1 | put filename Télécharge le nom de fichier de la machine locale vers la machine distante. |
2 | get filename Télécharge le nom de fichier de la machine distante vers la machine locale. |
3 | mput file list Télécharge plusieurs fichiers de la machine locale vers la machine distante. |
4 | mget file list Télécharge plusieurs fichiers de la machine distante vers la machine locale. |
5 | prompt off Désactive l'invite. Par défaut, vous recevrez une invite pour télécharger ou télécharger des fichiers en utilisantmput ou mget commandes. |
6 | prompt on Active l'invite. |
sept | dir Répertorie tous les fichiers disponibles dans le répertoire actuel de la machine distante. |
8 | cd dirname Remplace le répertoire par dirname sur la machine distante. |
9 | lcd dirname Remplace le répertoire par dirname sur la machine locale. |
dix | quit Aide à se déconnecter de la connexion actuelle. |
Il convient de noter que tous les fichiers seraient téléchargés ou téléchargés vers ou à partir des répertoires actuels. Si vous souhaitez télécharger vos fichiers dans un répertoire particulier, vous devez d'abord accéder à ce répertoire, puis télécharger les fichiers requis.
Exemple
Voici l'exemple pour montrer le fonctionnement de quelques commandes -
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
L'utilitaire telnet
Il y a des moments où nous devons nous connecter à une machine Unix distante et travailler sur cette machine à distance. Telnet est un utilitaire qui permet à un utilisateur d'ordinateur sur un site d'établir une connexion, de se connecter, puis de travailler sur un ordinateur d'un autre site.
Une fois que vous vous êtes connecté à l'aide de Telnet, vous pouvez effectuer toutes les activités sur votre machine connectée à distance. Voici un exemple de session Telnet -
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
*****************************************************
* *
* *
* WELCOME TO AMROOD.COM *
* *
* *
*****************************************************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
{ do your work }
$ logout
Connection closed.
C:>
L'utilitaire du doigt
le fingerLa commande affiche des informations sur les utilisateurs sur un hôte donné. L'hôte peut être local ou distant.
Finger peut être désactivé sur d'autres systèmes pour des raisons de sécurité.
Voici la syntaxe simple pour utiliser la commande finger -
Vérifiez tous les utilisateurs connectés sur la machine locale -
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Obtenir des informations sur un utilisateur spécifique disponible sur la machine locale -
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
Vérifiez tous les utilisateurs connectés sur la machine distante -
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Obtenir les informations sur un utilisateur spécifique disponibles sur la machine distante -
$ finger [email protected]
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
Dans ce chapitre, nous allons comprendre comment l'éditeur vi fonctionne sous Unix. Il existe de nombreuses façons d'éditer des fichiers sous Unix. Édition de fichiers à l'aide de l'éditeur de texte orienté écranviest l'un des meilleurs moyens. Cet éditeur vous permet d'éditer des lignes en contexte avec d'autres lignes du fichier.
Une version améliorée de l'éditeur vi qui s'appelle le VIMa également été rendu disponible maintenant. Ici, VIM signifieVi IMprouvé.
vi est généralement considéré comme le standard de facto dans les éditeurs Unix car -
Il est généralement disponible sur toutes les versions du système Unix.
Ses implémentations sont très similaires dans tous les domaines.
Cela nécessite très peu de ressources.
Il est plus convivial que d'autres éditeurs tels que le ed ou la ex.
Vous pouvez utiliser le viéditeur pour éditer un fichier existant ou pour créer un nouveau fichier à partir de zéro. Vous pouvez également utiliser cet éditeur pour simplement lire un fichier texte.
Démarrage de l'éditeur vi
Le tableau suivant répertorie les commandes de base pour utiliser l'éditeur vi -
Sr.No. | Commande et description |
---|---|
1 | vi filename Crée un nouveau fichier s'il n'existe pas déjà, sinon ouvre un fichier existant. |
2 | vi -R filename Ouvre un fichier existant en mode lecture seule. |
3 | view filename Ouvre un fichier existant en mode lecture seule. |
Voici un exemple pour créer un nouveau fichier testfile s'il n'existe pas déjà dans le répertoire de travail courant -
$vi testfile
La commande ci-dessus générera la sortie suivante -
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
Vous remarquerez un tilde(~) sur chaque ligne suivant le curseur. Un tilde représente une ligne inutilisée. Si une ligne ne commence pas par un tilde et semble vide, un espace, une tabulation, une nouvelle ligne ou un autre caractère non visible est présent.
Vous avez maintenant un fichier ouvert sur lequel commencer à travailler. Avant d'aller plus loin, comprenons quelques concepts importants.
Operation Modes
While working with the vi editor, we usually come across the following two modes −
Command mode − This mode enables you to perform administrative tasks such as saving the files, executing the commands, moving the cursor, cutting (yanking) and pasting the lines or words, as well as finding and replacing. In this mode, whatever you type is interpreted as a command.
Insert mode − This mode enables you to insert text into the file. Everything that's typed in this mode is interpreted as input and placed in the file.
vi always starts in the command mode. To enter text, you must be in the insert mode for which simply type i. To come out of the insert mode, press the Esc key, which will take you back to the command mode.
Hint − If you are not sure which mode you are in, press the Esc key twice; this will take you to the command mode. You open a file using the vi editor. Start by typing some characters and then come to the command mode to understand the difference.
Getting Out of vi
The command to quit out of vi is :q. Once in the command mode, type colon, and 'q', followed by return. If your file has been modified in any way, the editor will warn you of this, and not let you quit. To ignore this message, the command to quit out of vi without saving is :q!. This lets you exit vi without saving any of the changes.
The command to save the contents of the editor is :w. You can combine the above command with the quit command, or use :wq and return.
The easiest way to save your changes and exit vi is with the ZZ command. When you are in the command mode, type ZZ. The ZZ command works the same way as the :wq command.
If you want to specify/state any particular name for the file, you can do so by specifying it after the :w. For example, if you wanted to save the file you were working on as another filename called filename2, you would type :w filename2 and return.
Moving within a File
To move around within a file without affecting your text, you must be in the command mode (press Esc twice). The following table lists out a few commands you can use to move around one character at a time −
Sr.No. | Command & Description |
---|---|
1 | k Moves the cursor up one line |
2 | j Moves the cursor down one line |
3 | h Moves the cursor to the left one character position |
4 | l Moves the cursor to the right one character position |
The following points need to be considered to move within a file −
vi is case-sensitive. You need to pay attention to capitalization when using the commands.
Most commands in vi can be prefaced by the number of times you want the action to occur. For example, 2j moves the cursor two lines down the cursor location.
There are many other ways to move within a file in vi. Remember that you must be in the command mode (press Esc twice). The following table lists out a few commands to move around the file −
Sr.No. | Command & Description |
---|---|
1 | 0 or | Positions the cursor at the beginning of a line |
2 | $ Positions the cursor at the end of a line |
3 | w Positions the cursor to the next word |
4 | b Positions the cursor to the previous word |
5 | ( Positions the cursor to the beginning of the current sentence |
6 | ) Positions the cursor to the beginning of the next sentence |
7 | E Moves to the end of the blank delimited word |
8 | { Moves a paragraph back |
9 | } Moves a paragraph forward |
10 | [[ Moves a section back |
11 | ]] Moves a section forward |
12 | n| Moves to the column n in the current line |
13 | 1G Moves to the first line of the file |
14 | G Moves to the last line of the file |
15 | nG Moves to the nth line of the file |
16 | :n Moves to the nth line of the file |
17 | fc Moves forward to c |
18 | Fc Moves back to c |
19 | H Moves to the top of the screen |
20 | nH Moves to the nth line from the top of the screen |
21 | M Moves to the middle of the screen |
22 | L Move to the bottom of the screen |
23 | nL Moves to the nth line from the bottom of the screen |
24 | :x Colon followed by a number would position the cursor on the line number represented by x |
Control Commands
The following commands can be used with the Control Key to performs functions as given in the table below −
Sr.No. | Command & Description |
---|---|
1 | CTRL+d Moves forward 1/2 screen |
2 | CTRL+f Moves forward one full screen |
3 | CTRL+u Moves backward 1/2 screen |
4 | CTRL+b Moves backward one full screen |
5 | CTRL+e Moves the screen up one line |
6 | CTRL+y Moves the screen down one line |
7 | CTRL+u Moves the screen up 1/2 page |
8 | CTRL+d Moves the screen down 1/2 page |
9 | CTRL+b Moves the screen up one page |
10 | CTRL+f Moves the screen down one page |
11 | CTRL+I Redraws the screen |
Editing Files
To edit the file, you need to be in the insert mode. There are many ways to enter the insert mode from the command mode −
Sr.No. | Command & Description |
---|---|
1 | i Inserts text before the current cursor location |
2 | I Inserts text at the beginning of the current line |
3 | a Inserts text after the current cursor location |
4 | A Inserts text at the end of the current line |
5 | o Creates a new line for text entry below the cursor location |
6 | O Creates a new line for text entry above the cursor location |
Deleting Characters
Here is a list of important commands, which can be used to delete characters and lines in an open file −
Sr.No. | Command & Description |
---|---|
1 | x Deletes the character under the cursor location |
2 | X Deletes the character before the cursor location |
3 | dw Deletes from the current cursor location to the next word |
4 | d^ Deletes from the current cursor position to the beginning of the line |
5 | d$ Deletes from the current cursor position to the end of the line |
6 | D Deletes from the cursor position to the end of the current line |
7 | dd Deletes the line the cursor is on |
As mentioned above, most commands in vi can be prefaced by the number of times you want the action to occur. For example, 2x deletes two characters under the cursor location and 2dd deletes two lines the cursor is on.
It is recommended that the commands are practiced before we proceed further.
Change Commands
You also have the capability to change characters, words, or lines in vi without deleting them. Here are the relevant commands −
Sr.No. | Command & Description |
---|---|
1 | cc Removes the contents of the line, leaving you in insert mode. |
2 | cw Changes the word the cursor is on from the cursor to the lowercase w end of the word. |
3 | r Replaces the character under the cursor. vi returns to the command mode after the replacement is entered. |
4 | R Overwrites multiple characters beginning with the character currently under the cursor. You must use Esc to stop the overwriting. |
5 | s Replaces the current character with the character you type. Afterward, you are left in the insert mode. |
6 | S Deletes the line the cursor is on and replaces it with the new text. After the new text is entered, vi remains in the insert mode. |
Copy and Paste Commands
You can copy lines or words from one place and then you can paste them at another place using the following commands −
Sr.No. | Command & Description |
---|---|
1 | yy Copies the current line. |
2 | yw Copies the current word from the character the lowercase w cursor is on, until the end of the word. |
3 | p Puts the copied text after the cursor. |
4 | P Puts the yanked text before the cursor. |
Advanced Commands
There are some advanced commands that simplify day-to-day editing and allow for more efficient use of vi −
Sr.No. | Command & Description |
---|---|
1 | J Joins the current line with the next one. A count of j commands join many lines. |
2 | << Shifts the current line to the left by one shift width. |
3 | >> Shifts the current line to the right by one shift width. |
4 | ~ Switches the case of the character under the cursor. |
5 | ^G Press Ctrl and G keys at the same time to show the current filename and the status. |
6 | U Restores the current line to the state it was in before the cursor entered the line. |
7 | u This helps undo the last change that was done in the file. Typing 'u' again will re-do the change. |
8 | J Joins the current line with the next one. A count joins that many lines. |
9 | :f Displays the current position in the file in % and the file name, the total number of file. |
10 | :f filename Renames the current file to filename. |
11 | :w filename Writes to file filename. |
12 | :e filename Opens another file with filename. |
13 | :cd dirname Changes the current working directory to dirname. |
14 | :e # Toggles between two open files. |
15 | :n In case you open multiple files using vi, use :n to go to the next file in the series. |
16 | :p In case you open multiple files using vi, use :p to go to the previous file in the series. |
17 | :N In case you open multiple files using vi, use :N to go to the previous file in the series. |
18 | :r file Reads file and inserts it after the current line. |
19 | :nr file Reads file and inserts it after the line n. |
Word and Character Searching
The vi editor has two kinds of searches: string and character. For a string search, the / and ? commands are used. When you start these commands, the command just typed will be shown on the last line of the screen, where you type the particular string to look for.
These two commands differ only in the direction where the search takes place −
The / command searches forwards (downwards) in the file.
The ? command searches backwards (upwards) in the file.
The n and N commands repeat the previous search command in the same or the opposite direction, respectively. Some characters have special meanings. These characters must be preceded by a backslash (\) to be included as part of the search expression.
Sr.No. | Character &Description |
---|---|
1 | ^ Searches at the beginning of the line (Use at the beginning of a search expression). |
2 | . Matches a single character. |
3 | * Matches zero or more of the previous character. |
4 | $ End of the line (Use at the end of the search expression). |
5 | [ Starts a set of matching or non-matching expressions. |
6 | < This is put in an expression escaped with the backslash to find the ending or the beginning of a word. |
7 | > This helps see the '<' character description above. |
The character search searches within one line to find a character entered after the command. The f and F commands search for a character on the current line only. f searches forwards and F searches backwards and the cursor moves to the position of the found character.
The t and T commands search for a character on the current line only, but for t, the cursor moves to the position before the character, and T searches the line backwards to the position after the character.
Set Commands
You can change the look and feel of your vi screen using the following :set commands. Once you are in the command mode, type :set followed by any of the following commands.
Sr.No. | Command & Description |
---|---|
1 | :set ic Ignores the case when searching |
2 | :set ai Sets autoindent |
3 | :set noai Unsets autoindent |
4 | :set nu Displays lines with line numbers on the left side |
5 | :set sw Sets the width of a software tabstop. For example, you would set a shift width of 4 with this command — :set sw = 4 |
6 | :set ws If wrapscan is set, and the word is not found at the bottom of the file, it will try searching for it at the beginning |
7 | :set wm If this option has a value greater than zero, the editor will automatically "word wrap". For example, to set the wrap margin to two characters, you would type this: :set wm = 2 |
8 | :set ro Changes file type to "read only" |
9 | :set term Prints terminal type |
10 | :set bf Discards control characters from input |
Running Commands
The vi has the capability to run commands from within the editor. To run a command, you only need to go to the command mode and type :! command.
For example, if you want to check whether a file exists before you try to save your file with that filename, you can type :! ls and you will see the output of ls on the screen.
You can press any key (or the command's escape sequence) to return to your vi session.
Replacing Text
The substitution command (:s/) enables you to quickly replace words or groups of words within your files. Following is the syntax to replace text −
:s/search/replace/g
le gsignifie globalement. Le résultat de cette commande est que toutes les occurrences sur la ligne du curseur sont modifiées.
Points importants à noter
Les points suivants contribueront à votre succès avec vi -
Vous devez être en mode commande pour utiliser les commandes. (Appuyez deux fois sur Echap à tout moment pour vous assurer que vous êtes en mode commande.)
Vous devez être prudent avec les commandes. Ceux-ci sont sensibles à la casse.
Vous devez être en mode insertion pour saisir du texte.
UNE Shellvous fournit une interface avec le système Unix. Il recueille vos entrées et exécute des programmes basés sur ces entrées. Lorsqu'un programme termine son exécution, il affiche la sortie de ce programme.
Shell est un environnement dans lequel nous pouvons exécuter nos commandes, programmes et scripts shell. Il existe différentes saveurs d'un shell, tout comme il existe différentes saveurs de systèmes d'exploitation. Chaque saveur de shell a son propre ensemble de commandes et de fonctions reconnues.
Invite Shell
L'invite, $, qui s'appelle le command prompt, est émis par le shell. Lorsque l'invite est affichée, vous pouvez taper une commande.
Shell lit votre entrée après avoir appuyé sur Enter. Il détermine la commande que vous souhaitez exécuter en regardant le premier mot de votre entrée. Un mot est un ensemble ininterrompu de caractères. Les espaces et les tabulations séparent les mots.
Voici un exemple simple de date commande, qui affiche la date et l'heure actuelles -
$date
Thu Jun 25 08:30:19 MST 2009
Vous pouvez personnaliser votre invite de commande à l'aide de la variable d'environnement PS1 expliquée dans le didacticiel Environnement.
Types de coquilles
Sous Unix, il existe deux principaux types de shells -
Bourne shell - Si vous utilisez un shell de type Bourne, le $ le caractère est l'invite par défaut.
C shell - Si vous utilisez un shell de type C, le caractère% est l'invite par défaut.
Le Bourne Shell comprend les sous-catégories suivantes -
- Coquille Bourne (sh)
- Coquille Korn (ksh)
- Bourne Again shell (bash)
- Shell POSIX (sh)
Les différents coques de type C suivent -
- Coquille C (csh)
- Coquille TENEX / TOPS C (tcsh)
Le shell Unix original a été écrit au milieu des années 1970 par Stephen R. Bourne alors qu'il était aux AT&T Bell Labs dans le New Jersey.
Bourne shell a été le premier shell à apparaître sur les systèmes Unix, il est donc appelé "le shell".
Bourne shell est généralement installé comme /bin/shsur la plupart des versions d'Unix. Pour cette raison, c'est le shell de choix pour écrire des scripts qui peuvent être utilisés sur différentes versions d'Unix.
Dans ce chapitre, nous allons couvrir la plupart des concepts Shell basés sur Borne Shell.
Scripts Shell
Le concept de base d'un script shell est une liste de commandes, qui sont répertoriées dans l'ordre d'exécution. Un bon script shell aura des commentaires, précédés de# signe, décrivant les étapes.
Il existe des tests conditionnels, tels que la valeur A est supérieure à la valeur B, des boucles nous permettant de parcourir des quantités massives de données, des fichiers pour lire et stocker des données et des variables pour lire et stocker des données, et le script peut inclure des fonctions.
Nous allons écrire de nombreux scripts dans les sections suivantes. Ce serait un simple fichier texte dans lequel nous placerions toutes nos commandes et plusieurs autres constructions requises qui indiquent à l'environnement shell ce qu'il faut faire et quand le faire.
Les scripts et les fonctions du shell sont tous deux interprétés. Cela signifie qu'ils ne sont pas compilés.
Exemple de script
Supposons que nous créons un test.shscénario. Notez que tous les scripts auraient le.shextension. Avant d'ajouter quoi que ce soit à votre script, vous devez alerter le système qu'un script shell est en cours de démarrage. Ceci est fait en utilisant leshebangconstruction. Par exemple -
#!/bin/sh
Cela indique au système que les commandes qui suivent doivent être exécutées par le shell Bourne. Cela s'appelle un shebang parce que le#le symbole est appelé un hachage, et le! le symbole est appelé un bang .
Pour créer un script contenant ces commandes, placez d'abord la ligne shebang puis ajoutez les commandes -
#!/bin/bash
pwd
ls
Commentaires Shell
Vous pouvez mettre vos commentaires dans votre script comme suit -
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
Enregistrez le contenu ci-dessus et rendez le script exécutable -
$chmod +x test.sh
Le script shell est maintenant prêt à être exécuté -
$./test.sh
Lors de l'exécution, vous recevrez le résultat suivant -
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note - Pour exécuter un programme disponible dans le répertoire courant, utilisez ./program_name
Scripts Shell étendus
Les scripts shell ont plusieurs constructions obligatoires qui indiquent à l'environnement shell quoi faire et quand le faire. Bien sûr, la plupart des scripts sont plus complexes que le précédent.
Le shell est, après tout, un véritable langage de programmation, complet avec des variables, des structures de contrôle, etc. Quelle que soit la complexité d'un script, il s'agit toujours d'une liste de commandes exécutées séquentiellement.
Le script suivant utilise le read commande qui prend l'entrée du clavier et l'affecte comme valeur de la variable PERSON et finalement l'imprime sur STDOUT.
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
Voici un exemple d'exécution du script -
$./test.sh What is your name? Zara Ali Hello, Zara Ali $
Dans ce chapitre, nous allons apprendre à utiliser les variables Shell sous Unix. Une variable est une chaîne de caractères à laquelle nous attribuons une valeur. La valeur attribuée peut être un nombre, du texte, un nom de fichier, un périphérique ou tout autre type de données.
Une variable n'est rien de plus qu'un pointeur vers les données réelles. Le shell vous permet de créer, d'affecter et de supprimer des variables.
Noms de variables
Le nom d'une variable ne peut contenir que des lettres (a à z ou A à Z), des chiffres (0 à 9) ou le caractère de soulignement (_).
Par convention, les variables shell Unix auront leurs noms en MAJUSCULES.
Les exemples suivants sont des noms de variables valides -
_ALI
TOKEN_A
VAR_1
VAR_2
Voici les exemples de noms de variables non valides -
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
La raison pour laquelle vous ne pouvez pas utiliser d'autres caractères tels que !, *, ou - est que ces caractères ont une signification particulière pour le shell.
Définition des variables
Les variables sont définies comme suit -
variable_name=variable_value
Par exemple -
NAME="Zara Ali"
L'exemple ci-dessus définit la variable NAME et lui assigne la valeur "Zara Ali". Les variables de ce type sont appeléesscalar variables. Une variable scalaire ne peut contenir qu'une seule valeur à la fois.
Shell vous permet de stocker toute valeur que vous souhaitez dans une variable. Par exemple -
VAR1="Zara Ali"
VAR2=100
Accéder aux valeurs
Pour accéder à la valeur stockée dans une variable, préfixez son nom avec le signe dollar ($) -
Par exemple, le script suivant accédera à la valeur de la variable définie NAME et l'imprimera sur STDOUT -
#!/bin/sh
NAME="Zara Ali"
echo $NAME
Le script ci-dessus produira la valeur suivante -
Zara Ali
Variables en lecture seule
Shell fournit un moyen de marquer des variables en lecture seule à l'aide de la commande en lecture seule. Une fois qu'une variable est marquée en lecture seule, sa valeur ne peut pas être modifiée.
Par exemple, le script suivant génère une erreur lors de la tentative de modification de la valeur de NAME -
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
Le script ci-dessus générera le résultat suivant -
/bin/sh: NAME: This variable is read only.
Désactiver les variables
La désactivation ou la suppression d'une variable ordonne au shell de supprimer la variable de la liste des variables qu'il suit. Une fois que vous avez désactivé une variable, vous ne pouvez pas accéder à la valeur stockée dans la variable.
Voici la syntaxe pour annuler la définition d'une variable définie à l'aide du unset commande -
unset variable_name
La commande ci-dessus annule la valeur d'une variable définie. Voici un exemple simple qui montre comment fonctionne la commande -
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
L'exemple ci-dessus n'imprime rien. Vous ne pouvez pas utiliser la commande unset pourunset variables marquées readonly.
Types de variables
Lorsqu'un shell est en cours d'exécution, trois principaux types de variables sont présents -
Local Variables- Une variable locale est une variable présente dans l'instance actuelle du shell. Il n'est pas disponible pour les programmes lancés par le shell. Ils sont définis à l'invite de commande.
Environment Variables- Une variable d'environnement est disponible pour tout processus enfant du shell. Certains programmes ont besoin de variables d'environnement pour fonctionner correctement. Habituellement, un script shell définit uniquement les variables d'environnement nécessaires aux programmes qu'il exécute.
Shell Variables- Une variable shell est une variable spéciale définie par le shell et requise par le shell pour fonctionner correctement. Certaines de ces variables sont des variables d'environnement tandis que d'autres sont des variables locales.
Dans ce chapitre, nous discuterons en détail des variables spéciales sous Unix. Dans l'un de nos chapitres précédents, nous avons compris comment être prudent lorsque nous utilisons certains caractères non alphanumériques dans les noms de variables. C'est parce que ces caractères sont utilisés dans les noms de variables Unix spéciales. Ces variables sont réservées à des fonctions spécifiques.
Par exemple, le $ le caractère représente le numéro d'identification du processus, ou PID, du shell actuel -
$echo $$
La commande ci-dessus écrit le PID du shell actuel -
29949
Le tableau suivant montre un certain nombre de variables spéciales que vous pouvez utiliser dans vos scripts shell -
Sr.No. | Variable et description |
---|---|
1 | $0 Le nom de fichier du script actuel. |
2 | $n Ces variables correspondent aux arguments avec lesquels un script a été appelé. Icin est un nombre décimal positif correspondant à la position d'un argument (le premier argument est $1, the second argument is $2, et ainsi de suite). |
3 | $# Le nombre d'arguments fournis à un script. |
4 | $* Tous les arguments sont entre guillemets. Si un script reçoit deux arguments,$* is equivalent to $1 $ 2. |
5 | $@ Tous les arguments sont individuellement entre guillemets. Si un script reçoit deux arguments,$@ is equivalent to $1 $ 2. |
6 | $? L'état de sortie de la dernière commande exécutée. |
sept | $$ Le numéro de processus du shell actuel. Pour les scripts shell, il s'agit de l'ID de processus sous lequel ils s'exécutent. |
8 | $! Le numéro de processus de la dernière commande d'arrière-plan. |
Arguments de ligne de commande
Les arguments de la ligne de commande $1, $2, $3, ...$9 sont des paramètres de position, avec $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9 comme arguments de la commande.
Le script suivant utilise diverses variables spéciales liées à la ligne de commande -
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
Voici un exemple d'exécution pour le script ci-dessus -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
Paramètres spéciaux $* and $@
Il existe des paramètres spéciaux qui permettent d'accéder à tous les arguments de ligne de commande à la fois. $* et $@ les deux agiront de la même manière à moins qu'ils ne soient entre guillemets, "".
Les deux paramètres spécifient les arguments de ligne de commande. Cependant, le "$*" special parameter takes the entire list as one argument with spaces between and the "$@ "paramètre spécial prend la liste entière et la sépare en arguments séparés.
Nous pouvons écrire le script shell comme indiqué ci-dessous pour traiter un nombre inconnu d'arguments de ligne de commande avec soit le $* or $@ paramètres spéciaux -
#!/bin/sh
for TOKEN in $* do echo $TOKEN
done
Voici un exemple d'exécution pour le script ci-dessus -
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - Ici do...done est une sorte de boucle qui sera abordée dans un tutoriel ultérieur.
État de sortie
le $? La variable représente l'état de sortie de la commande précédente.
L'état de sortie est une valeur numérique renvoyée par chaque commande une fois terminée. En règle générale, la plupart des commandes renvoient un statut de sortie de 0 si elles ont réussi et de 1 si elles ont échoué.
Certaines commandes renvoient des états de sortie supplémentaires pour des raisons particulières. Par exemple, certaines commandes différencient les types d'erreurs et renverront diverses valeurs de sortie en fonction du type spécifique de défaillance.
Voici l'exemple d'une commande réussie -
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
Dans ce chapitre, nous verrons comment utiliser les tableaux shell sous Unix. Une variable shell est suffisamment capable de contenir une seule valeur. Ces variables sont appelées variables scalaires.
Shell prend en charge un autre type de variable appelé array variable. Cela peut contenir plusieurs valeurs en même temps. Les tableaux fournissent une méthode de regroupement d'un ensemble de variables. Au lieu de créer un nouveau nom pour chaque variable requise, vous pouvez utiliser une seule variable de tableau qui stocke toutes les autres variables.
Toutes les règles de dénomination décrites pour les variables Shell seraient applicables lors de la dénomination des tableaux.
Définition des valeurs de tableau
La différence entre une variable de tableau et une variable scalaire peut être expliquée comme suit.
Supposons que vous essayez de représenter les noms de divers élèves sous forme d'un ensemble de variables. Chacune des variables individuelles est une variable scalaire comme suit -
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
Nous pouvons utiliser un seul tableau pour stocker tous les noms mentionnés ci-dessus. Voici la méthode la plus simple pour créer une variable de tableau. Cela permet d'attribuer une valeur à l'un de ses indices.
array_name[index]=value
Ici, nom_tableau est le nom du tableau, index est l'index de l'élément du tableau que vous souhaitez définir et valeur est la valeur que vous souhaitez définir pour cet élément.
À titre d'exemple, les commandes suivantes -
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
Si vous utilisez le ksh shell, voici la syntaxe d'initialisation du tableau -
set -A array_name value1 value2 ... valuen
Si vous utilisez le bash shell, voici la syntaxe d'initialisation du tableau -
array_name=(value1 ... valuen)
Accès aux valeurs de tableau
Après avoir défini une variable de tableau, vous y accédez comme suit -
${array_name[index]}
Ici, nom_tableau est le nom du tableau et index est l'index de la valeur à accéder. Voici un exemple pour comprendre le concept -
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
L'exemple ci-dessus générera le résultat suivant -
$./test.sh
First Index: Zara
Second Index: Qadir
Vous pouvez accéder à tous les éléments d'un tableau de l'une des manières suivantes:
${array_name[*]} ${array_name[@]}
Ici array_name est le nom du tableau qui vous intéresse. L'exemple suivant vous aidera à comprendre le concept -
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
L'exemple ci-dessus générera le résultat suivant -
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
Il existe différents opérateurs pris en charge par chaque shell. Nous discuterons en détail du shell Bourne (shell par défaut) dans ce chapitre.
Nous allons maintenant discuter des opérateurs suivants -
- Opérateurs arithmétiques
- Opérateurs relationnels
- Opérateurs booléens
- Opérateurs de chaîne
- Opérateurs de test de fichiers
Bourne shell n'avait à l'origine aucun mécanisme pour effectuer des opérations arithmétiques simples mais il utilise des programmes externes, non plus awk ou expr.
L'exemple suivant montre comment ajouter deux nombres -
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
Le script ci-dessus générera le résultat suivant -
Total value : 4
Les points suivants doivent être pris en compte lors de l'ajout -
Il doit y avoir des espaces entre les opérateurs et les expressions. Par exemple, 2 + 2 n'est pas correct; il doit être écrit 2 + 2.
L'expression complète doit être placée entre ‘ ‘, a appelé le backtick.
Opérateurs arithmétiques
Les opérateurs arithmétiques suivants sont pris en charge par Bourne Shell.
Supposons une variable a détient 10 et variable b détient 20 alors -
Afficher des exemples
Opérateur | La description | Exemple |
---|---|---|
+ (Ajout) | Ajoute des valeurs de chaque côté de l'opérateur | `expr $a + $b` donnera 30 |
- (Soustraction) | Soustrait l'opérande de droite de l'opérande de gauche | `expr $a - $b` donnera -10 |
* (Multiplication) | Multiplie les valeurs de chaque côté de l'opérateur | `expr $a \* $b` donnera 200 |
/ (Division) | Divise l'opérande de gauche par l'opérande de droite | `expr $b / $a` donnera 2 |
% (Module) | Divise l'opérande de gauche par l'opérande de droite et renvoie le reste | `expr $b % $a` donnera 0 |
= (Affectation) | Assigne l'opérande droit dans l'opérande gauche | a = $ b attribuerait la valeur de b dans a |
== (Égalité) | Compare deux nombres, si les deux sont identiques, alors renvoie vrai. | [$ a == $ b] renverrait false. |
! = (Pas l'égalité) | Compare deux nombres, si les deux sont différents, renvoie vrai. | [$ a! = $ b] renverrait vrai. |
Il est très important de comprendre que toutes les expressions conditionnelles doivent être entre des accolades carrées avec des espaces autour d'elles, par exemple [ $a == $b ] est correct alors que, [$a==$b] est incorrect.
Tous les calculs arithmétiques sont effectués en utilisant des entiers longs.
Opérateurs relationnels
Bourne Shell prend en charge les opérateurs relationnels suivants qui sont spécifiques aux valeurs numériques. Ces opérateurs ne fonctionnent pas pour les valeurs de chaîne, sauf si leur valeur est numérique.
Par exemple, les opérateurs suivants travailleront pour vérifier une relation entre 10 et 20 ainsi qu'entre "10" et "20" mais pas entre "dix" et "vingt".
Supposons une variable a détient 10 et variable b détient 20 alors -
Afficher des exemples
Opérateur | La description | Exemple |
---|---|---|
-eq | Vérifie si la valeur de deux opérandes est égale ou non; si oui, alors la condition devient vraie. | [$ a -eq $ b] n'est pas vrai. |
-ne | Vérifie si la valeur de deux opérandes est égale ou non; si les valeurs ne sont pas égales, la condition devient vraie. | [$ a -ne $ b] est vrai. |
-gt | Vérifie si la valeur de l'opérande gauche est supérieure à la valeur de l'opérande droit; si oui, alors la condition devient vraie. | [$ a -gt $ b] n'est pas vrai. |
-lt | Vérifie si la valeur de l'opérande gauche est inférieure à la valeur de l'opérande droit; si oui, alors la condition devient vraie. | [$ a -lt $ b] est vrai. |
-ge | Vérifie si la valeur de l'opérande gauche est supérieure ou égale à la valeur de l'opérande droit; si oui, alors la condition devient vraie. | [$ a -ge $ b] n'est pas vrai. |
-le | Vérifie si la valeur de l'opérande gauche est inférieure ou égale à la valeur de l'opérande droit; si oui, alors la condition devient vraie. | [$ a -le $ b] est vrai. |
Il est très important de comprendre que toutes les expressions conditionnelles doivent être placées entre des accolades carrées avec des espaces autour d'elles. Par exemple,[ $a <= $b ] est correct alors que, [$a <= $b] est incorrect.
Opérateurs booléens
Les opérateurs booléens suivants sont pris en charge par Bourne Shell.
Supposons une variable a détient 10 et variable b détient 20 alors -
Afficher des exemples
Opérateur | La description | Exemple |
---|---|---|
! | C'est une négation logique. Cela inverse une condition vraie en une condition fausse et vice versa. | [! false] est vrai. |
-o | C'est logique OR. Si l'un des opérandes est vrai, la condition devient vraie. | [$ a -lt 20 -o $ b -gt 100] est vrai. |
-a | C'est logique AND. Si les deux opérandes sont vrais, la condition devient vraie sinon fausse. | [$ a -lt 20 -a $ b -gt 100] est faux. |
Opérateurs de chaîne
Les opérateurs de chaîne suivants sont pris en charge par Bourne Shell.
Supposons une variable a contient "abc" et variable b détient "efg" alors -
Afficher des exemples
Opérateur | La description | Exemple |
---|---|---|
= | Vérifie si la valeur de deux opérandes est égale ou non; si oui, alors la condition devient vraie. | [$ a = $ b] n'est pas vrai. |
!= | Vérifie si la valeur de deux opérandes est égale ou non; si les valeurs ne sont pas égales, la condition devient vraie. | [$ a! = $ b] est vrai. |
-z | Vérifie si la taille de l'opérande de chaîne donnée est égale à zéro; s'il a une longueur nulle, alors il renvoie vrai. | [-z $ a] n'est pas vrai. |
-n | Vérifie si la taille de l'opérande de chaîne donnée est différente de zéro; si sa longueur est différente de zéro, alors elle renvoie true. | [-n $ a] n'est pas faux. |
str | Vérifie si strn'est pas la chaîne vide; s'il est vide, il renvoie false. | [$ a] n'est pas faux. |
Opérateurs de test de fichiers
Nous avons quelques opérateurs qui peuvent être utilisés pour tester diverses propriétés associées à un fichier Unix.
Supposons une variable file contient un nom de fichier existant "test" dont la taille est de 100 octets et a read, write et execute permission sur -
Afficher des exemples
Opérateur | La description | Exemple |
---|---|---|
-b file | Vérifie si le fichier est un fichier spécial de bloc; si oui, alors la condition devient vraie. | [-b $ fichier] est faux. |
-c file | Vérifie si le fichier est un fichier spécial de caractères; si oui, alors la condition devient vraie. | [-c $ fichier] est faux. |
-d file | Vérifie si le fichier est un répertoire; si oui, alors la condition devient vraie. | [-d $ fichier] n'est pas vrai. |
-f file | Vérifie si le fichier est un fichier ordinaire par opposition à un répertoire ou un fichier spécial; si oui, alors la condition devient vraie. | [-f $ fichier] est vrai. |
-g file | Vérifie si le fichier a son ensemble de bits d'ID de groupe (SGID); si oui, alors la condition devient vraie. | [-g $ fichier] est faux. |
-k file | Vérifie si le fichier a son bit collant défini; si oui, alors la condition devient vraie. | [-k $ fichier] est faux. |
-p file | Vérifie si le fichier est un tube nommé; si oui, alors la condition devient vraie. | [-p $ fichier] est faux. |
-t file | Vérifie si le descripteur de fichier est ouvert et associé à un terminal; si oui, alors la condition devient vraie. | [-t $ fichier] est faux. |
-u file | Vérifie si le fichier a son bit Set User ID (SUID) défini; si oui, alors la condition devient vraie. | [-u $ fichier] est faux. |
-r file | Vérifie si le fichier est lisible; si oui, alors la condition devient vraie. | [-r $ fichier] est vrai. |
-w file | Vérifie si le fichier est accessible en écriture; si oui, alors la condition devient vraie. | [-w $ fichier] est vrai. |
-x file | Vérifie si le fichier est exécutable; si oui, alors la condition devient vraie. | [-x $ fichier] est vrai. |
-s file | Vérifie si le fichier a une taille supérieure à 0; si oui, alors la condition devient vraie. | [-s $ fichier] est vrai. |
-e file | Vérifie si le fichier existe; est vrai même si le fichier est un répertoire mais existe. | [-e $ fichier] est vrai. |
Opérateurs Shell C
Le lien suivant vous donnera une brève idée sur les opérateurs C Shell -
Opérateurs Shell C
Opérateurs Korn Shell
Le lien suivant vous aide à comprendre les opérateurs Korn Shell -
Opérateurs Korn Shell
Dans ce chapitre, nous allons comprendre la prise de décision du shell sous Unix. Lors de l'écriture d'un script shell, il peut y avoir une situation où vous devez adopter un chemin parmi les deux chemins donnés. Vous devez donc utiliser des instructions conditionnelles qui permettent à votre programme de prendre les bonnes décisions et d'exécuter les bonnes actions.
Unix Shell prend en charge les instructions conditionnelles qui sont utilisées pour effectuer différentes actions basées sur différentes conditions. Nous allons maintenant comprendre ici deux déclarations décisionnelles -
le if...else déclaration
le case...esac déclaration
Les instructions if ... else
Les instructions If else sont des déclarations de prise de décision utiles qui peuvent être utilisées pour sélectionner une option dans un ensemble d'options donné.
Unix Shell prend en charge les formes suivantes de if…else déclaration -
- if ... instruction fi
- if ... else ... déclaration fi
- if ... elif ... else ... instruction fi
La plupart des instructions if vérifient les relations à l'aide d'opérateurs relationnels décrits dans le chapitre précédent.
Le cas ... Déclaration esac
Vous pouvez utiliser plusieurs if...elifinstructions pour effectuer une branche multi-voies. Cependant, ce n'est pas toujours la meilleure solution, surtout lorsque toutes les branches dépendent de la valeur d'une seule variable.
Unix Shell prend en charge case...esac instruction qui gère exactement cette situation, et il le fait plus efficacement que répété if...elif déclarations.
Il n'y a qu'une seule forme de case...esac déclaration qui a été décrite en détail ici -
- case ... déclaration esac
le case...esac dans le shell Unix est très similaire à la switch...case déclaration que nous avons dans d'autres langages de programmation comme C ou C++ et PERL, etc.
Dans ce chapitre, nous aborderons les boucles shell sous Unix. Une boucle est un outil de programmation puissant qui vous permet d'exécuter un ensemble de commandes à plusieurs reprises. Dans ce chapitre, nous examinerons les types de boucles suivants disponibles pour les programmeurs shell -
- La boucle while
- La boucle for
- La boucle jusqu'à
- La boucle de sélection
Vous utiliserez différentes boucles en fonction de la situation. Par exemple, lewhileloop exécute les commandes données jusqu'à ce que la condition donnée reste vraie; launtil la boucle s'exécute jusqu'à ce qu'une condition donnée devienne vraie.
Une fois que vous avez une bonne pratique de programmation, vous acquerrez l'expertise et, par conséquent, commencez à utiliser la boucle appropriée en fonction de la situation. Ici,while et for les boucles sont disponibles dans la plupart des autres langages de programmation comme C, C++ et PERL, etc.
Boucles d'imbrication
Toutes les boucles prennent en charge le concept d'imbrication, ce qui signifie que vous pouvez placer une boucle dans une autre boucle similaire ou différentes. Cette imbrication peut aller jusqu'à un nombre illimité de fois en fonction de vos besoins.
Voici un exemple d'imbrication whileboucle. Les autres boucles peuvent être imbriquées en fonction des besoins de programmation de la même manière -
Imbrication pendant les boucles
Il est possible d'utiliser une boucle while dans le cadre du corps d'une autre boucle while.
Syntaxe
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
Exemple
Voici un exemple simple d'imbrication de boucle. Ajoutons une autre boucle de compte à rebours à l'intérieur de la boucle que vous avez utilisée pour compter jusqu'à neuf -
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
b=`expr $b - 1` done echo a=`expr $a + 1`
done
Cela produira le résultat suivant. Il est important de noter commentecho -nfonctionne ici. Ici-n L'option permet à l'écho d'éviter d'imprimer un nouveau caractère de ligne.
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
Dans ce chapitre, nous aborderons le contrôle des boucles shell sous Unix. Jusqu'à présent, vous avez envisagé de créer des boucles et de travailler avec des boucles pour accomplir différentes tâches. Parfois, vous devez arrêter une boucle ou sauter des itérations de la boucle.
Dans ce chapitre, nous allons apprendre les deux instructions suivantes qui sont utilisées pour contrôler les boucles du shell -
le break déclaration
le continue déclaration
La boucle infinie
Toutes les boucles ont une durée de vie limitée et elles sortent une fois que la condition est fausse ou vraie selon la boucle.
Une boucle peut continuer indéfiniment si la condition requise n'est pas remplie. Une boucle qui s'exécute indéfiniment sans se terminer s'exécute un nombre infini de fois. Pour cette raison, de telles boucles sont appelées boucles infinies.
Exemple
Voici un exemple simple qui utilise le while boucle pour afficher les nombres de zéro à neuf -
#!/bin/sh
a=10
until [ $a -lt 10 ] do echo $a
a=`expr $a + 1`
done
Cette boucle continue pour toujours car a est toujours greater than ou equal to 10 et ce n'est jamais moins de 10.
La déclaration de rupture
le breakL'instruction est utilisée pour terminer l'exécution de la boucle entière, après avoir terminé l'exécution de toutes les lignes de code jusqu'à l'instruction break. Il passe ensuite au code après la fin de la boucle.
Syntaxe
Le suivant break instruction est utilisée pour sortir d'une boucle -
break
La commande break peut également être utilisée pour sortir d'une boucle imbriquée en utilisant ce format -
break n
Ici n spécifie le nth boucle englobante à la sortie de.
Exemple
Voici un exemple simple qui montre que la boucle se termine dès que a devient 5 -
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
Lors de l'exécution, vous recevrez le résultat suivant -
0
1
2
3
4
5
Voici un exemple simple de boucle for imbriquée. Ce script sort des deux boucles sivar1 equals 2 et var2 equals 0 -
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
fi
done
done
Lors de l'exécution, vous recevrez le résultat suivant. Dans la boucle interne, vous avez une commande break avec l'argument 2. Cela indique que si une condition est remplie, vous devez sortir de la boucle externe et finalement de la boucle interne également.
1 0
1 5
La déclaration continue
le continue est similaire à la break commande, sauf que cela provoque la sortie de l'itération actuelle de la boucle, plutôt que la boucle entière.
Cette instruction est utile lorsqu'une erreur s'est produite mais que vous souhaitez essayer d'exécuter la prochaine itération de la boucle.
Syntaxe
continue
Comme avec l'instruction break, un argument entier peut être donné à la commande continue pour ignorer les commandes des boucles imbriquées.
continue n
Ici n spécifie le nth boucle englobante à partir de laquelle continuer.
Exemple
La boucle suivante utilise le continue instruction qui revient de l'instruction continue et commence le traitement de l'instruction suivante -
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2` if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
Lors de l'exécution, vous recevrez le résultat suivant -
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Qu'est-ce que la substitution?
Le shell effectue une substitution lorsqu'il rencontre une expression contenant un ou plusieurs caractères spéciaux.
Exemple
Ici, la valeur d'impression de la variable est remplacée par sa valeur. En même temps,"\n" est remplacé par une nouvelle ligne -
#!/bin/sh
a=10
echo -e "Value of a is $a \n"
Vous recevrez le résultat suivant. Ici le-e L'option permet d'interpréter les échappements de backslash.
Value of a is 10
Voici le résultat sans -e option -
Value of a is 10\n
Voici les séquences d'échappement suivantes qui peuvent être utilisées dans la commande echo -
Sr.No. | Évasion et description |
---|---|
1 | \\ barre oblique inverse |
2 | \a alerte (BEL) |
3 | \b retour arrière |
4 | \c supprimer la nouvelle ligne de fin |
5 | \f flux de formulaire |
6 | \n nouvelle ligne |
sept | \r retour chariot |
8 | \t onglet horizontal |
9 | \v onglet vertical |
Vous pouvez utiliser le -E option pour désactiver l'interprétation des échappements de la barre oblique inverse (par défaut).
Vous pouvez utiliser le -n option pour désactiver l'insertion d'une nouvelle ligne.
Substitution de commande
La substitution de commandes est le mécanisme par lequel le shell exécute un ensemble donné de commandes, puis substitue leur sortie à la place des commandes.
Syntaxe
La substitution de commande est effectuée lorsqu'une commande est donnée comme -
`command`
Lorsque vous effectuez la substitution de commande, assurez-vous d'utiliser le guillemet arrière et non le caractère guillemet simple.
Exemple
La substitution de commande est généralement utilisée pour affecter la sortie d'une commande à une variable. Chacun des exemples suivants illustre la substitution de commande -
#!/bin/sh
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"
Lors de l'exécution, vous recevrez le résultat suivant -
Date is Thu Jul 2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul 2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
Substitution de variable
La substitution de variable permet au programmeur shell de manipuler la valeur d'une variable en fonction de son état.
Voici le tableau suivant pour toutes les substitutions possibles -
Sr.No. | Forme et description |
---|---|
1 | ${var} Remplacez la valeur de var . |
2 | ${var:-word} Si var est nul ou non défini, mot est remplacé parvar. La valeur de var ne change pas. |
3 | ${var:=word} If var is null or unset, var is set to the value of word. |
4 | ${var:?message} If var is null or unset, message is printed to standard error. This checks that variables are set correctly. |
5 | ${var:+word} If var is set, word is substituted for var. The value of var does not change. |
Example
Following is the example to show various states of the above substitution −
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
Upon execution, you will receive the following result −
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
In this chapter, we will discuss in detail about the Shell quoting mechanisms. We will start by discussing the metacharacters.
The Metacharacters
Unix Shell provides various metacharacters which have special meaning while using them in any Shell Script and causes termination of a word unless quoted.
For example, ? matches with a single character while listing files in a directory and an * matches more than one character. Here is a list of most of the shell special characters (also called metacharacters) −
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
A character may be quoted (i.e., made to stand for itself) by preceding it with a \.
Example
Following example shows how to print a * or a ? −
#!/bin/sh
echo Hello; Word
Upon execution, you will receive the following result −
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Let us now try using a quoted character −
#!/bin/sh
echo Hello\; Word
Upon execution, you will receive the following result −
Hello; Word
The $ sign is one of the metacharacters, so it must be quoted to avoid special handling by the shell −
#!/bin/sh
echo "I have \$1200"
Upon execution, you will receive the following result −
I have $1200
The following table lists the four forms of quoting −
Sr.No. | Quoting & Description |
---|---|
1 | Single quote All special characters between these quotes lose their special meaning. |
2 | Double quote Most special characters between these quotes lose their special meaning with these exceptions −
|
3 | Backslash Any character immediately following the backslash loses its special meaning. |
4 | Back quote Anything in between back quotes would be treated as a command and would be executed. |
The Single Quotes
Consider an echo command that contains many special shell characters −
echo <-$1500.**>; (update?) [y|n]
Putting a backslash in front of each special character is tedious and makes the line difficult to read −
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
There is an easy way to quote a large group of characters. Put a single quote (') at the beginning and at the end of the string −
echo '<-$1500.**>; (update?) [y|n]'
Characters within single quotes are quoted just as if a backslash is in front of each character. With this, the echo command displays in a proper way.
If a single quote appears within a string to be output, you should not put the whole string within single quotes instead you should precede that using a backslash (\) as follows −
echo 'It\'s Shell Programming
The Double Quotes
Try to execute the following shell script. This shell script makes use of single quote −
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Upon execution, you will receive the following result −
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
This is not what had to be displayed. It is obvious that single quotes prevent variable substitution. If you want to substitute variable values and to make inverted commas work as expected, then you would need to put your commands in double quotes as follows −
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Upon execution, you will receive the following result −
ZARA owes <-$1500.**>; [ as of (07/02) ]
Double quotes take away the special meaning of all characters except the following −
$ for parameter substitution
Backquotes for command substitution
\$ to enable literal dollar signs
\` to enable literal backquotes
\" to enable embedded double quotes
\\ to enable embedded backslashes
All other \ characters are literal (not special)
Characters within single quotes are quoted just as if a backslash is in front of each character. This helps the echo command display properly.
If a single quote appears within a string to be output, you should not put the whole string within single quotes instead you should precede that using a backslash (\) as follows −
echo 'It\'s Shell Programming'
The Backquotes
Putting any Shell command in between backquotes executes the command.
Syntax
Here is the simple syntax to put any Shell command in between backquotes −
var=`command`
Example
The date command is executed in the following example and the produced result is stored in DATA variable.
DATE=`date`
echo "Current Date: $DATE"
Upon execution, you will receive the following result −
Current Date: Thu Jul 2 05:28:45 MST 2009
In this chapter, we will discuss in detail about the Shell input/output redirections. Most Unix system commands take input from your terminal and send the resulting output back to your terminal. A command normally reads its input from the standard input, which happens to be your terminal by default. Similarly, a command normally writes its output to standard output, which is again your terminal by default.
Output Redirection
The output from a command normally intended for standard output can be easily diverted to a file instead. This capability is known as output redirection.
If the notation > file is appended to any command that normally writes its output to standard output, the output of that command will be written to file instead of your terminal.
Check the following who command which redirects the complete output of the command in the users file.
$ who > users
Notice that no output appears at the terminal. This is because the output has been redirected from the default standard output device (the terminal) into the specified file. You can check the users file for the complete content −
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
If a command has its output redirected to a file and the file already contains some data, that data will be lost. Consider the following example −
$ echo line 1 > users
$ cat users line 1 $
You can use >> operator to append the output in an existing file as follows −
$ echo line 2 >> users $ cat users
line 1
line 2
$
Input Redirection
Just as the output of a command can be redirected to a file, so can the input of a command be redirected from a file. As the greater-than character > is used for output redirection, the less-than character < is used to redirect the input of a command.
The commands that normally take their input from the standard input can have their input redirected from a file in this manner. For example, to count the number of lines in the file users generated above, you can execute the command as follows −
$ wc -l users
2 users
$
Upon execution, you will receive the following output. You can count the number of lines in the file by redirecting the standard input of the wc command from the file users −
$ wc -l < users
2
$
Note that there is a difference in the output produced by the two forms of the wc command. In the first case, the name of the file users is listed with the line count; in the second case, it is not.
In the first case, wc knows that it is reading its input from the file users. In the second case, it only knows that it is reading its input from standard input so it does not display file name.
Here Document
UNE here document est utilisé pour rediriger l'entrée dans un script ou un programme shell interactif.
Nous pouvons exécuter un programme interactif dans un script shell sans action de l'utilisateur en fournissant l'entrée requise pour le programme interactif ou le script shell interactif.
La forme générale d'un here le document est -
command << delimiter
document
delimiter
Ici, le shell interprète le <<opérateur en tant qu'instruction pour lire l'entrée jusqu'à ce qu'il trouve une ligne contenant le délimiteur spécifié. Toutes les lignes d'entrée jusqu'à la ligne contenant le délimiteur sont ensuite introduites dans l'entrée standard de la commande.
Le délimiteur indique au shell que le herele document est terminé. Sans cela, le shell continue de lire l'entrée pour toujours. Le délimiteur doit être un mot unique qui ne contient ni espaces ni tabulations.
Voici l'entrée de la commande wc -l pour compter le nombre total de lignes -
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
Vous pouvez utiliser le here document pour imprimer plusieurs lignes en utilisant votre script comme suit -
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
Lors de l'exécution, vous recevrez le résultat suivant -
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
Le script suivant exécute une session avec le vi éditeur de texte et enregistre l'entrée dans le fichier test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
Si vous exécutez ce script avec vim agissant en tant que vi, vous verrez probablement une sortie comme celle-ci -
$ sh test.sh Vim: Warning: Input is not from a terminal $
Après avoir exécuté le script, vous devriez voir ce qui suit ajouté au fichier test.txt -
$ cat test.txt This file was created automatically from a shell script $
Supprimer la sortie
Parfois, vous devrez exécuter une commande, mais vous ne voulez pas que la sortie s'affiche à l'écran. Dans de tels cas, vous pouvez supprimer la sortie en la redirigeant vers le fichier/dev/null -
$ command > /dev/null
Ici, commande est le nom de la commande que vous souhaitez exécuter. Le fichier/dev/null est un fichier spécial qui rejette automatiquement toutes ses entrées.
Pour ignorer à la fois la sortie d'une commande et sa sortie d'erreur, utilisez la redirection standard pour rediriger STDERR à STDOUT -
$ command > /dev/null 2>&1
Ici 2 représente STDERR et 1 représente STDOUT. Vous pouvez afficher un message sur STDERR en redirigeant STDOUT vers STDERR comme suit -
$ echo message 1>&2
Commandes de redirection
Voici une liste complète des commandes que vous pouvez utiliser pour la redirection -
Sr.No. | Commande et description |
---|---|
1 | pgm > file La sortie de pgm est redirigée vers le fichier |
2 | pgm < file Le programme pgm lit son entrée à partir d'un fichier |
3 | pgm >> file La sortie de pgm est ajoutée au fichier |
4 | n > file Sortie du flux avec descripteur n redirigé vers le fichier |
5 | n >> file Sortie du flux avec descripteur n ajouté au dossier |
6 | n >& m Fusionne la sortie du flux n avec stream m |
sept | n <& m Fusionne l'entrée du flux n avec stream m |
8 | << tag L'entrée standard vient d'ici à la balise suivante en début de ligne |
9 | | Prend la sortie d'un programme ou processus et l'envoie à un autre |
Notez que le descripteur de fichier 0 est normalement une entrée standard (STDIN), 1 est la sortie standard (STDOUT), et 2 est la sortie d'erreur standard (STDERR).
Dans ce chapitre, nous discuterons en détail des fonctions du shell. Les fonctions vous permettent de décomposer la fonctionnalité globale d'un script en sous-sections logiques plus petites, qui peuvent ensuite être appelées à effectuer leurs tâches individuelles en cas de besoin.
Utiliser des fonctions pour effectuer des tâches répétitives est un excellent moyen de créer code reuse. C'est une partie importante des principes modernes de programmation orientée objet.
Les fonctions du shell sont similaires aux sous-programmes, procédures et fonctions dans d'autres langages de programmation.
Créer des fonctions
Pour déclarer une fonction, utilisez simplement la syntaxe suivante -
function_name () {
list of commands
}
Le nom de votre fonction est function_name, et c'est ce que vous utiliserez pour l'appeler ailleurs dans vos scripts. Le nom de la fonction doit être suivi de parenthèses, suivi d'une liste de commandes entre accolades.
Exemple
L'exemple suivant montre l'utilisation de la fonction -
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
Lors de l'exécution, vous recevrez la sortie suivante -
$./test.sh
Hello World
Passer des paramètres à une fonction
Vous pouvez définir une fonction qui acceptera des paramètres lors de l'appel de la fonction. Ces paramètres seraient représentés par$1, $2 etc.
Voici un exemple où nous passons deux paramètres Zara et Ali , puis nous capturons et imprimons ces paramètres dans la fonction.
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
Lors de l'exécution, vous recevrez le résultat suivant -
$./test.sh
Hello World Zara Ali
Renvoyer des valeurs à partir de fonctions
Si vous exécutez un exit commande depuis l'intérieur d'une fonction, son effet n'est pas seulement de terminer l'exécution de la fonction mais aussi du programme shell qui a appelé la fonction.
Si vous souhaitez simplement terminer l'exécution de la fonction, il existe un moyen de sortir d'une fonction définie.
En fonction de la situation, vous pouvez renvoyer n'importe quelle valeur de votre fonction en utilisant le return commande dont la syntaxe est la suivante -
return code
Ici code peut être tout ce que vous choisissez ici, mais vous devez évidemment choisir quelque chose qui est significatif ou utile dans le contexte de votre script dans son ensemble.
Exemple
La fonction suivante renvoie une valeur 10 -
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?
echo "Return value is $ret"
Lors de l'exécution, vous recevrez le résultat suivant -
$./test.sh
Hello World Zara Ali
Return value is 10
Fonctions imbriquées
L'une des caractéristiques les plus intéressantes des fonctions est qu'elles peuvent s'appeler elles-mêmes ainsi que d'autres fonctions. Une fonction qui s'appelle elle-même est appeléerecursive function.
L'exemple suivant montre l'imbrication de deux fonctions -
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
Lors de l'exécution, vous recevrez le résultat suivant -
This is the first function speaking...
This is now the second function speaking...
Appel de fonction depuis l'invite
Vous pouvez mettre des définitions pour les fonctions couramment utilisées dans votre .profile. Ces définitions seront disponibles chaque fois que vous vous connecterez et vous pourrez les utiliser à l'invite de commande.
Vous pouvez également regrouper les définitions dans un fichier, par exemple test.sh, puis exécutez le fichier dans le shell actuel en tapant -
$. test.sh
Cela a pour effet de provoquer des fonctions définies à l'intérieur test.sh à lire et à définir dans le shell courant comme suit -
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
Pour supprimer la définition d'une fonction du shell, utilisez la commande unset avec le .foption. Cette commande est également utilisée pour supprimer la définition d'une variable dans le shell.
$ unset -f function_name
Toutes les commandes Unix sont livrées avec un certain nombre d'options facultatives et obligatoires. Il est très courant d'oublier la syntaxe complète de ces commandes.
Parce que personne ne peut se souvenir de chaque commande Unix et de toutes ses options, nous avons une aide en ligne disponible pour atténuer ce droit à partir du moment où Unix était à son stade de développement.
La version Unix de Help files sont appelés man pages. S'il existe un nom de commande et que vous ne savez pas comment l'utiliser, les pages de manuel vous aident à chaque étape.
Syntaxe
Voici la commande simple qui vous aide à obtenir les détails de toute commande Unix tout en travaillant avec le système -
$man command
Exemple
Supposons qu'une commande vous oblige à obtenir de l'aide; suppose que tu veux savoirpwd alors vous devez simplement utiliser la commande suivante -
$man pwd
La commande ci-dessus vous aide avec les informations complètes sur le pwdcommander. Essayez-le vous-même à l'invite de commande pour obtenir plus de détails.
Vous pouvez obtenir des détails complets sur man commande elle-même en utilisant la commande suivante -
$man man
Sections de la page man
Les pages de manuel sont généralement divisées en sections, qui varient généralement en fonction des préférences de l'auteur de la page de manuel. Le tableau suivant répertorie certaines sections courantes -
Sr.No. | Section et description |
---|---|
1 | NAME Nom de la commande |
2 | SYNOPSIS Paramètres généraux d'utilisation de la commande |
3 | DESCRIPTION Décrit ce que fait la commande |
4 | OPTIONS Décrit tous les arguments ou options de la commande |
5 | SEE ALSO Répertorie les autres commandes qui sont directement liées à la commande dans la page de manuel ou qui ressemblent étroitement à ses fonctionnalités |
6 | BUGS Explique tous les problèmes ou bogues connus qui existent avec la commande ou sa sortie |
sept | EXAMPLES Exemples d'utilisation courants qui donnent au lecteur une idée de la façon dont la commande peut être utilisée |
8 | AUTHORS L'auteur de la page de manuel / de la commande |
Pour résumer, les pages de manuel sont une ressource vitale et la première voie de recherche lorsque vous avez besoin d'informations sur des commandes ou des fichiers dans un système Unix.
Commandes Shell utiles
Le lien suivant vous donne une liste des commandes Unix Shell les plus importantes et les plus fréquemment utilisées.
Si vous ne savez pas comment utiliser une commande, utilisez la page de manuel pour obtenir des détails complets sur la commande.
Voici la liste de Unix Shell - Commandes utiles
Dans ce chapitre, nous discuterons en détail des expressions régulières avec SED sous Unix.
Une expression régulière est une chaîne qui peut être utilisée pour décrire plusieurs séquences de caractères. Les expressions régulières sont utilisées par plusieurs commandes Unix différentes, notammented, sed, awk, grep, et dans une mesure plus limitée, vi.
Ici SED signifie stream editor. Cet éditeur orienté flux a été créé exclusivement pour l'exécution de scripts. Ainsi, toute l'entrée que vous y introduisez passe à travers et va à STDOUT et cela ne change pas le fichier d'entrée.
Invoquer sed
Avant de commencer, assurons-nous d'avoir une copie locale de /etc/passwd fichier texte avec lequel travailler sed.
Comme mentionné précédemment, sed peut être appelé en lui envoyant des données via un tube comme suit -
$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression = script
...............................
le cat la commande vide le contenu de /etc/passwd à sedà travers le tuyau dans l'espace de modèle de sed. L'espace de motif est le tampon de travail interne utilisé par sed pour ses opérations.
La syntaxe générale sed
Voici la syntaxe générale de sed -
/pattern/action
Ici, pattern est une expression régulière, et actionest l'une des commandes données dans le tableau suivant. Sipattern est omis, action est effectuée pour chaque ligne comme nous l'avons vu ci-dessus.
La barre oblique (/) qui entoure le motif est obligatoire car elle est utilisée comme délimiteur.
Sr.No. | Gamme et description |
---|---|
1 | p Imprime la ligne |
2 | d Supprime la ligne |
3 | s/pattern1/pattern2/ Remplace la première occurrence de pattern1 par pattern2 |
Suppression de toutes les lignes avec sed
Nous allons maintenant comprendre comment supprimer toutes les lignes avec sed. Invoquez à nouveau sed; mais le sed est maintenant censé utiliser leediting command delete line, indiqué par la lettre unique d -
$ cat /etc/passwd | sed 'd' $
Au lieu d'appeler sed en lui envoyant un fichier via un tube, le sed peut être invité à lire les données d'un fichier, comme dans l'exemple suivant.
La commande suivante fait exactement la même chose que dans l'exemple précédent, sans la commande cat -
$ sed -e 'd' /etc/passwd $
Les adresses sed
Le sed prend également en charge les adresses. Les adresses sont soit des emplacements particuliers dans un fichier, soit une plage dans laquelle une commande d'édition particulière doit être appliquée. Lorsque le sed ne rencontre aucune adresse, il effectue ses opérations sur chaque ligne du fichier.
La commande suivante ajoute une adresse de base à la commande sed que vous avez utilisée -
$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
Notez que le numéro 1 est ajouté avant le delete editcommander. Cela demande au sed d'exécuter la commande d'édition sur la première ligne du fichier. Dans cet exemple, le sed supprimera la première ligne de/etc/password et imprimez le reste du fichier.
Les gammes d'adresses sed
Nous allons maintenant comprendre comment travailler avec the sed address ranges. Alors que faire si vous souhaitez supprimer plus d'une ligne d'un fichier? Vous pouvez spécifier une plage d'adresses avec sed comme suit -
$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
La commande ci-dessus sera appliquée sur toutes les lignes de 1 à 5. Cela supprime les cinq premières lignes.
Essayez les plages d'adresses suivantes -
Sr.No. | Gamme et description |
---|---|
1 | '4,10d' Les lignes à partir de la 4 e jusqu'à ce que le 10 e sont supprimés |
2 | '10,4d' Seule la 10 e ligne est supprimée, car le sed ne fonctionne pas en sens inverse |
3 | '4,+5d' Cela correspond à la ligne 4 du fichier, supprime cette ligne, continue de supprimer les cinq lignes suivantes, puis cesse sa suppression et imprime le reste |
4 | '2,5!d' Cela supprime tout sauf à partir de la 2 ème à la 5 ème ligne |
5 | '1~3d' Cela supprime la première ligne, passe sur les trois lignes suivantes, puis supprime la quatrième ligne. Sed continue d'appliquer ce modèle jusqu'à la fin du fichier. |
6 | '2~2d' Cela indique à sed de supprimer la deuxième ligne, de passer à la ligne suivante, de supprimer la ligne suivante et de répéter jusqu'à ce que la fin du fichier soit atteinte |
sept | '4,10p' Les lignes à partir de 4 ème au 10 ème sont imprimées |
8 | '4,d' Cela génère l'erreur de syntaxe |
9 | ',10d' Cela générerait également une erreur de syntaxe |
Note - Lors de l'utilisation du p action, vous devez utiliser le -noption pour éviter la répétition de l'impression de ligne. Vérifiez la différence entre les deux commandes suivantes -
$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'
La commande de substitution
La commande de substitution, désignée par s, remplacera toute chaîne que vous spécifiez par toute autre chaîne que vous spécifiez.
Pour remplacer une chaîne par une autre, le sed doit avoir les informations sur la fin de la première chaîne et le début de la chaîne de substitution. Pour cela, nous procédons à la réservation des deux chaînes avec la barre oblique (/) personnage.
La commande suivante remplace la première occurrence sur une ligne de la chaîne root avec la ficelle amrood.
$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................
Il est très important de noter que sed ne remplace que la première occurrence sur une ligne. Si la racine de la chaîne apparaît plus d'une fois sur une ligne, seule la première correspondance sera remplacée.
Pour que le sed effectue une substitution globale, ajoutez la lettre g à la fin de la commande comme suit -
$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................
Drapeaux de substitution
Il existe un certain nombre d'autres indicateurs utiles qui peuvent être passés en plus du g et vous pouvez en spécifier plusieurs à la fois.
Sr.No. | Drapeau et description |
---|---|
1 | g Remplace tous les matchs, pas seulement le premier match |
2 | NUMBER Remplace seulement NUMBER e match |
3 | p Si une substitution a été effectuée, imprime l'espace du motif |
4 | w FILENAME Si une substitution a été effectuée, écrit le résultat dans FILENAME |
5 | I or i Correspond à une manière insensible à la casse |
6 | M or m En plus du comportement normal des caractères spéciaux des expressions régulières ^ et $, this flag causes ^ to match the empty string after a newline and $ pour correspondre à la chaîne vide avant une nouvelle ligne |
Utilisation d'un autre séparateur de chaînes
Supposons que vous deviez effectuer une substitution sur une chaîne qui comprend la barre oblique. Dans ce cas, vous pouvez spécifier un séparateur différent en fournissant le caractère désigné après les.
$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
Dans l'exemple ci-dessus, nous avons utilisé : comme le delimiter au lieu de slash / parce que nous essayions de rechercher /root au lieu de la simple racine.
Remplacement par un espace vide
Utilisez une chaîne de substitution vide pour supprimer la chaîne racine du /etc/passwd déposer entièrement -
$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
Substitution d'adresse
Si vous souhaitez remplacer la chaîne sh avec la ficelle quiet uniquement à la ligne 10, vous pouvez le spécifier comme suit -
$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet
De même, pour effectuer une substitution de plage d'adresses, vous pouvez faire quelque chose comme ceci -
$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
Comme vous pouvez le voir dans la sortie, les cinq premières lignes avaient la chaîne sh changé en quiet, mais le reste des lignes n'a pas été modifié.
La commande correspondante
Vous utiliseriez le p option avec la -n option pour imprimer toutes les lignes correspondantes comme suit -
$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
Utilisation d'une expression régulière
Lors de la mise en correspondance de modèles, vous pouvez utiliser l'expression régulière qui offre plus de flexibilité.
Vérifiez l'exemple suivant qui correspond à toutes les lignes commençant par daemon puis les supprime -
$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
Voici l'exemple qui supprime toutes les lignes se terminant par sh -
$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync
Le tableau suivant répertorie quatre caractères spéciaux très utiles dans les expressions régulières.
Sr.No. | Caractère et description |
---|---|
1 | ^ Correspond au début des lignes |
2 | $ Correspond à la fin des lignes |
3 | . Correspond à n'importe quel caractère |
4 | * Correspond à zéro ou plusieurs occurrences du caractère précédent |
5 | [chars] Correspond à l'un des caractères indiqués dans chars, où chars est une séquence de caractères. Vous pouvez utiliser le caractère - pour indiquer une plage de caractères. |
Personnages correspondants
Regardez quelques expressions supplémentaires pour illustrer l'utilisation de metacharacters. Par exemple, le modèle suivant -
Sr.No. | Expression et description |
---|---|
1 | /a.c/ Correspond aux lignes contenant des chaînes telles que a+c, a-c, abc, match, et a3c |
2 | /a*c/ Correspond aux mêmes chaînes avec des chaînes telles que ace, yacc, et arctic |
3 | /[tT]he/ Correspond à la chaîne The et the |
4 | /^$/ Correspond aux lignes vides |
5 | /^.*$/ Correspond à une ligne entière quelle qu'elle soit |
6 | / */ Correspond à un ou plusieurs espaces |
sept | /^$/ Allumettes blank lignes |
Le tableau suivant montre quelques jeux de caractères fréquemment utilisés -
Sr.No. | Ensemble et description |
---|---|
1 | [a-z] Correspond à une seule lettre minuscule |
2 | [A-Z] Correspond à une seule lettre majuscule |
3 | [a-zA-Z] Correspond à une seule lettre |
4 | [0-9] Correspond à un seul nombre |
5 | [a-zA-Z0-9] Correspond à une seule lettre ou chiffre |
Mots-clés de classe de caractère
Certains mots clés spéciaux sont généralement disponibles pour regexps, en particulier les utilitaires GNU qui utilisent regexps. Celles-ci sont très utiles pour les expressions régulières sed car elles simplifient les choses et améliorent la lisibilité.
Par exemple, les personnages a through z et les personnages A through Z, constituent l'une de ces classes de caractères ayant le mot-clé [[:alpha:]]
En utilisant le mot-clé de classe de caractères alphabet, cette commande imprime uniquement ces lignes dans le /etc/syslog.conf fichier commençant par une lettre de l'alphabet -
$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
Le tableau suivant est une liste complète des mots-clés de classe de caractères disponibles dans GNU sed.
Sr.No. | Classe de personnage et description |
---|---|
1 | [[:alnum:]] Alphanumérique [az AZ 0-9] |
2 | [[:alpha:]] Alphabétique [az AZ] |
3 | [[:blank:]] Caractères vides (espaces ou tabulations) |
4 | [[:cntrl:]] Caractères de contrôle |
5 | [[:digit:]] Numéros [0-9] |
6 | [[:graph:]] Tous les caractères visibles (à l'exclusion des espaces) |
sept | [[:lower:]] Lettres minuscules [az] |
8 | [[:print:]] Caractères imprimables (caractères non contrôlés) |
9 | [[:punct:]] Caractères de ponctuation |
dix | [[:space:]] Espace blanc |
11 | [[:upper:]] Lettres majuscules [AZ] |
12 | [[:xdigit:]] Chiffres hexadécimaux [0-9 af AF] |
Référencement Aampersand
le sed metacharacter &représente le contenu du modèle correspondant. Par exemple, disons que vous avez un fichier appeléphone.txt plein de numéros de téléphone, tels que les suivants -
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
Vous voulez faire le area code(les trois premiers chiffres) entourés de parenthèses pour une lecture plus facile. Pour ce faire, vous pouvez utiliser le caractère de remplacement esperluette -
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
Ici, dans la partie du motif, vous faites correspondre les 3 premiers chiffres, puis utilisez & vous remplacez ces 3 chiffres par les parentheses.
Utilisation de plusieurs commandes sed
Vous pouvez utiliser plusieurs commandes sed dans une seule commande sed comme suit -
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
Ici command1 à travers commandNsont des commandes sed du type décrit précédemment. Ces commandes sont appliquées à chacune des lignes de la liste des fichiers donnée par les fichiers.
En utilisant le même mécanisme, nous pouvons écrire l'exemple de numéro de téléphone ci-dessus comme suit -
$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' \
-e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Note - Dans l'exemple ci-dessus, au lieu de répéter le mot-clé de la classe de caractères [[:digit:]] trois fois, nous l'avons remplacé par \{3\}, ce qui signifie que l'expression régulière précédente est mise en correspondance trois fois. Nous avons également utilisé\ pour donner un saut de ligne et cela doit être supprimé avant l'exécution de la commande.
Références arrière
le ampersand metacharacterest utile, mais encore plus utile est la possibilité de définir des régions spécifiques dans les expressions régulières. Ces régions spéciales peuvent être utilisées comme référence dans vos chaînes de remplacement. En définissant des parties spécifiques d'une expression régulière, vous pouvez ensuite faire référence à ces parties avec un caractère de référence spécial.
Faire back references, vous devez d'abord définir une région, puis vous référer à cette région. Pour définir une région, vous insérezbackslashed parenthesesautour de chaque région d'intérêt. La première région que vous entourez de barres obliques inverses est alors référencée par\1, la deuxième région par \2, etc.
En supposant phone.txt contient le texte suivant -
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Essayez la commande suivante -
$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
code: \1 Second: \2 Third: \3/'
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (666) Second: 555- Third: 1216
Area code: (777) Second: 555- Third: 1217
Note - Dans l'exemple ci-dessus, chaque expression régulière à l'intérieur de la parenthèse serait référencée à nouveau par \1, \2etc. Nous avons utilisé\pour donner un saut de ligne ici. Cela doit être supprimé avant d'exécuter la commande.
Un système de fichiers est une collection logique de fichiers sur une partition ou un disque. Une partition est un conteneur d'informations et peut couvrir un disque dur entier si vous le souhaitez.
Votre disque dur peut avoir différentes partitions qui ne contiennent généralement qu'un seul système de fichiers, tel qu'un système de fichiers hébergeant le /file system ou un autre contenant le /home file system.
Un système de fichiers par partition permet la maintenance logique et la gestion de différents systèmes de fichiers.
Tout dans Unix est considéré comme un fichier, y compris les périphériques physiques tels que les DVD-ROM, les périphériques USB et les lecteurs de disquettes.
Structure du répertoire
Unix utilise une structure de système de fichiers hiérarchique, un peu comme une arborescence à l'envers, avec la racine (/) à la base du système de fichiers et tous les autres répertoires s'étendant à partir de là.
Un système de fichiers Unix est une collection de fichiers et de répertoires qui possède les propriétés suivantes -
Il a un répertoire racine (/) qui contient d'autres fichiers et répertoires.
Chaque fichier ou répertoire est identifié de manière unique par son nom, le répertoire dans lequel il réside et un identifiant unique, généralement appelé inode.
Par convention, le répertoire racine a un inode nombre de 2 et le lost+found l'annuaire a un inode nombre de 3. Numéros d'inode0 et 1ne sont pas utilisés. Les numéros d'inode de fichier peuvent être vus en spécifiant le-i option à ls command.
Il est autonome. Il n'y a pas de dépendances entre un système de fichiers et un autre.
Les répertoires ont des objectifs spécifiques et contiennent généralement les mêmes types d'informations pour localiser facilement les fichiers. Voici les répertoires qui existent sur les principales versions d'Unix -
Sr.No. | Répertoire et description |
---|---|
1 | / Il s'agit du répertoire racine qui ne doit contenir que les répertoires nécessaires au niveau supérieur de la structure de fichiers |
2 | /bin C'est là que se trouvent les fichiers exécutables. Ces fichiers sont disponibles pour tous les utilisateurs |
3 | /dev Ce sont des pilotes de périphérique |
4 | /etc Commandes d'annuaire du superviseur, fichiers de configuration, fichiers de configuration de disque, listes d'utilisateurs valides, groupes, Ethernet, hôtes, où envoyer les messages critiques |
5 | /lib Contient des fichiers de bibliothèque partagés et parfois d'autres fichiers liés au noyau |
6 | /boot Contient des fichiers pour démarrer le système |
sept | /home Contient le répertoire personnel des utilisateurs et autres comptes |
8 | /mnt Utilisé pour monter d'autres systèmes de fichiers temporaires, tels que cdrom et floppy pour le CD-ROM conduire et floppy diskette drive, respectivement |
9 | /proc Contient tous les processus marqués comme un fichier par process number ou toute autre information dynamique pour le système |
dix | /tmp Contient les fichiers temporaires utilisés entre les démarrages du système |
11 | /usr Utilisé à des fins diverses et peut être utilisé par de nombreux utilisateurs. Comprend des commandes administratives, des fichiers partagés, des fichiers de bibliothèque et autres |
12 | /var Contient généralement des fichiers de longueur variable tels que des fichiers journaux et d'impression et tout autre type de fichier pouvant contenir une quantité variable de données |
13 | /sbin Contient des fichiers binaires (exécutables), généralement pour l'administration système. Par exemple,fdisk et ifconfig utlities |
14 | /kernel Contient les fichiers du noyau |
Naviguer dans le système de fichiers
Maintenant que vous comprenez les bases du système de fichiers, vous pouvez commencer à naviguer vers les fichiers dont vous avez besoin. Les commandes suivantes sont utilisées pour naviguer dans le système -
Sr.No. | Commande et description |
---|---|
1 | cat filename Affiche un nom de fichier |
2 | cd dirname Vous déplace vers le répertoire identifié |
3 | cp file1 file2 Copie un fichier / répertoire à l'emplacement spécifié |
4 | file filename Identifie le type de fichier (binaire, texte, etc.) |
5 | find filename dir Recherche un fichier / répertoire |
6 | head filename Affiche le début d'un fichier |
sept | less filename Parcourt un fichier depuis la fin ou le début |
8 | ls dirname Affiche le contenu du répertoire spécifié |
9 | mkdir dirname Crée le répertoire spécifié |
dix | more filename Parcourt un fichier du début à la fin |
11 | mv file1 file2 Déplace l'emplacement ou renomme un fichier / répertoire |
12 | pwd Affiche le répertoire actuel dans lequel se trouve l'utilisateur |
13 | rm filename Supprime un fichier |
14 | rmdir dirname Supprime un répertoire |
15 | tail filename Affiche la fin d'un fichier |
16 | touch filename Crée un fichier vide ou modifie un fichier existant ou ses attributs |
17 | whereis filename Affiche l'emplacement d'un fichier |
18 | which filename Affiche l'emplacement d'un fichier s'il se trouve dans votre PATH |
Vous pouvez utiliser l' aide de la page de manuel pour vérifier la syntaxe complète de chaque commande mentionnée ici.
La commande df
La première façon de gérer votre espace de partition est d'utiliser le df (disk free)commander. La commandedf -k (disk free) affiche le disk space usage in kilobytes, comme indiqué ci-dessous -
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
Certains répertoires, tels que /devices, affiche 0 dans les colonnes Ko, used et available ainsi que 0% pour la capacité. Ce sont des systèmes de fichiers spéciaux (ou virtuels), et bien qu'ils résident sur le disque sous /, ils ne consomment pas à eux seuls d'espace disque.
le df -kla sortie est généralement la même sur tous les systèmes Unix. Voici ce qu'il comprend généralement -
Sr.No. | Colonne et description |
---|---|
1 | Filesystem Le nom du système de fichiers physique |
2 | kbytes Nombre total de kilo-octets d'espace disponible sur le support de stockage |
3 | used Nombre total de kilo-octets d'espace utilisé (par les fichiers) |
4 | avail Nombre total de kilo-octets disponibles pour utilisation |
5 | capacity Pourcentage de l'espace total utilisé par les fichiers |
6 | Mounted on Sur quoi le système de fichiers est-il monté |
Vous pouvez utiliser le -h (human readable) option pour afficher la sortie dans un format qui montre la taille dans une notation plus facile à comprendre.
Le du Command
le du (disk usage) command vous permet de spécifier des répertoires pour afficher l'utilisation de l'espace disque sur un répertoire particulier.
Cette commande est utile si vous souhaitez déterminer l'espace occupé par un répertoire particulier. La commande suivante affiche le nombre de blocs consommés par chaque répertoire. Un seul bloc peut prendre 512 octets ou 1 kilo octet selon votre système.
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
le -h option rend la sortie plus facile à comprendre -
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
Montage du système de fichiers
Un système de fichiers doit être monté pour être utilisable par le système. Pour voir ce qui est actuellement monté (disponible pour utilisation) sur votre système, utilisez la commande suivante -
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
le /mntLe répertoire, selon la convention Unix, est l'emplacement des montages temporaires (tels que les lecteurs de CD-ROM, les lecteurs réseau distants et les lecteurs de disquettes). Si vous devez monter un système de fichiers, vous pouvez utiliser la commande mount avec la syntaxe suivante -
mount -t file_system_type device_to_mount directory_to_mount_to
Par exemple, si vous souhaitez monter un CD-ROM au répertoire /mnt/cdrom, vous pouvez taper -
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
Cela suppose que votre lecteur de CD-ROM s'appelle /dev/cdrom et sur lequel vous voulez le monter /mnt/cdrom. Reportez-vous à la page de manuel mount pour des informations plus spécifiques ou tapez mount-h sur la ligne de commande pour obtenir des informations d'aide.
Après le montage, vous pouvez utiliser la commande cd pour parcourir le système de fichiers nouvellement disponible à travers le point de montage que vous venez de créer.
Démontage du système de fichiers
Pour démonter (supprimer) le système de fichiers de votre système, utilisez le umount commande en identifiant le point de montage ou le périphérique.
Par exemple, to unmount cdrom, utilisez la commande suivante -
$ umount /dev/cdrom
le mount command vous permet d'accéder à vos systèmes de fichiers, mais sur la plupart des systèmes Unix modernes, le automount function rend ce processus invisible pour l'utilisateur et ne nécessite aucune intervention.
Quotas d'utilisateurs et de groupes
Les quotas d'utilisateurs et de groupes fournissent les mécanismes par lesquels la quantité d'espace utilisée par un seul utilisateur ou par tous les utilisateurs d'un groupe spécifique peut être limitée à une valeur définie par l'administrateur.
Les quotas fonctionnent autour de deux limites qui permettent à l'utilisateur de prendre des mesures si la quantité d'espace ou le nombre de blocs de disque commence à dépasser les limites définies par l'administrateur -
Soft Limit - Si l'utilisateur dépasse la limite définie, il existe une période de grâce qui permet à l'utilisateur de libérer de l'espace.
Hard Limit - Lorsque la limite stricte est atteinte, quelle que soit la période de grâce, aucun autre fichier ou bloc ne peut être alloué.
Il existe un certain nombre de commandes pour administrer les quotas -
Sr.No. | Commande et description |
---|---|
1 | quota Affiche l'utilisation du disque et les limites pour un utilisateur du groupe |
2 | edquota Ceci est un éditeur de quotas. Les quotas d'utilisateurs ou de groupes peuvent être modifiés à l'aide de cette commande |
3 | quotacheck Analyse un système de fichiers pour l'utilisation du disque, crée, vérifie et répare les fichiers de quota |
4 | setquota Ceci est un éditeur de quota en ligne de commande |
5 | quotaon Cela annonce au système que les quotas de disque doivent être activés sur un ou plusieurs systèmes de fichiers |
6 | quotaoff Cela annonce au système que les quotas de disque doivent être désactivés pour un ou plusieurs systèmes de fichiers |
sept | repquota Ceci imprime un résumé de l'utilisation du disque et des quotas pour les systèmes de fichiers spécifiés |
Vous pouvez utiliser l' aide de la page de manuel pour vérifier la syntaxe complète de chaque commande mentionnée ici.
Dans ce chapitre, nous discuterons en détail de l'administration des utilisateurs sous Unix.
Il existe trois types de comptes sur un système Unix -
Compte racine
Ceci est également appelé superuseret aurait un contrôle complet et sans entrave du système. Un superutilisateur peut exécuter toutes les commandes sans aucune restriction. Cet utilisateur doit être considéré comme un administrateur système.
Comptes système
Les comptes système sont ceux nécessaires au fonctionnement des composants spécifiques au système, par exemple les comptes de messagerie et sshdcomptes. Ces comptes sont généralement nécessaires pour certaines fonctions spécifiques de votre système et toute modification de ceux-ci pourrait avoir un effet négatif sur le système.
Comptes utilisateur
Les comptes d'utilisateurs fournissent un accès interactif au système pour les utilisateurs et les groupes d'utilisateurs. Les utilisateurs généraux sont généralement affectés à ces comptes et ont généralement un accès limité aux fichiers et répertoires système critiques.
Unix prend en charge un concept de compte de groupe qui regroupe logiquement un certain nombre de comptes. Chaque compte ferait partie d'un autre compte de groupe. Un groupe Unix joue un rôle important dans la gestion des autorisations de fichiers et la gestion des processus.
Gestion des utilisateurs et des groupes
Il existe quatre principaux fichiers d'administration des utilisateurs -
/etc/passwd- Conserve le compte d'utilisateur et les informations de mot de passe. Ce fichier contient la majorité des informations sur les comptes sur le système Unix.
/etc/shadow- Détient le mot de passe crypté du compte correspondant. Tous les systèmes ne prennent pas en charge ce fichier.
/etc/group - Ce fichier contient les informations de groupe pour chaque compte.
/etc/gshadow - Ce fichier contient des informations de compte de groupe sécurisé.
Vérifiez tous les fichiers ci-dessus en utilisant le cat commander.
Le tableau suivant répertorie les commandes disponibles sur la majorité des systèmes Unix pour créer et gérer des comptes et des groupes -
Sr.No. | Commande et description |
---|---|
1 | useradd Ajoute des comptes au système |
2 | usermod Modifie les attributs du compte |
3 | userdel Supprime les comptes du système |
4 | groupadd Ajoute des groupes au système |
5 | groupmod Modifie les attributs du groupe |
6 | groupdel Supprime les groupes du système |
Vous pouvez utiliser l' aide de la page de manuel pour vérifier la syntaxe complète de chaque commande mentionnée ici.
Créer un groupe
Nous allons maintenant comprendre comment créer un groupe. Pour cela, nous devons créer des groupes avant de créer un compte, sinon nous pouvons utiliser les groupes existants dans notre système. Nous avons tous les groupes répertoriés dans/etc/groups fichier.
Tous les groupes par défaut sont des groupes spécifiques au compte système et il n'est pas recommandé de les utiliser pour les comptes ordinaires. Voici donc la syntaxe pour créer un nouveau compte de groupe -
groupadd [-g gid [-o]] [-r] [-f] groupname
Le tableau suivant répertorie les paramètres -
Sr.No. | Option et description |
---|---|
1 | -g GID La valeur numérique de l'ID du groupe |
2 | -o Cette option permet d'ajouter un groupe avec un GID non unique |
3 | -r Ce drapeau indique groupadd pour ajouter un compte système |
4 | -f Cette option provoque la sortie avec un statut de réussite, si le groupe spécifié existe déjà. Avec -g, si le GID spécifié existe déjà, un autre GID (unique) est choisi |
5 | groupname Nom de groupe réel à créer |
Si vous ne spécifiez aucun paramètre, le système utilise les valeurs par défaut.
L'exemple suivant crée un groupe de développeurs avec des valeurs par défaut, ce qui est tout à fait acceptable pour la plupart des administrateurs.
$ groupadd developers
Modifier un groupe
Pour modifier un groupe, utilisez le groupmod syntaxe -
$ groupmod -n new_modified_group_name old_group_name
Pour changer le nom du groupe développeurs_2 en développeur, saisissez -
$ groupmod -n developer developer_2
Voici comment vous allez changer le GID financier en 545 -
$ groupmod -g 545 developer
Supprimer un groupe
Nous allons maintenant comprendre comment supprimer un groupe. Pour supprimer un groupe existant, tout ce dont vous avez besoin est legroupdel command et le group name. Pour supprimer le groupe financier, la commande est -
$ groupdel developer
Cela supprime uniquement le groupe, pas les fichiers associés à ce groupe. Les fichiers sont toujours accessibles par leurs propriétaires.
Créer un compte
Voyons comment créer un nouveau compte sur votre système Unix. Voici la syntaxe pour créer un compte utilisateur -
useradd -d homedir -g groupname -m -s shell -u userid accountname
Le tableau suivant répertorie les paramètres -
Sr.No. | Option et description |
---|---|
1 | -d homedir Spécifie le répertoire de base du compte |
2 | -g groupname Spécifie un compte de groupe pour ce compte |
3 | -m Crée le répertoire personnel s'il n'existe pas |
4 | -s shell Spécifie le shell par défaut pour ce compte |
5 | -u userid Vous pouvez spécifier un identifiant d'utilisateur pour ce compte |
6 | accountname Nom de compte réel à créer |
Si vous ne spécifiez aucun paramètre, le système utilise les valeurs par défaut. leuseradd la commande modifie le /etc/passwd, /etc/shadow, et /etc/group fichiers et crée un répertoire personnel.
Voici l'exemple qui crée un compte mcmohd, définissant son répertoire personnel sur /home/mcmohd et le groupe comme developers. Cet utilisateur se verrait attribuer Korn Shell.
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
Avant d'émettre la commande ci-dessus, assurez-vous que le groupe de développeurs a déjà été créé à l'aide dugroupadd commander.
Une fois qu'un compte est créé, vous pouvez définir son mot de passe à l'aide du passwd commande comme suit -
$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
Lorsque vous tapez passwd accountname, il vous donne la possibilité de changer le mot de passe, à condition que vous soyez un superutilisateur. Sinon, vous pouvez modifier uniquement votre mot de passe en utilisant la même commande, mais sans spécifier le nom de votre compte.
Modifier un compte
le usermodLa commande vous permet d'apporter des modifications à un compte existant à partir de la ligne de commande. Il utilise les mêmes arguments que leuseradd commande, plus l'argument -l, qui vous permet de changer le nom du compte.
Par exemple, pour changer le nom du compte mcmohd à mcmohd20 et pour changer de répertoire personnel en conséquence, vous devrez émettre la commande suivante -
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
Supprimer un compte
le userdelpeut être utilisée pour supprimer un utilisateur existant. Il s'agit d'une commande très dangereuse si elle n'est pas utilisée avec prudence.
Il n'y a qu'un seul argument ou option disponible pour la commande .r, pour supprimer le répertoire personnel et le fichier courrier du compte.
Par exemple, pour supprimer le compte mcmohd20 , exécutez la commande suivante -
$ userdel -r mcmohd20
Si vous souhaitez conserver le répertoire personnel à des fins de sauvegarde, omettez le -roption. Vous pouvez supprimer le répertoire de base si nécessaire ultérieurement.
Dans ce chapitre, nous discuterons en détail des performances du système sous Unix.
Nous allons vous présenter quelques outils gratuits disponibles pour surveiller et gérer les performances sur les systèmes Unix. Ces outils fournissent également des instructions sur la façon de diagnostiquer et de résoudre les problèmes de performances dans l'environnement Unix.
Unix a les principaux types de ressources suivants qui doivent être surveillés et ajustés -
CPU
Memory
Disk space
Communications lines
I/O Time
Network Time
Applications programs
Composants de performance
Le tableau suivant répertorie cinq composants principaux qui prennent le temps du système -
Sr.No. | Composant et description |
---|---|
1 | User State CPU Temps réel passé par la CPU à exécuter le programme utilisateur dans l'état utilisateur. Il inclut le temps passé à exécuter les appels de bibliothèque, mais n'inclut pas le temps passé dans le noyau en son nom |
2 | System State CPU Il s'agit du temps que la CPU passe dans l'état du système pour le compte de ce programme. ToutI/O routinesnécessitent des services de noyau. Le programmeur peut affecter cette valeur en bloquant les transferts d'E / S |
3 | I/O Time and Network Time Il s'agit du temps passé à déplacer des données et à traiter les demandes d'E / S |
4 | Virtual Memory Performance Cela inclut le changement de contexte et l'échange |
5 | Application Program Temps passé à exécuter d'autres programmes - lorsque le système ne gère pas cette application car une autre application possède actuellement le processeur |
Outils de performance
Unix fournit les outils importants suivants pour mesurer et affiner les performances du système Unix -
Sr.No. | Commande et description |
---|---|
1 | nice/renice Exécute un programme avec une priorité de planification modifiée |
2 | netstat Imprime les connexions réseau, les tables de routage, les statistiques d'interface, les connexions masquées et les appartenances multicast |
3 | time Aide à chronométrer une commande simple ou à utiliser les ressources |
4 | uptime Il s'agit de la moyenne de la charge système |
5 | ps Rapporte un instantané des processus en cours |
6 | vmstat Rapports statistiques de la mémoire virtuelle |
sept | gprof Affiche les données de profil du graphique d'appel |
8 | prof Facilite le profilage des processus |
9 | top Affiche les tâches système |
Vous pouvez utiliser l' aide de la page de manuel pour vérifier la syntaxe complète de chaque commande mentionnée ici.
Dans ce chapitre, nous discuterons en détail de la journalisation système sous Unix.
Les systèmes Unix ont un système de journalisation très flexible et puissant, qui vous permet d'enregistrer presque tout ce que vous pouvez imaginer, puis de manipuler les journaux pour récupérer les informations dont vous avez besoin.
De nombreuses versions d'Unix fournissent une fonction de journalisation à usage général appelée syslog. Les programmes individuels qui doivent avoir des informations enregistrées, envoient les informations à syslog.
Unix syslog est une fonction de journalisation système uniforme configurable par l'hôte. Le système utilise un processus de journalisation système centralisé qui exécute le programme/etc/syslogd ou /etc/syslog.
Le fonctionnement de l'enregistreur système est assez simple. Les programmes envoient leurs entrées de journal à syslogd , qui consulte le fichier de configuration/etc/syslogd.conf ou /etc/syslog et, lorsqu'une correspondance est trouvée, écrit le message de journal dans le fichier journal souhaité.
Il y a quatre termes syslog de base que vous devez comprendre -
Sr.No. | Terme et description |
---|---|
1 | Facility Identificateur utilisé pour décrire l'application ou le processus qui a soumis le message de journal. Par exemple, mail, noyau et ftp. |
2 | Priority Un indicateur de l'importance du message. Les niveaux sont définis dans Syslog en tant que directives, depuis les informations de débogage jusqu'aux événements critiques. |
3 | Selector Une combinaison d'une ou plusieurs installations et niveaux. Lorsqu'un événement entrant correspond à un sélecteur, une action est effectuée. |
4 | Action Qu'advient-il d'un message entrant qui correspond à un sélecteur - Les actions peuvent écrire le message dans un fichier journal, envoyer le message à une console ou à un autre périphérique, écrire le message à un utilisateur connecté ou envoyer le message à un autre serveur syslog. |
Installations Syslog
Nous allons maintenant comprendre les fonctionnalités de syslog. Voici les fonctionnalités disponibles pour le sélecteur. Toutes les fonctionnalités ne sont pas présentes sur toutes les versions d'Unix.
Établissement | La description |
---|---|
1 | auth Activité liée à la demande de nom et mot de passe (getty, su, login) |
2 | authpriv Identique à auth mais connecté à un fichier qui ne peut être lu que par les utilisateurs sélectionnés |
3 | console Utilisé pour capturer les messages qui sont généralement dirigés vers la console système |
4 | cron Messages du planificateur du système cron |
5 | daemon Démon système fourre-tout |
6 | ftp Messages relatifs au démon ftp |
sept | kern Messages du noyau |
8 | local0.local7 Installations locales définies par site |
9 | lpr Messages du système d'impression en ligne |
dix | Messages relatifs au système de messagerie |
11 | mark Pseudo-événement utilisé pour générer des horodatages dans les fichiers journaux |
12 | news Messages relatifs au protocole de nouvelles du réseau (nntp) |
13 | ntp Messages relatifs au protocole de temps réseau |
14 | user Processus utilisateurs réguliers |
15 | uucp Sous-système UUCP |
Priorités Syslog
Les priorités syslog sont résumées dans le tableau suivant -
Sr.No. | Priorité et description |
---|---|
1 | emerg Condition d'urgence, telle qu'une panne système imminente, généralement diffusée à tous les utilisateurs |
2 | alert Condition qui doit être corrigée immédiatement, telle qu'une base de données système corrompue |
3 | crit Condition critique, telle qu'une erreur matérielle |
4 | err Erreur ordinaire |
5 | Warning Attention |
6 | notice Condition qui n'est pas une erreur, mais qui devrait éventuellement être gérée d'une manière spéciale |
sept | info Message d'information |
8 | debug Messages utilisés lors du débogage des programmes |
9 | none Pseudo niveau utilisé pour spécifier de ne pas consigner les messages |
La combinaison des fonctionnalités et des niveaux vous permet de discerner ce qui est enregistré et où ces informations vont.
Au fur et à mesure que chaque programme envoie ses messages consciencieusement à l'enregistreur système, l'enregistreur prend des décisions sur les éléments à suivre et à rejeter en fonction des niveaux définis dans le sélecteur.
Lorsque vous spécifiez un niveau, le système gardera une trace de tout à ce niveau et plus.
Le fichier /etc/syslog.conf
le /etc/syslog.conffichier contrôle où les messages sont enregistrés. Un typiquesyslog.conf le fichier pourrait ressembler à ceci -
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
Chaque ligne du fichier contient deux parties -
UNE message selectorqui spécifie le type de messages à consigner. Par exemple, tous les messages d'erreur ou tous les messages de débogage du noyau.
Un action fieldcela dit ce qu'il faut faire avec le message. Par exemple, placez-le dans un fichier ou envoyez le message au terminal d'un utilisateur.
Voici les points notables pour la configuration ci-dessus -
Les sélecteurs de messages comportent deux parties: a facility et a priority. Par exemple, kern.debug sélectionne tous les messages de débogage (la priorité) générés par le noyau (la fonction).
Le sélecteur de messages kern.debug sélectionne toutes les priorités supérieures à debug.
Un astérisque à la place de la fonction ou de la priorité indique «tout». Par exemple,*.debug signifie tous les messages de débogage, tandis que kern.* signifie tous les messages générés par le noyau.
Vous pouvez également utiliser des virgules pour spécifier plusieurs installations. Deux sélecteurs ou plus peuvent être regroupés en utilisant un point-virgule.
Actions de journalisation
Le champ d'action spécifie l'une des cinq actions -
Enregistrez le message dans un fichier ou un appareil. Par exemple,/var/log/lpr.log ou /dev/console.
Envoyez un message à un utilisateur. Vous pouvez spécifier plusieurs noms d'utilisateur en les séparant par des virgules; par exemple, root, amrood.
Envoyez un message à tous les utilisateurs. Dans ce cas, le champ d'action se compose d'un astérisque; par exemple, *.
Dirigez le message vers un programme. Dans ce cas, le programme est spécifié après le symbole du tube Unix (|).
Envoyez le message au syslog sur un autre hôte. Dans ce cas, le champ d'action se compose d'un nom d'hôte, précédé d'un arobase; par exemple, @ tutorialspoint.com.
La commande logger
Unix fournit le loggercommande, qui est une commande extrêmement utile pour gérer la journalisation du système. lelogger La commande envoie des messages de journalisation au démon syslogd et provoque par conséquent la journalisation du système.
Cela signifie que nous pouvons vérifier à tout moment depuis la ligne de commande syslogddémon et sa configuration. La commande logger fournit une méthode pour ajouter des entrées sur une ligne au fichier journal système à partir de la ligne de commande.
Le format de la commande est -
logger [-i] [-f file] [-p priority] [-t tag] [message]...
Voici le détail des paramètres -
Sr.No. | Option et description |
---|---|
1 | -f filename Utilise le contenu du fichier nom de fichier comme message à consigner. |
2 | -i Enregistre l'ID de processus du processus de journalisation avec chaque ligne. |
3 | -p priority Entre le message avec la priorité spécifiée (entrée de sélecteur spécifiée); la priorité du message peut être spécifiée numériquement ou sous la forme d'une paire installation.prioritaire. La priorité par défaut est user.notice. |
4 | -t tag Marque chaque ligne ajoutée au journal avec la balise spécifiée. |
5 | message Arguments de chaîne dont le contenu est concaténé dans l'ordre spécifié, séparés par l'espace. |
Vous pouvez utiliser l' aide de la page de manuel pour vérifier la syntaxe complète de cette commande.
Rotation du journal
Les fichiers journaux ont tendance à croître très rapidement et à consommer de grandes quantités d'espace disque. Pour activer les rotations des journaux, la plupart des distributions utilisent des outils tels quenewsyslog ou logrotate.
Ces outils doivent être appelés à intervalles fréquents en utilisant le cron daemon. Consultez les pages de manuel pour newsyslog ou logrotate pour plus de détails.
Emplacements de journaux importants
Toutes les applications système créent leurs fichiers journaux dans /var/loget ses sous-répertoires. Voici quelques applications importantes et leurs répertoires de journaux correspondants -
Application | Annuaire |
---|---|
httpd | / var / log / httpd |
samba | / var / log / samba |
cron | / var / log / |
courrier | / var / log / |
mysql | / var / log / |
Dans ce chapitre, nous discuterons en détail des signaux et des interruptions sous Unix.
Les signaux sont des interruptions logicielles envoyées à un programme pour indiquer qu'un événement important s'est produit. Les événements peuvent varier des demandes des utilisateurs à des erreurs d'accès à la mémoire illégales. Certains signaux, tels que le signal d'interruption, indiquent qu'un utilisateur a demandé au programme de faire quelque chose qui n'est pas dans le flux de contrôle habituel.
Le tableau suivant répertorie les signaux courants que vous pourriez rencontrer et que vous souhaitez utiliser dans vos programmes -
Nom du signal | Numéro de signal | La description |
---|---|---|
VISION | 1 | Raccrochage détecté sur le terminal de contrôle ou décès du processus de contrôle |
SIGINT | 2 | Émis si l'utilisateur envoie un signal d'interruption (Ctrl + C) |
SIGQUIT | 3 | Émis si l'utilisateur envoie un signal d'arrêt (Ctrl + D) |
SIGFPE | 8 | Émis si une opération mathématique illégale est tentée |
SIGKILL | 9 | Si un processus reçoit ce signal, il doit s'arrêter immédiatement et n'effectuera aucune opération de nettoyage |
SIGALRM | 14 | Signal de réveil (utilisé pour les minuteries) |
SIGTERM | 15 | Signal de terminaison du logiciel (envoyé par kill par défaut) |
Liste des signaux
Il existe un moyen simple de répertorier tous les signaux pris en charge par votre système. Émettez simplement lekill -l commande et il afficherait tous les signaux pris en charge -
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
La liste réelle des signaux varie entre Solaris, HP-UX et Linux.
Actions par défaut
Chaque signal est associé à une action par défaut. L'action par défaut d'un signal est l'action qu'un script ou un programme exécute lorsqu'il reçoit un signal.
Certaines des actions par défaut possibles sont -
Terminez le processus.
Ignorez le signal.
Dump core. Cela crée un fichier appelécore contenant l'image mémoire du processus lorsqu'il a reçu le signal.
Arrêtez le processus.
Continuez un processus arrêté.
Envoi de signaux
Il existe plusieurs méthodes pour transmettre des signaux à un programme ou à un script. L'un des plus courants est pour un utilisateur de taperCONTROL-C ou la INTERRUPT key pendant l'exécution d'un script.
Lorsque vous appuyez sur le Ctrl+C clé, une SIGINT est envoyé au script et, conformément à la définition par défaut, le script d'action se termine.
L'autre méthode courante pour délivrer des signaux consiste à utiliser le kill command, dont la syntaxe est la suivante -
$ kill -signal pid
Ici signal est le numéro ou le nom du signal à délivrer et pidest l'ID de processus auquel le signal doit être envoyé. Par exemple -
$ kill -1 1001
La commande ci-dessus envoie le signal HUP ou de raccrochage au programme qui s'exécute avec process ID 1001. Pour envoyer un signal d'arrêt au même processus, utilisez la commande suivante -
$ kill -9 1001
Cela tue le processus en cours avec process ID 1001.
Signaux de piégeage
Lorsque vous appuyez sur la touche Ctrl + C ou Pause de votre terminal pendant l'exécution d'un programme shell, normalement ce programme est immédiatement arrêté et votre invite de commande revient. Cela n'est pas toujours souhaitable. Par exemple, vous pouvez finir par laisser un tas de fichiers temporaires qui ne seront pas nettoyés.
Le piégeage de ces signaux est assez simple et la commande trap a la syntaxe suivante -
$ trap commands signals
Ici, la commande peut être n'importe quelle commande Unix valide, ou même une fonction définie par l'utilisateur, et le signal peut être une liste de n'importe quel nombre de signaux que vous souhaitez intercepter.
Il existe deux utilisations courantes du trap dans les scripts shell -
- Nettoyer les fichiers temporaires
- Ignorer les signaux
Nettoyage des fichiers temporaires
À titre d'exemple de la commande trap, ce qui suit montre comment vous pouvez supprimer certains fichiers, puis quitter si quelqu'un essaie d'abandonner le programme à partir du terminal -
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
A partir du moment où ce piège est exécuté dans le programme shell, les deux fichiers work1$$ et dataout$$ sera automatiquement supprimé si le signal numéro 2 est reçu par le programme.
Par conséquent, si l'utilisateur interrompt l'exécution du programme après l'exécution de cette interruption, vous pouvez être assuré que ces deux fichiers seront nettoyés. leexit commande qui suit la rm est nécessaire car sans elle, l'exécution se poursuivrait dans le programme au point où elle s'était arrêtée lors de la réception du signal.
Le signal numéro 1 est généré pour hangup. Soit quelqu'un raccroche intentionnellement la ligne, soit la ligne est accidentellement déconnectée.
Vous pouvez modifier le trap précédent pour supprimer également les deux fichiers spécifiés dans ce cas en ajoutant le signal numéro 1 à la liste des signaux -
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
Maintenant, ces fichiers seront supprimés si la ligne est suspendue ou si la touche Ctrl + C est enfoncée.
Les commandes spécifiées pour intercepter doivent être placées entre guillemets, si elles contiennent plusieurs commandes. Notez également que le shell scanne la ligne de commande au moment où la commande trap est exécutée et également lorsque l'un des signaux répertoriés est reçu.
Ainsi, dans l'exemple précédent, la valeur de WORKDIR et $$sera remplacé au moment de l'exécution de la commande trap. Si vous souhaitez que cette substitution se produise au moment de la réception du signal 1 ou 2, vous pouvez mettre les commandes entre guillemets simples -
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
Ignorer les signaux
Si la commande répertoriée pour trap est nulle, le signal spécifié sera ignoré lors de sa réception. Par exemple, la commande -
$ trap '' 2
Cela spécifie que le signal d'interruption doit être ignoré. Vous voudrez peut-être ignorer certains signaux lors de l'exécution d'une opération que vous ne souhaitez pas interrompre. Vous pouvez spécifier plusieurs signaux à ignorer comme suit -
$ trap '' 1 2 3 15
Notez que le premier argument doit être spécifié pour qu'un signal soit ignoré et n'équivaut pas à écrire ce qui suit, qui a sa propre signification -
$ trap 2
Si vous ignorez un signal, tous les sous-shell ignorent également ce signal. Cependant, si vous spécifiez une action à entreprendre à la réception d'un signal, tous les sous-coquilles prendront toujours l'action par défaut à la réception de ce signal.
Réinitialiser les pièges
Après avoir modifié l'action par défaut à entreprendre à la réception d'un signal, vous pouvez la modifier à nouveau avec le trap si vous omettez simplement le premier argument; alors -
$ trap 1 2
Cela réinitialise l'action à entreprendre à la réception des signaux 1 ou 2 à la valeur par défaut.