10 utilisations incroyables et mystérieuses de (!) Symbole ou opérateur dans les commandes Linux

10 utilisations incroyables et mystérieuses de (!) Symbole ou opérateur dans les commandes Linux

Le '!' le symbole ou l'opérateur en linux peut être utilisé comme Négation logique opérateur ainsi que pour récupérer les commandes de l'histoire avec des ajustements ou pour exécuter la commande précédemment exécutée avec modification. Toutes les commandes ci-dessous ont été vérifiées explicitement dans Bash Shell. Bien que je n'ai pas vérifié, mais une majeure d'entre elles ne fonctionnera pas dans un autre coquille. Ici, nous allons dans les utilisations incroyables et mystérieuses de '!' symbole ou opérateur dans les commandes Linux.

1. Exécutez une commande à partir de l'histoire par numéro de commande.

Vous ne savez peut-être pas le fait que vous pouvez exécuter une commande à partir de votre histoire Commande (Commandes déjà / antérieures exécutées). Pour commencer, trouver d'abord le numéro de commande en exécutant 'histoire' commande.

$ HISTORY 

Maintenant, exécutez une commande à partir de histoire juste par le nombre auquel il apparaît, dans la sortie de histoire. Dites Exécuter une commande qui apparaît au numéro 1551 dans la sortie de 'histoire' commande.

$ !1551 

Et, il exécute la commande (commande supérieure dans le cas ci-dessus), qui a été répertorié au numéro 1551. Cette façon de récupérer la commande déjà exécutée est très utile spécialement dans le cas de ces commandes qui sont longues. Vous avez juste besoin de l'appeler en utilisant ![Numéro auquel il apparaît dans la commande de l'historique].

2. Exécuter la commande précédemment exécutée comme 2ème dernière commande, 7e dernière commande, etc.

Vous pouvez exécuter ces commandes que vous avez exécutées précédemment par leur séquence en cours d'exécution étant la dernière commande d'exécution sera représentée comme -1, deuxième dernier comme -2, septième dernier comme -7,… .

Première exécution histoire commande pour obtenir une liste de la dernière commande exécutée. Il faut courir histoire commande, afin que vous puissiez être sûr qu'il n'y a pas de commande comme Commande RM> Fichier Et d'autres juste pour vous assurer de ne pas exécuter accidentellement de commandement dangereux. Puis vérifier la sixième commande dernière, huit dernières commandes et dixième dernière commande.

$ History $ !-6 $ !-8 $ !-dix 
Exécuter les dernières commandes exécutées par des numéros
3. Passer les arguments de la dernière commande que nous exécutons vers la nouvelle commande sans retyping

J'ai besoin de répertorier le contenu du répertoire '/ Home / $ utilisateur / binaire / firefox'Alors j'ai tiré.

$ ls / home / $ utilisateur / binaire / firefox 

Puis j'ai réalisé que j'aurais dû tirer 'ls -l'Pour voir quel fichier y est exécutable? Alors devrais-je taper à nouveau toute la commande! Non, je n'ai pas besoin. J'ai juste besoin de porter le dernier argument à cette nouvelle commande en tant que:

$ ls -l !$ 

Ici !$ transportera des arguments transmis dans la dernière commande à cette nouvelle commande.

Passer les arguments de la dernière commande exécutée à nouveau
4. Comment gérer deux ou plusieurs arguments en utilisant (!)

Disons que j'ai créé un fichier texte 1.SMS sur le bureau.

$ Touch / Home / Avi / Desktop / 1.SMS 

puis le copier à '/ Home / Avi / Téléchargements'Utilisation d'un chemin complet de chaque côté avec CP commande.

$ cp / home / avi / bureau / 1.txt / home / avi / téléchargements 

Maintenant, nous avons passé deux arguments avec CP commande. Le premier est '/ Home / Avi / Desktop / 1.SMS'Et deuxième est'/ Home / Avi / Téléchargements', Permet de les gérer différemment, exécutez simplement écho [arguments] Pour imprimer les deux arguments différemment.

$ echo «Le 1er argument est: !^ ”$ Echo« Le 2ème argument est: !CP: 2 ” 

Remarque le 1er argument peut être imprimé comme "!^ " et le reste des arguments peut être imprimé en exécutant "![Name_of_command]: [numéro_of_argument] ".

Dans l'exemple ci-dessus, la première commande était 'CPet le 2ème argument était nécessaire pour imprimer. Ainsi "!CP: 2 ”, Si un commandement dit xyz est exécuté avec 5 arguments et vous devez obtenir le 4ème argument, vous pouvez utiliser "!xyz: 4 ”, et utilisez-le comme vous le souhaitez. Tous les arguments sont accessibles par "!* ".

Gérer deux arguments ou plus
5. Exécuter la dernière commande sur la base des mots clés

Nous pouvons exécuter la dernière commande exécutée sur la base des mots clés. Nous pouvons le comprendre comme suit:

$ ls / home> / dev / null [Commande 1] $ ls -l / home / avi / Desktop> / dev / null [Commande 2] $ ls -LA / home / avi / downloads> / dev / null [Commande 3 ] $ ls -la / usr / bin> / dev / null [Commande 4] 

Ici, nous avons utilisé la même commande (LS) mais avec différents commutateurs et pour différents dossiers. De plus, nous avons envoyé à la sortie de chaque commande à '/ dev / null`` Comme nous n'allons pas gérer la sortie de la commande, la console reste propre.

