🌙
  • 🇺🇸 English
  • 🇫🇷 Français
  • 🇪🇦 Español

NOTE Post Réécriture : Cet article, et bien d’autres, fait parti de la série “Script kiddie”. Il a été écrit il y a plusieurs années. Son contenu n’est pas à jour et il contient potentiellement des erreurs. Plus d’information sur la page de présentation de la série.

Changer de dossier et lister les fichiers

Tapons donc notre première commande :

ls

Cette commande permet de lister les fichiers et les dossiers présents dans notre répertoire. Je vous laisse essayer de votre côté, rien de bien fou devrait se produire, mais c’est déjà un pas dans votre apprentissage. Voici mon résultat :

ls
ASM.odt                      cours           Untitled.xcf 
'Boîtes de dialogue.odt'     persoent        programmation

Ce résultat, également appelé sorti de commande (de l’anglais « command output », c’est une dénomination plutôt rare) ne devrait pas du tout être le même que le vôtre, ou alors vous vous trouvez sur ma machine, et vous devriez y partir avant que je ne vous retrouve :O. Ce phénomène est tout à fait normal, on vient de lister les fichiers et dossiers présents sur la machine, dans un dossier en particulier, alors il est tout à fait normal que ce ne soient pas les mêmes en fonction de la machine et du dossier dans lequel on l’exécute.

Si je fais cette petite précision qui peut paraître inutile aux yeux de ceux qui ont déjà un lourd passé en informatique, c’est qu’elle peut s’avérer nécessaire pour certains. Non pas que ceux concernés soient stupides, mais que tous puissent comprendre que recopier bêtement une commande que je vous ai noté, et vous attendre à l’exacte similitude des résultats, et une idée à vous sortir de la tête. Cet ouvrage est fait pour vous faire découvrir, non seulement la sécurité informatique, mais, in extenso, le fonctionnement profond de votre machine. Je ne ferai pas de vous des script kiddie (utilisateurs recopiant bêtement des programmes ou des lignes de code pour H4ck3R quelqu’un, on se sent Mister Robot…).

Ces précisions faites, continuons. Les commandes, sur Linux, utilisent des paramètres, que nous appelleront également option. Ce sont de petits ajouts à une commande de base – souvent non obligatoire au bon fonctionnement du programme – qui vont changer son fonctionnement, et donc, ce que cette dernière va nous renvoyer. Par exemple, avec ls, vous pouvez ajouter —all après le nom de la commande :

ls --all
.                        'Commentaire sur le C.odt'         programmation 
..                        cours                             Untitled.xcf 
ASM.odt                  '.~lock.Boîtes de dialogue.odt#' 
'Boîtes de dialogue.odt'   persoent

Ici, ls va retourner TOUS les fichiers, sans prendre en compte s’ils sont cachés ou non. Car sur Linux, il existe cette fonctionnalité, qui est également présente sur les systèmes Windows et OSX, et qui permet de cacher des fichiers. Enfin, pas de les masquer à jamais, mais seulement de les rendre invisible aux yeux de l’utilisateur peu averti qui n’utilisera pas l’option permettant de les afficher.

NOTE : Vous repérerez ces fichiers très simplement, ce sont dont le nom commence par un point, vous pourrez même en créer vous-même à l’avenir.

Il faut savoir que chez les passionnés d’informatique, on est de véritable fainéant, et donc, n’importe quel moyen qui nous permettrait d’automatiser une tâche ou de la raccourcir est bon à prendre. C’est pour cette raison qu’il existe un équivalent plus cours faisant exactement la même chose que —all :

ls -a

NOTE : On remarquera au travers de ces exemples que :

  • Les paramètres étant des mots sont précédés de plusieurs tirets
  • Les paramètres d’une seule lettre commencent avec un seul tiret

Avec de plus amples connaissances sur la commande ls, on peut ajouter plus d’options à notre commande :

ls --all --reverse

