10 niesamowitych i tajemniczych zastosowań (!) Symbol lub operator w poleceń Linux

10 niesamowitych i tajemniczych zastosowań (!) Symbol lub operator w poleceń Linux

'!' Symbol lub operator w Linux może być używany jako Logiczna negacja Operator, a także pobierać polecenia z historii za pomocą poprawek lub uruchamiać wcześniej uruchomić polecenie z modyfikacją. Wszystkie poniższe polecenia zostały wyraźnie sprawdzone w Bash Shell. Chociaż nie sprawdziłem, ale główny z nich nie będzie działał w innej powładzie. Tutaj wchodzimy w niesamowite i tajemnicze zastosowania '!' symbol lub operator w poleceń Linux.

1. Uruchom polecenie z historii według numeru polecenia.

Możesz nie być świadomy faktu, że możesz uruchomić polecenie od swojego historia polecenie (już/wcześniej wykonane polecenia). Aby rozpocząć, najpierw znajdź numer polecenia, uruchamiająchistoria' Komenda.

$ History 

Teraz uruchom polecenie z historia tylko według liczby, z jaką się pojawia, na wyjściu historia. Powiedz, uruchom polecenie, które pojawia się pod numerem 1551 na wyjściu 'historia' Komenda.

$ !1551 

I uruchamia polecenie (polecenie górne w powyższym przypadku), które zostało wymienione pod numerem 1551. W ten sposób do odzyskania już wykonanego polecenia jest bardzo pomocne, szczególnie w przypadku tych poleceń, które są długie. Wystarczy nazwać to za pomocą ![Liczba, przy której pojawia się na wyjściu polecenia historii].

2. Uruchom wcześniej wykonane polecenie jako 2. ostatnie polecenie, 7. ostatnie polecenie itp.

Możesz uruchomić te polecenia, które wcześniej uruchomiłeś przez ich działającą sekwencję jako polecenie ostatniego uruchomienia, będzie reprezentowane jako -1, Drugi ostatni jak -2, Siódma ostatnia jak -7,… .

Pierwszy bieg historia polecenie, aby uzyskać listę ostatniego wykonanego polecenia. Konieczne jest uruchomienie historia polecenie, abyś mógł mieć pewność, że nie ma takiego polecenia Plik RM> Plik i inni tylko po to, aby upewnić się, że nie uruchomisz żadnego niebezpiecznego dowodzenia przypadkowo. A następnie sprawdź szóste ostatnie polecenie, osiem ostatnich poleceń i dziesiąte ostatnie polecenie.

$ History $ !-6 $ !-8 $ !-10 
Uruchom ostatnie wykonane polecenia według liczb
3. Przekaż argumenty ostatniego polecenia, które uruchomimy do nowego polecenia bez retipowania

Muszę wymienić zawartość katalogu/home/$ użytkownik/binary/firefox- Więc zwolniłem.

$ ls/home/$ użytkownik/binarny/firefox 

Potem zdałem sobie sprawę, że powinienem był zwolnićls -l„Aby zobaczyć, który plik jest tam wykonywalny? Więc powinienem ponownie wpisać całe polecenie! Nie, nie potrzebuję. Muszę tylko nosić ostatni argument do tego nowego polecenia jako:

$ ls -l !$ 

Tutaj !$ będzie nosić argumenty przekazane ostatniemu poleceniu do tego nowego polecenia.

Przekaż argumenty ostatniego wykonanego polecenia do nowego
4. Jak obsługiwać dwa lub więcej argumentów (!)

Powiedzmy, że utworzyłem plik tekstowy 1.tekst na pulpicie.

$ touch/home/avi/komputer/1.tekst 

a następnie skopiuj to do '/home/avi/pobieranie„Używanie kompletnej ścieżki po obu stronach CP Komenda.

$ cp/home/avi/komputer/1.txt/home/avi/pobieranie 

