Trening Bash. Skrypty w systemie Linux. Jakie są podstawy skryptów w Bash? Jeśli nie znaleziono dopasowania

Temat programowania w bash jest taki, który można rozważyć na kilku lub na setkach stron. Harold Rodriguez wyjaśnia ten temat w dwuczęściowym przewodniku poniżej. Jego piękny i żywy styl pozwolił mu opisać wszystkie podstawowe funkcje programowania bash na zaledwie kilku stronach.

Ta strona zawiera głównie informacje o funduszu. Poświęć trochę czasu na przeczytanie i zrozumienie materiału w tej sekcji, sprawi, że inne sekcje będą łatwiejsze do strawienia i będą warte twojego czasu. Scenariusz mówi aktorom, co mają do powiedzenia i zrobienia. Skrypt dla komputera informuje komputer, co powinien zrobić lub powiedzieć.

Te polecenia są mieszanką poleceń, które zwykle wprowadzamy wiersz poleceń   i polecenia, które moglibyśmy wprowadzić w linii poleceń, ale z reguły nie byłyby ważne. Ważne jest, aby pamiętać, co to jest. Wszystko, co można normalnie uruchomić w wierszu poleceń, można umieścić w skrypcie i zrobi to samo. Podobnie wszystko, co można umieścić w skrypcie, można również uruchomić w wierszu polecenia i zrobi to samo.

Jeśli nigdy wcześniej nie programowałeś basha, teraz jest czas na start. Nawet jeśli masz niewielką wiedzę na temat tego, czym jest bash, możesz z łatwością spojrzeć na wiele interesujących skryptów analizowanych przez Harolda.

Wprowadzenie

Podobnie jak pozostałe powłoki dostępne w systemie Linux, powłoka Bourne Again (bash) jest nie tylko powłoką poleceń, ale także językiem do pisania skryptów (skryptów) ( słowa „skrypt” i „skrypt” są zwykle synonimami - ok. perev.) Skrypty pozwalają w pełni wykorzystać możliwości powłoki i zautomatyzować wiele zadań, które w innym przypadku wymagałyby wprowadzenia wielu poleceń. Wiele programów działających na komputerze z systemem Linux to skrypty. Jeśli chcesz wiedzieć, jak działają lub je zmienić, ważne jest, aby zrozumieć ich składnię i semantykę. Ponadto, rozumiejąc język bash, możesz pisać własne programy do wykonywania różnych zadań na wybrane przez siebie sposoby.

Nie musisz niczego zmieniać. Po prostu wprowadź polecenia jak zwykle, a będą się zachowywać jak zwykle. Po prostu zamiast wpisywać je w wierszu poleceń, teraz wpisujemy je do pliku tekstowego. To tylko mała wiedza podstawowa. Nie trzeba tego rozumieć, aby pisać skrypty, ale warto wiedzieć, gdy tylko zaczniesz otrzymywać bardziej złożone skrypty.

Szczegółowa lista katalogów

Kiedy mówimy, że uruchamiamy program, tak naprawdę nie uruchamiamy go, ale jego kopię, która nazywa się procesem. Wykonujemy kopię tych instrukcji i zasobów za pomocą twardy dysk   do pamięci roboczej. Zasadniczo proces jest wykonywalną instancją programu.

Więc jest programowanie czy skryptowanie?

Początkujący w programowaniu z reguły zastanawiają się nad różnicą między językami programowania i skryptów. Programy napisane w niektórych językach programowania mają zwykle znacznie większe możliwości i działają znacznie szybciej niż programy napisane w językach skryptowych. Przykładami języków programowania są C, C ++ i Java. Tworzenie programu w języku programowania zwykle zaczyna się od napisania kodu źródłowego (pliku tekstowego zawierającego instrukcje dotyczące działania programu końcowego), a następnie musi zostać skompilowany (skompilowany) do pliku wykonywalnego. Ten plik wykonywalny nie jest łatwy do przeniesienia między różnymi systemami operacyjnymi. Na przykład, jeśli piszesz do programu C dla Linuxa, nie możesz go uruchomić w systemie Windows. Aby to zrobić, będziesz musiał ponownie skompilować kod źródłowy w systemie Windows. Pisanie skryptu rozpoczyna się także od napisania kodu źródłowego, który nie podlega kompilacji w pliku wykonywalnym. Zamiast tego interpreter powłoki odczytuje kolejno instrukcje z pliku kodu źródłowego i wykonuje je. Niestety, ponieważ tłumacz musi czytać każdą instrukcję, szybkość wykonywania skryptu jest zwykle wolniejsza ( znacznie wolniej - ok. perev.) niż skompilowany program. Główną zaletą skryptów jest to, że można łatwo przenieść plik źródłowy do dowolnego systemu operacyjnego i po prostu je uruchomić (np naturalne jest, jeśli istnieje do tego tłumaczth system operacyjny   - około. perev.).

W tym samym czasie może istnieć kilka procesów reprezentujących ten sam program, który jest wykonywany w pamięci. Jeśli zaczniemy uruchamiać skrypt, tak naprawdę nie rozpocznie się on w tym procesie, ale zamiast tego rozpocznie nowy proces do uruchomienia w środku. Zademonstrujemy to w następnym rozdziale dotyczącym zmiennych, a jego konsekwencje powinny stać się jaśniejsze.

W większości przypadków nie musisz się zbytnio przejmować tym zjawiskiem. Innym terminem, z którym możesz się spotkać, jest wykonanie skryptu. Zanim będziemy mogli wykonać skrypt, musi on mieć zestaw uprawnień do wykonania. Jeśli zapomnisz udzielić tego uprawnienia przed uruchomieniem skryptu, po prostu otrzymasz komunikat o błędzie informujący o tym jako taki i nie będzie to miało żadnego wpływu. Skrypt 755 jest często używany w skryptach, ponieważ pozwala właścicielowi na pisanie lub modyfikowanie skryptu i wykonywanie każdego skryptu.

Bash to język skryptowy. Świetnie nadaje się do pisania małych programów, ale jeśli planujesz tworzyć rozbudowane aplikacje, wybór języka programowania jest dla Ciebie lepszy. Inne przykłady języków skryptowych to Perl, Lisp i Tcl.

Co musisz wiedzieć, aby napisać własny skrypty?

Wiersz 4 to polecenie echa, które wyświetla komunikat na ekranie. w wierszu poleceń i będzie zachowywać się dokładnie tak samo. Podświetlanie składni ma jedynie na celu ułatwienie czytania i nie musi być wykonywane we własnych plikach.

  • Nic po # jest wykonywane.
  • To jest tylko dla naszego odniesienia.
Katalogi są oddzielone:

Przejrzy kolejno te katalogi i wykona pierwszą instancję znalezionego programu lub skryptu. Odbywa się to z kilku powodów. Nie chcesz przypadkowo uruchomić tego skryptu.

  • To pozwala nam mieć kilka różnych wersji zainstalowanego programu.
  • Zwiększa to bezpieczeństwo.
Robisz to, dołączając bezwzględną lub względną ścieżkę przed nazwą programu lub skryptu. Pamiętasz, że kropka jest tak naprawdę linkiem do twojego bieżącego katalogu.

Wymaga to znajomości podstawowych poleceń systemu Linux. Na przykład powinieneś wiedzieć, jak kopiować, przenosić i tworzyć nowe pliki. Koniecznie umiejętność korzystania z jakiegoś edytora tekstu. Istnieją trzy główne edytory tekstu w systemie Linux: vi, emacs i pico ( autor zapomniał także nano, co jest najlepsze dla początkujących, jeśli nie weźmie się pod uwagę mcedit. - Uwaga perev.) Jeśli dopiero zaczynasz korzystać z vi lub emacs, użyj pico lub innego łatwego w użyciu edytora tekstu.

Jak działają skrypty bash

To jest pierwsza linia powyższego skryptu. Następnie jest to ścieżka do interpretera, którego należy użyć do uruchomienia pozostałych wierszy w pliku tekstowym. Udostępnianie powinno odbywać się w pierwszej linii pliku. Nie powinno być również spacji przed znakiem # ani między nimi! i ścieżka do tłumacza.

Chociaż możesz użyć ścieżki względnej dla interpretera, przez większość czasu będziesz chciał użyć ścieżki bezwzględnej. Prawdopodobnie uruchamiasz skrypt z różnych miejsc, więc absolutnie jest najbezpieczniejszy. Mimo że jest bezpieczny, wymaga również niepotrzebnych danych wejściowych przy każdym uruchomieniu skryptu.

