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

mail

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.