Faire se suivre plusieurs options d’un coup est tout à fait possible, et leur ordre importe peu dans la plupart des cas (si ce n’est pas le cas, vous n’aurez qu’à essayer jusqu’à ce que l’effet escompté soit affiché).

De même que nous avons pu réduire —all en -a tout à l’heure, il est tout à fait possible de réduire —reverse en une lettre :

ls -a -r

Ces manières de raccourcir les paramètres sont pour le moment assez claires, car elles vous paraissent logiques, mais faites bien attention, il n’est pas rare que les versions longues et courtes d’une commande n’est parfois aucun lien logique les unissant de prime abord.

D’ailleurs, toujours dans cette optique d’en taper le moins possible, les petits paramètres d’une lettre peuvent être combinés pour n’en former qu’un seul :

ls -ar

NOTE : Cette technique ne fonctionne qu’avec les options d’une lettre, inutile de l’essayer avec celles de deux lettres ou plus, le résultat ne sera pas le bon.

Je pense que nous avons bien assez épilogué sur la commande ls pour passer à la suite. La deuxième commande que je voudrai vous présenter est la suivante :

cd

Elle permet de se déplacer facilement de dossier en dossier, mais également, de vous présenter le concept d’argument. En effet, afin de se déplacer dans un dossier précis, il va falloir l’utiliser en argument de la commande. Ce n’est pas bien compliqué, faites juste suivre cd par le nom du dossier dans lequel vous voulez vous rendre. Par exemple, je veux me rendre dans mes documents :

[jacky@klvdwxx9 ~]cdDocuments/[jacky@klvdwxx9Documents] cd Documents/ [jacky@klvdwxx9 Documents]

NOTE : Comme vous pouvez le voir, le prompt a changé pour afficher le dossier dans lequel je me trouve après le changement.

Ainsi, cela change un peu la syntaxe de cd que je vous avais donné au préalable. Puisqu’il va falloir justifier un argument, nous le noterons entre crochets, cela signifie qu’il est obligatoire pour un fonctionnement normal et complet de la commande. De plus, à l’inverse des options qui resteront les mêmes sur toutes les configurations pour obtenir un effet similaire, les arguments sont propres à chaque cas de figures. Cela nous donne donc la ligne suivante :

cd [dossier]

Bon c’est très bien tout ça, mais comment revient-on en arrière, dans le dossier précédent, ou dans le premier dossier de base. Et comment peut-on faire pour découvrir de nouveaux dossiers ?

Nous répondrons à toutes ces questions en abordant un outil très utile dans la prochaine partie : le manuel.

Lisez le putain de manuel (RTFM)

RTFM (read the fucking manual) est un mot que l’on retrouve souvent sur les forums de discussions. Il permet de répondre rapidement au questionneur que sa réponse se trouve dans le manuel, et que, plutôt que d’importuner les autres utilisateurs avec sa question, il ferait mieux de la consulter, car il en apprendrait beaucoup plus qu’avec un résumé fait par un inconnu. Mais qu’est-ce donc que ce fameux manuel ?

Le manuel est un peu le livre sacré de tous les utilisateurs de Linux, un livre pas facile à saisir au début et qui recèle potentiellement des connaissances hermétiques et ésotériques. Vous le retrouverez en tapant :

man [commande]

NOTE : Vous noterez la présence d’un nouvel argument, la commande que vous voulez précisément étudier. Les arguments sont propres à un programme !

Grâce à cette commande magique, une grande partie de vos questions concernant l’utilisation d’un programme auront déjà trouvé leurs réponses. Même la commande man possède son propre manuel !

Se déplacer à l’intérieur du manuel peut paraître un peu ardue au départ, mais on en retiendra les règles suivantes :

Ainsi, pour retrouver le manuel de la commande cd, vous n’aurez qu’à taper :

man cd

Et vous y apprendrez, après sa lecture complète, que taper cd sans aucun argument vous fera revenir dans le dossier de départ (appelé HOME), et que faire suivre cd de deux points (..), vous fera revenir dans le dossier parent. Si la structure des dossiers vous intéressent un peu plus pour comprendre le manuel de cd plus en profondeur, de plus amples explications se trouvent au début du chapitre sur la gestion des disques.