Uwaga!!!

Nie powinieneś uczyć się programowania w bash spod użytkownika korzeń! W przeciwnym razie wszystko może się zdarzyć! Nie będę ponosić żadnej odpowiedzialności, jeśli przypadkowo popełnisz błąd i zepsujesz swój system. Jesteś ostrzeżony! Posługiwać się konto   zwykły użytkownik bez żadnych uprawnień. Możesz nawet utworzyć nowego użytkownika, aby dowiedzieć się, jak pisać skrypty. Najgorsze, co dzieje się w tym przypadku, to zniknięcie danych w katalogu tego użytkownika.

To najbardziej niezawodne i wygodne podejście. Zwykle wiąże się to z lukami, a obecność lub brak przerwy może być różnicą między zespołem pracującym a nie. Przyzwyczaj się również do zapamiętywania obecności lub braku spacji podczas przeglądania kodu. Wiele decyzji dotyczących tego zachowania było podejmowanych z uwzględnieniem tylko potrzeb użytkownika, a następnie w tych decyzjach trzeba było obsługiwać funkcje skryptu. Są bardzo zdezorientowani, kiedy dowiadują się o tym przestępcy. Wcięcie kodu to kolejny ważny obszar formatowania.

Twój pierwszy program Bash

Naszym pierwszym programem będzie klasyczny „Hello World”. Oczywiście, jeśli już wcześniej programowałeś, powinieneś być zmęczony takimi przykładami. Jest to jednak tradycja i kim jestem, aby ją zmienić? Program Hello World po prostu wyświetla na ekranie słowa „Hello World”. Uruchom edytor tekstu i wpisz w nim następujące informacje:

Przyjrzymy się wcięciu kodu w sekcji 5, gdy stanie się to istotne. Wcięcie nie jest wymagane, ale ułatwia czytanie kodu i utrudnia jego wykonanie. proste błędy. Czy jest to część przedmiotu, który robisz, i dlatego uczysz się, ponieważ musisz. Czytaj dalej mojemu przyjacielowi, ponieważ zamierzasz użyć potężnego narzędzia, które pozwoli ci wykonywać złożone powtarzalne zadania przy minimalnym wysiłku.

W końcu nie będziesz guru-bahu, ale będziesz na dobrej drodze i uzbroisz się w niezbędną wiedzę i umiejętności, aby cię tam dostać, jeśli tego właśnie chcesz. Możesz teraz przejść do sekcji 1 i rozpocząć lub kontynuować czytanie poniżej, aby dowiedzieć się więcej o tym samouczku.

#! / bin / bash
  echo „Hello World”

Pierwszy wiersz mówi Linuksowi, aby użył interpretera bash do uruchomienia tego skryptu. W tym przypadku bash znajduje się w katalogu / bin. Jeśli twoje bash jest gdzie indziej, wprowadź odpowiednie zmiany w tej linii. Jawne wskazanie tłumacza jest bardzo ważne, upewnij się, że to zrobiłeś ta linia   informuje Linuksa, którego interpretatora użyć, aby wykonać instrukcje w skrypcie. Następną czynnością jest zapisanie skryptu. Nazwijmy to hello.sh. Następnie musisz ustawić skrypt jako wykonywalny:

Pętle - różne drogi   Wykonuj powtarzalne zadania. Funkcje - Użyj kodu ponownie, aby ułatwić życie. Interfejs użytkownika. Uczyń swoje skrypty przyjaznymi dla użytkownika.

  • Zmienne - tymczasowo przechowuj dane do późniejszego wykorzystania.
  • Arytmetyka.
Ten samouczek jest zorganizowany jako taki, a każda sekcja oparta jest na wiedzy i umiejętnościach nabytych w poprzednich sekcjach.

Jeśli pracujesz z nimi w kolejności, przeczytaj je całkowicie i poćwicz w wierszu poleceń. Każda sekcja ma następującą strukturę.

  • Wprowadzenie, w którym dowiesz się, czego nauczysz się w tej sekcji.
  • Szczegółowy materiał, w tym obszerne przykłady.
  • Podsumowanie najważniejszych pojęć.
  • Zestaw działań, które pomogą Ci wzmocnić swoją wiedzę i umiejętności.
Zobacz aktywność jako punkt wyjścia dla inteligencji.

$ chmod u + x   cześć. sh

Jeśli nie rozumiesz, co robi to polecenie, przeczytaj stronę podręcznika dla polecenia chmod:

$   człowiek chmod

Po wykonaniu tej czynności możesz uruchomić program, wpisując po prostu jego nazwę:

$ ./hello.sh

Witaj świecie

Stało się! To twój pierwszy program! I chociaż jest nudny i nic nie robi, pokazuje, jak wszystko działa. Zapamiętaj tę prostą sekwencję działań: napisz kod, zapisz plik, zrób go za pomocą chmod i uruchom go.

Rozwiązywanie problemów i kreatywne myślenie

Im dalej to zrobisz, tym lepiej to zrobisz. Ta strona jest również zaprojektowana do pracy na tabletach. Jeśli to ty, to ta strona działa dobrze z tym ustawieniem. Innym dobrym podejściem jest umieszczenie przeglądarki na jednej połowie ekranu komputera i terminala na drugiej połowie, abyś mógł wypróbować przykłady, kiedy idziesz. Ilekroć widzisz, oznacza to, że musisz go zastąpić czymś pożytecznym. Jeśli widzisz coś takiego, oznacza to zwykle zastąpienie go liczbą. Po uruchomieniu polecenia możesz coś wstawić lub zostawić. Wymień to wszystko. . Oto kilka podstawowych wskazówek, które mogą ci w tym pomóc.

Zespoły, zespoły i zespoły

Co dokładnie robi twój pierwszy program? Drukuje słowa „Hello World”. Jak ona to robi? Ona używa zespołów. W naszym programie napisaliśmy tylko jedno polecenie - echo „Hello World”. Czym dokładnie jest ten zespół? Echo. Ten program pobiera jeden argument i drukuje go na ekranie.

Argumentem jest wszystko, co następuje po wprowadzeniu nazwy programu. W naszym przypadku „Hello World” jest to argument przekazany do polecenia echo. Po wprowadzeniu polecenia ls / home / argumentem polecenia ls jest / home. Co to wszystko znaczy? A to oznacza, że \u200b\u200bjeśli masz program, który bierze jakiś argument i wyświetla coś na ekranie, możesz go użyć zamiast echa. Załóżmy, że mamy program o nazwie foo. Ten program pobierze jeden argument (ciąg słów) i wydrukuje go na ekranie. Następnie możemy przepisać nasz program w następujący sposób:

Pamiętaj, że uczysz się, jak złożyć zestaw klocków, a dzięki nim możesz zbudować prawie wszystko. Znalezione przykłady mają na celu zilustrowanie ich działania, a nie jedyne, co możesz z nimi zrobić. poproś o poprawienie przykładów i zobacz, jak się zachowują. W takim przypadku przeczytaj komunikat o błędzie, aby zrozumieć, dlaczego nie zadziałał, a następnie przejdź. Przeczytaj uważnie i nie przegap drobnych szczegółów. Małe szczegóły są ważne i często różnią się tym, że skrypt działa i nie działa. Jeśli coś nie działa, przeczytaj uważnie materiał i spójrz na to, co wpisałeś, aby upewnić się, że nie robisz głupiej literówki.

  • To da ci znacznie lepsze pojęcie o tym, jak działają.
  • Nie przestawaj!
To bardzo mi się podoba.

#! / bin / bash
  bla
" Witaj świecie "

Zapisz, uruchom i uruchom ponownie ( uwaga dla początkujących - ten przykład nie zadziała. - Uwaga perev.):

$ ./hello
  Witaj świecie

Dokładnie taki sam wynik. Czy użyto tutaj unikalnego kodu? Nie. Czy napisaliśmy program? Nie, chyba że jesteś autorem programu echa. Wszystko, co zrobiłeś, to po prostu osadzić program echa w naszym skrypcie i podać mu argument. Przykładem alternatywy dla używania polecenia echo w prawdziwym programowaniu jest polecenie printf, które ma więcej funkcji, jeśli znasz programowanie C. Właściwie możesz uzyskać dokładnie ten sam wynik bez pisania skryptu:

