Sortie vers un fichier Linux. Comment enregistrer la sortie de la console dans un fichier

Si la sortie vers la console (graphique) n'est pas très grande, vous pouvez simplement sélectionner un morceau avec la souris et le coller dans le message en cliquant sur le bouton du milieu. Sinon, vous pouvez utiliser la redirection de la sortie vers un fichier via un "entonnoir", comme ceci :

Certains paramètres de commande > logfile.txt

Pour voir le résultat de l'exécution à l'écran, et en même temps écrire dans un fichier, vous pouvez utiliser la commande tee :

Certains paramètres de commande | tee -a fichierjournal.txt

La commande setterm -dump crée un instantané du tampon de la console virtuelle actuelle sous la forme d'un fichier texte brut avec le nom par défaut screen.dump. Vous pouvez utiliser le numéro de la console pour laquelle vous souhaitez effectuer un vidage comme argument. Et l'ajout de l'option -file filename redirigera ce dump vers un fichier portant le nom spécifié. L'option -append ajoutera le nouveau vidage à un fichier existant - le screen.dump "par défaut" ou celui nommé avec l'option -file.

Ceux. après avoir utilisé une commande comme

Setterm -dump -file /root/screenlog

respectivement dans le dossier /racine/screenlog sera le contenu d'une page de console.

Trouvé une autre solution pour copier/coller du texte dans une console de texte sans souris. Vous pouvez également copier du texte à partir du tampon de défilement (c'est-à-dire tout ce qui est à l'écran et au-dessus de l'écran). Pour une meilleure compréhension, lisez à propos de l'écran du gestionnaire de fenêtres basé sur la console . Il peut également être utile d'augmenter la taille du tampon de défilement.

1) Écran d'exécution

2) Appuyez sur Entrée. Tous. Nous sommes dans la fenêtre console zéro.

3) Nous exécutons les commandes nécessaires, dont la sortie doit être copiée.

4) Ctrl+A, Ctrl+[ - nous sommes en mode copie. On place le curseur au début de la sélection, on appuie sur la barre d'espace, puis on place le curseur à la fin de la sélection, on appuie sur la barre d'espace. Texte copié dans le presse-papiers.

5) Ctrl+A, c - nous avons créé une nouvelle 1ère fenêtre.

6) Ctrl+A, 1 - nous sommes passés à la 1ère fenêtre.

7) Ouvrez n'importe quel éditeur de texte (?) (j'ai essayé dans mc) et appuyez sur Ctrl + A, Ctrl +] - le texte est inséré. Nous sauvons.

8) Ctrl+A, Ctrl+0 - revenir à la fenêtre zéro.

Comment augmenter le tampon de défilement ?

La première solution consiste à augmenter la taille du tampon par défaut (default) dans les sources du noyau et à le recompiler. Laissez-moi supposer que vous êtes aussi réticent à le faire que moi et cherchez un moyen plus flexible.

Et il existe un tel outil, mais il s'appelle framebuffer console , fbcon en abrégé. Cet appareil dispose d'un fichier de documentation fbcon.txt; si vous avez installé la documentation du noyau, alors vous l'avez. Cherchez-le quelque part autour /usr/partager branches (je ne peux pas donner le chemin exact en raison des différences de distributions).

À ce stade, je m'excuse : nous devons nous écarter un peu et parler un peu du tampon vidéo ( framebuffer ).

Le tampon vidéo est un tampon entre l'écran et la carte vidéo. Sa beauté est qu'il peut être manipulé : il permet des astuces qui ne fonctionneraient pas si l'adaptateur était connecté directement à l'écran.

Une de ces astuces est liée au tampon de défilement ; s'avère que vous pouvez "demander" au tampon vidéo d'allouer plus de mémoire au tampon de défilement. Ceci est réalisé via les paramètres de démarrage du noyau. Vous avez d'abord besoin framebuffer(tampon vidéo) ; Ensuite, vous demandez tampon plus grand faire défiler.

L'exemple suivant est pour GRUB mais peut facilement être adapté à LILO . Dans le fichier de configuration GRUB - menu.lst- recherchez la ligne correspondant au noyau, puis : Supprimez l'option vga=xxx, si présente. Ajoutez l'option video=vesabf ou tout ce qui correspond à votre matériel. Ajoutez l'option fbcon=scrollback:128 . Après cette procédure, la ligne de paramètre du noyau devrait ressembler à ceci :

