Exemples d'entrées et de sorties, de redirection et de pipelines

零下一度
Libérer: 2017-06-30 15:49:42
original
2916 Les gens l'ont consulté
1. Entrée et sortie, redirection, pipeline
2. 🎜>3.>;<;>>;<<>>> 1 : chat;tête;queue;coupe;wc;sort;uniq;tr;tac;rev
1. Entrée et sortie, Redirection, canal
1. Le programme Linux a trois entrées standard et sortie, à savoir :
entrée standard, représentée par le chiffre 0, Par défaut, elle est connectée au clavier Les programmes sont généralement utilisés pour obtenir la saisie de l'utilisateur
<.>
La sortie standard, représentée par le chiffre 1, est connectée à l'écran par défaut. Les programmes sont généralement utilisés pour sortir des informations
Erreur standard, représentée par le chiffre 2, est connecté à l'écran par défaut. Les programmes sont généralement utilisés pour afficher des messages d'erreur
Parsing :
la commande passwd lit le mot de passe de l'utilisateur à partir de l'entrée standard, afin que l'utilisateur puisse utiliser le clavier pour saisir le mot de passe
La commande echo affiche le résultat sur la sortie standard, afin que le résultat puisse être vu à l'écran
Les utilisateurs ordinaires n'ont pas l'autorisation de affichez-le /répertoire racine, donc une erreur s'est produite, donc ls affiche le message d'erreur sur l'erreur standard, c'est-à-dire l'écran
2, >>
> Supprimer les données d'origine et écrire de nouvelles données
>> 3./dev /null
Communément appelé : fichier poubelle
# echo hello world > les données redirigées vers ce fichier seront redirigées par le noyau. Perdu, vous pouvez utiliser cette fonctionnalité pour bloquer certaines informations de sortie # ls / /root 2>
4. Redirection de sortie
Les utilisateurs peuvent modifier la direction d'entrée et de sortie par défaut selon leurs besoins
# ls -l > ; test
# ls -l 1> test --Les deux éléments redirigent la sortie standard vers le fichier de test, c'est-à-dire que le 1 par défaut peut être omis
# ls /jjjj 2> -Redirection de l'erreur standard vers le fichier de test# ls / /jjjj 1> stdout 2> --Redirection de la sortie standard et de l'erreur standard vers deux fichiers différents
# ls /jjjj / > std 2>&1 -- Fusionner l'erreur standard avec la sortie standard et la rediriger vers un fichier
# ls /jjjj / &> l'article précédent Les déclarations sont équivalentes et plus concises
# ls /jjjj / &>> std -- redirige également la sortie standard et l'erreur standard vers un fichier
5. Redirection d'entrée
 # cat 0< /etc/passwd
 # cat < /etc/passwd
 # cat /etc/passwd --cat commande Standard l'entrée provient de