W świecie, w którym coraz częściej ukrywamy trudności przed użytkownikami, zawsze miło jest dać ludziom tę moc i pozwolić im robić znacznie więcej dzięki swojej technologii. Razem dają mi całkiem niezły pomysł na to, jak technologia działa, a także jak ludzie korzystają z technologii, postrzegają ją, uczą się technologii i pracują nad technologią. Ta strona jest dla ciebie i dla mnie.

Katalogi domowe innych użytkowników

Jeśli jesteś nauczycielem, nauczycielem akademickim, menedżerem lub trenerem i chcesz korzystać z tego materiału w swoich zajęciach lub szkoleniach, zalecamy skontaktowanie się z tymi stronami i wysłanie tutaj uczniów lub pokazanie ich na zajęciach, ale nie kopiuj tylko moich materiałów.

$ echo „Hello World”
  Witaj świecie

Skrypty Bash oferują szeroki zakres funkcji i są łatwe do nauczenia. Jak widać, używasz innych poleceń Linuksa do pisania własnych skryptów. Twój program opakowujący to kilka innych programów połączonych w celu wykonania zadania.

Niestety, w tym szalonym i wybrednym świecie, w którym teraz żyjemy, musimy się kontrolować, więc oto moje zastrzeżenie. Według mojej najlepszej wiedzy materiały zawarte na tych stronach są poprawne. Kieruj się zdrowym rozsądkiem, korzystając z wiedzy i umiejętności zdobytych podczas korzystania z tego materiału. Dlatego Scott Simpson poświęca temu kursowi trochę czasu, wprowadzając cię w składnię wprowadzającą zmienne, liczby i struktury kontrolne, dzięki czemu możesz od razu zacząć pisać skrypty.

Inne przydatne programy

Teraz napiszemy program, który przeniesie wszystkie pliki do katalogu, usunie go wraz z zawartością, a następnie ponownie utworzy ten katalog. Można to zrobić za pomocą następujących poleceń ( W przykładzie pokazanym w oryginale autor pokazuje, że nie na próżno zalecił wykonanie powyższych ćwiczeń pod specjalnie stworzonym użytkownikiem. Wynikiem tej sekwencji poleceń będzie czysty katalog, w którym pracujesz. Najprawdopodobniej będzie to twój katalog domowy. Dlatego jeśli NIE chcesz usunąć z niej wszystkich plików - NIE wykonuj poleceń z oryginalnego artykułu . A raczej postępuj zgodnie z radami autora i stwórz osobnego użytkownika specjalnie do szkolenia skryptów. Rozszerzyłem nieco ten przykład a teraz nie jest taki niebezpieczny . Uwaga perev. ):

Pokazuje, jak wykonywać operacje wieloliniowe w jednym pliku, wdrażać kontrolę przepływu i interakcję z użytkownikami w celu uzyskania danych wejściowych. Ponadto oferuje problemy w sposób, który pozwala ci sprawdzić, czego się nauczyłeś w teście. Praca z liczbami, łańcuchami i tablicami. Odczytywanie i zapisywanie plików tekstowych. Praca z cyklami. Korzystanie z funkcji. Wprowadzanie danych użytkownika w czasie wykonywania. Udzielenie odpowiedzi. Co to jest bash? . Zobaczysz, jak pracować ze zmiennymi, liczbami i strukturami kontrolnymi.

Podstawowa struktura kodu wygląda następująco. W tej funkcji „uzupełniania” umieścisz dowolny kod, który musi być pewny. Dobry ogólny przykład: utworzenie katalogu tymczasowego od zera, a następnie usunięcie go później. Porównaj to ze sposobem, w jaki usuwasz katalog od zera bez pułapki.

$ plik dotykowy 1

$ mkdir śmieci
  $ mv
plik 1   śmieci
  $ rm -rf śmieci
  $ mkdir śmieci

Zamiast wpisywać wszystko interaktywnie, napiszemy skrypt, który wykonuje te polecenia:

#! / bin / bash

plik dotykowy 1
  śmieci mkdir
  mv
plik 1   śmieci
  rm -rf śmieci
  śmieci mkdir
  Echo "
fa plik usunięty!

Usługi magazynowe, nr

Jeśli jakiś błąd powoduje przedwczesne zakończenie skryptu, katalog od zera i jego zawartość nie są usuwane. Jeśli później dodasz nowy skrypt   w skrypcie łatwo zapomnieć o usunięciu - potencjalnie tworząc tajemnicze heisenleyy.

  • Jest to wyciek zasobów i może mieć również wpływ na bezpieczeństwo.
  • Występują problemy z utrzymaniem.
Jest jeszcze jedna sytuacja, w której pułapka wyjściowa jest bardzo przydatna: jeśli skrypt inicjuje kosztowny zasób, który jest niezbędny tylko podczas wykonywania skryptu, i chcesz się upewnić, że zwalnia ten zasób po jego zakończeniu.

Zapisz go pod nazwą clean.sh, a teraz wszystko, co musisz zrobić, to go uruchomić. Przeniesie wszystkie pliki do katalogu, usunie go, ponownie utworzy katalog, a nawet wydrukuje komunikat o usunięciu plików. Pamiętaj, że jeśli regularnie robisz coś, co wymaga zestawu tej samej sekwencji poleceń, można to zautomatyzować pisząc skrypt.

Komentarze

Komentarze pomagają zwiększyć czytelność kodu. Nie wpływają na to, co wyświetla program. Są napisane specjalnie po to, aby je przeczytać. Wszystkie komentarze w Bash zaczynają się od symbolu skrótu #, z wyjątkiem pierwszego wiersza (#! / Bin / bash), który ma specjalny cel. Pierwszy wiersz nie jest komentarzem. Weź następujący kod jako przykład:

#! / bin / bash
  # Ten program liczy od 1 do 10:
  dla i w 1 2 3 4 5 6 7 8 9 10; zrobić
  echo $ i
  gotowy

Nawet jeśli jeszcze nie rozumiesz skryptów w Bash, dzięki komentarzowi natychmiast zrozumiesz, co robi powyższy przykład. Komentowanie kodu jest dobrą praktyką. Z czasem zrozumiesz, że jeśli potrzebujesz obsługi swoich skryptów, to jeśli skomentujesz kod, stanie się to łatwiejsze.

Zmienne

Zmienne to po prostu „kontenery”, które zawierają pewne wartości. Musisz je utworzyć z wielu powodów. Będziesz musiał jakoś zapisać dane wejściowe użytkownika, argumenty lub wartości liczbowe. Na przykład:

#! / bin / bash
  x \u003d 12
  Echo "
Zmienna wartość   x -   $ x ”

Tutaj ustawiamy zmienną x na 12. Echo linii „Wartość zmiennej x - $ x” wypisze bieżącą wartość x. Podczas definiowania zmiennej między nazwą zmiennej a operatorem przypisania nie ma spacji: „\u003d”. Składnia jest następująca:

#! / bin / bash
  echo „Wartość x wynosi 12”.
  echo „Mam 12 ołówków”.
  echo „Powiedział mi, że wartość x wynosi 12”.
  echo „Mam 12 lat”.
  echo "Jak to jest, że wartość x wynosi 12?
"

Ok, teraz załóżmy, że zdecydujesz się zmienić wartość x na 8 zamiast na 12. Co trzeba zrobić? Powinieneś zmienić wszystkie wiersze kodu, które mówią, że x to 12. Ale hej ... Są też inne wiersze kodu, które wspominają ten numer, więc nie będziesz mógł użyć prostej automatycznej zamiany. Teraz podajemy podobny przykład, używając tylko zmiennych:

#! / bin / bash
  x \u003d 12 #
ustaw zmienną x wartość 12
  Echo "
3) początek x = $ x ”
  echo „Mam 12 ołówków”
  echo "Powiedział mi, że wartość x
na równi $ x ”
  echo „Mam 12 lat”

echo "Skąd ta wartość x na równi $ x ?"

Widzimy tutaj, że $ x wyświetla bieżącą wartość zmiennej x równą 12. Dlatego teraz, jeśli chcesz ustawić nową wartość x na 8, wszystko, co musisz zrobić, to zmienić jedną linię z x \u003d 12 na x \u003d 8, i wypisuje również wszystkie wiersze wspominające o x. Dlatego nie musisz modyfikować reszty linii rękami. Jak zobaczycie później, zmienne mają inne zastosowania.

jeśli istnieje plik / etc / foo
  skopiuj / etc /
bla   do bieżącego katalogu

  wydrukuj „Zakończ” na ekranie
  Inaczej,
  wydrukuj na ekranie „Ten plik nie istnieje”

  wynik