De même, après la lecture du manuel de ls avec :

man ls

On apprend que l’option -l peut s’avérer très utile…

Créer des fichiers, des dossiers et rediriger des résultats

Créer des fichiers et des dossiers, cela peut très bien se faire avec un explorateur de fichier graphique, mais rappelez-vous, lorsque vous vous trouverez sur la machine de quelqu’un d’autre, oubliez les outils graphiques. Voyons donc comment le faire avec quelques lignes de commandes.

Pour créer un fichier, on utilisera touch suivi du nom du fichier en argument :

touch [nom]

Pour créer un dossier, on utilisera mkdir suivi du nom du dossier en argument :

mkdir [nom]

NOTE : Les fichiers et dossiers que nous venons de créer avec ces deux lignes sont absolument vierges de données, inutile donc d’y utiliser ls.

Je n’ai rien d’autre à ajouter sur ces deux programmes que le manuel ne pourra pas vous détailler plus en profondeur…

Cependant, puisque vos fichiers sont absolument vides de tout texte, je vous propose de commencer à écrire des bribes de textes en vous exposant le concept de flux de redirection. Laissez-moi faire une métaphore filée pour vous l’expliquer.

Lorsque vous conduisez, et que vous avez à vous rendre d’un point A à un point B, des panneaux de directions sont là pour vous guider. Ils vous indiquent la route à prendre pour arriver à la bonne destination. Eh bien, les flux de redirection, c’est un peu la même chose, mais pour les fichiers. Le panneau devient le flux, la destination, le fichier vers lequel redirige le flux, et vous conduisant votre voiture, les données à rediriger.

En utilisant bien les flux, le résultat d’une commande peut être inscrit dans un fichier pour être étudié plus tard, comme il peut être jeté à la poubelle si vous n’en avez pas besoin. C’est à vous, de décider où est-ce que vos données seront entreposées et pour quelle raison. Vous êtes la société de gestion des routes si l’on devait continuer la métaphore filée jusqu’au bout.

Mais avant de rediriger quoique ce soit, il faudrait peut-être commencer par les créer ces fameuses données. Pour ce faire, utilisons la commande echo qui permet l’affichage de textes dans le terminal :

echo [texte]

En dehors d’un programme qui aurait des choses à dire à l’utilisateur (renvoyer un résultat, annoncer une erreur), cette commande peut paraître inutile, cependant, en plus de me permettre de parfaire ce cours, elle vous servira à l’avenir pour la modification de vos fichiers de configurations sans avoir à les ouvrir avec un éditeur. La syntaxe de ce genre d’opération est presque toujours la même :

echo [texte] > [fichier]

Le flux de redirection est représenté par le symbole > dans la ligne précédente, et il restera toujours le même quand il s’agira d’écrire le résultat dans un nouveau fichier, ou d’effacer le contenu d’un document existant pour le remplacer. Des flux, il n’en existe pas qu’un seul, il y en a tout un tas, dont les utilisations divergent en fonction du cas. Plusieurs pourront vous servir lorsque vous vous retrouverez sur la machine d’une de vos futures victimes. Par exemple, il en existe un pour inscrire le résultat de la commande à la fin du fichier :

echo [texte] >> [fichier_existant]

Si le fichier n’existait pas auparavant, pas d’inquiétudes ; le flux le créera de lui-même, comme tous les autres. Ces deux redirections utilisent des données du type « standard output » (sortie standard), car ce sont les données qui ne contiennent aucune erreur particulière, à l’inverse des « standard errors » (erreurs standards) qui elles sont des erreurs générées par les lignes que vous avez écrites. Si vous en avez le besoin, il est possible de ne garder que les erreurs dans un fichier texte, et de jeter le reste du résultat. Prenons cet exemple :