Teraz przeszliśmy dwa argumenty z CP Komenda. Pierwszy to '/home/avi/komputer/1.tekst„A drugi jest”/home/avi/pobieranie', radzimy sobie z nimi inaczej, po prostu wykonajmy echo [argumenty] Aby inaczej wydrukować oba argumenty.

$ echo „1. argument to: !^”$ Echo„ 2. argument to: !CP: 2 ” 

Uwaga 1st argument można wydrukować jako "!^” a reszta argumentów można wydrukować poprzez wykonywanie "![Name_of_command]: [Number_of_argument] ”.

W powyższym przykładzie pierwszym poleceniem było 'CP„I drugi argument był potrzebny do wydrukowania. Stąd "!CP: 2 ”, Jeśli jakieś polecenie powie XYZ jest uruchomiony z 5 argumentami i musisz uzyskać czwarty argument, możesz użyć "!XYZ: 4 ”, i użyj go tak, jak chcesz. Do wszystkich argumentów można uzyskać "!*”.

Obsłużyć dwa lub więcej argumentów
5. Wykonaj ostatnie polecenie na podstawie słów kluczowych

Możemy wykonać ostatnie wykonane polecenie na podstawie słów kluczowych. Możemy to zrozumieć w następujący sposób:

$ ls/home>/dev/null [polecenie 1] $ ls -l/home/avi/teSktop>/dev/null [polecenie 2] $ ls -la/home/avi/pobrań>/dev/null [polecenie 3 3 ] $ ls -la /usr /bin> /dev /null [polecenie 4] 

Tutaj użyliśmy tego samego polecenia (LS) ale z różnymi przełącznikami i dla różnych folderów. Ponadto wysłaliśmy do wyjścia każdego polecenia, aby/dev/null„Ponieważ nie zamierzamy radzić sobie z wynikami polecenia, konsola pozostaje czysta.

Teraz wykonaj polecenie ostatniego uruchomienia na podstawie słów kluczowych.

$ ! LS [polecenie 1] $ ! ls -l [polecenie 2] $ ! LS -LA [polecenie 3] $ ! LS -LA [polecenie 4] 

Sprawdź wyjście, a będziesz zaskoczony, że uruchomiłeś już wykonane polecenia LS słowa kluczowe.

Uruchom polecenia na podstawie słów kluczowych
6. Moc !! Operator

Możesz uruchomić/zmienić swoje polecenie ostatniego uruchomienia za pomocą (!!). Wywoła polecenie ostatniego uruchomienia z alter/ulepszenie w bieżącym poleceniu. Pokażmy scenariusz

Ostatniego dnia uruchamiam scenariusz jednolinowy, aby zdobyć mój prywatny adres IP, więc uruchomię,

$ ip addr show | GREP INET | grep -v „inet6” | GREP -V '127.0.0.1 '| awk 'drukuj 2 $' | Cut -f1 -d/ 

Nagle zorientowałem się, że muszę przekierować dane wyjściowe powyższego skryptu do pliku ip.tekst, więc co powinienem zrobić? Czy powinienem ponownie ponownie prześledzić całe polecenie i przekierować dane wyjściowe do pliku? Cóż, łatwe rozwiązanie jest użycie W GÓRĘ Klucz nawigacyjny i dodaj '> ip.tekst' Aby przekierować wyjście do pliku jako.

$ ip addr show | GREP INET | grep -v „inet6” | GREP -V '127.0.0.1 '| awk 'drukuj 2 $' | CUT -f1 -D> ip.tekst 

Dzięki życiu Zbawiciela W GÓRĘ Klucz nawigacji tutaj. Teraz rozważ poniższy warunek, następnym razem, gdy uruchomię poniżej scenariusza jednego linujące.

$ ifconfig | GREP „INET ADDR:” | awk 'drukuj 2 $' | GREP -V '127.0.0.1 '| CUT -f2 -D: 