Czy można to zrobić w Bash? Oczywiście! Zestaw instrukcji sterujących Bash obejmuje: if, while, till, for i case. Każdy z tych operatorów jest sparowany, to znaczy zaczyna się od jednego znacznika, a kończy na innym. Na przykład, jeśli warunkowa instrukcja if zaczyna się od if, a kończy na fi. Instrukcje sterujące nie są oddzielnymi programami w systemie, są wbudowane w bash.

jeśli ... inaczej ... elif ... fi

Jest to jeden z najczęstszych operatorów. Pozwala programowi podejmować decyzje w następujący sposób - „jeśli warunek jest spełniony, robimy jedną rzecz, a jeśli nie, robimy coś innego”. Aby używać go skutecznie, najpierw musisz nauczyć się korzystać z polecenia testowego. Ten program sprawdza warunki (na przykład, czy plik istnieje, czy istnieją niezbędne prawa dostępu). Oto przerobiona wersja bar.sh:

#! / bin / bash
  jeśli test -f / etc / foo
  następnie
# Plik istnieje, skopiuj go i wydrukuj wiadomość na ekranie
  cp / etc / foo.
  echo „Zakończ”.
  else # Plik nie istnieje, więc drukujemy wiadomość

#   i dokończ pracę
  echo „Ten plik nie istnieje.”
  wyjście

fi

Zwróć uwagę na wcięcie linii później i jeszcze. Nie są one obowiązkowe, ale znacznie ułatwiają czytanie kodu, ponieważ sprawiają, że logika programu jest bardziej wizualna. Teraz uruchom program. Jeśli masz plik / etc / foo - zostanie on skopiowany, w przeciwnym razie zostanie wydrukowany komunikat o błędzie. Polecenie testowe sprawdza istnienie pliku. Przełącznik -f sprawdza, czy argument jest zwykłym plikiem. Poniżej znajduje się lista opcji testowych ( Nie próbuj zapamiętać ich wszystkich, ponieważ to wciąż nierealne. Zawsze możesz to zobaczyć w instrukcji polecenia test - man test. Uwaga perev.):

Testuj klawisze poleceń:

D sprawdza obecność pliku i czy jest to katalog

E sprawdza istnienie pliku

Na przykład kod:

jeśli test -f / etc / foo
  następnie

Możesz to napisać w ten sposób:

if [-f / etc / foo]; następnie