echo "J'aime le H4cK1nG" 2> erreurs.txt
cat erreurs.txt
eccho "J'aime le H4cK1nG" 2> erreurs.txt
cat erreurs.txt
bash: command not found: eccho

Dans un premier temps, l’interpréteur va exécuter la première ligne. Puisque c’est une sortie standard qui est produit par echo, et que le seul flux de redirection présent sur la ligne concerne les erreurs standards, echo affichera son texte à l’utilisateur, et le fichier erreurs.txt sera créé, sans aucunes données à l’intérieur.

Dans un second temps, l’interpréteur, ici bash, voit une ligne avec une commande nommée eccho. Puisqu’il ne la connaît pas, il ne va pas l’exécuter et va à la place produire une erreur informant l’utilisateur de l’inexistence du programme. De plus, il s’aperçoit qu’un flux redirigeant les erreurs standards est présent lors de l’exécution, il va donc s’empresser d’écrire son message dans le fichier précisé.

Bien évidemment, les deux flux sont cumulables pour séparer les sorties des erreurs standards :

echo "J'aime le H4cK1nG" > resultats.txt 2> erreurs.txt

Ici, la phrase souhaitée sera inscrite dans resultats.txt, et les erreurs, qui certes ne seront pas présentes lors de l’exécution ici, seront retranscrites dans le fichier erreurs.txt.

Si on met de côté les flux d’entrée, permettant de donner un fichier à une commande, et dont l’utilité laisse à désirer puisque la grande majorité des commandes acceptent directement les fichiers en tant qu’argument quand ils en ont besoin, il existe un dernier flux de redirection que je voudrai vous présenter : le tube ! Ce dernier, dont le nom vient de l’anglais pipeline, sert à transférer le résultat d’une commande directement dans une autre, il agit réellement comme un tuyau, redirigeant de commande en commande les précieuses données produites. Restons avec notre nouvelle commande fétiche, echo, et ajoutons quelques petits extras pour présenter le concept :

echo "J'aime le H4cK1nG" | base64

Ici, le texte produit en sortie standard par echo est transféré par le tube – le symbole « | » dans la commande – jusqu’à la commande base64, qui va modifier le texte pour l’encoder en base64 (de plus amples explications seront données sur ce codage, retenez uniquement que cette commande va transformer nos données comme indiqué dans ces explications). Si je tenais absolument à vous présenter ce flux, c’est que son utilisation peut être utilisée à des fins malicieuses, notamment en redirigeant du code malveillant et en l’exécutant à l’aide du tube.

Par exemple, si je voulais exécuter une fork bomb sur le système de quelqu’un sans que cette personne ne s’en rende compte, j’utiliserai la ligne suivante :

echo "OigpeyA6fDomIH07Ogo=" | base64 -d | bash

NOTE : Ce code n’est pas si malveillant que ça, car il n’y aura aucun dommage sur la machine, mais a le don d’énerver puisqu’il force le redémarrage complet.

Ici, le code base64 est déchiffré à l’aide du paramètre -d de la commande, puis envoyé comme tel à l’interpréteur bash qui va se charger de lire le code.

NOTE : Ce code déchiffré est appelé fork bomb, c’est un code à créer des processus en chaîne. Plus d’informations dans les pages concernant ces derniers.

Lire un fichier

Nous avons déjà vu tout à l’heure une manière de lire un fichier avec la commande cat. Même si je ne vous en avais pas parlé, vous vous doutiez bien après avoir exécuté le code que ce programme servait à la lecture de fichier. Eh bien, dans la réalité, cat est une commande beaucoup plus complexe que ça, car elle ne sert pas qu’à la lecture de fichiers, mais à la concaténation de ceux-ci.

Si vous n’avez jamais entendu ce mot, c’est un peu normal, il est tombé en désuétude dans la langue française, comme le mot « désuétude » lui-même. Pourtant, l’utilité d’un tel concept est primordiale en informatique, car sans lui, impossible de lier deux textes ou deux chaînes de caractères en un. La syntaxe de cat devient donc un peu plus complexe puisqu’une infinité de fichiers peuvent être sujets à la même opération de concaténation :

