Friday, June 24, 2016

CentOS - à la ligne de commande - 02 : gérer répertoires et fichiers

English abstract: in this blog post, I look at the commands ls, cd, mkdir and cp with various parameters. I also verify which combinations function with PowerShell.

Après des expériences touchant surtout aux systèmes Microsoft (Active Directory, Exchange, PKI, Office 365), et un aperçu de certains répartiteurs de charge (Kemp et Citrix), je voulais refaire un effort d'apprendre un peu plus sur Linux, CentOS en particulier. Pour le moment, mon installation de CentOS ne comporte aucune interface graphique. Je n'ai que l'interpréteur de ligne de commande. J'allais me mettre au travail et puis... je me suis souvenu d'une particularité de Windows PowerShell : l'inclusion de commandes Linux.

Je m'explique.

Si nous voulons afficher le contenu d'un répertoire, nous pouvons exécuter la commande - ou "cmdlet" - PowerShell :

Get-ChildItem

Nous pouvons utiliser l'alias:

gci

Nous pouvons aussi recourir aux anciennes commandes dites "DOS" :

dir

Mais ce qui est sans doute plus étonnant, c'est le fait de pouvoir utiliser des commandes Linux, et dans le cas présent :

ls

Toutes ces commandes accomplissent la même tâche : afficher le contenu d'un répertoire.


Et voilà que j'ai décidé de donner une tournure un peu spéciale à mon apprentissage des commandes Linux. Il s'agira non seulement de réviser ces commandes mais aussi de voir jusqu'à quel point elles ont été intégrées dans PowerShell (version 4 dans mon cas).

Je commence par quelques commandes de base et qui, sauf mention contraire, fonctionnent aussi dans PowerShell.

clear

Cette commande efface à l'écran le rendu (l'affichage) de toutes les commandes saisies jusqu'à présent.


pwd

Cette commande montre le chemin du répertoire dans lequel l'on se trouve (ou le répertoire "courant").



ls

Nous savons déjà que cette commande s'exécute dans PowerShell mais en va-t-il de même de toutes ses options ?


ls /

Cela affiche les fichiers (et répertoires) à la racine :



Remarque : selon la taille de l'écran, l'affichage pourrait ressembler plutôt à ceci :




Et cela fonctionne sous Windows (PowerShell) aussi :





Par défaut, Linux affiche les résultats par ordre alphabétique, ligne par ligne. Pour afficher les éléments en une seule colonne, nous devons utiliser le paramètre -1 (le numero 1 - comme 1, 2, 3, etc.). Je vais utiliser l'exemple du répertoire /var.



Il ne faut pas confondre avec l'option -l (la lettre l comme "long") qui affiche de nombreux détails sur les répertoires et fichiers en question.


Quoi qu'il en soit...


Ni

ls /users -l

ni

ls /users -1

n'affichent rien sous Windows (soit un message d'erreur pour le premier, soit rien du tout pour le second).

Remarque : puisque le dossier /var n'existe pas sous Windows, j'ai utilisé à la place le dossiers /users. Il s'agit de simples exemples. Ces deux dossiers n'ont rien de commun quant à leur contenu ou à leur rôle.


ls /users/public -R

Je ne mets pas une capture d'écran pour le paramètre -R (recursive) en raison de la quantité d'éléments qui s'affichent, mais il fonctionne aussi bien sous Linux que sous Windows (et en Windows il n'est pas sensible à la casse).


ls /var -1a

Cette option affiche les éléments en une seule colonne mais le paramètre -a affiche, en plus, les fichiers et les répertoires cachés (le cas échéant) :



Dans ce cas, seul le fichier ".updated" s'ajoute à la liste. Le point "." qui le précède en fait un fichier caché. D'ailleurs, nous pouvons cacher un fichier ou un répertoire en le faisant précéder par un point.

A retenir : le point tout seul "." représente le répertoire courant et les deux points ".." le répertoire parent.


Le paramètre -a (afficher éléments cachés) ne fonctionne pas non plus sous Windows-PowerShell.

En revanche, nous pouvons remonter au répertoire parent en nous servant des deux points comme ceci :

cd /..

cd signifie "change directory"

Et cela fonctionne de la même façon sous Windows (avec ou sans barre oblique) :

PS C:\> cd users
PS C:\users> cd /..
PS C:\>
PS C:\> cd users
PS C:\users> cd ..
PS C:\>

Dans ce cas, pourtant, il s'agit de la commande dite "DOS" qui est la même.

Autres remarques :

ls /var -m affiche les éléments en une seule ligne (horizontale) mais avec une virgule et un espace entre les éléments.

ls /var -X affiche les éléments par extension. -Xr inverse l'affichage. S'il n'y a que des répertoires, c'est l'ordre alphabétique.

Pour afficher selon la taille: -S ("size" en anglais).

Si nous voulions afficher les détails de fichier, les fichiers masqués (ou cachés), la taille des fichiers et en plus, la taille en Ko, Mo ou Go plutôt qu'en simples octets, nous saisirions cette commande (en respectant bien la casse) :