Nawiasy kwadratowe to kolejna opcja pisania testu. Jeśli masz doświadczenie w programowaniu w C, ta składnia może być dla Ciebie wygodniejsza. Zwróć uwagę na obecność spacji przed i po każdym nawiasie ( Obecność spacji jest po prostu wyjaśniona: otwierający nawias kwadratowy jest poleceniem powłoki. Można to łatwo zweryfikować, wpisując, które [. A ponieważ jest to oddzielny zespół, należy go rozdzielićspacjez innych opcji.- Uwaga perev.) Średnik: „;” każe powłoce wykonać jedną instrukcję i rozpocząć następną. Wszystko po tym znaku będzie działać tak, jakby znajdowało się w osobnej linii. Dzięki temu kod jest bardziej czytelny i, oczywiście, taki zapis jest opcjonalny. Jeśli wolisz inną opcję nagrywania, możesz od razu umieścić ją w innej linii.

#! / bin / bash
  podczas :; zrobić
  echo „Naciśnij CTRL-C, aby wyjść.”
  gotowy

Pozwala to osiągnąć dokładnie ten sam efekt, ale szybciej, ponieważ „:” jest wbudowaną funkcją bash. Jedyną różnicą jest poświęcenie czytelności kodu. Użyj jednej z opcji, które lubisz najbardziej. Poniżej znajduje się o wiele bardziej użyteczny przypadek użycia zmiennych:

#! / bin / bash
  x \u003d 0;
  while [„$ x” -le 10]; zrobić
  echo „Aktualna wartość x: $ x”
  # Zwiększ wartość x:
  x \u003d $ (expr $ x + 1)
  spać 1
  gotowy

Tutaj używamy rekordu z nawiasami kwadratowymi, aby sprawdzić stan zmiennej x. Opcja -le oznacza mniejszą lub równą. W zwykłym języku powyższy kod mówi: „dopóki (podczas) x jest mniejsze lub równe 10, wyświetl aktualną wartość x, a następnie dodaj jeden do bieżącej wartości x.” Instrukcja sleep 1 wstrzymuje wykonywanie programu na jedną sekundę.

Poniżej znajduje się lista możliwych operacji porównania liczb całkowitych ( pełna lista znajduje się w teście na człowieka. Uwaga perev.):

x -eq y x \u003d y (równe)

x -ne y x nie jest równe y (nie równe)

x -gt y x jest większe lub równe y (większe niż)

x -lt y x jest mniejsze lub równe y (mniejsze niż)

Operatory porównania ciągów:

x \u003d y ciąg x jest identyczny z y

x! \u003d y ciąg x nie pasuje do y

Wyrażenie N x jest prawdziwe, jeśli łańcuch x ma niezerową długość

Wyrażenie Z x jest prawdziwe, jeśli łańcuch x ma zerową długość

Powyższy skrypt nie jest trudny do zrozumienia, może poza tą linią:

x \u003d $ (expr $ x + 1)

Po przeczytaniu tego artykułu dowiesz się, co jest grzmotnąć   (Standardowa powłoka systemu Linux), dowiedz się, jak obsługiwać standardowe polecenia: ls, cp, mv... rozumiesz cel i-węzłów, twardych i symbolicznych łączy i wiele więcej.

Ten podręcznik jest przeznaczony dla początkujących w systemie Linux oraz dla tych, którzy chcą powtórzyć lub poprawić swoje zrozumienie podstawowych zasad systemu Linux, takich jak kopiowanie i przenoszenie plików, tworzenie łączy, używanie standardowych poleceń systemu Linux wraz z przekierowaniami i potokami. W tym artykule znajdziesz wiele przykładów wyjaśniających prezentowany materiał. Dla początkujących większość informacji będzie nowa, ale dla bardziej zaawansowanych użytkowników materiał ten może być doskonałym narzędziem do podsumowania istniejącej wiedzy i umiejętności.

Wprowadzenie do bash

Muszla

Jeśli używasz Linuksa, wiesz, że po zalogowaniu jesteś mile widziany przez zaproszenie powłoki. Na przykład:

\$

Jeśli po zalogowaniu załadowana zostanie powłoka graficzna, aby dostać się do powłoki, należy uruchomić emulator terminala (gnome-terminal, xfce4-terminal, konsole, xterm, rxvt ...) lub przejść do jednego z wirtualnych terminali, klikając CtrlAltF1   lub CtrlAltF2   itp.

Wiersz polecenia na komputerze może różnić się od pokazanego w przykładzie. Może zawierać nazwę użytkownika, nazwę komputera i nazwę bieżącego katalogu roboczego. Ale pomimo tych wszystkich różnic program, który drukuje to zaproszenie, nazywa się „ muszla„(powłoka), i najprawdopodobniej wywoływana jest powłoka twojego programu grzmotnąć.

Czy masz uruchomione bash?

Możesz sprawdzić, czy bash jest uruchomiony za pomocą następującego polecenia:

\$ echo \\ SHELL   / bin / bash

Jeśli w wyniku wykonania tego polecenia pojawi się błąd lub jego wyjście różni się od tego w przykładzie, być może w twoim systemie non-bash jest używany jako powłoka poleceń. Mimo to większość materiałów będzie odpowiednia, ale nadal zalecamy przejście na bash. Możesz to zrobić (jeśli bash jest zainstalowany w systemie) za pomocą polecenia:

\$ grzmotnąć

Co to jest bash

Bash (akronim od „ bnasza- zazdobyć SHell ") to standardowy interpreter poleceń w większości systemów Linux. Jest odpowiedzialny za przetwarzanie i wykonywanie poleceń, za pomocą których użytkownik kontroluje komputer. Po zakończeniu pracy możesz zakończyć proces interpretera poleceń. Po naciśnięciu klawiszy Ctrlrezespoły wyjście   lub wyloguj   proces powłoki zostanie zakończony, a ekran ponownie poprosi o podanie nazwy użytkownika i hasła.

Korzystanie z „cd”

Zacznijmy od bash do nawigacji w systemie plików. Aby rozpocząć, wpisz następujące polecenie:

$ płyta CD /

Za pomocą tego polecenia powiedzieliśmy bashowi, że chcemy przejść do katalogu głównego - / . Wszystkie katalogi w systemie są zorganizowane w strukturze drzewa i /   to jest jego początek (lub root). Zespół płyta CD   służy do zmiany bieżącego katalogu roboczego.

Droga

Aby dowiedzieć się, gdzie w systemie plików aktualnie się znajdujesz (bieżący katalog roboczy), wpisz:

\$ pwd /

W powyższym przykładzie /   - argument dowodzenia płyta CD   - nazywa droga. To miejsce systemu plików, do którego chcemy się przenieść. W tym przypadku /   - ścieżka bezwzględna, co oznacza, że \u200b\u200bścieżka jest względna do katalogu głównego.

Ścieżki absolutne

Oto kilka przykładów ścieżek bezwzględnych.

   / dev / usr / usr / bin / usr / local / bin

Jak zapewne zauważyłeś, wszystkie te ścieżki łączy fakt, że zaczynają się / . Określając ścieżkę / usr / local / bin jako argument polecenia płyta CD   mówimy jej, żeby poszła do katalogu głównego / , następnie do katalogu usr, następnie do lokalnego i bin. Ścieżki absolutne zawsze zaczynają się od /

Ścieżki względne

Drugi typ ścieżki nazywany jest względnym. Grzmotnąć, zespół płyta CD   i inne polecenia policzą te ścieżki względem bieżącego katalogu. Ścieżki względne nigdy się nie zaczynają / . Na przykład, jeśli jesteśmy w / usr

\$ cd / usr

Następnie możemy przejść do / usr / local / bin, używając ścieżki względnej

\$ cd local / bin \$ pwd   / usr / local / bin

Za pomocą ".."

Ścieżki względne mogą zawierać jeden lub więcej katalogów ".." . „..” wskazuje katalog macierzysty w stosunku do naszego katalogu roboczego. Przykład:

\$ pwd   / usr / local / bin \\ $ płyta CD .. \$ pwd   / usr / local

Jak widać zespół płyta CD ..   „przenosi nas o jeden poziom wyżej”.

Mogę dodać ..   do ścieżki względnej. To pozwoli ci przejść do katalogu, który jest na tym samym poziomie, co ten, w którym jesteśmy. Przykład:

\$ pwd   / usr / local \\ $ cd ../share \$ pwd   / usr / share

Przykłady ścieżki względnej

Ścieżki względne mogą być dość złożone. Oto kilka przykładów. Wynik poleceń nie jest wyświetlany, spróbuj ustalić, w którym katalogu będziesz używać bash.

\$ cd / bin \$ cd ../usr/share/zoneinfo \$ cd / usr / X11R6 / bin \$ cd ../lib/X11 \$ cd / usr / bin \$ cd ../bin/../bin

Katalog roboczy "."

Zanim skończysz mówić o zespole płyta CDjeszcze kilka rzeczy do wspomnienia. Po pierwsze, istnieje inny specjalny katalog "." , który wskazuje bieżący katalog. Ten katalog służy do uruchamiania plików wykonywalnych znajdujących się w bieżącym katalogu.

\$ ./myprog

W ostatnim przykładzie myprog jest plikiem wykonywalnym znajdującym się w bieżącym katalogu, który zostanie uruchomiony w celu wykonania.

cd i katalog domowy użytkownika

Aby przejść do katalogu domowego, musisz wpisać

\$ płyta CD

Bez argumentów cd przeniesie cię do twojego katalogu domowego. Dla superużytkownika katalogiem domowym jest zwykle / root, a dla zwykłych użytkowników / home / nazwa użytkownika /. Ale co, jeśli chcemy określić konkretny plik znajdujący się w katalogu domowym. Na przykład jako argument programu „myprog”? Możesz pisać:

\$ ./myprog /home/user/myfile.txt

Jednak korzystanie z bezwzględnych ścieżek plików nie zawsze jest wygodne. Tę samą operację można wykonać za pomocą ~ –Tildes:

\$ ./myprog ~ / myfile.txt

~   to specjalna nazwa wskazująca w bash katalog domowy użytkownika.

Katalogi domowe innych użytkowników

Ale co, jeśli musimy określić plik w katalogu domowym innego użytkownika? Aby to zrobić, po tyldie musisz podać nazwę tego użytkownika. Na przykład, aby wskazać plik fredsfile.txt znajdujący się w katalogu osobistym użytkownika fred:

\$ ./myprog ~ fred / fredsfile.txt

Zespoły Linux

Wprowadzenie do ls

Prawdopodobnie już znasz zespół ls, który wywoływany bez argumentów wyświetla listę plików przechowywanych w katalogu roboczym:

\$ cd / usr \$ ls   X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin bin gentoo-x86 obejmują libexec portage udostępnij tmp distfiles i686-linux informacje lokalny portage.old src

Jeśli podasz opcję -za, możesz zobaczyć wszystkie pliki, w tym ukryte (których nazwy zaczynają się od kropki).

\$ ls -a   . bin gentoo-x86 obejmują libexec portage udostępnij tmp .. pliki i686-linux informacje lokalny portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

Szczegółowa lista katalogów

Po samym zespole ls   jako argument można podać jeden lub więcej plików lub katalogów. Jeśli podasz nazwę pliku, to polecenie ls   wyświetli tylko informacje o tym pliku. A jeśli podasz nazwę katalogu, ls   pokaże całą jego zawartość. Opcja „-l”   zespoły ls   Może to być bardzo przydatne, jeśli chcesz uzyskać bardziej szczegółowe informacje na ich temat (uprawnienia do plików, nazwisko właściciela, czas ostatniej zmiany pliku i jego rozmiar) oprócz nazw plików.

Poniższy przykład pokazuje użycie opcji „-l”   aby wyświetlić informacje o plikach przechowywanych w katalogu / usr

\$ ls -l / usr   drwxr-xr-x 7 root root 168 listopada 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 gru 27 08:56 bin drwxr-xr-x 2 root root 8856 gru 26 12:47 distfiles lrwxrwxrwx 1 root root 9 22 grudnia 20:57 doc -\u003e udostępnij / doc drwxr-xr-x 62 root root 1856 grudnia 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 grudnia 12 23:10 i686-linux drwxr-xr-x 4 root root 96 lis 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 24 grudnia 22:30 włącz lrwxrwxrwx 1 root root 10 grudnia 22 20:57 info -\u003e share / info drwxr-xr -x 28 root root 13552 gru 26 00:31 lib drwxr-xr-x 3 root root 72 lis 25 00:34 libexec drwxr-xr-x 8 root root 240 grudnia 22 20:57 lokalny lrwxrwxrwx 1 root root 9 grudnia 22 20 : 57 człowiek -\u003e udział / człowiek lrwxrwxrwx 1 root root 11 grudnia 8 07:59 portage -\u003e gentoo-x86 / drwxr-xr-x 60 root root 1864 grudnia 8 07:55 portage.old drwxr-xr-x 3 root root 3096 22 grudnia 20:57 sbin drwxr-xr-x 46 root root 1144 grudnia 24 15:32 udostępnij drwxr-xr-x 8 root root 328 grudnia 26 00:07 src drwxr-xr-x 6 root root 176 lis 24 14: 25 ssl lrwxrwxrwx 1 root root 10 grudnia 22 20:57 tmp -\u003e ../var/tmp

Pierwsza kolumna pokazuje informacje o prawach dostępu dla każdego pliku na liście. (Nieco później wyjaśnię, która litera oznacza). Następna kolumna pokazuje liczbę linków do każdego elementu listy. Trzecia i czwarta kolumna to odpowiednio właściciel i grupa pliku. Piąta kolumna ma rozmiar. Szósty to czas ostatniej modyfikacji pliku („czas ostatniej modyfikacji” lub mtime). Ostatnia kolumna to nazwa pliku lub katalogu (jeśli jest to link, to po „ –> „to nazwa obiektu, do którego się odnosi).

Jak przeglądać tylko katalogi

Czasami trzeba patrzeć na informacje tylko o katalogach, a nie o całej ich zawartości. Ta opcja pomoże poradzić sobie z tym zadaniem. "-re", która nakazuje komendie wyświetlanie tylko informacji o katalogach. Przykład:

\$ ls -dl / usr / usr / bin / usr / X11R6 / bin ../share   drwxr-xr-x 4 root root 96 grudnia 18 18:17 ../share drwxr-xr-x 17 root root 576 grudnia 24 09:03 / usr drwxr-xr-x 2 root root 3192 26 grudnia 12:52 / usr / X11R6 / bin drwxr-xr-x 2 root root 14576 27 grudnia 08:56 / usr / bin

Lista rekurencyjna i informacje o i-węzłach

Opcja Działanie „-R”   przeciwnie do działania "-re". Pozwala na rekurencyjne wyświetlanie informacji o plikach w katalogu. Najpierw wyświetlana jest zawartość katalogu najwyższego poziomu, a następnie zawartość wszystkich podkatalogów i tak dalej. Wynik działania tego polecenia może być dość obszerny, więc nie dajemy przykładu, ale możesz spróbować zrobić to sam, wpisując „ ls -R„lub” ls -Rl".

I wreszcie opcja "-ja"   służy do wyprowadzania i-węzłów każdego obiektu systemu plików.

\$ ls -i / usr    1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-port x86 1585 lib 784 tmp

Co to są i-węzły?

Każdy obiekt systemu plików (plik, katalog ...) ma swój własny unikalny numer, tzw i-węzeł   (numer i-węzła). Informacje te mogą wydawać się nieistotne, ale zrozumienie funkcji i-węzłów pomoże ci zrozumieć wiele operacji systemu plików. Na przykład spójrz na "."   i ".."   jako linki w każdym katalogu. Aby zrozumieć, czym jest katalog ".." , znajdź i-węzeł katalogu / use / local

\$ ls -id / usr / local    5120 / usr / local

Jak widzimy, i-węzeł katalogu / usr / local to 5120. Teraz zobaczmy, który i-węzeł katalogu / usr / local / bin / ..:

\$ ls -id / usr / local / bin / ..    5120 / usr / local / bin / ..

Okazuje się, że i-węzły katalogów / usr / local i / usr / local / bin / .. pasują do siebie! Oznacza to, że do i-węzła 5120 odnoszą się dwie nazwy: / usr / local i / usr / local / bin / .. Oznacza to, że są to dwie różne nazwy tego samego katalogu. Każdy i-węzeł wskazuje określoną lokalizację na dysku.

Z każdym i-węzłem może być powiązanych kilka nazw obiektów systemu plików. Liczba „synonimów” pliku (obiekty systemu plików, które odwołują się do jednego i-węzła) pokazuje liczbę w drugiej kolumnie „ ls -l".

\$ ls -dl / usr / local   drwxr-xr-x 8 root root 240 grudnia 22 20:57 / usr / local

Ten przykład pokazuje (druga kolumna), że 8 różnych obiektów systemu plików łączy się z katalogiem / usr / local. Oto ich imiona:

/ usr / local / usr / local /. / usr / local / bin / .. / usr / local / games / .. / usr / local / lib / .. / usr / local / sbin / .. / usr / local / share / .. / usr / local / src / ..

mkdir

Spójrzmy na zespół mkdir. Służy do tworzenia nowych katalogów. Poniższy przykład demonstruje utworzenie trzech nowych katalogów (tic, tac, toe) w katalogu / tmp

\$ cd / tmp $ mkdir tic tac toe

Domyślne polecenie mkdir   nie można utworzyć zagnieżdżonej struktury katalogów. Dlatego jeśli chcesz utworzyć kilka katalogów zagnieżdżonych w sobie ( wspaniale), będziesz musiał trzy razy wywołać to polecenie:

\$ mkdir won / der / ful   mkdir: nie można utworzyć katalogu „won / der / ful”: Brak takiego pliku lub katalogu \\ $ mkdir wygrał \$ mkdir won / der \$ mkdir won / der / ful

Możesz uprościć tę operację, dodając opcję „-p”   do zespołu mkdir. Ta opcja umożliwia utworzenie zagnieżdżonej struktury katalogów:

\$ mkdir -p easy / as / pie

Aby dowiedzieć się więcej na temat możliwości tego narzędzia, przeczytaj pomoc wywoływaną przez polecenie człowiek mkdir. W tym przewodniku znajduje się pomoc dla prawie wszystkich zespołów (np. człowiek ls). Poza tym płyta CDponieważ jest wbudowany w bash (w przypadku takich poleceń pomoc nazywa się następująco: pomoc cd)

dotknąć

Przejdźmy do badania zespołów cp   i mv, używane do kopiowania, zmieniania nazw i przenoszenia plików i katalogów. Ale wcześniej utwórz pusty plik w katalogu / tmp za pomocą polecenia dotknąć:

\$ cd / tmp \$ dotknij copyme

Zespół dotknąć   aktualizuje czas ostatniego dostępu do pliku (szósta kolumna danych wyjściowych polecenia ls -l), jeśli już istnieje lub tworzy nowy pusty plik, jeśli jeszcze go nie ma. Po tej operacji powinniśmy mieć pusty plik / tmp / copyme.

echo

Teraz, gdy mamy pusty plik, zapisujemy w nim wiersz tekstowy za pomocą polecenia echo, który przekazuje argument przekazany do standardowego urządzenia wyjściowego (w naszym przypadku terminal tekstowy).

\$ echo „pierwszy plik”   pierwszy plik

Aby napisać linię do naszego pliku, przekieruj na nią wyjście polecenia echo:

\$ echo „firstfile”\u003e copyme

Znak >   (więcej) wskazuje powłoka poleceń   że musisz przekierować wyjście polecenia po lewej stronie pliku, którego nazwa znajduje się po prawej stronie. Jeśli plik o tej samej nazwie nie istnieje, zostanie utworzony automatycznie. A jeśli taki plik już istnieje, zostanie on nadpisany (cała jego zawartość zostanie usunięta przed zapisaniem naszego wiersza). Zespół „ls -l”   pokaże, że rozmiar naszego pliku jest teraz równy 10 bajtom - dziewięć bajtów przyjmuje słowo „pierwszy plik”, a jeden bajt to znak wstawiania wiersza.

\$ ls -l copyme   -rw-r - r-- 1 root root 10 grudnia 28 14:13 copyme

kot i cp

Aby wyprowadzić zawartość pliku do terminala, użyj polecenia kot:

\$ copyme kota   pierwszy plik

Teraz możemy zacząć analizować podstawową funkcjonalność zespołu cp. To polecenie przyjmuje dwa argumenty. Pierwszy to nazwa istniejącego pliku („copyme”), drugi to nazwa nowej kopii, którą chcemy wykonać („copiedme”).

\$ cp copyme copiedme

Możemy upewnić się, że nowa kopia pliku ma inny numer i-węzła (oznacza to, że otrzymaliśmy naprawdę nowy osobny plik, a nie tylko link do starego)

\$ ls -i copyme copiedme    648284 copiedme 650704 copyme

mv

Teraz zastosuj polecenie mv   zmienić nazwę pliku („copiedme” -\u003e „moveme”). Numer i-węzła po tej operacji nie zmienia się, ale zmienia się tylko nazwa pliku.

\$ mv copiedme moveme \$ ls -i moveme    648284 moveme

Numer i-węzła nie zmienia się tylko wtedy, gdy plik o zmienionej nazwie pozostaje w systemie plików, w którym znajduje się plik źródłowy. Przyjrzymy się bliżej projektowi systemu plików w jednej z poniższych części tego samouczka.

Zespół mv   pozwala nie tylko zmieniać nazwy plików, ale także je przenosić. Na przykład, aby przenieść plik /var/tmp/myfile.txt   do katalogu / home / user   trzeba wydać polecenie:

\$ mv /var/tmp/myfile.txt / home / user

Plik zostanie przeniesiony do katalogu domowego użytkownika. użytkownik   nawet jeśli znajduje się w innym systemie plików (w tym przypadku plik zostanie skopiowany do nowej lokalizacji, po której oryginał zostanie usunięty). Jak można się domyślić, przeniesienie pliku do innego systemu plików prowadzi do zmiany jego i-węzła. To dlatego, że każdy system plików   ma własny oddzielny zestaw i-węzłów.

Należy zauważyć, że istnieje możliwość, że nowy przypisany numer i-węzła może pokrywać się ze starym, ale jest bardzo mały.

Aby przenieść kilka plików jednocześnie do jednego katalogu, musisz napisać:

\$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt / home / user \$ mv -t / home / user /var/tmp/myfile1.txt /var/tmp/myfile2.txt

Jeśli dodasz opcję „-v”, raport z wykonanej operacji zostanie wyświetlony na ekranie:

\$ mv -vt / home / user /var/tmp/myfile1.txt /var/tmp/myfile2.txt    „/var/tmp/myfile1.txt” -\u003e „/home/user/myfile1.txt” „/var/tmp/myfile2.txt” -\u003e „/home/user/myfile2.txt”

Łączenie i usuwanie plików

Twarde linki

Wspomniałem już słowo „link”, kiedy mówiłem o katalogach i i-węzłach. W rzeczywistości istnieją dwa rodzaje linków w Linuksie. Pierwszy typ to twarde linki. Każdy i-węzeł może mieć kilka powiązanych linków. Okazuje się zatem, że plik jest obecny w systemie pod kilkoma różnymi nazwami. Plik istnieje, dopóki przynajmniej jedna nazwa jest powiązana z jego i-węzłem. Pojęcia „twardego linku do pliku” i „nazwy pliku” są synonimami. Nowe twarde linki do pliku można utworzyć za pomocą polecenia ln

\$ cd / tmp \$ dotknij pierwszego linku \$ w pierwszym łączu drugim łączu \$ ls -i firstlink secondlink    15782 pierwsze łącze 15782 drugie łącze

Jak widać z przykładu, twarde łącza działają na poziomie i-węzła, wskazując na określony plik. W Linuksie twarde linki mają kilka ograniczeń. Przede wszystkim możesz tworzyć twarde linki tylko do plików, ale nie do katalogów. Dokładnie, mimo że system ma twarde linki do katalogów („ . "i" .. ”), nawet superużytkownik nie może utworzyć dodatkowych twardych łączy do katalogów. Po drugie, niemożliwe jest utworzenie twardego łącza do pliku znajdującego się w innym systemie plików, ponieważ każdy system plików ma swój własny unikalny zestaw i-węzłów.

Linki symboliczne

W praktyce dowiązania symboliczne (lub dowiązanie symboliczne) Simlink to specjalny rodzaj pliku, który odnosi się do innego pliku według nazwy, a nie bezpośrednio do i-węzła. Linki uproszczone nie chronią pliku przed usunięciem. Jeśli plik zostanie usunięty, wówczas dowiązanie symboliczne na nim przestanie działać (lub bity).

Simlinks są tworzone przez zespół ln   z opcją „-s”:

\$ ln-s secondlink trzecie łącze \$ ls -l pierwsze ogniwo drugie ogniwo trzecie ogniwo   -rw-rw-r-- 2 agriffis agriffis 0 31 grudnia 19:08 pierwsze łącze -rw-rw-r-- 2 agriffis agriffis 0 grudnia 31 19:08 drugie łącze lrwxrwxrwx 1 agriffis agriffis 10 grudnia 31 19:39 trzecie łącze -\u003e drugie łącze

Łącze symboliczne można rozpoznać po danych wyjściowych polecenia ls -l: po pierwsze, w pierwszej kolumnie dowiązanie symboliczne ma literę „l”   (pierwsza litera angielskiego słowa link to link), a po drugie, rozmiar dowiązania symbolicznego jest równy liczbie liter w nazwie pliku, do którego się odnosi ( „drugie łącze”   w naszym przypadku), po trzecie, oprócz nazwy linku, ostatnia kolumna zawiera nazwę pliku, do którego odnosi się po znaku –>

Więcej informacji o dowiązaniach symbolicznych

Rozważmy sytuację, w której chcemy utworzyć dowiązanie symboliczne, które wskazuje na / usr / local / bin i znajduje się w katalogu / tmp /. Możemy pisać:

\$ ln -s / usr / local / bin bin1 \$ ls -l bin1   lrwxrwxrwx 1 root root 14 sty 1 15:42 bin1 -\u003e / usr / local / bin \\ $ ln -s ../usr/local/bin bin2 \$ ls -l bin2 lrwxrwxrwx 1 root root 16 sty 1 15:43 bin2 -\u003e ../usr/local/bin \\ $ ls -l bin2   lrwxrwxrwx 1 root root 16 sty 1 15:43 bin2 -\u003e ../usr/local/bin \\ $ mkdir mynewdir \$ mv bin2 mynewdir \$ cd mynewdir \$ cd bin2   bash: cd: bin2: Brak takiego pliku lub katalogu

Ponieważ katalog / tmp / usr / local / bin / nie istnieje, nie będziemy mogli zmienić katalogu roboczego na bin2; innymi słowy, po przeniesieniu link przestał działać (stał się „rytmem”).

Z tego powodu czasem warto unikać tworzenia dowiązań symbolicznych przy użyciu ścieżek względnych. Ale czasami jest to wygodne. Rozważ ten przypadek: załóżmy, że chcemy utworzyć link do programu w / usr / bin (lub innymi słowy, nadać temu programowi alternatywną nazwę):

# ls -l / usr / bin / keychain   -rwxr-xr-x 1 root root 10150 Dec 12 20:09 / usr / bin / keychain

Administrator (root) może chcieć utworzyć link do programu „pęku kluczy” o krótszej nazwie „kc”. W tym przykładzie mamy dostęp do systemu root, o czym świadczy monit bash, który zmienił się na "#" . Potrzebujemy uprawnień administratora, ponieważ zwykli użytkownicy nie mogą tworzyć plików w katalogu / usr / bin /. Teraz, w imieniu roota, możemy stworzyć alternatywną nazwę dla naszego programu:

# cd / usr / bin # ln -s / usr / bin / keychain kc # ls -l pęku kluczy   -rwxr-xr-x 1 root root 10150 Dec 12 20:09 / usr / bin / keychain # ls -l kc   lrwxrwxrwx 1 root root 17 marca 27 17:44 kc -\u003e / usr / bin / keychain

W tym przykładzie utworzyliśmy dowiązanie symboliczne do pliku / usr / bin / keychain.

# mv / usr / bin / keychain / usr / bin / kc / usr / local / bin # ls -l / usr / local / bin / kc   lrwxrwxrwx 1 root root 17 marca 27 17:44 kc -\u003e / usr / bin / keychain

Ze względu na fakt, że podczas tworzenia łącza użyliśmy ścieżki bezwzględnej, nadal wskazuje ona na plik / usr / bin / keychain, którego już nie ma. Ale jeśli użyjemy ścieżki względnej podczas tworzenia łącza, nadal będzie działać.

Często oba typy dowiązań symbolicznych (ze ścieżkami bezwzględnymi i względnymi) działają dobrze. Poniższy przykład pokazuje sposób utworzenia dowiązania symbolicznego, które nadal działa po przeniesieniu i pliku, do którego odnosi się do innego katalogu:

# cd / usr / bin # ln -s pęku kluczy kc # ls -l kc   lrwxrwxrwx 1 root root 8 sty 5 12:40 kc -\u003e keychain # mv keychain kc / usr / local / bin # ls -l / usr / local / bin / keychain   -rwxr-xr-x 1 root root 10150 Dec 12 20:09 / usr / local / bin / keychain # ls -l / usr / local / bin / kc   lrwxrwxrwx 1 root root 17 marca 27 17:44 kc -\u003e pęku kluczy

Teraz możemy uruchomić program pęku kluczy, uzyskując do niego dostęp pod nazwą / usr / local / bin / kc

rm

Teraz, gdy wiemy, jak działają zespoły cp, mv   i ln   czas nauczyć się usuwać pliki. Zwykle usuwanie odbywa się za pomocą polecenia rm. Aby usunąć wiele plików, wystarczy podać ich nazwy oddzielone spacjami w wierszu poleceń jako argumenty rm:

\$ cd / tmp \$ dotknij plik 1 plik 2 \$ ls -l plik1 plik2   -rw-r - r-- 1 root root 0 stycznia 1 16:41 plik 1 -rw-r - r-- 1 root root 0 stycznia 1 16:41 plik 2 \\ $ rm plik1 plik2 \$ ls -l plik1 plik2   ls: plik1: brak takiego pliku lub katalogu ls: plik2: brak takiego pliku lub katalogu

Zapamietaj to usunięte pliki   niemożliwe do odzyskania (chociaż możesz spróbować). Dlatego wielu początkujących użytkowników Linuksa korzysta z tej opcji "-ja"   zespoły rm, co wymaga poproszenia użytkownika o potwierdzenie usunięcia każdego pliku.

\$ rm -i plik1 plik2   rm: usunąć zwykły pusty plik `file1"? y   rm: usunąć zwykły pusty plik `file2"? y

W ostatnim przykładzie, przed usunięciem każdego pliku, polecenie rm   pyta: czy użytkownik naprawdę chce usunąć plik? Aby potwierdzić usunięcie, naciśnij klawisz „y”   na klawiaturze i odmówić usunięcia - klawisz „n”.

Możesz przerwać wykonywanie dowolnego polecenia (jeśli coś poszło nie tak, jak zamierzono), naciskając kombinację Ctrldo.

Poproś polecenie rm o potwierdzenie usunięcia każdego pliku nawet bez opcji "-ja"   można dodać do pliku ~ / .bashrc   używając ulubionej linii edytora tekstu:

alias rm \u003d "rm -i"

rmdir

Istnieją dwa sposoby usuwania katalogów: możesz usunąć całą zawartość katalogu jeden po drugim, a następnie użyć polecenia rmdir   aby usunąć sam katalog:

\$ mkdir mydir \$ dotknij mydir / file1 \$ rm mójkatalog / plik1 \$ rmdir mydir

Ta metoda jest powszechnie nazywana „metodą usuwania katalogu dla przegranych”. O wiele wygodniej jest użyć polecenia „rm -rf”   aby usunąć katalog z całą zawartością.

\$ rm -rf mydir

Używaj tego polecenia ostrożnie, ponieważ z jego pomocą niedoświadczony administrator (szczególnie z uprawnieniami roota) może łatwo złamać drewno opałowe (i systemy Linux).

Używanie symboli wieloznacznych

Co to są symbole wieloznaczne

Przy codziennym korzystaniu z Linuksa często pojawiają się sytuacje, gdy trzeba wykonać jedną prostą operację (na przykład rm) na wielu plikach. W takim przypadku wyświetlenie wszystkich nazw plików w wierszu polecenia nie jest zbyt wygodne:

\$ rm plik1 plik2 plik3 plik4 plik5 plik6 plik7 plik8

Możesz rozwiązać ten problem za pomocą symboli wieloznacznych. Powłoka Linux obsługuje możliwość określania wielu plików przy użyciu szablonów (ze względów historycznych jest to również nazywane „globowaniem”). Bash i inne polecenia Linuksa wybierają tylko te pliki, które pasują do szablonu. Tak więc, jeśli chcesz usunąć pliki z pliku 1 do pliku 8, musisz napisać:

\$ plik rm

A jeśli musisz usunąć wszystkie pliki, których nazwy zaczynają się od pliku słowa i pliku o nazwie plik:

\$ plik rm *

Szablon *   dopasowuje dowolny znak, sekwencję znaków lub „brak znaku”. Oczywiście szablonów można używać nie tylko do usuwania plików, jak pokazano poniżej.

Jeśli nie znaleziono dopasowania

Jeśli chcesz wyświetlić listę plików w katalogu / etc /, których nazwy zaczynają się na literę sol   i plik o nazwie „g” (jeśli taki istnieje), musisz napisać:

\$ ls -d / etc / g *   / etc / gconf / etc / ggi / etc / gimp / etc / gnome / etc / gnome-vfs-mime-magic / etc / gpm / etc / group / etc / group-

Zobaczmy, co się stanie, jeśli określisz szablon, który nie pasuje do żadnej nazwy pliku:

\$ ls -d / usr / bin / asdf * jkl   ls: / usr / bin / asdf * jkl: Brak takiego pliku lub katalogu

W tym przykładzie próbowaliśmy wyświetlić listę plików, których nazwy zaczynają się od „asdf”, a kończą na „jkl”. Interpreter poleceń wydał komunikat, że nie znaleziono plików o tych nazwach.

Składnia szablonu: * i?

Przyjrzeliśmy się, jak działa globbing (podstawianie nazw plików). Teraz rozważ bardziej szczegółowo składnię szablonów:

*   dopasowuje zero lub więcej znaków:

  • / etc / g *   - wszystkie pliki w katalogu / etc /, których nazwy zaczynają się od „g” i plik o nazwie „g”.
  • / tmp / my * 1   - wszystkie pliki w katalogu / tmp, których nazwy zaczynają się na „my” i kończą na „1” (w tym plik o nazwie „my1”)

?   zastępuje dowolny pojedynczy znak:

  • mój plik?   - każdy plik, którego nazwa zaczyna się od słowa „mój_plik”, po którym następuje dowolny pojedynczy znak.
  • / tmp / notes? txt   - odpowiada plikom o nazwach „notes.txt” i „notes_txt” (jeśli istnieją w / tmp /).

Nawiasy kwadratowe:

Szablon jest bardzo podobny do ? „ale pozwala jawnie określić zestaw znaków. Wzorzec” pasuje do jednego znaku z tych wskazanych w nawiasach. Możesz również określić zakres znaków w nawiasach (użyj do tego znaku - / łącznika) lub kilka zakresów z rzędu, wtedy wzór będzie pasował do dowolnego symbol z tego zakresu:

  • mój plik   - odpowiada myfile1 i myfile2. Szablon będzie działał, dopóki istnieje co najmniej jeden z tych dwóch plików.
  • hangeog   - Pasuje do plików o nazwach Changelog, ChangeLog, changeLog i changelog. Jak być może zauważyłeś, użycie wzorca jest przydatne, gdy szukasz nazw, w których rozróżniana jest wielkość liter.
  • ls / etc / *   - wyświetl listę plików w katalogu / etc /, których nazwy zaczynają się od liczby.
  • ls / tmp / *   - wyświetl listę plików w katalogu / tmp / których nazwy zaczynają się na literę (duża lub duża)

Projekt [jest podobny do, z tym wyjątkiem, że pasuje do jednego znaku, który nie jest wymieniony pomiędzy [[   i ] . Na przykład:

  • rm mój_plik [   - Usuwa wszystkie pliki, których nazwy składają się ze słowa „mój_plik”, po którym następuje jedna cyfra, z wyjątkiem pliku „mój_plik9”.

Przykłady użycia

Oto kilka przykładów używania szablonów. Ponieważ bash interpretuje znaki ? , [ , ] , *   Jako wzorce zastępcze należy zachować ostrożność, używając argumentów zawierających te znaki. Na przykład jeśli chcesz utworzyć plik zawierający ciąg „ * ”, następujące polecenie nie zrobi tego, co chcesz:

\$ echo *\u003e /tmp/mynewfile.txt

Jeśli katalog roboczy zawiera jeden lub więcej plików, których nazwy mieszczą się w szablonie „ * „wtedy w /tmp/mynewfile.txt znajdziesz listę ich nazw, a nie ciąg znaków” * ". Ale jak osiągnąć to, co chcieliśmy? Pierwszy sposób to wziąć ciąg w pojedyncze cudzysłowy. Bash traktuje ciąg w pojedynczych cudzysłowach tak, jakby był zwykłym ciągiem tekstowym i nie ujawniał zastępujących znaków.

\$ echo "*"\u003e /tmp/mynewfile.txt

Po wykonaniu tego polecenia plik będzie zawierać wiersz „ * „zgodnie z oczekiwaniami. Innym sposobem jest ucieczka od znaków specjalnych odwrotnym ukośnikiem ( \ ) Odwrotny ukośnik przed znakiem specjalnym informuje tłumacza, że \u200b\u200bznak ten należy traktować jako zwykły tekst, a nie jako szablon.

\$ echo \\\\ *\u003e /tmp/mynewfile.txt

Obie zaproponowane metody (pojedyncze cudzysłowy i ucieczka) dają pożądany rezultat. Ponieważ mówimy o ucieczce za pomocą odwrotnego ukośnika, warto to powiedzieć, aby wskazać znak tekstowy "\"   możesz ująć je w pojedyncze cytaty lub napisać "\\\"   (ta kombinacja zostanie zinterpretowana przez tłumacza jako zwykły pojedynczy ukośnik odwrotny "\" )

Komentarz: Podwójne cudzysłowy działają w taki sam sposób jak pojedyncze cudzysłowy, ale pozwalają bashowi interpretować niektóre znaki specjalne. Dlatego pojedyncze cudzysłowy są najlepszym sposobem na przekazanie tylko tekstu do polecenia. Dla dodatkowe informacje   przeczytaj o szablonach pomocy „man 7 glob”. Aby uzyskać więcej informacji na temat używania cytatów, przeczytaj sekcję. CYTOWANIE   Bibliografia „man 8 glob”.

Wniosek

Gratulacje, dotarłeś do końca naszego przeglądu podstawowych zagadnień związanych z Linuksem! Mam nadzieję, że materiał okaże się przydatny. Tematy omówione w tym samouczku, w tym podstawy bash, podstawowe polecenia linux, linki i symbole wieloznaczne są podstawą następnego artykułu na temat podstaw administracji, który będzie mówił o wyrażeniach regularnych, prawach dostępu, zarządzaniu kontami użytkowników i wiele więcej.