cat [fichier] (fichier) (fichier) ...

NOTE : Les arguments entre parenthèses ne sont pas obligatoires. Ici, l’ajout de plus d’un fichier à la lecture n’est pas un impératif à la bonne exécution.

Le problème avec cat, c’est qu’en dehors de la concaténation de deux fichiers dans un autre, son utilisation est peu pratique. En effet, lorsque la commande imprime du texte, elle affiche l’entièreté du contenu d’un fichier d’un coup, ce qui rend la lecture complexe, surtout lorsque l’on se trouve dans la console (le truc immonde en deux couleurs, je suis sûr que vous n’avez pas oublié votre plus grand cauchemar). Alors il existe bien des alternatives, comme lire les 10 premières lignes d’un fichier avec head :

head [fichier]

Ou lire les 10 dernières lignes avec tail :

tail [fichier]

NOTE : N’hésitez pas à lire le manuel pour plus d’options avec ces commandes.

Mais, in fine, le résultat reste le même en termes de praticité. Ce qu’il nous faudrait, ce serait un petit programme faisant défiler les lignes au bon gré de l’utilisateur. Cette commande existe, et elle s’appelle less, pas besoin de tergiverser, voici sa syntaxe, ô combien claire et efficace :

less [fichier]

Supprimer des fichiers ou des dossiers

Dans le panel des actions à absolument maîtriser, il y a les classiques que nous avons déjà vus, comme la création et l’édition de fichier, mais il en reste une qu’il nous faut absolument étudier : la suppression définitive des fichiers et dossiers.

WARN : Vérifiez bien à deux reprises avant de supprimer quoique ce soit, car ici, pas de corbeilles ou de confirmations lorsque l’on travaille dans le terminal…

Ces deux actions requièrent l’utilisation de la commande rm, dont la syntaxe pour les fichiers est la suivante :

rm [fichier]

Il n’y aura plus qu’à ajouter l’option -R et le nom du dossier en argument pour supprimer un répertoire et tout son contenu (-d étant privilégié lors d’un vide) :

rm -R [dossier]

WARN : Si la commande rm est si dangereuse, c’est qu’elle peut mettre fin à l’existence de votre système avec cette simple ligne :