Jak tylko uruchomię skrypt, monit bash zwrócił błąd z komunikatem „Bash: ifconfig: nie znaleziono polecenia”, Nie było mi trudno zgadnąć.

Więc jakie jest rozwiązanie? Trudno się zalogować, aby zrootować, a następnie ponownie wpisać całe polecenie! Również (Klucz nawigacji w górę) W ostatnim przykładzie nie przyszedł tu ratować. Więc? Musimy zadzwonić "!!" bez cytatów, które wywoła ostatnie polecenie dla tego użytkownika.

$ su -c "!!" źródło 

Tutaj Su jest użytkownikiem przełącznika, który jest rootem, -C ma uruchomić określone polecenie jako użytkownika i najważniejsza część !! zostanie zastąpione przez polecenie, a polecenie ostatniego uruchomienia zostanie tutaj zastąpione. Tak! Musisz podać hasło roota.

Moc !! Klucz

Używam !! głównie w następujących scenariuszach,

1. Kiedy biegam apt-get polecenie jako normalny użytkownik, zwykle otrzymuję błąd, mówiąc, że nie masz zgody na wykonanie.

$ apt-get Upgrade && apt-get dist-upgrade 

Błąd opps… nie martw się wykonaj poniżej polecenie, aby osiągnąć sukces…

$ su -c !! 

Tak samo jak robię,

$ service apache2 start lub $ /etc /init.D/Apache2 Start lub $ Systemctl Start Apache2 

Użytkownik ups nie upoważniony do noszenia takiego zadania, więc uruchamiam…

$ su -c 'service apache2 start' lub $ su -c '/etc/init.d/apache2 start 'lub $ su -c' Systemctl start apache2 ' 
7. Uruchom polecenie, które wpływa na cały plik, z wyjątkiem ![NAZWA PLIKU]

! (Logiczne nie) może być używany do uruchamiania polecenia we wszystkich plikach/rozszerzeniu, z wyjątkiem tego, że jest z tyłu '!'.

A. Usuń wszystkie pliki z katalogu, z wyjątkiem tego, którego nazwa jest 2.tekst.

$ rm !(2.tekst) 

B. Usuń cały typ pliku z folderu, z wyjątkiem tego, którego rozszerzenie wynosi 'PDF'.

$ $ rm !(*.PDF) 
8. Sprawdź, czy katalog (powiedz/home/avi/tecmint) istnieje, czy nie? Printf, jeśli wspomniany katalog istnieje, czy nie.

Tutaj użyjemy '! -D' Aby potwierdzić, czy katalog istnieje, czy nie, a następnie logiczny i operator (&&) Wydrukowanie tego katalogu nie istnieje, a logiczny lub operator (||) do wydrukowania katalogu jest obecny.

Logika jest, gdy wyjście [[[ ! -d/home/avi/tecmint] Jest 0, Wykonuje to, co leży poza logiką I w przeciwnym razie przejdzie do logicznego lub (||) i wykonaj to, co leży poza logiką LUB.

$ [ ! -d/home/avi/tecMint] && printf '\ nno such/home/avi/tecmint Directory Istnieje \ n' || printf '\ n/home/avi/tecmint Directory Istnieje \ n' 
9. Sprawdź, czy katalog istnieje, czy nie? Jeśli nie wyjdź z polecenia.

Podobne do powyższego warunku, ale tutaj, jeśli nie istnieje pożądany katalog, wyjdzie z polecenia.

$ [ ! -d/home/avi/tecmint] && exit 
10. Utwórz katalog (powiedz test) w katalogu domowym, jeśli nie istnieje.

Ogólna implementacja w języku skrypowym, w którym jeśli pożądany katalog nie istnieje, utworzy jedną.

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

To wszystko na teraz. Jeśli wiesz lub spotykasz jakiekolwiek inne użycie '!' co warto wiedzieć, możesz udzielić nam sugestii w opinii. Keep Connected!