Noyau /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128

La question est, pourquoi supprimer l'option vga=xxx ? En raison de conflits possibles avec l'option vidéo. Sur mon adaptateur ATI, je ne peux pas modifier le tampon de défilement si vga=xxx est répertorié. Peut-être que dans votre cas ce n'est pas le cas. Si les options ci-dessus fonctionnent - bien ; mais que se passe-t-il si vous souhaitez augmenter le nombre de lignes ou définir une police plus petite à l'écran ? Vous avez toujours fait cela avec l'option vga=xxx, et c'est ce qui a disparu. Ne vous inquiétez pas - la même chose peut être obtenue en modifiant les paramètres fbcon comme décrit dans le fichier fbcon.txt(mais non décrit dans cet article).

Avec l'option fbcon=scrollback:128, mon tampon de défilement est passé à 17 écrans (35 fois Shift+PgUp un demi-écran). Soit dit en passant, 128 est un kilo-octet. L'auteur de l'article prétend que plus ne peut être établi. Je n'ai pas essayé.

Vous pouvez utiliser des scripts.

Nom du fichier de script.log

lorsque toutes les commandes requises sont exécutées -

Tout est écrit dans filename.log

FreeBSD a un merveilleux utilitaire de surveillance qui vous permet de surveiller les terminaux, mais il s'est avéré que sous Linux, il exécute des fonctions complètement différentes =\ Cela vaut la peine de googler sur ce sujet, il y a quelque chose ...