rm -Rf /*

Je vais vous donner quelques menues explications sur la commande de l’encadré ci-dessus, même si vous ne devez en aucun cas l’exécuter sur votre machine :

NOTE : Le joker a un véritable pouvoir de passe-partout. Avec, vous pourrez très bien supprimer tous les fichiers png (image) d’un dossier par exemple :

rm *.txt

Éditer un fichier

Éditer un fichier, c’est le transformer pour qu’il ressemble à ce que l’on souhaite. Vous l’avez déjà fait auparavant sur Windows, quand vous ouvriez le bloc note ou une page Word. Quand on parle d’édition, on fait référence à la modification du fichier, de son contenu ou bien de son contenant (son nom, ses métadonnées, sa place, etc). Étudions une commande fortement intéressant permettant le déplacement d’un fichier dans un autre dossier :

mv [fichier] [dossier]

Par exemple, si je désire déplacer livre.txt dans mes documents, je ferais :

mv livre.txt Documents/

mv fonctionne également le faire avec un chemin absolu :

mv [fichier] /chemin/vers/votre/dossier

Un chemin absolu par de la racine de l’ordinateur, il permet de déplacer des fichiers vers une destination précise, peu importe l’endroit où l’on se trouve dans le système de fichier.

Une autre commande bien pratique, assez proche de mv est cp. Cette dernière permet de copier un fichier d’un dossier A vers un dossier B :

cp [chemin1] [chemin2]

[chemin1] est le fichier à copier et [chemin2] est la destination que la copie va prendre. Les deux routes peuvent être relatives ou absolues, cependant, faites bien attention lors de la copie d’un dossier à rajouter un « / » à la fin de [chemin2] pour éviter que son contenu ne soit remplacé par celui de [chemin1].

NOTE : Pensez à utiliser l’option -r pour copier des dossiers. Rappelez-vous de bien lire le manuel pour connaître les tenants et aboutissants d’une commande.

Passons maintenant à la partie la plus intéressante de l’édition : la modification du contenu des fichiers.

Pour ce faire, nous aurons besoin d’un éditeur de texte. Évidemment, utiliser un éditeur classique et graphique comme Sublime Text, Atom ou Vscode est bien plus pratique que ce que nous allons voir, mais le but finale de tout ceci est de pouvoir éditer ses fichiers depuis la console, ce qui s’avéra très pratique lorsque vous aurez pris le contrôle d’une machine et que l’édition d’un fichier devra être faite.

Commençons par découvrir l’éditeur Nano :

nano

Celui-ci est assez simple d’utilisation car il n’est pas vraiment très puissant. Pour en sortir, il suffit de taper Ctrl + X, l’éditeur devrait alors vous proposer de sauvegarder votre fichier puis de rentrer un nom.

Nano propose d’autres options qu’il vous liste dans la barre inférieure à votre texte. De quoi pimenter un peu l’édition, mais rien de bien incroyable…

NOTE : Sur Linux, « ^ » veut dire Ctrl et « M- » veut dire Alt. Donc ^C veut dire Ctrl + c (minuscule) et M-U correspond à Alt + u.

Je sens que vous êtes resté un peu sur votre faim avec ce logiciel. Permettez-moi donc de vous en présenter un autre : Vim. Vous pouvez le lancer avec :

vim

Vous arrivez devant un écran fourmillant d’informations en tout genre et je vous conseille de le quitter en tapant :q.

NOTE : Il se peut que la commande ait renvoyé une erreur lors de l’exécution. Cela veut dire que Vim n’est pas installé sur votre système. Pour y remédier, tapez la commande suivante que nous expliquerons très prochainement :

sudo apt update && sudo apt install vim -y

Renseignez votre mot de passe, ou celui que vous avez choisi pour l’admin de la machine. Laissez le programme faire, et tentez une nouvelle fois Vim. Retour à la normale… Ça fait peur, n’est-ce pas ? Pas d’inquiétude à avoir, Vim dispose d’un programme vous permettant d’apprendre à l’utiliser, vous n’avez qu’à exécuter la commande suivante et lire les instructions :

vimtutor

Suivez le guide à la lettre et vous deviendrez un professionnel de l’édition sur Linux (rien que ça). Comme je me sens d’une âme charitable aujourd’hui, je vous propose une petite liste des différentes commandes de Vim :

Se déplacer et modifier du texte

DescriptionCommande
Aller en haut, droite, bas, gauchej k l h
Insérer sous le curseuri
Ajouter du texte sous le curseura
Insérer en début de ligneI ou 0i
Ajouter en fin de ligneA ou $a

Supprimer des éléments

DescriptionCommande
Supprimer sous le curseurx
Supprimer le mot à droite du curseurdw
Supprimer une lignedd ou :dl

Quitter Vim

DescriptionCommande
Quitter sans avoir modifié:q
Sortir en sauvegardant:wq
Quitter en abandonnant le travail fait:q!
Sauvegarder sans sortir:w

Édition pratique

DescriptionCommande
Copier une ligneyy
Coller le résultatp
Annuler la modification précédenteu
Revenir sur l’annulationCtrl + r

Ne vous inquiétez pas, si la liste et longue, à force de pratique, vous arriverez à maîtriser chacun de ces cas et serez un habitué de l’utilisation de Vim. Vous vous rendrez compte qu’un temps inestimable sera gagné grâce à tous ces raccourcis.

Afin de vous aider à apprécier la programmation et l’édition sur Vim, changer un peu son apparence va grandement contribuer à le rendre plus agréable :

curl -sLf https://spacevim.org/install.sh | bash

Je vous conseille également de vous servir de cet éditeur pour chaque édition que vous ferez à l’avenir.