Exécutez maintenant la commande Last Run sur la base des mots clés.

$ ! ls [commande 1] $ ! ls -l [commande 2] $ ! ls -la [Commande 3] $ ! ls -LA [Commande 4] 

Vérifiez la sortie et vous serez étonné que vous exécutiez des commandes déjà exécutées juste par LS mots clés.

Exécuter des commandes en fonction des mots clés
6. Le pouvoir de !! Opérateur

Vous pouvez exécuter / modifier votre dernière commande de course en utilisant (!!). Il appellera la dernière commande de run avec alter / tweak dans la commande actuelle. Permet de vous montrer le scénario

Dernier jour, j'exécute un script unique pour obtenir ma propriété intellectuelle privée alors je cours,

$ ip addr show | grep inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | coupe -f1 -d / 

Puis soudain, j'ai compris que je devais rediriger la sortie du script ci-dessus vers un fichier IP.SMS, donc qu'est ce que je devrais faire? Devrais-je à nouveau retaper l'ensemble de la commande et rediriger la sortie vers un fichier? Une solution facile consiste à utiliser EN HAUT Clé de navigation et ajouter '> ip.SMS' pour rediriger la sortie vers un fichier comme.

$ ip addr show | grep inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | coupe -f1 -d> ip.SMS 

Merci à la vie Sauveur EN HAUT Clé de navigation ici. Considérons maintenant la condition ci-dessous, la prochaine fois que je cours en dessous du script unique.

$ ifconfig | grep "Inet addr:" | awk 'print $ 2' | grep -v '127.0.0.1 '| coupe -f2 -d: 

Dès que j'exécute le script, l'invite bash a renvoyé une erreur avec le message "Bash: ifconfig: commande introuvable", Il n'était pas difficile pour moi de deviner que je gère cette commande en tant qu'utilisateur où il devrait être exécuté comme racine.

Alors quelle est la solution? Il est difficile de se connecter pour root, puis de taper à nouveau toute la commande! Aussi (Clé de navigation) Dans le dernier exemple, n'est pas venu secourir ici. Donc? Nous devons appeler "!!" sans citations, qui appellera la dernière commande pour cet utilisateur.

$ su -c "!!" racine 

Ici su est un utilisateur de commutation qui est root, -c est d'exécuter la commande spécifique en tant qu'utilisateur et la partie la plus importante !! sera remplacé par la commande et la dernière commande sera substituée ici. Ouais! Vous devez fournir un mot de passe racine.

Le pouvoir de !! Clé

J'utilise !! principalement dans les scénarios suivants,

1. Quand je cours apt-get Commande en tant qu'utilisateur normal, j'obtiens généralement une erreur disant que vous n'avez pas la permission d'exécuter.

$ apt-get upgrade && apt-get-dist-grade 

Erreur OPPS… ne vous inquiétez pas d'exécuter la commande ci-dessous pour réussir…

$ su -c !! 

De la même manière que je fais pour,

$ service apache2 start ou $ / etc / init.d / apache2 start ou $ systemctl start apache2 

Oups l'utilisateur n'est pas autorisé à effectuer une telle tâche, donc je cours…

$ su -c 'service apache2 start' ou $ su -c '/ etc / init.d / apache2 start 'ou $ su -c' systemctl start apache2 ' 
7. Exécutez une commande qui affecte tout le fichier sauf ![NOM DE FICHIER]

Le ! (Logique pas) peut être utilisé pour exécuter la commande sur tous les fichiers / extension, sauf que c'est derrière '!'.

UN. Supprimer tous les fichiers d'un répertoire sauf celui dont le nom est 2.SMS.

$ RM !(2.SMS) 

B. Supprimez tout le type de fichier du dossier sauf celui dont l'extension est 'pdf'.

$ RM !(*.pdf) 
8. Vérifiez si un répertoire (Say / Home / Avi / Tecmint) existe ou non? Printf si ledit répertoire existe ou non.

Ici, nous utiliserons '! -d' pour valider si le répertoire existe ou non suivi par logique et opérateur (&&) Pour imprimer ce répertoire n'existe pas et logique ou opérateur (||) Pour imprimer le répertoire est présent.

La logique est, lorsque la sortie de [ ! -d / home / avi / tecmint] est 0, il exécutera ce qui se trouve au-delà ET sinon il ira à logique ou (||) et exécuter ce qui se trouve au-delà OU.

$ [ ! -d / home / avi / tecmint] && printf '\ nno tel / home / avi / tecmint répertoire existe \ n' || printf '\ n / home / avi / Tecmint Directory existe \ n' 
9. Vérifiez si un répertoire existe ou non? Si vous ne sortez pas de la commande.

Semblable à l'état ci-dessus, mais ici, si le répertoire souhaité n'existe pas, il quittera la commande.

$ [ ! -d / home / avi / tecmint] && exit 
dix. Créez un répertoire (discours) dans votre répertoire domestique s'il n'existe pas.

Une implémentation générale dans le langage de script où si le répertoire souhaité n'existe pas, il en créera un.

[ ! -d / home / avi / tecmint] && mkdir / home / avi / tecmint 

C'est tout pour le moment. Si vous connaissez ou rencontrez une autre utilisation de '!' Ce qui vaut la peine de savoir, vous aimerez peut-être nous fournir votre suggestion dans les commentaires. Rester connecté!