dans le fichier /etc/passwd 6. Pipe
La redirection décrite ci-dessus connecte l'entrée et la sortie standard au fichier. Nous pouvons également connecter l'entrée et la sortie standard entre plusieurs programmes pour transférer des données entre les commandes. Cette technologie est clairement appelée pipeline. La sortie du programme est comme l'eau courante qui coule dans le tuyau. programme le plus à gauche vers le programme le plus à droite. Les tuyaux sont une technologie très courante dans les shells Linux. Grâce à la technologie des tuyaux, plusieurs petits outils peuvent être utilisés ensemble pour exécuter des fonctions très complexes et puissantes.
# cat /etc/passwd | head -n 3 --La sortie standard de la commande de gauche est utilisée comme entrée standard de la commande de droite
# cat /etc/passwd | head -n 3 | tail -n 1
7. Discussion approfondie sur l'entrée et la sortie standard
L'entrée standard et la sortie sont trois créés par Linux pour les programmes. Bien que la plupart des programmes utilisent ces trois descripteurs de fichiers comme leurs propres entrées et sorties, cela n'est pas obligatoire. descripteurs de fichiers standard Il s'agit d'ouvrir un nouveau descripteur de fichier à utiliser. Lorsque le programme n'utilise pas d'entrée et de sortie standard, la redirection utilisée ici ne fonctionnera pas pour lui. Par exemple :
passwd : Le programme lit le mot de passe de l'utilisateur à partir de l'entrée standard, nous pouvons donc lui fournir le mot de passe en redirigeant l'entrée standard
ssh : La commande est un programme utilisé pour la connexion à distance Lorsqu'elle lit le mot de passe saisi par l'utilisateur, elle n'utilise pas l'entrée standard, nous ne pouvons donc pas lui fournir le mot de passe en redirigeant l'entrée standard
8. Vérifiez les fichiers connectés à l'entrée et à la sortie standard du processus
# sleep 999 1> dans un terminal
# pgrep -x sleep -- Dans un autre terminal, trouvez l'ID du processus de sleep
# lsof -anop 16715 -d 0,1,2 --Voir les fichiers ouverts par le processus
9. Vérifiez le moment de la redirection
# vim file
# cat -n file > ajoutez un numéro de ligne devant chaque ligne, puis redirigez le résultat et enregistrez-le dans le fichier d'origine
# cat file -- est vide
Cause : Avant que le shell n'exécute la commande, il effectuera d'abord une opération de redirection. Dans la deuxième commande, il exécutera d'abord > Cette opération de redirection effacera le contenu du fichier. Une fois que l'opération de redirection a effacé le fichier, puis cat le fichier, vous ne verrez naturellement aucun contenu
$ sudo ls /root > L'utilisateur n'a pas la possibilité de saisir le mot de passe, car l'opération de redirection est effectuée en premier, l'utilisateur actuel est un utilisateur ordinaire et le fichier ne peut pas être créé dans le chemin /root/ls.log. Le shell échoue et se ferme : bash. : /root/ls.log : autorisation refusée. La commande sudo n'a pas encore été exécutée, il n'y a donc aucune chance de saisir le mot de passe
2. <(cmd);>(cmd)
1, <(cmd)
Redirection de l'entrée standard par remplacement de processus
2, >(cmd)
Utilisez le remplacement du processus pour rediriger la sortie standard
3. Remplacement du processus
La sortie standard du processus est enregistrée dans un fichier temporaire et renvoyée à le fichier temporaire. Le chemin <(), lorsque vous devez utiliser la sortie du programme mais que vous ne souhaitez pas générer de fichier intermédiaire, vous pouvez envisager d'utiliser le remplacement de processus
# coller <(seq $ (wc -l /etc/passwd | cut -d" " -f1)) <(awk -F : '{print $1}' /etc/passwd)
# coller <(seq 26) <(awk -F: '{ print $1}' /etc/passwd) --Les deux commandes peuvent être comparées
3.>;<;> ;>;<< ;;>>>;<<<
1, > --Redirection de sortie, créer (écraser si existant)
# echo 'hello world' > test -- Si le test n'existe pas, créez-le, s'il existe, écrasez le contenu à l'intérieur de
2, < -Redirection d'entrée, provenant du fichier
# less < /etc/passwd --Entrez le contenu de /etc/passwd dans l'outil less
# cat < (ls /) --La substitution de commande est utilisée ici
# wc -l <(cat /etc/passwd)
# wc -l <(cat /etc/ passwd) --Le remplacement du processus est utilisé ici
3. >> --Redirection vers le fichier et création (ajouter à la fin du fichier s'il existe)
# echo 'hello george' >> george - - Si george n'existe pas, créez-le, s'il existe, ajoutez le contenu à la fin du fichier
4. ;< --Redirect, utilisé pour le document Here
4.1 Here Document
est une méthode de redirection spéciale dans Linux Shell. Le formulaire est le suivant :
cmd << délimiteur
Ici Contenu du document
délimiteur
 : << >Ici Contenu du document
délimiteur
Fonction : Transmettre le contenu entre deux délimiteurs (Ici Contenu du document) à cmd comme paramètre d'entrée
4.2. Terminal
# cat <<<
> EOF
EOF -- c'est juste un logo et peut être remplacé par n'importe quel caractère légal
- -Ceci le symbole est l'identifiant généré par le terminal pour demander des informations de saisie
délimiteur -- il doit être écrit au format supérieur, et il ne peut y avoir aucun caractère avant et après, y compris les espaces
4.3, shell
# vim here.sh --Remarque : vous pouvez également y utiliser des variables
#!/bin/bashcat << EOF >output.sh
echo "bonjour"echo "monde"
echo $1
EOF
# chmod a+x here.sh
# ./here.sh george
# cat output.sh --View le contenu ; ici $1 est développé Devient un paramètre du script
Remarque :
Si vous ne souhaitez pas développer cette variable, vous devez utiliser des guillemets doubles pour placer le premier EOF.
4.4. <<-
Ici Document Une autre utilisation consiste à changer '<<' en '< -'. Le seul changement dans l'utilisation de <<- est que la tabulation (caractère de tabulation) devant chaque ligne de la partie contenu du document Here sera supprimée. Cette utilisation est destinée à faciliter l'indentation de la partie contenu lors de l'écriture du document Here. Document. Lire le code
5, <<< --Redirect, pour la chaîne Here
# wc -l <<< ls -l /home)"
# while read x; do echo "bonjour";done <<< "$(seq 5)"
# bc <<<
# vim string.sh
#!/bin/bash
while read line
do
if [ "${line#ftp :}" != "$line" ];then
awk -F: '{print $6}' <<< $line
break
fi
done < /etc/passwd
Remarque : parcourez chaque ligne du fichier /etc/passwd, imprimez son répertoire personnel et quittez. la boucle
${line#ftp:} : ftp : est mise en correspondance au début d'une ligne ; alors seule la partie sans correspondance de la ligne est prise
# chmod a +x string.sh
# ./string.sh
4. Traitement de texte_1 : cat;head;tail;cut; wc;sort ;uniq;tr;tac;rev
Le traitement de texte est une tâche avec laquelle chaque administrateur système sera fréquemment en contact. Son contenu principal est l'utilisation d'outils associés. pour combiner de manière flexible plusieurs outils pour terminer la tâche
1. cat --concatinate, concaténer le contenu d'un ou plusieurs fichiers dans l'ordre et afficher sur la sortie standard
# cat -n /etc /passwd --Afficher le contenu du fichier et ajouter le numéro de ligne
# cat -A /etc/passwd --Imprimer quelques caractères invisibles et marques de position
# cat 1.txt 2 .txt > test.txt -- fusionner les fichiers
2. head -- lire l'en-tête du fichier
# head -n 3 /etc/ passwd -- Lire les trois premières lignes du fichier /etc/passwd
# head -n -1 file --Rejeter la dernière ligne du fichier
# head -c 3 /etc /passwd --Lire les trois premiers octets du fichier /etc/passwd
# head -c -3 file --rejeter les trois derniers octets du fichier
# head -c 10m / dev/urandom > ; big --Créer un fichier de 10M
3. tail --Lire la queue du fichier
#
tail -n 3 / etc/passwd -- Lire les trois dernières lignes du fichier /etc/passwd
# tail -n +28 /etc/passwd --lire à partir de la ligne 28 jusqu'à la fin du fichier ; les 27 lignes du head
# tail -c 3 /etc/passwd --Lire les trois derniers octets du fichier /etc/passwd
# tail -c +28 /etc/passwd --Lire à partir du 28ème octet jusqu'à la fin du fichier ; supprimer les 27 premiers octets
# tail -f /etc/passwd - - Suivre les modifications dans le contenu à la fin du fichier, souvent utilisé pour inspecter les modifications dans les fichiers journaux, très pratique
4. cut - La fonction est similaire à awk, mais pas aussi puissante et complexe que awk. Lorsque vous souhaitez manipuler des données Lors de la sortie de colonnes, awk est souvent utilisé et cut est rarement utilisé
Options courantes :
-d -- Définir le délimiteur
-b --Sortie de l'octet à la position spécifiée
-c --Sortie la position spécifiée Caractère (caractère)
# echo "a;b;c d;e" | cut -d ";" -f1,3,4 -- -d définit le délimiteur (la valeur par défaut est TAB); -f définit le champ de sortie correspondant
# cat -n /etc/passwd | ,7 - - Utiliser le caractère de nouvelle ligne comme séparateur
# echo Je suis chinois | cut -b1-3 -- -b affiche l'octet à la position spécifiée ; un caractère chinois utf8 occupe 3 octets
# echo Je suis chinois | cut -c2-4 --
-c affiche le caractère (caractère) à la position spécifiée ; la différence avec -b est le traitement des caractères non anglais Quand
# echo Soyez un chinois courageux | cut -b1-2,9 -- affichera un "faux" mot
# echo -n Soyez un peuple chinois courageux xxd - - constatera que les trois octets 1, 2, 9 sont : e581 87
# echo -n false | xxd -- et "false" est également
5. wc - Calculer le nombre d'octets, de caractères, de mots et de lignes de données
Options courantes :
-c - - Compter le nombre d'octets
-m - Comptez le nombre de caractères
-w - Comptez le nombre de mots
-l -- Calculer le nombre de lignes
# echo -n Je suis chinois | wc -- -c Calculer le nombre d'octets, 5 utf8 compte chinois pour 15 caractères Section
# echo -n Je suis chinois | wc -m -- -m compte le nombre de caractères La différence avec -c réside dans le traitement des caractères non anglais, similaire à la commande cut
#. echo -n Je suis chinois | wc -w -- -w compte le nombre de mots, il n'y a pas de séparateur pour les séparer, 5 caractères chinois comptent pour un mot, ce qui est différent des soi-disant "mots" en chinois
# echo -n Majuscule CHINOIS | wc -w --Deux mots
# echo -n Majuscule CHINOIS | caractère de nouvelle ligne)
# echo -n Majuscule CHINOIS | wc -m --17 caractères anglais, 18 sans -n (car il y a un caractère de nouvelle ligne)
# wc -l /etc/passwd - - -l Count le nombre de lignes
6. trier -- Trier les fichiers par ligne
Options communes :
- t -- Spécifiez le séparateur
-k --Spécifiez le champ trié
-u --Supprimez les doublons lignes
-n, -h --Trier par valeur
-r --Trier à l'envers
# cut -d ":" -f7 /etc/passwd | sort -u -- -u supprime les lignes en double
# echo -e "1n2n10" | "1n2n10" | sort -n -- -n trie par valeur numérique, ne peut pas gérer les caractères unitaires tels que K, M, G etc.
# ls -lh | 5n -- -k spécifie le champ trié
# ls -lh | tail -n +2 sort -k5,5h -- -h peut gérer K, M, G et d'autres unités lors du tri par valeur numérique Caractères
# head -4 /etc/passwd | sort -t: -k7,7
-- -t utilise deux points : comme séparateur de champ et trie par le 7ème champ
# head -4 /etc/passwd | sort -t: -k7,7 -k3,3n --Trier d'abord par le 7ème champ, s'il y a les mêmes dans le 7ème champ, puis trier par le 3ème champ
# echo -e "1n2n3" | sort -nr -- -r tri inversé
# head -4 /etc/passwd | - - Pour inverser le tri du troisième champ, vous pouvez également inverser deux champs en même temps
7. uniq - Supprimer les lignes consécutives en double
Options couramment utilisées :
-c -- Compter le nombre de lignes en double
# echo -e "1n1n2n1" | 1 dans le résultat, car les deux 1 sont discontinus
# echo -e "1n1n2n1" | sort -u -- le tri n'a pas besoin d'être consécutif pour supprimer les doublons
# cut -d : -f7 /etc /passwd | uniq -c -- Sur la base de l'exemple de commande de tri, comptez le nombre d'occurrences de différents shells de connexion
8. les mêmes caractères
Options communes :
-d --delete, supprime toutes les lettres correspondantes
-s --Réduire, réduire les mêmes caractères
Format : tr SET1 SET2
Remarque : Convertissez les caractères du jeu 1 en caractères correspondants du jeu 2, donc en principe, les caractères des deux jeux Le les nombres doivent être les mêmes. Cependant, si le nombre de caractères dans les deux ensembles n'est pas égal, le programme ne générera pas d'erreur. Veuillez faire attention aux résultats dans ce cas. Points clés :
a, tr ne se soucie pas des caractères dans les deux ensembles, il remplace simplement les caractères aux positions correspondantes un par un,
b. tr remplace un seul caractère et ne peut pas remplacer la chaîne
# echo abc | tr a-z A-Z --Convertit 26 lettres minuscules en lettres majuscules correspondantes
# echo abc | tr ab BA -- Convertir a et b en B et A respectivement
# echo Les bonnes personnes font de bonnes choses | tr Bon ou mauvais -- "bon" est converti en "mauvais"
# echo abcdefg | tr a-z AB --Set 2 est plus court, le programme utilise automatiquement le dernier caractère du jeu 2 pour étendre le jeu 2
# echo tr a-b A-Z --Set 2 est plus long, le le programme étend automatiquement l'ensemble 2 Couper court
# echo Abc | tr a-zA-Z A-Za-z --Inverser la taille des lettres anglaises
# echo hello world tr - d ow -- -d supprime toutes les lettres correspondantes
# echo 0123456789 | tr -d 13579
# tr -d '
# head -c 3m bigfile > file1 --Importez les premières données 3M dans le fichier1
# tail -c 4m bigfile > file3 --Importez les dernières données 3M dans le fichier3
# head -c 6m bigfile | tail -c 3m > file2 --Importez les données intermédiaires 4M dans le fichier2
# ls -lh file*
# cat file1 file2 file3 > --Utiliser cat fusionne trois fichiers dans un nouveau gros fichier
# md5sum newbigfile bigfile --comparer la valeur md5sum de l'ancien gros fichier et du nouveau gros fichier à l'aide de la commande

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!