Przydatne przykłady i sztuczki
- 4195
- 1323
- Maurycy Napierała
Wiersz poleceń Bash zapewnia prawie nieograniczoną moc, jeśli chodzi o wykonywanie prawie wszystkiego, co chcesz zrobić. Niezależnie od tego, czy przetwarza zestaw plików, edytuje zestaw dokumentów, obsługę dużych zbiorów danych, zarządzanie systemem lub automatyzacja rutynowej, Bash może to zrobić wszystko. Ta seria, której dziś przedstawiamy pierwszą część, z pewnością uzbroi Cię w narzędzia i metody, których potrzebujesz, aby stać się znacznie bardziej biegłym użytkownikiem Bash. Nawet już zaawansowani użytkownicy prawdopodobnie odbijają coś nowego i ekscytującego. Cieszyć się!
W tym samouczku się nauczysz:
- Przydatne wskazówki, sztuczki i metody
- Jak wchodzić w interakcje z wierszem poleceń bash w zaawansowany sposób
- Jak ogólnie wyostrzyć swoje umiejętności i stać się bardziej biegły użytkownik Bash
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od rozkładu Linuksa |
Oprogramowanie | Wiersz poleceń Bash, system oparty na Linuksie |
Inny | Różne narzędzia, które są albo zawarte w powładzie bashu, lub można je zainstalować za pomocą za pomocą sudo apt-get instaluj nazwę narzędzia (gdzie nazwa narzędzia reprezentuje narzędzie, które chcesz zainstalować) |
Konwencje | # - Wymaga, aby podane Linux -commands były wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$-wymaga wykonania Linux-commands jako zwykłego niewidzianego użytkownika |
Przykład 1: Zobacz, jakie procesy uzyskują dostęp do określonego pliku
Czy chciałbyś wiedzieć, jakie procesy mają dostęp do danego pliku? Łatwo jest to zrobić za pomocą wbudowanego fusera poleceń Bash:
$ fuser -a/usr/bin/gnome-calculator/usr/bin/gnome-calculator: 619672e
$ ps -ef | GREP 619672 | GREP -V GREP ABC 619672 3136 0 13:13 ? 00:00:01 Gnome-Calculator
Jak widzimy, plik /usr/bin/gnome-calculator
(binarny), jest obecnie używany przez proces z identyfikatorem 619672
. Sprawdzanie tego identyfikatora procesu za pomocą Ps
, Wkrótce dowiadujemy się tego użytkownika ABC
rozpoczął kalkulator i zrobiłem to o 13:13.
mi
za Pid
(identyfikator procesu) oznacza, że jest to uruchomiony element wykonywalny. Istnieją różne inne takie kwalifikatory i możesz użyć Man Fuser
zobaczyć ich. To narzędzie Fuser może być potężne, szczególnie w połączeniu z lsof
(jakiś LS
z otwartych plików):
Załóżmy, że debugujemy zdalny komputer dla użytkownika, który pracuje ze standardowym pulpitem Ubuntu. Użytkownik rozpoczął kalkulator, a teraz jego cały ekran w zamrożonych. Chcemy teraz zdalnie zabić wszystkie procesy, które odnoszą się w jakikolwiek sposób z zablokowanym ekranem, bez ponownego uruchomienia serwera, w kolejności tego, jak znaczące są te procesy.
# lsof | Kalkulator GREP | GREP „Udostępnij” | Head -n1 XDG-Deskt 3111 ABC Mem Reg 253,1 3009 12327296/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.mo
# fuser -a/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.Mo/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.MO: 3111M 3136M 619672M 1577230M
# ps -ef | grep -e "3111 | 3136 | 619672 | 1577230" | GREP -V GREP ABC 3111 2779 0 AUG03 ? 00:00:11/usr/libexec/XDG-Desktop-Portal-GTK ABC 3136 2779 5 sierpnia 03 ? 03:08:03/usr/bin/gnome-sell abc 619672 3136 0 13:13 ? 00:00:01 Gnome-Calculator ABC 1577230 2779 0 AUG04 ? 00:03:15/usr/bin/nautilus-gapplication-service
Najpierw umieściliśmy wszystkie otwarte pliki używane przez kalkulator za pomocą lsof
. Aby uzyskać krótkie wyjście, wymieniliśmy tylko najwyższy wynik dla pojedynczego udostępnionego pliku. Następnie użyliśmy fuser, aby dowiedzieć się, które procesy używają tego pliku. To zapewniło nam PIDS. Wreszcie przeszukaliśmy za pomocą OR (|
) oparte na grepie, aby znaleźć, które rzeczywiste procesy nazywają. Widzimy, że chociaż kalkulator rozpoczął się o 13:13, pozostałe procesy działają dłużej.
Następnie możemy na przykład wydać Zabij -9 619672
i sprawdź, czy to rozwiązało problem. Jeśli nie, możemy pójść na proces 1577230
(Udostępniony menedżer plików Nautilus), przetwarzaj 3136
(nadrzędna powłoka) lub wreszcie przetwarzaj 3111
, Chociaż prawdopodobnie zabiłoby to znaczną część wrażeń stacjonarnych użytkownika i może nie być łatwe do ponownego uruchomienia.
Przykład 2: Debugowanie skryptów
Więc napisałeś świetny skrypt z dużą ilością złożonego kodu, a następnie uruchom go… i widzisz błąd w wyjściu, który na pierwszy rzut oka nie ma większego sensu. Nawet po debugowaniu wciąż utknąłeś na tym, co się stało, podczas gdy scenariusz się wykonywał.
Bash -x
na pomoc! Bash -x
pozwala na wykonanie test.cii
skrypt i zobacz dokładnie, co się stanie:
#!/bin/bash var1 = "Hello Linuxconfig.czytelnicy org!"Var2 =" ------------------------------ "echo $ var1 echo $ var2
Kopiuj Wykonanie:
$ bash -x ./test.SH + var1 = "Hello Linuxconfig.czytelnicy org!" + Var2 = ------------------------------ + Echo Hello Linuxconfig.czytelnicy org!„Cześć LinuxConfig.czytelnicy org! + Echo ------------------------------ ------------------------------
Jak widać, Bash -x
Polecenie pokazało nam dokładnie, co się stało, krok po kroku. Możesz również łatwo wysłać dane wyjściowe tego polecenia do pliku, dołączając 2> i 1 | TEE MY_OUTPUT.dziennik
do polecenia:
$ bash -x ./test.SH 2> i 1 | TEE MY_OUTPUT.Log… to samo wyjście… $ cat my_output.Log + var1 = "Hello Linuxconfig.czytelnicy org!" + Var2 = ------------------------------ + Echo Hello Linuxconfig.czytelnicy org!„Cześć LinuxConfig.czytelnicy org! + Echo ------------------------------ ------------------------------
2> i 1
Wysłał Stderr
(Wyjście błędu standardowego: wszelkie błędy widoczne podczas wykonywania) do Stdout
(Standardowe wyjście: luźno zdefiniowane tutaj jako wyjście, które zwykle widać na terminalu) i przechwytuj wszystkie wyjście z Bash -x
. trójnik
polecenie przechwyci wszystkie dane wyjściowe z Stdout
, i napisz to do wskazanego pliku. Jeśli kiedykolwiek chcesz dołączyć do pliku (i nie uruchomić od nowa od pustego pliku), możesz użyć TEE -A
gdzie -A
opcja zapewni dołączenie pliku.
Przykład 3: wspólny gotcha: sh -x != Bash -x
Ostatni przykład pokazał nam, jak korzystać Bash -x
, Ale czy moglibyśmy również użyć sh -x
? Tendencja niektórych nowszych użytkowników Bash może być uruchomiona sh -x
, Ale to błąd debiutanta; cii
jest znacznie bardziej ograniczoną skorupą. Podczas grzmotnąć
oparta jest na cii
, ma o wiele więcej rozszerzeń. Tak więc, jeśli używasz sh -x
Aby debugować skrypty, zobaczysz dziwne błędy. Chcę zobaczyć przykład?
#!/bin/bash test = "abc" if [["$ test" == * "b" *]]; Następnie echo „Tak, tam!„Fi
Kopiuj Wykonanie:
$ ./test.ss tak, tam!
$ bash -x ./test.sh + test = abc + [[abc == * \ b *]] + echo 'tak, tam, tam!„Tak, tam!
$ sh -x ./test.SH + TEST = ABC + [[ABC == * B *]] ./Test: 4: [[: Nie znaleziono
Tutaj możesz zobaczyć mały skrypt testowy test.cii
które po wykonaniu sprawdzają, czy określony list (B
) pojawia się w określonym ciągu wejściowym (zgodnie z definicją TEST
zmienny). Skrypt działa świetnie, a kiedy używamy Bash -x
Widzimy przedstawione informacje, w tym dane wyjściowe, wyglądają poprawnie.
Dalej, używając sh -x
Sprawy idzie znacznie źle; cii
Shell nie może interpretować [[
i zawodzi oba w sh -x
Wyjście, a także w samym wykonaniu skryptu. Wynika to z faktu, że zaawansowana, jeśli wdrożona składnia grzmotnąć
nie istnieje w cii
.
Przykład 4: Uniq lub nie unikalny - to pytanie!
Czy kiedykolwiek chciałeś posortować plik i wymienić tylko unikalne wpisy? Na pierwszy rzut oka wydaje się, że jest to łatwe ćwiczenie za pomocą dołączonego polecenia bash Uniq
:
Wejście $ CAT.txt 1 2 2 3 3 3
Wejście $ CAT.txt | uniq 1 2 3
Jeśli jednak trochę zmodyfikujemy nasz plik wejściowy, napotykamy problemy z wyjątkowością:
Wejście $ CAT.TXT 3 1 2 3 2 3 3 3
Wejście $ CAT.txt | uniq 3 1 2 3 2 3
To dlatego, że Uniq
Domyślnie woli Filtr sąsiadujące pasujące linie, przy czym pasujące linie są scalone z pierwszym występowaniem jak Uniq
Podręcznik wyjaśnia. Lub innymi słowy, tylko linie, które są dokładnie takie same jak poprzednie, zostaną usunięte.
W przykładzie można to zobaczyć przez ostatnie trzy 3
linie są skondensowane w jednym „unikalnym” 3
. Jest to prawdopodobnie użyteczne tylko w ograniczonej liczbie i określonych przypadkach użycia.
Możemy jednak poprawić Uniq
nieco dalej, aby dać nam tylko naprawdę unikalne wpisy, korzystając z -u
parametr:
Wejście $ CAT.TXT # Zwróć uwagę, że symbole „ #” zostały dodane po wykonaniu, aby wyjaśnić coś (odczytaj poniżej) 3 # 1 # 2 # 3 # 2 # 3 3 3
Wejście $ CAT.txt | uniq -u 3 1 2 3 2
Wciąż wygląda trochę mylące, prawda? Przyjdź uważnie na wejście i wyjście, a zobaczysz, jak tylko są linie indywidualnie unikalny (jak zaznaczony przez #
W powyższym przykładzie po wykonaniu) są wyjściowe.
Ostatnie trzy 3
Linie nie są wyjściowe, ponieważ nie są unikalny
takie jak. Ta metoda wyjątkowości znów miałaby ograniczone zastosowanie w scenariuszu świata rzeczywistego, choć może być kilka przypadków, w których się przydaje.
Możemy uzyskać bardziej odpowiednie rozwiązanie dla wyjątkowości, używając nieco innego wbudowanego narzędzia Bash; sortować
:
Wejście $ CAT.txt 1 2 2 3 3 3
Wejście $ CAT.txt | sort -u 1 2 3CZY WIEDZIAŁEŚ?
Możesz pominąć
kot
polecenie w powyższych przykładach i podaj plik do Uniq
Lub sortować
czytać bezpośrednio z? Przykład:sort -u wejście.tekst
Świetnie! Jest to użyteczne w wielu skryptach, w których chcielibyśmy prawdziwą listę unikalnych wpisów. Dodatkową zaletą jest to, że lista jest jednocześnie ładnie posortowana (choć mogliśmy korzystać -N
opcja sortowania również w kolejności numerycznej zgodnie z wartością numeryczną łańcucha).
Wniosek
Używanie Bash jako preferowanego linii poleceń Linuksa jest wiele. W tym samouczku zbadaliśmy szereg przydatnych wskazówek i wskazówek dotyczących linii poleceń Bash. To jest rozpoczęcie serii pełnych przykładów wiersza poleceń Bash, które, jeśli pójdziesz dalej, pomoże ci stać się znacznie bardziej zaawansowane w linii poleceń i powłoki Bash!
Daj nam znać swoje przemyślenia i podziel się niektórymi z własnych porad dotyczących wiersza poleceń Cool Bash, sztuczek i gotchas poniżej!
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- Przydatne przykłady i sztuczki
Powiązane samouczki Linux:
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
- Przydatne przykłady i sztuczki
- Big Data Manipulacja dla zabawy i zysku Część 1
- Bash Tips i wskazówki
- Ubuntu 20.04 Przewodnik
- Zagnieżdżone pętle w skryptach Bash
- « Jak naprawić komunikat o błędzie „Firefox już działa, ale nie odpowiada”
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2 »