Introduction aux systèmes d'exploitation


Creative Commons License
This Introduction aux systèmes d'exploitation tutorial is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License
Préambule
Cours introductif à l'utilisation des systèmes d'exploitation d'ordinateurs basé sur les systèmes Windows et UNIX. Contrairement à Windows, UNIX est une famille de systèmes d'exploitation dont les déclinaisons les plus connues sont aujourd'hui LINUX, Mac OS X et Android.
Plan
Système d’exploitation, caractérisation
Définition selon Wikipédia

Historique
UNIX est une famille de systèmes d'exploitation. Il est réputé tourner sur n'importe quel ordinateur (téléphone portable jusqu'à des ordinateurs serveur de taille considérable). Windows lui provient de DOS (Disk Operating System) conçu pour l'IBM PC.

IBM PC
Services vitaux
Services (aujourd'hui) incontournables
Services (plus) accessoires
Logiciels, programmes
Fonctions reconnues d'un ordinateur et de son système d'exploitation
OS layers
Codification

Fondements

Utilisations

Le problème est que l'on doit communiquer avec les ordinateurs des données que ce soit dans les programmes ou au niveau des commandes données au système d'exploitation. Toutes les données, quelles qu'elles soient (couleurs, adresses Internet, nombres décimaux ou entiers dans les calculs...) sont codifiées comme des suites d'octets. En résumé, si j'écris "26" pour dire que je veux charger un octet donné de l'ordinateur, que doit comprendre l'ordinateur :
  • 26(2) ? → impossible en base "deux" car on n'utilise que l'alphabet {0, 1} !
  • 26(8) ?
  • 26(10) ?
  • 26(16) ?
  • Encore autre chose ?
Le mieux est d'exprimer les données selon le système hexadécimal. Ainsi, sous Unix, '\x26' désigne une suite de caractères mais \ dit d'abord qu'il faut interpréter x26 de façon NON littérale. x dit que l'on s'exprime en base "seize" et 26 est donc cette valeur en base "seize". Résultat : En s'appuyant sur le système octal, le résultat est  : On peut aussi sous UNIX utiliser une notation spéciale du shell pour traiter les nombres en hexadécimal ou en octal :

Exemple : codification de la couleur

Toute couleur est un mélange de rouge, vert et bleu. Pour coder une couleur, on va utiliser un octet de la mémoire pour chaque nuance de couleur de base ainsi qu'un autre octet appelé le coefficient alpha pour définir le niveau d'opacité (255(10) → totalement opaque et 0 → totalement transparent). Ainsi, les nuances de rouge varient de 0 à 255(10) (c'est-à-dire de 0 à FF(16)). Pour obtenir le noir, on a rouge = 0, vert = 0 et bleu = 0. Pour obtenir le blanc, on a rouge = 255(10), vert = 255(10) et bleu = 255(10). L'orange est un mélange de rouge = 255(10), vert = 165(10) et bleu = 0.

De manière plus générale, chaque système d'exploitation, chaque shell, chaque commande du shell... exige une expression de la couleur. Par exemple, la commande shell tput codifie les couleurs de manière simplifiée : Mais de manière plus cohérente, on peut exprimer précisément une couleur. Par exemple, un orange totalement opaque est (on considère que l'octet le plus à gauche est le coefficient alpha) : '\xFF\xFF\xA5\x00'
Composants d'un système d'exploitation
De nos jours, seuls les informaticiens chevronnés utilisent un système exploitation hors du Bureau. Le Bureau est un environnement ergonomique et intuitif qui fournit 95% et plus des manipulations de base. Toutefois, certaines actions peuvent requérir un contrôle plus fin de l'ordinateur. De telles actions appelées commandes sont élaborées alors de façon syntaxique afin d'ajouter des paramètres spécifiques. Par exemple, visualiser ce que contient un ordinateur ne montre pas par défaut les fichiers cachés. Ces fichiers peuvent être des virus ou des fichiers "système". Dans ce dernier cas, ils sont délibérement cachés pour ne pas être altérés via de mauvaises manipulations. Un informaticien chevronné qui "sait ce qu'il fait" peut avoir besoin de faire des manipulations "avancées". Par exemple, le paramètre a dans une commande de visualisation du contenu d'un répertoire stipule que l'on veut "tout" voir (a pour all en anglais). Comment tout visualiser par exemple :

Composants annexes importants

Un système d'exploitation fournit un ensemble d'outils aux informaticiens pour concevoir de nouveaux logiciels, programmes. Pour les utilisateurs "expert", ces outils peuvent aussi s'avérer nécessaires.

Editeur de textes

Un éditeur de texte est un moyen de construire un texte utilisant les systèmes de codification universelle des caractères et signes (ASCII, UNICODE). Un éditeur de texte n'a pas pour but de construire un texte dont l'impression papier répond à des critères esthétiques. Pour cela, on utilise un logiciel de traitement de texte (Open Office, Microsoft WORD, LaTeX…). Un éditeur de texte a majoritairement vocation à écrire des programmes dont les fichiers de commande. On peut avoir des éditeurs de texte dédiés à des formats particuliers comme HTML pour le Web (logiciel gratuit BlueGriffon)
Les éditeurs de texte les plus connus sont :

Compilateur, interpréteur

Un compilateur est un logiciel de transformation d'un programme informatique écrit dans un langage de programmation donné (C, C++, Pascal…) en vue d'être transformé dans le langage compris par l'ordinateur. Ce dernier dit "langage machine" dépend du processeur utilisé (marques AMD, IBM, Intel…). La forme évoluée d'un langage machine est l'assembleur alors que la forme primitive est le binaire présenté en mode hexadécimal pour plus de concision
Un interpréteur est similaire à un compilateur sauf qu'il manipule le texte d'un programme (écrit en Java par exemple) sous forme de code "intermédiaire" (bytecode en Java par exemple) généré au préalable par un compilateur. Le code intermédiaire est compris par l'interpréteur qui, en temps réel, envoie des consignes à la machine. Un interpréteur Java est appelé "machine virtuelle" ou Java Virtual Machine (JVM) en anglais. Un interpréteur a le défaut de ralentir l'exécution des programmes sur un ordinateur mais a l'avantage de s'affranchir de la plateforme matérielle offrant ainsi une grande portabilité des programmes. En Java, sous Windows, java.exe est la JVM alors que que javac.exe est le compilateur

Browser

Un "browser", littéralement fouineur en français, permet d'explorer un ordinateur de façon assistée et ergonomique (explorer.exe dans Windows par exemple) jusqu'à explorer un réseau d'ordinateurs. C'est le cas de logiciels comme Firefox, Chrome, Safari, Opera ou Internet Explorer qui permettent d'explorer le Web
Shell
Le shell est un programme que l'on peut lancer et arrêter par la commande exit dans UNIX et Windows. Lancement : Un shell en cours est caractérisé par un invite de commandes (section suivante). On peut taper n'importe quelle commande qui une fois interprétée donne (ou non parfois) un résultat affiché à l'écran (ce résultat pouvant être un message d'erreur en cas d'échec). Par exemple, on cherche à obtenir des informations sur le système d'exploitation que l'on utilise : Sous UNIX, les backquotes `` (ou guillemets arrière en français) ont pour usage d'entourer une commande en vue d'exploiter son résultat dans une autre commande. Par exemple, si l'on veut envoyer un message à soi-même, on peut utiliser la commande whoami qui va donner le nom sous lequel le système d'exploitation nous reconnait (login) : Pour info., l'envoi de message sous Windows  s'opère comme suit : net send FranckBarbier Coucou!
Invite de commande
Le shell est matérialisé par un invite de commande (ou "prompt" en anglais). Par défaut, il se limite au caractère '$' sous UNIX et '>' sous Windows mais il est souvent reconfiguré de manière à lister à chaque apparition des informations de contexte, par exemple, l'endroit où l'on se trouve dans le système de fichiers, le nom de son compte, etc. Il est fort intéressant de le configurer à son goût. Pour cela, on peut d'abord voir la manière dont il est composé : On peut ajouter du texte personnel ou (inclusif) des informations disponibles sur la machine. Par exemple, '\H' correspond au nom complet de la machine sous UNIX alors que '$D' correspond à la date système sous Windows. Exemple de reconfiguration :
Gérer les comptes et les utilisateurs
Les utilisateurs d'un système d'exploitation se partagent entre informaticiens chevronnés (concepteurs de logiciels, programmes), utilisateurs "expert" à même d'administrer l'ordinateur et simples utilisateurs. Chaque utilisateur dispose d'un compte (ou login en anglais) et d'un mot de passe associé. Chaque compte est détenteur de droits autorisant ou non des actions. Les droits suprêmes de "tout faire" sont attribués à un ou plusieurs administrateurs. Il en faut toujours au moins un : Des commandes de base ne sont donc accessibles qu'aux administrateurs, dont typiquement la création d'utilisateurs nouveaux, l'attribution d'un mot de passe, la suppression d'utilisateurs, etc. En UNIX, ce sont les commandes useradd, passwd et userdel. En Windows, on passe plus volontiers par le bureau pour créer de nouveaux utilisateurs ou supprimer des utilisateurs existants. Toutefois, la commande net user avec paramètres permet de s'en sortir, exemples : net user <FranckBarbier> /ADD ou net user <FranckBarbier> /DELETE

Par définition, un utilisateur "administrateur" a loisir de modifier les groupes, leurs droits, l'appartenance d'un utilisateur (via son nom de compte) à un groupe ou un autre, etc. Cette organisation en place, chaque ressource de l'ordinateur est la propriété d'un utilisateur donné. Son usage hors de son propriétaire attitré peut alors faire l'objet de réglages (ex. en UNIX) :
En UNIX, il existe la possibilité de devenir dynamiquement administrateur (sous réserve de connaître le mot de passe !) via la commande su. On peut différemment utiliser la commande sudo <commande>commande est une commande dont l'autorisation a préalablement été donnée à l'exécuteur de sudo. Sous Windows, l'équivalent de sudo est runas

Un compte établi sur un système d'exploitation donne a minima l'accès à un espace de stockage sur le disque dur de l'ordinateur. Au moment du login, l'utilisateur "atterrit" donc dans un répertoire dont il est propriétaire, par exemple : Un certain nombre de sous-répertoires peuvent être prédéfinis pour des usages dédiés, par exemple :
Système de fichiers
Note générale : cette section aborde succinctement la notion de système de fichiers. Cette notion est développée en détail durant les travaux pratiques

Caractérisation

Le système de fichiers est un élément essentiel d'un système d'exploitation. Il permet pour l'essentiel d'organiser données et programmes en éléments appelés fichiers et en répertoires ; ces derniers permettent l'organisation arborescente des fichiers

Allocation

Il est assez illusoire d'envisager un système d'exploitation sans au moins une unité de stockage (typiquement un "disque dur") dite "maître" (master disk) sur laquelle sont matérialisés fichiers et répertoires. A ce titre, rappelons que MS-DOS (MicroSoft Disk Operating System), l'ancêtre de Windows, fait directement référence à un disque "maître"
Tout système de fichiers est incarné par une table d'allocation (en tout début de la zone du disque pour un accès plus rapide) des fichiers. En fait, la différence entre fichier et répertoire est ténue, un répertoire n'étant qu'un fichier contenant d'autres fichiers, dont des répertoires pour l'arborescence
Dans un tel contexte, le formatage d'un disque n'est que l'opération de définition d'une table d'allocation selon un format particulier (voir exemple dans la figure)
Table d'allocation de fichiers
Chaque système d'exploitation peut utiliser une méthode à lui pour implanter une telle table sur un disque avec des risques d'incompatibilité lorsque l'unité de stokage est mobile en particulier (clef USB typiquement)
Le mécanisme d'allocation historique de MS-DOS et Windows est le système FAT (File Allocation Table) remplacé ensuite par NTFS (New Technology File System). Mac OS X utilise lui un mécanisme qui lui est propre. Toutefois, FAT et NTFS sont assez répandus pour être réputés gérés par toutes les variantes d'UNIX
Sous UNIX, il est possible de visualiser des informations sur les fichiers et répertoires en liaison avec leur allocation sur le disque, c'est le paramètre -i (i pour inode) dans la commande ls

Nommage

Les fichiers sont de différente nature selon ce qu'ils contiennent. La convention historique est que le suffixe de leur nom indique cette nature mais ce mécanisme n'est toutefois pas 100% robuste. Exemples :
Les programmes informatiques qui transforment les données sont aussi matérialisés ou tout simplement contenus dans des fichiers. Il y a donc deux grandes catégories de fichiers : les fichiers de données "statiques" et les fichiers exécutables ou "de commande" (programmes), qui eux sont "dynamiques". Les suffixes des programmes sont .bat et .cmd pour les fichiers de commande ou encore .com, .exe, .obj, .lib, .dll, .class, .jar dans le système Windows. Dans le système UNIX, ce sont .obj, .lib, .class, .jar mais un suffixe n'est pas le critère déterminant pour être un "programme" (voir ici). Sous UNIX, le plus sûr moyen de différencier fichiers programme et fichiers normaux est d'utiliser l'option -F dans la commande ls

Caractères spéciaux dans le nommage de fichier

Répertoires

Les répertoires sont juste des fichiers particuliers. Ils contiennent des répertoires et des fichiers contrairement à des fichiers "terminaux" qui ne contiennent que des données et des programmes. Il y a de nombreux moyens de distinguer un répertoire d'un fichier terminal :
Les répertoires sont créés, détruits et manipulés (navigation) préférablement de manière graphique (Bureau). Toutefois les manipulations via la souris ne sont jamais que la mise en oeuvre des commandes suivantes :
Certains symboles désignent des répertoires particuliers : / (\ sous Windows) la racine, . le répertoire où l'on se trouve actuellement, .. le répertoire père de ce dernier. Il est aussi possible d'accéder directement au répertoire "maison" d'un utilisateur, celui où il "atterrit" lorsqu'il se logue :

Liens

Une organisation de fichiers et répertoires complexe (au delà d'un simple ordinateur sur un réseau d'ordinateurs) va conduire à des arborescences larges et profondes. Malgré le bureau, il peut s'avérer fastidieux de naviguer alors qu'on est souvent intéressé que par 2 ou 3 répertoires. L'écran principal d'un bureau (d'ailleurs appelé "Bureau" ou "Desktop") est lui-même un répertoire particulier du système de fichiers. Il devient par exemple intéressant de créer un lien sur le "Bureau" sur un répertoire "très profond" de manière à y accéder directement par un click ou double-click. Attention : un raccourci n'est qu'une image, le détruire est donc une opération sans risque puisque le répertoire "pointé" n'est pas touché par la destruction.
Un lien est une notion qui généralise celle de raccourci. Dans Windows, on utilise volontiers le terme "jonction" pour un lien entre répertoires. Pour visualiser spécifiquement les liens, UNIX utilise le paramètre -F alors que Windows n'a besoin d'aucun paramètre. Par exemple, on peut compter les liens comme suit :
Attention, il est possible de créer des liens réels qui sont pas des liens "en dur" :

Droits, attributs

Pour des raisons de fiabilité, les fichiers et répertoires ont des attributs précisant à qui ils appartiennent : utilisateur, celui ayant un "compte" sur l'ordinateur ainsi que le groupe auquel appartient cet utilisateur. Windows et UNIX offrent aussi la notion de "reste du monde". Les fichiers et répertoires disposent aussi d'attributs d'usage (lecture r, écriture w et exécution x). Sous Windows, d'autres caractéristiques comme archive (a), caché (h) ou système (s) sont disponibles, voir aussi ici. Note : sous UNIX, x pour un répertoire veut dire que l'on peut entrer dedans, comme chercher dedans, etc. On peut aussi faire varier le propriétaire des fichiers et répertoires :

Actions de base

Créer un fichier

Détruire un fichier

Déplacer un fichier

Dupliquer un fichier

Tester un fichier

Avoir des informations détaillées sur un fichier

Contenu de fichiers

Format des fichiers

Tout fichier n'est jamais qu'une suite de 0 et de 1 qui regroupés par huit donnent des octets. Toutefois, la façon d'interpréter les suites de bits et donc d'octets, leur position, constituent un format. Le format le plus simple est le format ASCII ou "texte". Usuellement (mais pas obligatoirement) un fichier texte est identifié par le suffixe .txt. Il y a une kyrielle d'autres formats non directement exploitables sur un système d'exploitation. Par exemple, le format extension .mov est un format multimédia propre au monde Apple et au logiciel QuickTime. En l'absence de ce dernier, il est impossible sur un système d'exploitation de manipuler des fichiers .mov

Avoir des informations détaillées sur le contenu d'un fichier

Caractères de contrôle

Les fichiers sont composés de caractères visuables et d'autres "moins" appelés caractères de contrôle. Le problème des caractères de contrôle est qu'ils peuvent être interprétés différemment entre UNIX et Windows. De plus, ils ont un visuel spécial pour les manipuler dans les commandes. Par exemple, '\r' désigne le carriage return alors que '\n' désigne le line feed. Windows place '\r' ou '\n' dans le contenu d'un fichier pour effectuer un saut de ligne alors qu'UNIX n'utilise que '\n'. Un fichier construit sous Windows avec '\r' uniquement est donc réputé sans saut de ligne sous UNIX. On peut détecter les caractères de contrôle sous UNIX comme suit : On peut éventuellement procéder à un nettoyage comme suit : Sous UNIX, de manière générale, mieux vaut exprimer un caractère entre single quotes, par exemple le caractère @ est désigné par '@'. Le caractère \ lui joue un rôle spécial. Il désigne au shell le besoin de procéder à une interprétation du caractère qu'il préfixe. '\r' n'est donc pas le couple de caractères \r mais le carriage return. '\\' désigne donc le caractère \ lui-même. Les chaînes de caractères s'expriment elles aussi entre double quotes mais il y a lieu de bien contrôler la différence (voir ici). Par exemple, "\r\r" ou '\r\r' est la chaîne de caractères composé de deux carriage return. La commande tr permet des manipulations efficaces sur les caractères et chaînes de caractères

Sous Windows, le caractère ^ joue le rôle de \ sous UNIX. Exemple : ECHO La bonne utilisation du programme est : Prog ^<drive:^>.En fait, comme < et > sont des caractères réservés pour rediriger le flux d'informations, il faut les préfixer de ^ pour qu'ils soient interprétés littéralement
Configuration d’un système d’exploitation
C’est la possibilité de fixer par défaut des comportements aux services qu’il offre. Par exemple, il peut être utile de systématiser le lancement d'un logiciel particulier au démarrage du système d'exploitation.

Localisations, installations et désinstallations des logiciels, programmes

Les logiciels à installer sont des ensembles volumineux de fichiers de toute nature. Ils participent à la personnalisation d'un ordinateur en termes de services offerts. L'installation consiste à tester l'état du système d'exploitation : compatibilité de versions, espace disque suffisant, ressources disponibles (Webcam par exemple si le logiciel a vocation à communiquer par Internet, microphone intégré si c'est un logiciel de téléconférence, etc.). Ensuite, la procédure d'installation consiste à placer aux endroits idoines de l'ordinateur les fichiers constituant le logiciel. Le fichier principal dit "exécutable" de lancement du logiciel doit être situé à un endroit bien particulier. Si le logiciel est destiné à tous ou à un bon nombre d'utilisateurs de la machine (cas général) alors des répertoires prédéfinis sont souhaitables : Si le logiciel est local à l'utilisateur, il peut être installé dans le répertoire d'atterissage. Toutefois, un logiciel est un programme qui souvent utilise des sous-programmes déjà installés ou partie intégrante du système d'exploitation. Par défaut, le système d'exploitation recherche les programmes et les sous-programmes à des endroits prédéterminés listés dans la variable d'environnement PATH. On peut regarder son contenu comme suit :
Il y a donc parfois intérêt d'augmenter la liste des répertoires où l'on est susceptible de trouver des programmes. De façon temporaire, la variable PATH est modifiée dans la session courante (on ajoute le répertoire d'atterrissage) : Toutefois, il est essentiel de ne pas dispatcher les fichiers exécutables incarnant les logiciels et les programmes de façon anarchique. Typiquement, il existe des conventions voire des règles comme le FHS sous LINUX qui forcent l'utilisation de répertoires prédéterminés à savoir :

Registre de Windows

Windows dispose d'un registre qui sont des couples clefs/valeurs. Ce registre dont l'usage irréfléchi peut causer les pires problèmes à Windows est une sorte de dictionnaire de données. Pour lancer l'éditeur de registre, il faut lancer le programme regedit
On peut aussi opérer des modifications dans le registre, cela en ligne avec tous les paramètres nécessaires grâce à la commande REG (voir ci-après).

Association entre fichiers de données et logiciels

Les fichiers de données contiennent les informations traitées par un logiciel donné. Par exemple, un logiciel de retouche d'images est capable de manipuler des fichiers contenant des images dans les formats les répandus : JPEG, GIF, PNG, TIFF, etc. Typiquement, tout suffixe d'un fichier est associé à plusieurs programmes censés savoir gérer la nature de ce fichier. Parmi ces programmes, un est défini par défaut (ou non d'ailleurs pour certains suffixes "inconnus"). On trouvera ainsi la clef .JPEG associée à la Visionneuse de photos Windows (prog. par défaut). Une installation d'un logiciel de retouche d'images procédera sûrement, si elle y est autorisée, au remplacement de la Visionneuse de photos Windows par le chemin d'accès au nouveau logiciel installé

Exemple, création d'un équivalent de .bashrc_login avec Windows

Il faut tout d'abord créer un fichier de commande contenant les instructions que l'on veut lancer au démarrage de la machine. Appelons ce fichier .bashrc_login.cmd et remplissons-le des instructions appropriées. Il faut ensuite ajouter dans le registre Windows le chemin d'accès à ce fichier de commande pour la clef prédéfinie servant justement à décrire les programmes devant se lancer automatiquement au démarrage :
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Mon_logiciel /d "C:\Users\FranckBarbier\.bashrc_login.cmd"

Variables d'environnement

Les variables d'environnement ont un nom et une valeur. Elles donnent des informations sur le système d'exploitation en général. Un certain nombre d'entre elles sont prédéfinies et en lecture seule (variables "système" en général). On peut en créer d'autres pour permettre à des programmes différents (que l'on a créé soi-même particulièrement) de communiquer entre eux.

Visualisation

Contenu d'une variable

Quelles sont toutes les variables définies ?

  • UNIX & Windows : set (env aussi sous UNIX)

Création (dans la session uniquement)

Création permanente

Suppression

Obtenir des informations

Quel est le nom de sa machine ?

Programmes qui sont en cours d'exécution

Espace disque

L'espace disque de chaque unité de stockage doit être contrôlé de manière à éviter des pertes de données. Simplement, en détectant une unité via le Bureau, on doit être capable par un click droit d'obtenir des informations dont l'espace occupé, le type de contrôleur de disque, la correspondance entre unités physiques et unités logiques…

Utilisateur(s)

Rechercher des informations dans un fichier

Visualisation brute

La visualisation avancée se fait elle par programme spécialisé, programme qui préalablement détecte la nature profonde d'un fichier : binaire, texte, format propriétaire, etc.

Détection de contenu

Caractérisation de la nature d'un fichier

Obtenir des informations sur les commandes elles-mêmes

Suffixes des fichiers Windows désignant des exécutables

Fichiers de commande

Les fichiers de commande sont des programmes où chaque instruction donnée à l'ordinateur correspond à une commande de base interprétable par le shell. Les fichiers de commande permettent d'écrire des séquences d'instructions que l'on a l'habitude d'exécuter souvent. Au-delà, ils peuvent être des programmes complexes incluant de l'algorithmie, de la gestion d'erreurs… comme par exemple des programmes d'installation de logiciels volumineux.

En fait, les fichiers de commande permettent l'enchaînement automatique des commandes alors que le shell (ou le bureau) est un mode action/réaction. On attend et visualise le résultat d'une commande (action) avant de réagir par une autre commande (réaction). Toutefois, UNIX et Windows autorise l'exécution asynchrone d'une commande s'il est inutile d'en attendre le résultat avant d'entamer une autre action. Exemple :

Ce mode a aussi des limites qui obligent à écrire des fichiers de commande dont le résultat oriente la suite des choses à faire, notamment en cas d'erreur

Windows

Historiquement, les fichiers de commande Windows sont suffixés par .bat (batch en anglais) ou .cmd. Ils sont construits via un éditeur de texte quelconque comme NotePad (Bloc-notes en français)
Exemple : Mon_premier_programme.cmd
@ECHO OFF
ECHO Mon premier programme… pret ?
PAUSE
CLS
ECHO Est-ce qu'Internet fonctionne ? Je vais verifier si je peux me connecter a Google…
PING www.google.com
IF ERRORLEVEL 1 GOTO y_a_une_erreur
GOTO pas_d_erreur
 :y_a_une_erreur
ECHO Bon, y'a une erreur apparemment :
ECHO %ERRORLEVEL%
GOTO fin
 :pas_d_erreur
ECHO Bon, pas d'erreur apparemment, je suis bien connecte a Internet et Google.
 :fin
Construction : C:\Users\FranckBarbier>notepad Mon_premier_programme.cmd
Lancement : C:\Users\FranckBarbier>Mon_premier_programme

UNIX

Historiquement, les fichiers de commande UNIX sont suffixés par .sh (shell en anglais) sans que ce soit obligatoire. Ils sont construits via un éditeur de texte quelconque comme TextEdit (Mac OS X) ou nano (UNIX).
Exemple : Mon_premier_programme.sh
# Ceci est un commentaire
echo "Mon premier programme… pret ?"
sleep 1s
printf "\033c" # 'clear' is simpler
echo "Est-ce qu'Internet fonctionne ? Je vais verifier si je peux me connecter a Google…"
ping -o www.google.com
if test $? = 0
then
echo "Bon, pas d'erreur apparemment, je suis bien connecte a Internet et Google."
else
echo "Bon, y'a une erreur apparemment : "
echo $?
fi
Construction : bash-3.2$nano Mon_premier_programme.sh
Configuration : bash-3.2$chmod u+x Mon_premier_programme.sh
Lancement : bash-3.2$./Mon_premier_programme.sh

Paramètres des fichiers de commande

$1 (%1 sous Windows), $2, (%2 sous Windows)... désignent les paramètres éventuels du programme ($0 (%0 sous Windows), le programme lui-même). Exemple UNIX :
Exécution du programme : ./Mon_programme.sh Coucou
Dans le programme lui-même : echo $1
Résultat à l'écran pendant l'exécution : Coucou
$? (%ERRORLEVEL% sous Windows) désigne le résultat de la dernière commande effectuée
$# (commande de décalage SHIFT sous Windows) désigne le nombre de paramètres utilisés du programme. Exemple Windows :
@ECHO OFF
 :On_tourne_en_rond_depuis_ici
IF "%1"=="" GOTO On_arrete_de_tourner_en_rond_ici
ECHO %1
SHIFT
GOTO On_tourne_en_rond_depuis_ici
 :On_arrete_de_tourner_en_rond_ici

Flux et opérateurs sur les flux

Chaque commande exécutée produit un résultat. Ce résultat qui est la "sortie" de la commande peut être injecté comme "entrée" d'une autre commande grâce au symbole | (pipe en anglais). Cela crée des flux de données.
Il existe d'autres symboles réservés (ne pas les utiliser dans les noms de fichiers !) dont les plus connus sont <, > ou encore &. Ces symboles orientent la manière dont le flux de données doit circuler. Exemple de visualisation triée d'un répertoire dans l'ordre alphabétique inverse : Autre exemple, placer le résultat d'une commande dans un fichier (créé à dessein) de façon automatique : Visualiser un fichier (a priori long) page par page :

Appel d'autres fichiers de commande

Structures de contrôle et intro. à la programmation sous UNIX

Structure if-then-fi et boucle while-do-done

Le fichier Commande_test_V1.sh permet de déterminer des propriétés du répertoire passé en paramètre (on saute dans le répertoire). Exemple d'usage : source Commande_test_V1.sh /etc
Le fichier Calculer_moyenne.sh permet de calculer la moyenne d'un nombre illimité de nombres passés en paramètres. Exemple d'usage : source Calculer_moyenne.sh 8 9 10 11 12

Structure if-then-else(elif)-fi et boucle for-in-do-done

Le fichier Commande_test_V2.sh permet de tester si le contenu du répertoire courant est composé de fichiers ou de répertoires. Exemple d'usage : source Commande_test_V2.sh

Structure case-esac

Le fichier Contenu_chaine_de_caracteres.sh permet de déterminer des propriétés d'une chaîne de caractères passée en paramètre. Exemple d'usage : source Contenu_chaine_de_caracteres.sh 1_Franck_Barbier

Boucle until-do-done

Le fichier Nombres_entiers.sh liste les nombres entiers à l'écran. Exemple d'usage : source Nombres_entiers.sh
Compression
Les fichiers peuvent atteindre des tailles importantes de sorte qu'il soit nécessaire de diminuer, dans la mesure du possible, ces tailles. Le gain espéré est de la place mémoire, de la place disque… et donc, un usage plus raisonné des ressources
La compression est un ensemble de mécanismes qui exploitent la théorie de l'information. Ainsi, considérant un fichier comme une suite d'octets, un algorithme de compression va chercher une codification plus économe des informations contenues dans le fichier sans perte de sens
Attention : la plupart des fichiers multimédia (photos, vidéos, sons…) sont basés sur des formats compressés. Les compresser donne en général peu de gain de place supplémentaire. Dans le même esprit, compresser des fichiers de petite taille est inutile car le gain réalisé (faible) est négligeable comparé au temps perdu en décompression

Algorithme LZW

Commandes de compression

Commandes de décompression

Sécurité
La sécurité prend différentes formes dans les systèmes d'exploitation. Elle est une préoccupation grandissante vu les comportements délictueux, sur Internet spécialement. Les fichiers doivent être protégés d'usages abusifs comme le vol de données, la dégradation gratuite, etc. Un système d'exploitation fournit un ensemble de moyens élémentaires pour assurer un minimum de sécurité dont les mots de passe associés aux comptes utilisateur

Changer son mot de passe

Il existe au-delà des mots de passe des outils de sécurité. Par exemple, Internet est fondé sur l'utilisation de ports de connexion qui sont des canaux que l'on ouvre et ferme pour communiquer. Les surveiller, voire les contraindre dans leur utilisation (ex. pare-feu Windows) est un moyen de la sécurité

Droits par défaut des fichiers

Chiffrement (cryptage)

Déchiffrement (décryptage)

Internet et réseau
Il est utile de connaître les connections de son ordinateur sur un réseau local comme celui de l'université ou le réseau Internet

Utilitaire réseau

Adresse Mac

Ports Internet

Commandes avancées
L'écriture de fichiers de commande peut mener à des programmes "système" extrêmement complexes. Cette section a vocation à approfondir quelques commandes ainsi qu'à étudier le langage d'interprétation des commandes qui disposent d'opérateurs pour les composer, par exemple cmd1 & cmd2 effectue deux commandes en paralèlle (UNIX) ou séquence (Windows) alors que cmd1 ; cmd2 les effectue en séquence (UNIX). Pour Windows, && est le mode parallèle. A titre introductif, consulter ici le WikiBook du Bash shell

Création d'alias

Alias en cours

Note : les alias sont disponibles en session uniquement

Destruction de processus

Récupération des résultats de commandes

Trier

Fichiers "système"
Correspondance entre commandes UNIX et Windows, une synthèse
Memento UNIX : compléments, détails des commandes et leurs paramètres usuels, fichiers de commande avec exemples plus fouillés, exercices...