Lorsque vous travaillez dans le terminal, vous voyez naturellement toutes les sorties des commandes en temps réel directement dans la fenêtre du terminal. Mais il y a des moments où la sortie doit être enregistrée afin de travailler avec elle plus tard (l'analyser, la comparer, etc.). Ainsi, en travaillant dans Bash, vous avez la possibilité de rediriger les informations affichées de la fenêtre du terminal vers fichier texte. Voyons comment c'est fait.

Option 1 : rediriger uniquement la sortie du terminal vers un fichier

Dans ce cas, le résultat complet du travail de toute commande sera écrit dans un fichier texte, sans l'afficher à l'écran. Autrement dit, nous allons littéralement rediriger les informations de l'écran vers un fichier. Pour ce faire, vous devez utiliser les opérateurs > Et >> et le chemin d'accès au fichier dans lequel écrire, à la fin de la commande en cours d'exécution.

Opérateur > enregistre le résultat de la commande dans le fichier spécifié et, s'il contient déjà des informations, les écrase.

Opérateur >> redirigera la sortie de la commande vers un fichier, et s'il contient également des informations, les nouvelles données seront ajoutées à la fin du fichier.

Examinons l'exemple de commande ls , qui affiche une liste de fichiers et de dossiers dans le répertoire spécifié. Écrivons le résultat de son travail dans un fichier texte. Nous devons écrire une commande, mettre un opérateur et spécifier le chemin vers le fichier :

Ls > /home/ruslan/exemple

Voyons maintenant si tout a fonctionné. Pour ce faire, vous pouvez utiliser n'importe quel éditeur de texte dont vous disposez. Vous pouvez également le faire directement dans le terminal en utilisant la commande cat :

Chat /maison/ruslan/exemple

Tout fonctionne.

Rappelez-vous, que " > " écrasera toutes les données qui étaient auparavant dans le fichier, donc si vous avez besoin d'ajouter quelque chose au fichier, utilisez l'opérateur " >> «

Disons qu'après avoir redirigé la sortie de la commande ls déposer " exemple » nous avons décidé de connaître la version du noyau du système et également d'enregistrer la sortie dans le même fichier. Pour connaître la version du noyau, utilisez la commande ton nom et paramètre -un , puis nous indiquons à Bash comment et où enregistrer le résultat de son exécution :

Uname -a >> /home/ruslan/exemple

Vérifions à nouveau le résultat :

Chat /maison/ruslan/exemple

Comme vous pouvez le constater, nous avons conservé les résultats des travaux et ls , Et ton nom .

Option 2 : rediriger la sortie vers un fichier et l'afficher à l'écran

Pas tout le monde et pas toujours pratique à utiliser les opérateurs > Et >> , car c'est encore mieux quand la rafale de commandes peut être observée en temps réel dans la fenêtre du terminal. Dans ce cas, nous pouvons utiliser la commande tee , qui affichera l'exécution des commandes à l'écran et l'enregistrera dans un fichier. Sa syntaxe est celle-ci :

Équipe | tee /chemin/vers/fichier

Cette option est similaire à l'opérateur > du paragraphe précédent, c'est-à-dire que lors de l'écriture dans un fichier, toutes les anciennes données seront supprimées. Si vous devez ajouter à un fichier, vous devez ajouter un paramètre à la construction -un :

Équipe | tee -a /chemin/vers/fichier

L'un des sujets les plus intéressants et les plus utiles pour les administrateurs système et les nouveaux utilisateurs qui commencent tout juste à comprendre comment travailler avec le terminal est la redirection d'E/S Linux. Cette fonctionnalité du terminal vous permet de rediriger la sortie des commandes vers un fichier, ou le contenu d'un fichier vers l'entrée d'une commande, de concaténer des commandes et de former des pipelines de commandes.

Dans cet article, nous verrons comment fonctionne la redirection d'E/S Linux, quels opérateurs sont utilisés pour cela et où tout cela peut être appliqué.

Toutes les commandes que nous exécutons nous renvoient trois types de données :

  • Le résultat de l'exécution de la commande, généralement les données textuelles demandées par l'utilisateur ;
  • Messages d'erreur - informent du processus d'exécution de la commande et des circonstances imprévues qui se sont produites ;
  • Le code de retour est un nombre qui vous permet d'évaluer si le programme a fonctionné correctement.

Sous Linux, toutes les substances sont considérées comme des fichiers, y compris les flux d'E/S linux - les fichiers. Chaque distribution a trois fichiers de flux principaux que les programmes peuvent utiliser, ils sont définis par le shell et identifiés par un numéro de descripteur de fichier :

  • STDIN ou 0- ce fichier est associé au clavier et la plupart des commandes font fonctionner leurs données à partir d'ici ;
  • STDOUT ou 1- c'est la sortie standard, ici le programme envoie tous les résultats de son travail. Il est associé à l'écran, ou plus exactement au terminal dans lequel le programme est exécuté ;
  • STDERR ou 2- tous les messages d'erreur sont sortis dans ce fichier.

La redirection d'E/S vous permet de remplacer l'un de ces fichiers par le vôtre. Par exemple, vous pouvez faire en sorte que le programme lise les données d'un fichier sur le système de fichiers au lieu du clavier, vous pouvez également écrire des erreurs dans un fichier plutôt qu'à l'écran, etc. Tout cela se fait à l'aide de symboles "<" Et ">" .

Rediriger la sortie vers le fichier

Tout est très simple. Vous pouvez rediriger la sortie vers un fichier à l'aide du symbole >. Par exemple, stockons la sortie de la commande top :

top -bn 5 > top.log

L'option -b entraîne l'exécution du programme en mode batch non interactif et l'option n répète l'opération cinq fois pour obtenir des informations sur tous les processus. Voyons maintenant ce qui se passe avec cat :

Symbole ">" écrase les informations du fichier s'il y a déjà quelque chose. Pour ajouter des données à la fin, utilisez ">>" . Par exemple, redirigez la sortie vers un fichier Linux pour top :

top -bn 5 >> top.log

La redirection par défaut utilise le descripteur de fichier de sortie standard. Mais vous pouvez le spécifier explicitement. Cette commande donnera le même résultat :

top -bn 5 1>top.log

Rediriger les erreurs vers un fichier

Pour rediriger la sortie d'erreur vers un fichier, vous devez spécifier explicitement le descripteur de fichier que vous souhaitez rediriger. Pour les erreurs, il s'agit du numéro 2. Par exemple, lorsque vous essayez d'accéder au répertoire racine, ls génère une erreur :

Vous pouvez rediriger l'erreur standard vers un fichier comme ceci :

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Pour ajouter des données à la fin d'un fichier, utilisez le même symbole :

ls -l /root/ 2>>ls-error.log

Rediriger la sortie standard et les erreurs vers un fichier

Vous pouvez également rediriger toutes les sorties, les erreurs et la sortie standard vers un seul fichier. Il y a deux façons de faire ça. Le premier, le plus ancien, est de passer les deux descripteurs :

ls -l /root/ >ls-error.log 2>&1

Tout d'abord, la sortie de la commande ls sera envoyée au fichier ls-error.log en utilisant le premier caractère de redirection. De plus, toutes les erreurs seront envoyées dans le même fichier. La seconde méthode est plus simple :

ls -l /root/ &> ls-error.log

Vous pouvez également utiliser ajouter au lieu de remplacer :

ls -l /root/ &>> ls-error.log

entrée standard du fichier

La plupart des programmes, à l'exception des services, reçoivent des données pour leur travail via une entrée standard. Par défaut, l'entrée standard attend une entrée du clavier. Mais vous pouvez forcer le programme à lire les données d'un fichier avec l'instruction "<" :

chat

Vous pouvez également rediriger immédiatement la sortie vers un fichier. Par exemple, réorganisons la liste :

trier trier la sortie

Ainsi, nous redirigeons la sortie d'entrée de Linux en une seule commande.

Utilisation des tunnels

Vous pouvez non seulement travailler avec des fichiers, mais également rediriger la sortie d'une commande comme entrée vers une autre. Ceci est très utile pour les opérations complexes. Par exemple, imprimons cinq fichiers récemment modifiés :

ls -lt | tête -n 5

Avec l'utilitaire xargs, vous pouvez combiner des commandes afin que l'entrée standard soit transmise en tant que paramètres. Par exemple, copions un fichier dans plusieurs dossiers :

test d'écho/tmp/ | xargs -n 1 cp -v fichiertest.sh

Ici, l'option -n 1 spécifie qu'un seul paramètre doit être remplacé par une commande, et l'option -v dans cp vous permet d'imprimer des informations détaillées sur les mouvements. Une autre commande utile dans de tels cas est tee. Il lit les données de l'entrée standard et écrit sur la sortie standard ou dans des fichiers. Par exemple:

echo "Test en T" | fichier tee1

En combinaison avec d'autres commandes, tout cela peut être utilisé pour créer des instructions complexes à partir de plusieurs commandes.

conclusion

Dans cet article, nous avons couvert les bases de la redirection de flux d'E/S Linux. Vous savez maintenant comment rediriger la sortie vers un fichier Linux ou la sortie d'un fichier. C'est très simple et pratique. Si vous avez des questions, posez-les dans les commentaires !

Alors que normalement, comme mentionné, les E/S du programme sont liées aux flux standard, il existe des fonctionnalités spéciales dans le shell pour rediriger les E/S.

5.5.1 Opérateurs >,< и >>

Les symboles " sont utilisés pour indiquer une redirection. > ", "< " Et " >> ". L'utilisation la plus courante consiste à rediriger la sortie d'une commande vers un fichier. Voici un exemple pertinent :

$ ls -l > /home/jim/dir.txt

Cette commande enregistrera une liste de fichiers et de sous-répertoires du répertoire qui était en cours au moment où la commande a été exécutée dans le fichier /home/jim/dir.txt ls; en même temps, si le fichier spécifié n'existait pas, il sera créé ; s'il existait, il sera écrasé ; si vous voulez que la sortie de la commande soit ajoutée à la fin d'un fichier existant, alors au lieu du symbole > utiliser >> . Dans ce cas, la présence d'espaces avant ou après les caractères > ou >> est immatériel et est uniquement destiné à la commodité de l'utilisateur.

Vous pouvez diriger la sortie non seulement vers un fichier, mais également vers l'entrée d'une autre commande ou vers un périphérique (tel qu'une imprimante). Par exemple, pour compter le nombre de mots dans le fichier /home/jim/report.txt, vous pouvez utiliser la commande suivante :

$ cat /home/jim/report.txt > wc -w

et pour imprimer le fichier - la commande :

$ cat /home/jim/report.txt > lpr

Comme vous pouvez le voir, l'opérateur > sert à rediriger le flux de sortie. En ce qui concerne le flux d'entrée, une fonction similaire est effectuée par l'opérateur < . L'exemple de commande ci-dessus pour compter le nombre de mots dans un fichier particulier peut être réécrit comme suit (notez l'absence de la commande chat):

$ wc -w< /home/jim/report.txt

Ce type de redirection est souvent utilisé dans divers scripts pour les commandes qui acceptent normalement (ou attendent une entrée de) le clavier. Dans un script qui automatise certaines opérations de routine, vous pouvez donner à la commande les informations nécessaires à partir d'un fichier contenant ce que vous devez entrer pour exécuter cette commande.

Parce que les symboles < , > Et >> agissent sur des flux standards, ils peuvent être utilisés non seulement de la manière habituelle, comme cela se fait habituellement, mais aussi d'une manière légèrement différente. Donc les commandes suivantes sont équivalentes :

$ chat > ​​fichier

$cat>fichier

$ >filecat

$ > fichier chat

Cependant, en lui-même (sans aucune commande pour laquelle des flux standard sont définis), le caractère de redirection ne peut pas être utilisé, vous ne pouvez donc pas, par exemple, en tapant sur la ligne de commande

$ fichier1 > fichier2

obtenir une copie d'un fichier. Mais cela n'enlève rien à l'intérêt de ce mécanisme, car des flux standards sont définis pour toute commande. Dans ce cas, vous pouvez rediriger non seulement l'entrée et la sortie standard, mais également d'autres flux. Pour cela, vous devez spécifier le numéro du flux à rediriger avant le symbole de redirection. L'entrée standard stdin est le numéro 0, la sortie standard stdout est le numéro 1, le flux de message d'erreur standard stderr est le numéro 2. Autrement dit, le format complet de la commande de redirection est (rappelez-vous que les espaces à côté de > ne sont pas nécessaires) :

commande N > M

N Et M— numéros de flux standard (0,1,2) ou noms de fichiers. L'utilisation de symboles dans certains cas < , > Et >> sans spécifier le numéro de canal ou le nom de fichier n'est possible que parce qu'au lieu du numéro manquant, 1 est remplacé par défaut, c'est-à-dire la sortie standard. Oui, l'opérateur > sans numéro est interprété comme 1 > .

En plus de la simple redirection des flux standards, il y a aussi la possibilité non seulement de rediriger le flux vers l'un ou l'autre canal, mais de faire une copie du contenu du flux standard. Il y a un caractère spécial pour cela. & , qui est placé avant le numéro du canal vers lequel le flux est redirigé :

commande N > &M

Cette commande signifie que la sortie du canal avec le numéro N est envoyé à la fois à la sortie standard et est dupliqué dans le tube avec le numéro M. Par exemple, pour que les messages d'erreur soient dupliqués sur la sortie standard, vous devez émettre la commande 2>&1, alors que 1>&2 duplique stdout vers stderr. Cette fonctionnalité est particulièrement utile lors de la redirection de la sortie vers un fichier, car nous voyons alors les messages à l'écran et les enregistrons dans un fichier.

5.5.2 Opérateur |

Une variante spéciale de la redirection de sortie est l'organisation d'un canal de programme (parfois appelé pipeline ou pipeline). Pour ce faire, deux commandes ou plus, telles que la sortie de la précédente sert d'entrée pour la suivante, sont connectées (ou séparées, si vous préférez) avec un caractère pipe - "|". Dans ce cas, le flux de sortie standard de la commande située à gauche du symbole | , est dirigé vers l'entrée standard du programme située à droite du caractère | . Par exemple:

$ cat monfichier | grep Linux | wc -l

Cette ligne signifie que la sortie de la commande chat, c'est-à-dire que le texte du fichier monfichier sera dirigé vers l'entrée de la commande grep, qui sélectionnera uniquement les lignes contenant le mot "Linux". sortie de commande grep sera à son tour acheminé vers l'entrée de la commande wc -l, qui comptera le nombre de ces lignes.

Les canaux de programme sont utilisés pour combiner plusieurs petits programmes, dont chacun n'effectue que certaines transformations sur son flux d'entrée, pour créer une commande généralisée, qui entraînera une transformation plus complexe.

Il convient de noter que le shell invoque simultanément toutes les commandes incluses dans le pipeline, exécutant une instance distincte du shell pour chacune des commandes, de sorte que dès que le premier programme commence à envoyer quelque chose à son flux de sortie, la commande suivante commence à le traiter. De la même manière, chaque commande suivante effectue son opération, attendant les données de la commande précédente et donnant ses résultats en entrée à la suivante. Si vous voulez qu'une commande se termine complètement avant que la suivante ne commence à s'exécuter, vous pouvez l'utiliser sur la même ligne qu'un symbole de pipe | , et un point-virgule ; . Avant chaque point-virgule, le shell s'arrête et attend que toutes les commandes précédentes incluses dans le pipeline aient fini de s'exécuter.

L'état de sortie (booléen renvoyé lorsque le programme se termine) du canal est le même que l'état de sortie renvoyé par la dernière commande du pipeline. Avant la première commande du pipeline, vous pouvez mettre le symbole "!", puis l'état de sortie du pipeline sera une négation logique de l'état de sortie de la dernière commande. Le shell attend que toutes les commandes de pipeline soient terminées avant de définir la valeur de retour.

5.5.3 Filtres

Le dernier des exemples ci-dessus (avec la commande grep) peut être utilisé pour illustrer un autre concept important, à savoir le programme de filtrage. Les filtres sont des commandes (ou des programmes) qui acceptent un flux de données d'entrée, y effectuent certaines transformations et génèrent le résultat sur la sortie standard (d'où il peut être redirigé ailleurs à la demande de l'utilisateur). Les commandes de filtrage incluent les commandes déjà mentionnées ci-dessus. chat, plus, moins, toilettes, cmp, diff, ainsi que les commandes suivantes.

Tableau 5.1. Commandes de filtrage

Équipe

Brève description

grep, grep, égrep

Rechercher dans le fichier d'entrée ou l'entrée standard les lignes contenant le motif spécifié et les écrire sur la sortie standard

Remplace dans le flux d'entrée toutes les occurrences des caractères répertoriés dans la liste spécifiée par les caractères correspondants de la deuxième liste spécifiée

communication

Compare deux fichiers ligne par ligne et imprime 3 colonnes sur stdout : l'une contient des lignes qui n'apparaissent que dans 1 fichier, la seconde contient des lignes qui n'apparaissent que dans le 2ème fichier : et la troisième contient des lignes qui apparaissent dans les deux fichiers

Formate un fichier texte ou le contenu d'une entrée standard pour l'impression.

sed

Éditeur de ligne permettant d'effectuer certaines transformations sur le flux de données d'entrée (extrait d'un fichier ou d'une entrée standard)

Le filtre spécial est la commande tee, qui "double" le flux d'entrée, d'une part en le dirigeant vers la sortie standard, et d'autre part - vers un fichier (dont vous devez spécifier le nom). Il est facile de voir que dans son action la commande tee similaire à l'opérateur de redirection 1>&fichier.

Les possibilités des filtres peuvent être considérablement étendues grâce à l'utilisation d'expressions régulières, qui permettent d'organiser, par exemple, une recherche à l'aide de divers modèles, souvent très complexes.

On pourrait en dire beaucoup sur la redirection et les filtres. Mais ce matériel se trouve dans la plupart des livres UNIX et Linux, tels que Petersen [A1.4] et Kelly-Bootle [A1.8] . Par conséquent, nous nous limitons à ce qui a été dit et continuons à considérer le soi-disant environnement ou environnement créé par le shell.

V. Kostromin (kos sur rus-linux dot net) - 5.5. Redirection d'E/S, canaux et filtres

Système d'E/S sous LINUX.

Dans le système d'E/S, tous les périphériques externes sont traités comme des fichiers sur lesquels les opérations normales sur les fichiers sont autorisées. Bien sûr, il existe également des pilotes de périphériques, mais l'interface avec eux est conçue pour l'utilisateur comme un appel à un fichier spécial. Les fichiers spéciaux sont un moyen d'unifier le système d'E/S.

Chaque périphérique connecté (terminal, disques, imprimante, etc.) possède au moins un fichier spécial qui lui est associé. La plupart de ces fichiers spéciaux sont stockés dans le répertoire /dev :
$ cd /dev
$ ls -l
panneau de commande du système onsole
morceaux dsk sur le disque
fd0 disquette 1
mémoire
imprimante LP
lp0 port parallèle 0
. . .
partie racine sur le disque pour le système de fichiers racine
échanger la partie d'échange
autre nom de la console syscon
systty est un autre nom pour la console système
répertoire de termes pour les terminaux
ttyS0 port série 0 (COM1)
. . .

Lorsqu'un programme écrit dans un tel fichier spécial, le système d'exploitation les intercepte et les envoie à un périphérique, tel qu'une imprimante). Lors de la lecture de données à partir de ce type de fichier, elles sont en fait reçues d'un périphérique tel qu'un disque. Le programme ne doit pas prendre en compte les particularités du périphérique d'E / S. À cette fin, des fichiers spéciaux (pilotes) servent d'interface entre les composants du noyau du système d'exploitation et les programmes d'application à usage général.

Le système ne détecte la différence entre un fichier normal et un fichier spécial qu'après avoir analysé l'inode correspondant référencé par l'entrée de répertoire.
L'inode du fichier spécial contient des informations sur la classe, le type et le numéro du périphérique. La classe de périphérique définit à la fois les périphériques caractère par caractère et bloc par bloc. Un exemple d'appareil avec un échange caractère par caractère est un clavier. Les fichiers spéciaux qui permettent de communiquer avec des périphériques de ce type sont appelés orientés octets. Les dispositifs en mode bloc se caractérisent par l'échange de grands blocs d'informations, ce qui accélère l'échange et le rend plus efficace. Tous les périphériques de disque prennent en charge l'échange de blocs et les fichiers spéciaux qui les desservent sont appelés orientés blocs. Les fichiers spéciaux ne contiennent aucune information sur les caractères, leur longueur n'est donc pas indiquée dans la liste des répertoires.

Le type et le numéro de l'appareil sont également les principales caractéristiques des fichiers spéciaux (les numéros principal et mineur de l'appareil correspondant sont placés dans le champ longueur). Le premier d'entre eux définit le type d'appareil, le second - l'identifie parmi des appareils similaires. L'OS peut desservir simultanément plusieurs dizaines, voire centaines de terminaux. Chacun d'eux doit avoir son propre fichier spécial, donc avoir un fichier principal et numéros supplémentaires permet d'établir la correspondance requise entre l'appareil et un tel fichier.

Vous pouvez créer plusieurs systèmes de fichiers sur un seul disque. Certains systèmes utilisent un système de fichiers par disque, tandis que d'autres en utilisent plusieurs. Un nouveau système de fichiers peut être créé à l'aide de la commande mkfs (make file system). Par exemple, l'expression # /sbin/mkfs /dev/dsk/fl1 512 signifie : création sur disquette b : taille de 512 blocs.

En option, vous pouvez définir la taille du système de fichiers en blocs et le nombre d'i-nodes (c'est-à-dire le nombre maximum de fichiers pouvant être stockés dans le système de fichiers). Par défaut, le nombre d'i-nodes est égal au nombre de blocs divisé par quatre. Le nombre maximal d'i-nodes dans un seul système de fichiers est de 65 000. Si, pour une raison quelconque, vous avez besoin de plus de 65 000 i-nodes sur le disque, vous devez en créer deux ou plus. systèmes de fichiers sur ce disque.

Tout système de fichiers peut être attaché (monté) à une arborescence de répertoires commune, à n'importe quel endroit de celle-ci. Par exemple, le répertoire / est le répertoire racine du système, en plus, c'est la base du système de fichiers, qui est toujours monté. Le répertoire /usr1 est situé dans le répertoire /, mais dans ce cas, il s'agit d'un système de fichiers distinct du système de fichiers racine, car tous les fichiers qu'il contient se trouvent sur une partie distincte du disque, voire sur un disque séparé. Le système de fichiers /usr1 est un système de fichiers monté - enraciné au point où le répertoire /usr1 existe dans la hiérarchie globale (Figures 1 et 2).

Riz. 1. Système de fichiers avant
monter /dev/dsk/os1

Riz. 2. Système de fichiers après
monter /dev/dsk/os1 en tant que /usr/

La commande /sbin/mount est utilisée pour monter un système de fichiers. Cette commande permet au système de fichiers donné d'être placé n'importe où dans la structure de répertoires existante :
#/sbin/mount/dev/dsk/osl/usr1 monte /dev/dsk/osl sur /usr1
#/sbin/mount/dev/dsk/flt/a monte /dev/dsk/flt sur /a

Si vous souhaitez monter un système de fichiers sur des disques qui doivent être protégés en écriture pour rendre le système en lecture seule, vous devez ajouter l'option -r à la commande /sbin/mount.
Le répertoire auquel le système de fichiers monté est attaché doit être actuellement vide, car son contenu ne sera pas accessible pendant le montage du système de fichiers.

Pour obtenir des informations sur les systèmes de fichiers qui sont montés, par exemple, sur un système LINUX, vous pouvez utiliser la commande /sbin/mount sans arguments (Figure 3).

Riz. 3.

Cette commande affiche le répertoire sur lequel le système de fichiers a été monté (par exemple usrl), le périphérique /dev sur lequel il réside, ainsi que l'heure et la date de montage. La commande /sbin/umount est utilisée pour démonter un système de fichiers, ce qui est l'opposé de la commande mount. Il libère le système de fichiers et le sort en quelque sorte de toute sa structure de répertoires afin que tous ses propres fichiers et répertoires soient inaccessibles :
# /sbin/umount /b
# /sbin/umount /dev/dsk/0s2

Le système de fichiers racine ne peut pas être démonté. De plus, la commande umount échouera si quelqu'un utilise un fichier du système de fichiers en cours de démontage (cela peut même être aussi simple que l'utilisateur se trouvant dans l'un des répertoires du système de fichiers en cours de démontage).

Dans les commandes mount et umount, l'utilisateur utilise l'abréviation du périphérique de disque physique.
Sous LINUX, les lecteurs de disque ont des désignations particulières. Sous LINUX, l'utilisateur n'est jamais confronté au problème de spécifier avec précision le périphérique physique sur lequel résident les informations. Sous LINUX, un nombre arbitraire de périphériques externes peut être très important, de sorte que l'utilisateur n'a à gérer que le nom du répertoire où se trouvent les fichiers dont il a besoin. Tous les systèmes de fichiers sont montés une seule fois, généralement au démarrage du système. Les systèmes de fichiers peuvent également être montés sur certains répertoires à partir d'ordinateurs distants.

Pour les périphériques physiques, LINUX a les répertoires dsk et rdsk, qui contiennent des fichiers correspondant aux périphériques de disque. Habituellement, les noms de fichiers dans ces répertoires sont les mêmes et la seule différence entre eux est que le répertoire rdsk contient des périphériques de disque avec un accès spécial (raw), que certains périphériques système utilisent pour un accès plus rapide au disque. Un répertoire dsk typique contient les périphériques suivants :
$ 1s /dev/dsk
0s0 1s0 c0t0d0s0 c0tld0s0 f0 f05q f13dt fld8d
0sl 1sl c0t0d0sl c0tld0sl f03d f05qt f13h fld8dt
0s2 1s2 c0t0d0s2 c0tld0s2 f03dt f0d8d f13ht fld8t
. . .
$

Dans un système LINUX, les périphériques de disque sont logiquement divisés en partitions, similaires aux partitions définies dans la table de partition de MasterBoot MS DOS. Les fichiers 0s1, 0s2, 0s3, etc., correspondent aux sections un, deux, trois, etc. du disque numéro 0. Les fichiers 1s0, 1sl, 1s2, etc. correspondent aux sections un, deux, trois, etc. du disque numéro 1. Si le système a plus de disques, les partitions seront numérotées ns0, nsl, etc. pour chaque numéro de disque n.

Les systèmes avec de nombreux lecteurs de disque utilisent le système de numérotation suivant :
avec section contrôleur d disque s

où contrôleur - numéro de contrôleur de disque ; disque - numéro de disque ; section - numéro de section de disque.
Ainsi, 0s0 est généralement équivalent à c0t0d0s0 et 0sl est c0t0d0sl, et les noms de partition à trois caractères ne sont qu'un raccourci pour le contrôleur de disque numéro 0.

Les fichiers dont le nom commence par f définissent différents types de disquettes. Le répertoire rmt contient des fichiers sur les périphériques de bande :
$ 1s /dev/rmt
c0s0 cls0 c3s0 ntape ntapel bande tapel

Les fichiers c0s0, cls0, c2s0 et c3s0 définissent quatre périphériques de stockage de cassettes. Les fichiers tape et tapel définissent des dispositifs de stockage magnétiques à deux bobines. Les fichiers dont le nom commence par n font référence aux mêmes périphériques, seule la bande n'est pas rembobinée après utilisation, tandis que l'utilisation d'autres fichiers entraîne le rembobinage de la bande lorsque le programme qui l'utilise se termine.

Sur certains systèmes, ces fichiers ont des noms différents, mais ils se trouvent toujours dans /dev, et le dictionnaire généralement fourni avec le système contient une description détaillée des périphériques et de leurs fichiers associés.

Le système de fichiers extX utilise la mise en mémoire tampon des données pour les opérations d'E/S. Lors de la lecture d'un bloc d'informations, le noyau émet une requête d'opération d'E/S vers plusieurs blocs adjacents. De telles opérations accélèrent considérablement la récupération des données lors de la lecture séquentielle des fichiers. Lors de l'écriture de données dans un fichier, le système de fichiers extX, écrivant un nouveau bloc, place jusqu'à 8 blocs adjacents côte à côte à l'avance. Cette méthode vous permet de placer des fichiers dans des blocs contigus, ce qui accélère leur lecture et permet d'atteindre des performances système élevées.

mob_info