ls -1aSh

Aucune de ces options ne fonctionne sous Windows dans PowerShell.

En outre, sous Linux (mais non pas sous Windows) les éléments affichés se distinguent par couleur. Par example:

Bleu = répertoire
Vert = fichier exécutable



cd

Encore au sujet de la commande "cd", nous pouvons atteindre le répertoire personnel avec le caractère ~

PS C:\> cd users
PS C:\users> cd ~
PS C:\Users\admin-local>

Cependant (et contrairement à cette commande sous Linux), le fait de saisir seulement "cd" ne suffit pas.



mkdir

Nous pouvons passer de répertoire en répertoire avec la commande cd, tant sous Linux que sous Windows, mais comment faire si nous voulons créer un répertoire ?

Il s'agit de recourir à la commande mkdir

Voilà comment j'ai créé plusieurs répertoires (qui serviront plus tard pour d'autres exercices) et les différentes façons dont nous pouvons les afficher avec les options de la commande ls que nous avons vues plus haut :



Précisons tout de suite que mkdir fonctionne aussi sous Windows parce que la même commande existait déjà à l'époque de DOS. Et cela marche toujours :



Remarque : observez bien que nous ne sommes même pas dans PowerShell ci-dessus.



Maintenant je voudrais manipuler les répertoires suivants :



Mais quelques questions d'abord...
  • Comment déplacer Dossier_1-1 et Dossier_1-2 dans le Dossier_1 ?
  • Si les répertoires contiennent des objets enfant (des fichiers par exemple), et que je copie un répertoire, vais-je copier seulement le répertoire ou le répertoire et son contenu ?
  • A ce propos, comment faire pour créer des fichiers ?

A ce sujet, je me permets une petite parenthèse...

Nous pouvons créer des fichiers avec la commande "touch", par exemple :

touch Fichier_1.txt

Je vais même en créer trois :



Pour le moment, ces fichiers sont vides.

Gardons toujours à l'esprit que nous devons respecter la casse quand nous saisissons le nom d'un fichier. A cet égard (dans le monde Linux), fichier_1.txt et Fichier_1.txt sont deux objets distincts. De plus, nous devons mettre l'extension .txt

Dans la capture d'ecran qui suit (voir plus bas), je vais montrer quelques commandes portant sur la manipulation des fichiers :

"cat" est une commande capable d'afficher le contenu d'un fichier texte.

Observons qu'il faut bien indiquer l'extension : "cat Fichier_1" ne donne aucun résultat.

Mais comment ajouter du texte à un fichier (texte) vide ? De nombreux éditeurs de texte existent pour Linux mais pour ce billet, je vais utiliser une autre méthode (qui ne permet pourtant pas de modifier le texte).

Il s'agit d'allier la commande "echo"et le signe " > ".

D'habitude, la commande echo affiche à l'écran ce qu'on vient de taper. Mais si je mets le signe > suivi du nom d'un fichier texte, ce que je tape entre echo et le signe > sera mis dans le fichier texte.

Ensuite, nous pouvons utiliser "cat" pour afficher le texte dans le fichier :



Remarque : si nous tentons d'ajouter encore du texte, nous risquons d'écraser le contenu existant. Pour éviter cela, nous mettons deux signes >>





Mais revenons au déplacement des répertoires et des fichiers.


"mv" et "cp"

Je déplace le Dossier_1-1 dans le Dossier_1 avec la commande mv :

mv Dossier_1-1 Dossier_1




Nous avons donc la structure suivante, soit le répertoire Dossier_1 qui contient le sous-répertoire Dossier_1-1 qui contient à son tour les fichiers Ficher_1.txt, Fichier_2.txt et Fichier_3.txt :




Je déplace aussi le Dossier_2-1, ce qui donne :



Et maintenant, tentons de copier un répertoire sans aucun objet enfant. J'aurais cru que la seule command "cp" aurait suffi mais il paraît qu'il faut mettre -R (R majuscule signifie "récursif").



Remarque : apparemment, la commande "cp" sans -R copie le répertoire seul (quand il s'agit d'un répertoire) mais non pas son contenu. Dans mon cas, cela ne semble pas fonctionner du tout.


Avec le paramètre -R, en tout cas, tant le répertoire que son contenu sont copiés :




***


Je vais m'en tenir là pour le moment. Le fait de mettre des captures d'écran ne me plaît pas comme solution. J'y ai recouru faute de réussir à effectuer des opérations copier/coller entre la machine virtuelle exécutant CentOS 7 (dans VMware Workstation) et l'hôte. Je n'arrive même pas à sélectionner du texte. Je vais donc examiner d'autres options avant de continuer.

Cela dit, les commandes suivantes fonctionnent bien dans PowerShell :

"mv"

"cp"

Avec le paramètre -R cette commande copie le contenu d'un répertoire aussi. Sans le -R, seul le répertoire est copié.

"rm"

Cette commande supprime un fichier (ou des fichiers).

"rmdir"

Cette commande supprime un répertoire. Il y a aussi un paramètre -R.







No comments:

Post a Comment