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.
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.
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.
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.
$ 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!
#! / 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.
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 Ctrl–Alt–F1 lub Ctrl–Alt–F2 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 / bashJeś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 Ctrl–rezespoł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 / usrNastępnie możemy przejść do / usr / local / bin, używając ścieżki względnej
\$ cd local / bin \$ pwd / usr / local / binZa 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 / localJak 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 / sharePrzykł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/../binKatalog 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.
\$ ./myprogW 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 CDBez 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.txtJednak 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.txtZespoł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 srcJeś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 sslSzczegół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/tmpPierwsza 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 / binLista 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 tmpCo 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 / localJak 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 / localTen 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 toeDomyś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 / fulMoż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 / pieAby 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 copymeZespół 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 plikAby napisać linię do naszego pliku, przekieruj na nią wyjście polecenia echo:
\$ echo „firstfile”\u003e copymeZnak > (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 copymekot i cp
Aby wyprowadzić zawartość pliku do terminala, użyj polecenia kot:
\$ copyme kota pierwszy plikTeraz 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 copiedmeMoż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 copymemv
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 movemeNumer 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 / userPlik 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.txtJeś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 łączeJak 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 kataloguPonieważ 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 / keychainAdministrator (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 / keychainW 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 / keychainZe 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 kluczyTeraz 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 kataloguZapamietaj 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"? yW 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ę Ctrl–do.
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 mydirTa 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 mydirUż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 plik8Moż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 rmA 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 kataloguW 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.txtJeś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.txtPo 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.txtObie 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.