Unix / Linux - Szybki przewodnik

Co to jest Unix?

System operacyjny Unix to zestaw programów, które działają jako łącze między komputerem a użytkownikiem.

Programy komputerowe, które przydzielają zasoby systemowe i koordynują wszystkie szczegóły elementów wewnętrznych komputera, nazywane są operating system albo kernel.

Użytkownicy komunikują się z jądrem za pośrednictwem programu znanego jako shell. Powłoka to interpreter wiersza poleceń; tłumaczy polecenia wprowadzone przez użytkownika i konwertuje je na język zrozumiały dla jądra.

  • Unix został pierwotnie opracowany w 1969 roku przez grupę pracowników AT&T Ken Thompson, Dennis Ritchie, Douglas McIlroy i Joe Ossanna z Bell Labs.

  • Na rynku dostępne są różne warianty Uniksa. Solaris Unix, AIX, HP Unix i BSD to kilka przykładów. Linux jest również odmianą Uniksa, która jest ogólnie dostępna.

  • Kilka osób może używać komputera z systemem Unix w tym samym czasie; stąd Unix nazywany jest systemem wielu użytkowników.

  • Użytkownik może również uruchamiać wiele programów w tym samym czasie; stąd Unix jest środowiskiem wielozadaniowym.

Architektura uniksowa

Oto podstawowy schemat blokowy systemu Unix -

Główną koncepcją, która łączy wszystkie wersje Uniksa, są następujące cztery podstawy -

  • Kernel- Jądro jest sercem systemu operacyjnego. Współdziała ze sprzętem i większością zadań, takich jak zarządzanie pamięcią, planowanie zadań i zarządzanie plikami.

  • Shell- Powłoka to narzędzie przetwarzające żądania. Kiedy wpisujesz polecenie na swoim terminalu, powłoka interpretuje polecenie i wywołuje żądany program. Powłoka używa standardowej składni dla wszystkich poleceń. C Shell, Bourne Shell i Korn Shell to najbardziej znane powłoki, które są dostępne z większością wariantów Uniksa.

  • Commands and Utilities - Istnieje wiele poleceń i narzędzi, z których możesz korzystać w codziennych czynnościach. cp, mv, cat i grepitp. to kilka przykładów poleceń i narzędzi. Istnieje ponad 250 standardowych poleceń i wieloma inne przewidziane przez 3 rd oprogramowania firm. Wszystkie polecenia mają różne opcje.

  • Files and Directories- Wszystkie dane systemu Unix są zorganizowane w pliki. Wszystkie pliki są następnie organizowane w katalogach. Te katalogi są dalej zorganizowane w strukturę podobną do drzewa o nazwiefilesystem.

Rozruch systemu

Jeśli masz komputer z zainstalowanym systemem operacyjnym Unix, wystarczy go włączyć, aby działał.

Zaraz po włączeniu system zaczyna się uruchamiać, a na koniec wyświetla monit o zalogowanie się do systemu, co jest czynnością polegającą na zalogowaniu się do systemu i wykorzystaniu go do codziennych czynności.

Zaloguj się w systemie Unix

Kiedy po raz pierwszy łączysz się z systemem Unix, zwykle pojawia się następujący monit -

login:

Zalogować się

  • Przygotuj swój identyfikator użytkownika (identyfikator użytkownika) i hasło. Skontaktuj się z administratorem systemu, jeśli jeszcze ich nie masz.

  • Wpisz swój identyfikator użytkownika w monicie logowania, a następnie naciśnij ENTER. Twój identyfikator użytkownika tocase-sensitive, więc upewnij się, że wpisujesz go dokładnie tak, jak polecił administrator systemu.

  • Wpisz hasło po wyświetleniu monitu o hasło, a następnie naciśnij ENTER. W haśle rozróżniana jest również wielkość liter.

  • Jeśli podasz poprawny identyfikator użytkownika i hasło, będziesz mógł wejść do systemu. Przeczytaj informacje i komunikaty pojawiające się na ekranie w następujący sposób.

login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$

Otrzymasz wiersz polecenia (czasami nazywany $zachęta), gdzie wpisujesz wszystkie swoje polecenia. Na przykład, aby sprawdzić kalendarz, musisz wpisaćcal polecenie w następujący sposób -

$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $

Zmień hasło

Wszystkie systemy uniksowe wymagają haseł, aby zapewnić, że pliki i dane pozostaną własne, a sam system jest zabezpieczony przed hakerami i włamywaczami. Oto kroki, aby zmienić hasło -

Step 1 - Aby rozpocząć, wpisz hasło w wierszu polecenia, jak pokazano poniżej.

Step 2 - Wprowadź swoje stare hasło, którego obecnie używasz.

Step 3- Wpisz nowe hasło. Zawsze miej na tyle złożone hasło, aby nikt nie mógł go odgadnąć. Ale upewnij się, że to pamiętasz.

Step 4 - Musisz zweryfikować hasło, wpisując je ponownie.

$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $

Note- Dodaliśmy tutaj gwiazdkę (*), aby pokazać lokalizację, w której musisz wprowadzić aktualne i nowe hasło, w przeciwnym razie w systemie. Nie pokazuje żadnych znaków podczas pisania.

Lista katalogów i plików

Wszystkie dane w systemie Unix są zorganizowane w pliki. Wszystkie pliki są zorganizowane w katalogach. Te katalogi są zorganizowane w strukturę drzewa zwaną systemem plików.

Możesz użyć lspolecenie, aby wyświetlić wszystkie pliki lub katalogi dostępne w katalogu. Poniżej znajduje się przykład użycials polecenie z -l opcja.

$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $

Tutaj wpisy zaczynające się od d.....reprezentują katalogi. Na przykład, uml, univ i urlspedia to katalogi, a reszta wpisów to pliki.

Kim jesteś?

Gdy jesteś zalogowany do systemu, możesz chcieć wiedzieć: Who am I?

Najłatwiejszym sposobem, aby dowiedzieć się, „kim jesteś” jest wpisanie whoami polecenie -

$ whoami amrood $

Wypróbuj w swoim systemie. To polecenie wyświetla nazwę konta powiązaną z bieżącym logowaniem. Możesz spróbowaćwho am i polecenia, aby uzyskać informacje o sobie.

Kto jest zalogowany?

Czasami możesz chcieć wiedzieć, kto jest zalogowany na komputerze w tym samym czasie.

Dostępne są trzy polecenia umożliwiające uzyskanie tych informacji w zależności od tego, ile chcesz wiedzieć o innych użytkownikach: users, who, i w.

$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu  ttyp2 Oct 4 09:08 (calliope)
qadir  ttyp4 Oct 8 12:09 (dent)

$

Spróbuj wpolecenie w systemie, aby sprawdzić dane wyjściowe. Zawiera listę informacji związanych z użytkownikami zalogowanymi w systemie.

Wylogowuję się

Po zakończeniu sesji musisz wylogować się z systemu. Ma to na celu zapewnienie, że nikt inny nie uzyska dostępu do twoich plików.

To log out

  • Po prostu wpisz logout polecenie w wierszu polecenia, a system wyczyści wszystko i przerwie połączenie.

Zamknięcie systemu

Najbardziej spójnym sposobem prawidłowego zamknięcia systemu Unix za pomocą wiersza poleceń jest użycie jednego z następujących poleceń -

Sr.No. Polecenie i opis
1

halt

Natychmiast wyłącza system

2

init 0

Wyłącza system za pomocą predefiniowanych skryptów do synchronizacji i czyszczenia systemu przed zamknięciem

3

init 6

Ponownie uruchamia system, całkowicie go zamykając, a następnie uruchamiając ponownie

4

poweroff

Zamyka system poprzez wyłączenie

5

reboot

Ponownie uruchamia system

6

shutdown

Wyłącza system

Zwykle musisz być superużytkownikiem lub rootem (najbardziej uprzywilejowanym kontem w systemie Unix), aby zamknąć system. Jednak w przypadku niektórych samodzielnych lub osobistych komputerów Unix może to zrobić użytkownik administracyjny, a czasem zwykli użytkownicy.

W tym rozdziale omówimy szczegółowo zarządzanie plikami w systemie Unix. Wszystkie dane w systemie Unix są zorganizowane w pliki. Wszystkie pliki są zorganizowane w katalogach. Te katalogi są zorganizowane w strukturę drzewa zwaną systemem plików.

Kiedy pracujesz z Uniksem w taki czy inny sposób, spędzasz większość czasu na pracy z plikami. Ten samouczek pomoże Ci zrozumieć, jak tworzyć i usuwać pliki, kopiować je i zmieniać ich nazwy, tworzyć łącza do nich itp.

W systemie Unix istnieją trzy podstawowe typy plików -

  • Ordinary Files- Zwykły plik to plik w systemie zawierający dane, tekst lub instrukcje programu. W tym samouczku przyjrzymy się pracy ze zwykłymi plikami.

  • Directories- Katalogi przechowują zarówno pliki specjalne, jak i zwykłe. Dla użytkowników zaznajomionych z Windows lub Mac OS, katalogi Unix są odpowiednikami folderów.

  • Special Files- Niektóre pliki specjalne zapewniają dostęp do sprzętu, takiego jak dyski twarde, napędy CD-ROM, modemy i karty Ethernet. Inne pliki specjalne są podobne do aliasów lub skrótów i umożliwiają dostęp do pojedynczego pliku przy użyciu różnych nazw.

Lista plików

Aby wyświetlić listę plików i katalogów przechowywanych w bieżącym katalogu, użyj następującego polecenia -

$ls

Oto przykładowe dane wyjściowe powyższego polecenia -

$ls

bin        hosts  lib     res.03
ch07       hw1    pub     test_results
ch07.bak   hw2    res.01  users
docs       hw3    res.02  work

Komenda ls obsługuje -l opcja, która pomogłaby ci uzyskać więcej informacji o wymienionych plikach -

$ls -l
total 1962188

drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
drwxr-xr-x  2    200    300      4096 Nov 25  2007 webthumb-1.01
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf
drwxr-xr-x 11 amrood amrood      4096 May 29  2007 zlib-1.2.3
$

Oto informacje o wszystkich wymienionych kolumnach -

  • First Column- Reprezentuje typ pliku i uprawnienia nadane do pliku. Poniżej znajduje się opis wszystkich typów plików.

  • Second Column - Reprezentuje liczbę bloków pamięci zajętych przez plik lub katalog.

  • Third Column- Reprezentuje właściciela pliku. To jest użytkownik Uniksa, który utworzył ten plik.

  • Fourth Column- Reprezentuje grupę właściciela. Każdy użytkownik Uniksa będzie miał przypisaną grupę.

  • Fifth Column - Przedstawia rozmiar pliku w bajtach.

  • Sixth Column - Przedstawia datę i godzinę, kiedy ten plik został utworzony lub zmodyfikowany po raz ostatni.

  • Seventh Column - reprezentuje nazwę pliku lub katalogu.

w ls -l przykład listy, każda linia pliku zaczyna się od d, -lub l. Te znaki wskazują typ pliku, który jest na liście.

Sr.No. Prefiks i opis
1

-

Zwykły plik, taki jak plik tekstowy ASCII, binarny plik wykonywalny lub łącze twarde.

2

b

Zablokuj plik specjalny. Zablokuj plik urządzenia wejściowego / wyjściowego, np. Fizyczny dysk twardy.

3

c

Znak specjalny plik. Nieprzetworzony plik urządzenia wejściowego / wyjściowego, np. Fizyczny dysk twardy.

4

d

Plik katalogu zawierający listę innych plików i katalogów.

5

l

Plik dowiązania symbolicznego. Linki w dowolnym zwykłym pliku.

6

p

Nazwana potok. Mechanizm komunikacji międzyprocesowej.

7

s

Gniazdo używane do komunikacji międzyprocesowej.

Metaznaki

Metaznaki mają specjalne znaczenie w Uniksie. Na przykład,* i ?to metaznaki. Używamy* aby dopasować 0 lub więcej znaków, znak zapytania (?) pasuje do jednego znaku.

Na przykład -

$ls ch*.doc

Wyświetla wszystkie pliki, których nazwy zaczynają się od ch i zakończ .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc ch02-1.doc c

Tutaj, *działa jako metaznak, który pasuje do dowolnego znaku. Jeśli chcesz wyświetlić wszystkie pliki kończące się na.doc, możesz użyć następującego polecenia -

$ls *.doc

Ukryte pliki

Plik niewidoczny to taki, którego pierwszym znakiem jest kropka lub kropka (.). Programy uniksowe (w tym powłoka) używają większości tych plików do przechowywania informacji konfiguracyjnych.

Niektóre typowe przykłady ukrytych plików obejmują pliki -

  • .profile - Skrypt inicjalizacyjny powłoki Bourne'a (sh)

  • .kshrc - Skrypt inicjalizacyjny powłoki Korna (ksh)

  • .cshrc - Skrypt inicjalizacyjny powłoki C (csh)

  • .rhosts - Plik konfiguracyjny powłoki zdalnej

Aby wyświetlić niewidoczne pliki, określ rozszerzenie -a opcja ls -

$ ls -a

.         .profile       docs     lib     test_results
..        .rhosts        hosts    pub     users
.emacs    bin            hw1      res.01  work
.exrc     ch07           hw2      res.02
.kshrc    ch07.bak       hw3      res.03
$
  • Single dot (.) - reprezentuje bieżący katalog.

  • Double dot (..) - reprezentuje katalog nadrzędny.

Tworzenie plików

Możesz użyć viedytor do tworzenia zwykłych plików w dowolnym systemie Unix. Wystarczy wydać następujące polecenie -

$ vi filename

Powyższe polecenie otworzy plik o podanej nazwie. Teraz wciśnij klawisziaby przejść do trybu edycji. Gdy jesteś w trybie edycji, możesz rozpocząć zapisywanie treści w pliku, jak w następującym programie -

This is unix file....I created it for the first time.....
I'm going to save this content in this file.

Po zakończeniu pracy z programem wykonaj następujące kroki -

  • Wciśnij klawisz esc wyjść z trybu edycji.

  • Naciśnij dwa klawisze Shift + ZZ razem, aby całkowicie wyjść z pliku.

Będziesz mieć teraz plik utworzony za pomocą filename w bieżącym katalogu.

$ vi filename $

Edycja plików

Możesz edytować istniejący plik za pomocą rozszerzenia viredaktor. Omówimy w skrócie, jak otworzyć istniejący plik -

$ vi filename

Po otwarciu pliku możesz przejść do trybu edycji naciskając klawisz ia następnie możesz kontynuować edycję pliku. Jeśli chcesz przenieść się tu i tam wewnątrz pliku, najpierw musisz wyjść z trybu edycji, naciskając klawiszEsc. Następnie możesz użyć następujących klawiszy, aby przejść do pliku -

  • l klawisz, aby przejść na prawą stronę.

  • h klawisz, aby przejść na lewą stronę.

  • k klawisz, aby przejść do góry nogami w pliku.

  • j klawisz, aby przejść do dołu w pliku.

Używając powyższych klawiszy, możesz ustawić kursor w dowolnym miejscu, w którym chcesz edytować. Po ustawieniu możesz użyćiaby przejść do trybu edycji. Po zakończeniu edycji pliku naciśnijEsc i wreszcie dwa klucze Shift + ZZ razem, aby całkowicie wyjść z pliku.

Wyświetl zawartość pliku

Możesz użyć catpolecenie, aby zobaczyć zawartość pliku. Poniżej znajduje się prosty przykład, aby zobaczyć zawartość powyższego utworzonego pliku -

$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$

Numery wierszy można wyświetlić za pomocą -b opcja wraz z cat polecenie w następujący sposób -

$ cat -b filename
1   This is unix file....I created it for the first time.....
2   I'm going to save this content in this file.
$

Liczenie słów w pliku

Możesz użyć wcpolecenie, aby uzyskać całkowitą liczbę wierszy, słów i znaków zawartych w pliku. Poniżej znajduje się prosty przykład, aby zobaczyć informacje o utworzonym powyżej pliku -

$ wc filename
2  19 103 filename
$

Oto szczegóły wszystkich czterech kolumn -

  • First Column - Przedstawia całkowitą liczbę wierszy w pliku.

  • Second Column - Przedstawia całkowitą liczbę słów w pliku.

  • Third Column- Reprezentuje całkowitą liczbę bajtów w pliku. To jest rzeczywisty rozmiar pliku.

  • Fourth Column - reprezentuje nazwę pliku.

Możesz podać wiele plików i jednocześnie uzyskać informacje o tych plikach. Oto prosta składnia -

$ wc filename1 filename2 filename3

Kopiowanie plików

Aby wykonać kopię pliku, użyj rozszerzenia cpKomenda. Podstawowa składnia polecenia to -

$ cp source_file destination_file

Poniżej znajduje się przykład tworzenia kopii istniejącego pliku filename.

$ cp filename copyfile
$

Znajdziesz teraz jeszcze jeden plik copyfilew twoim bieżącym katalogu. Ten plik będzie dokładnie taki sam, jak oryginalny plikfilename.

Zmiana nazwy plików

Aby zmienić nazwę pliku, użyj rozszerzenia mvKomenda. Poniżej znajduje się podstawowa składnia -

$ mv old_file new_file

Poniższy program zmieni nazwę istniejącego pliku filename do newfile.

$ mv filename newfile $

Plik mvpolecenie przeniesie istniejący plik całkowicie do nowego pliku. W tym przypadku znajdziesz tylkonewfile w twoim bieżącym katalogu.

Usuwanie plików

Aby usunąć istniejący plik, użyj rozszerzenia rmKomenda. Poniżej znajduje się podstawowa składnia -

$ rm filename

Caution- Plik może zawierać przydatne informacje. Zawsze zaleca się ostrożność podczas korzystania z tegoDeleteKomenda. Lepiej jest użyć-i opcja wraz z rm Komenda.

Poniżej znajduje się przykład, który pokazuje, jak całkowicie usunąć istniejący plik filename.

$ rm filename
$

Możesz usunąć wiele plików jednocześnie za pomocą polecenia podanego poniżej -

$ rm filename1 filename2 filename3
$

Standardowe strumienie w systemie Unix

W normalnych okolicznościach każdy program uniksowy ma trzy strumienie (pliki) otwarte podczas uruchamiania -

  • stdin- Nazywa się to standardowym wejściem, a powiązany deskryptor pliku to 0. Jest to również reprezentowane jako STDIN. Program Unix odczyta domyślne wejście ze STDIN.

  • stdout- Nazywa się to standardowym wyjściem, a powiązany deskryptor pliku to 1. Jest to również reprezentowane jako STDOUT. Program Unix zapisze domyślne wyjście na STDOUT

  • stderr- Jest to określane jako błąd standardowy, a powiązany deskryptor pliku to 2. Jest to również reprezentowane jako STDERR. Program Unix zapisze wszystkie komunikaty o błędach w STDERR.

W tym rozdziale omówimy szczegółowo zarządzanie katalogami w systemie Unix.

Katalog to plik, którego solowym zadaniem jest przechowywanie nazw plików i powiązanych informacji. Wszystkie pliki, czy to zwykłe, specjalne czy katalogowe, znajdują się w katalogach.

Unix używa hierarchicznej struktury do organizowania plików i katalogów. Ta struktura jest często nazywana drzewem katalogów. Drzewo ma pojedynczy węzeł główny, znak ukośnika (/), a wszystkie inne katalogi znajdują się pod nim.

Katalog domowy

Katalog, w którym się znajdujesz przy pierwszym logowaniu, nazywany jest katalogiem domowym.

Większość pracy będziesz wykonywać w swoim katalogu domowym i podkatalogach, które będziesz tworzyć w celu organizowania plików.

Możesz przejść do swojego katalogu domowego w dowolnym momencie, używając następującego polecenia -

$cd ~
$

Tutaj ~wskazuje katalog domowy. Załóżmy, że musisz przejść do katalogu domowego innego użytkownika, użyj następującego polecenia -

$cd ~username
$

Aby przejść do ostatniego katalogu, możesz użyć następującego polecenia -

$cd -
$

Bezwzględne / względne nazwy ścieżek

Katalogi są ułożone w hierarchię z korzeniem (/) na górze. Pozycja dowolnego pliku w hierarchii jest opisana przez jego ścieżkę.

Elementy ścieżki są oddzielone znakiem /. Ścieżka jest absolutna, jeśli jest opisana w odniesieniu do katalogu głównego, dlatego bezwzględne nazwy ścieżek zawsze zaczynają się od /.

Poniżej znajduje się kilka przykładów bezwzględnych nazw plików.

/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3

Nazwa ścieżki może być również względna w stosunku do bieżącego katalogu roboczego. Względne nazwy ścieżek nigdy nie zaczynają się od /. W odniesieniu do katalogu domowego użytkownika amrood, niektóre ścieżki mogą wyglądać następująco -

chem/notes
personal/res

Aby w dowolnym momencie określić, gdzie się znajdujesz w hierarchii systemu plików, wprowadź polecenie pwd wydrukować bieżący katalog roboczy -

$pwd
/user0/home/amrood

$

Lista katalogów

Aby wyświetlić listę plików w katalogu, możesz użyć następującej składni -

$ls dirname

Poniżej znajduje się przykład listy wszystkich plików zawartych w /usr/local katalog -

$ls /usr/local

X11       bin          gimp       jikes       sbin
ace       doc          include    lib         share
atalk     etc          info       man         ami

Tworzenie katalogów

Teraz zrozumiemy, jak tworzyć katalogi. Katalogi są tworzone za pomocą następującego polecenia -

$mkdir dirname

W tym przypadku katalog to bezwzględna lub względna ścieżka do katalogu, który chcesz utworzyć. Na przykład polecenie -

$mkdir mydir $

Tworzy katalog mydirw bieżącym katalogu. Oto kolejny przykład -

$mkdir /tmp/test-dir $

To polecenie tworzy katalog test-dir w /tmpinformator. Plikmkdir polecenie nie generuje żadnych danych wyjściowych, jeśli pomyślnie utworzy żądany katalog.

Jeśli podasz więcej niż jeden katalog w wierszu poleceń, mkdirtworzy każdy z katalogów. Na przykład -

$mkdir docs pub $

Tworzy katalogi docs i pub w bieżącym katalogu.

Tworzenie katalogów nadrzędnych

Teraz zrozumiemy, jak tworzyć katalogi nadrzędne. Czasami, gdy chcesz utworzyć katalog, jego katalog nadrzędny lub katalogi mogą nie istnieć. W tym przypadku,mkdir wyświetla następujący komunikat o błędzie -

$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $

W takich przypadkach możesz określić -p opcja do mkdirKomenda. Tworzy wszystkie niezbędne katalogi dla Ciebie. Na przykład -

$mkdir -p /tmp/amrood/test $

Powyższe polecenie tworzy wszystkie wymagane katalogi nadrzędne.

Usuwanie katalogów

Katalogi można usunąć za pomocą rmdir polecenie w następujący sposób -

$rmdir dirname $

Note - Aby usunąć katalog, upewnij się, że jest pusty, co oznacza, że ​​w tym katalogu nie powinno być żadnych plików ani podkatalogów.

Możesz usunąć wiele katalogów naraz w następujący sposób -

$rmdir dirname1 dirname2 dirname3 $

Powyższe polecenie usuwa katalogi dirname1, dirname2 i dirname3, jeśli są puste. Plikrmdir polecenie nie generuje żadnych danych wyjściowych, jeśli się powiedzie.

Zmiana katalogów

Możesz użyć cdpolecenie, aby zrobić więcej niż tylko przejście do katalogu domowego. Możesz go użyć do przejścia do dowolnego katalogu, określając prawidłową ścieżkę bezwzględną lub względną. Składnia jest taka, jak podano poniżej -

$cd dirname $

Tutaj, dirnameto nazwa katalogu, do którego chcesz się zmienić. Na przykład polecenie -

$cd /usr/local/bin $

Zmiany w katalogu /usr/local/bin. Z tego katalogu możeszcd do katalogu /usr/home/amrood używając następującej ścieżki względnej -

$cd ../../home/amrood $

Zmiana nazw katalogów

Plik mv (move)Polecenie może być również użyte do zmiany nazwy katalogu. Składnia jest następująca -

$mv olddir newdir $

Możesz zmienić nazwę katalogu mydir do yourdir w następujący sposób -

$mv mydir yourdir $

Katalogi. (kropka) i ... (kropka kropka)

Plik filename .(kropka) reprezentuje bieżący katalog roboczy; ifilename .. (kropka) oznacza katalog znajdujący się o jeden poziom wyżej od bieżącego katalogu roboczego, często nazywany katalogiem nadrzędnym.

Jeśli wpiszemy polecenie, aby wyświetlić listę bieżących katalogów / plików roboczych i użyjemy rozszerzenia -a option aby wyświetlić wszystkie pliki i -l option aby podać długą listę, otrzymamy następujący wynik.

$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $

W tym rozdziale omówimy szczegółowo prawa dostępu do plików i tryby dostępu w systemie Unix. Własność plików jest ważnym składnikiem systemu Unix, który zapewnia bezpieczną metodę przechowywania plików. Każdy plik w systemie Unix ma następujące atrybuty -

  • Owner permissions - Uprawnienia właściciela określają, jakie czynności właściciel pliku może wykonać na pliku.

  • Group permissions - Uprawnienia grupy określają, jakie czynności użytkownik będący członkiem grupy, do której należy plik, może wykonać na pliku.

  • Other (world) permissions - Uprawnienia innych osób wskazują, jakie działania mogą wykonać wszyscy inni użytkownicy na pliku.

Wskaźniki uprawnień

Podczas używania ls -l polecenie, wyświetla różne informacje związane z uprawnieniami do pliku w następujący sposób -

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

Tutaj pierwsza kolumna reprezentuje różne tryby dostępu, tj. Uprawnienia związane z plikiem lub katalogiem.

Uprawnienia są podzielone na grupy po trzy, a każda pozycja w grupie oznacza określone uprawnienie, w następującej kolejności: odczyt (r), zapis (w), wykonanie (x) -

  • Pierwsze trzy znaki (2-4) reprezentują uprawnienia właściciela pliku. Na przykład,-rwxr-xr-- oznacza, że ​​właściciel ma uprawnienia do odczytu (r), zapisu (w) i wykonywania (x).

  • Druga grupa trzech znaków (5-7) składa się z uprawnień dla grupy, do której należy plik. Na przykład,-rwxr-xr-- oznacza, że ​​grupa ma uprawnienia do odczytu (r) i wykonywania (x), ale nie ma uprawnień do zapisu.

  • Ostatnia grupa trzech znaków (8-10) reprezentuje uprawnienia wszystkich innych. Na przykład,-rwxr-xr-- oznacza, że ​​istnieje read (r) tylko pozwolenie.

Tryby dostępu do plików

Uprawnienia do pliku są pierwszą linią obrony w bezpieczeństwie systemu Unix. Podstawowymi blokami konstrukcyjnymi uprawnień w systemie Unix są plikiread, write, i execute uprawnienia, które zostały opisane poniżej -

Czytać

Umożliwia odczyt, czyli przeglądanie zawartości pliku.

pisać

Daje możliwość modyfikowania lub usuwania zawartości pliku.

Wykonać

Użytkownik z uprawnieniami do wykonywania może uruchomić plik jako program.

Tryby dostępu do katalogu

Tryby dostępu do katalogu są wymienione i zorganizowane w taki sam sposób, jak w przypadku każdego innego pliku. Jest kilka różnic, o których należy wspomnieć -

Czytać

Dostęp do katalogu oznacza, że ​​użytkownik może czytać zawartość. Użytkownik może spojrzeć na plikfilenames wewnątrz katalogu.

pisać

Dostęp oznacza, że ​​użytkownik może dodawać lub usuwać pliki z katalogu.

Wykonać

Wykonywanie katalogu nie ma sensu, więc potraktuj to jako uprawnienie do przeglądania.

Użytkownik musi mieć execute dostęp do bin katalogu, aby wykonać plik ls albo cd Komenda.

Zmiana uprawnień

Aby zmienić uprawnienia do pliku lub katalogu, użyj rozszerzenia chmod(Zmień tryb) polecenie. Istnieją dwa sposoby użycia chmod - tryb symboliczny i tryb absolutny.

Używanie chmod w trybie symbolicznym

Najłatwiejszym sposobem modyfikowania uprawnień do plików lub katalogów przez początkującego jest użycie trybu symbolicznego. Dzięki uprawnieniom symbolicznym możesz dodawać, usuwać lub określać żądany zestaw uprawnień za pomocą operatorów w poniższej tabeli.

Sr.No. Operator i opis chmury Chmod
1

+

Dodaje wyznaczone uprawnienia do pliku lub katalogu.

2

-

Usuwa wyznaczone uprawnienia z pliku lub katalogu.

3

=

Ustawia wyznaczone uprawnienia.

Oto przykład użycia testfile. Bieganiels -1 w pliku testowym pokazuje, że uprawnienia do pliku są następujące -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Następnie każdy przykład chmod polecenie z poprzedniej tabeli jest uruchamiane na pliku testowym, po którym następuje ls –l, więc możesz zobaczyć zmiany uprawnień -

$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Oto, jak możesz połączyć te polecenia w jednej linii -

$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Używanie chmod z absolutnymi uprawnieniami

Drugim sposobem modyfikowania uprawnień za pomocą polecenia chmod jest użycie liczby do określenia każdego zestawu uprawnień do pliku.

Każde uprawnienie ma przypisaną wartość, jak pokazano w poniższej tabeli, a suma każdego zestawu uprawnień zawiera liczbę dla tego zestawu.

Numer Ośmiokrotna reprezentacja uprawnień Nr ref
0 Brak pozwolenia ---
1 Wykonaj pozwolenie --x
2 Napisz pozwolenie -w-
3 Uprawnienia do wykonywania i zapisu: 1 (wykonanie) + 2 (zapis) = 3 -wx
4 Czytaj pozwolenie r--
5 Prawo do odczytu i wykonania: 4 (odczyt) + 1 (wykonanie) = 5 rx
6 Prawo do odczytu i zapisu: 4 (odczyt) + 2 (zapis) = 6 rw-
7 Wszystkie uprawnienia: 4 (odczyt) + 2 (zapis) + 1 (wykonanie) = 7 rwx

Oto przykład wykorzystujący plik testowy. Bieganiels -1 w pliku testowym pokazuje, że uprawnienia do pliku są następujące -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Następnie każdy przykład chmod polecenie z poprzedniej tabeli jest uruchamiane na pliku testowym, po którym następuje ls –l, więc możesz zobaczyć zmiany uprawnień -

$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

Zmiana właścicieli i grup

Tworząc konto w systemie Unix, przypisuje plik owner ID i a group IDkażdemu użytkownikowi. Wszystkie wyżej wymienione uprawnienia są również przypisywane na podstawie właściciela i grup.

Dostępne są dwa polecenia do zmiany właściciela i grupy plików -

  • chown - The chown komenda oznacza "change owner" i służy do zmiany właściciela pliku.

  • chgrp - The chgrp komenda oznacza "change group" i służy do zmiany grupy pliku.

Zmiana właściciela

Plik chownpolecenie zmienia własność pliku. Podstawowa składnia jest następująca -

$ chown user filelist

Wartością użytkownika może być name of a user w systemie lub user id (uid) użytkownika w systemie.

Poniższy przykład pomoże ci zrozumieć koncepcję -

$ chown amrood testfile $

Zmienia właściciela danego pliku na użytkownika amrood.

NOTE - Superużytkownik, root, ma nieograniczoną możliwość zmiany własności dowolnego pliku, ale zwykli użytkownicy mogą zmieniać własność tylko tych plików, które są ich właścicielami.

Zmiana prawa własności do grupy

Plik chgrppolecenie zmienia prawa własności pliku do grupy. Podstawowa składnia jest następująca -

$ chgrp group filelist

Wartością grupy może być name of a group w systemie lub the group ID (GID) grupy w systemie.

Poniższy przykład pomoże ci zrozumieć koncepcję -

$ chgrp special testfile
$

Zmienia grupę podanego pliku na special Grupa.

Uprawnienia do plików SUID i SGID

Często, gdy polecenie jest wykonywane, będzie musiało zostać wykonane ze specjalnymi uprawnieniami, aby wykonać swoje zadanie.

Na przykład, gdy zmienisz hasło za pomocą passwd polecenie, twoje nowe hasło zostanie zapisane w pliku /etc/shadow.

Jako zwykły użytkownik nie masz read lub writedostęp do tego pliku ze względów bezpieczeństwa, ale kiedy zmieniasz hasło, musisz mieć uprawnienia do zapisu do tego pliku. Oznacza to, żepasswd program musi nadać Ci dodatkowe uprawnienia, abyś mógł zapisywać do pliku /etc/shadow.

Dodatkowe uprawnienia są nadawane programom za pośrednictwem mechanizmu znanego jako Set User ID (SUID) i Set Group ID (SGID) bity.

Wykonując program, który ma włączony bit SUID, dziedziczisz uprawnienia właściciela tego programu. Programy, które nie mają ustawionego bitu SUID, są uruchamiane z uprawnieniami użytkownika, który uruchomił program.

Tak jest również w przypadku SGID. Zwykle programy są uruchamiane z uprawnieniami grupy, ale zamiast tego grupa zostanie zmieniona tylko dla tego programu na właściciela grupy programu.

Bity SUID i SGID pojawią się jako litera "s"jeśli pozwolenie jest dostępne. SUID"s" bit będzie znajdować się w bitach uprawnień, w których właściciele execute zezwolenie zwykle przebywa.

Na przykład polecenie -

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

Pokazuje, że bit SUID jest ustawiony i że właścicielem polecenia jest root. Wielka literaS w pozycji wykonywania zamiast małych liter s wskazuje, że bit wykonania nie jest ustawiony.

Jeśli bit lepki jest włączony w katalogu, pliki można usunąć tylko wtedy, gdy jesteś jednym z następujących użytkowników -

  • Właściciel katalogu przyklejonego
  • Właściciel usuwanego pliku
  • Superużytkownik, root

Aby ustawić bity SUID i SGID dla dowolnego katalogu, wypróbuj następujące polecenie -

$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $

W tym rozdziale omówimy szczegółowo środowisko Unix. Ważną koncepcją Uniksa jestenvironment, który jest definiowany przez zmienne środowiskowe. Niektóre są ustawiane przez system, inne przez ciebie, a jeszcze inne przez powłokę lub dowolny program, który ładuje inny program.

Zmienna to ciąg znaków, do którego przypisujemy wartość. Przypisywana wartość może być liczbą, tekstem, nazwą pliku, urządzeniem lub dowolnym innym typem danych.

Na przykład, najpierw ustawiamy zmienną TEST, a następnie uzyskujemy dostęp do jej wartości za pomocą echo polecenie -

$TEST="Unix Programming" $echo $TEST

Daje następujący wynik.

Unix Programming

Zwróć uwagę, że zmienne środowiskowe są ustawiane bez użycia rozszerzenia $znak, ale podczas uzyskiwania do nich dostępu używamy znaku $ jako prefiksu. Te zmienne zachowują swoje wartości, dopóki nie wyjdziemy z powłoki.

Kiedy logujesz się do systemu, powłoka przechodzi fazę o nazwie initializationskonfigurować środowisko. Zwykle jest to dwuetapowy proces, w którym powłoka odczytuje następujące pliki -

  • /etc/profile
  • profile

Proces przebiega następująco -

  • Powłoka sprawdza, czy plik /etc/profile istnieje.

  • Jeśli istnieje, odczytuje je powłoka. W przeciwnym razie ten plik jest pomijany. Nie jest wyświetlany żaden komunikat o błędzie.

  • Powłoka sprawdza, czy plik .profileistnieje w twoim katalogu domowym. Twój katalog domowy to katalog, w którym rozpoczynasz pracę po zalogowaniu.

  • Jeśli istnieje, odczytuje je powłoka; w przeciwnym razie powłoka go pominie. Nie jest wyświetlany żaden komunikat o błędzie.

Gdy tylko oba te pliki zostaną odczytane, powłoka wyświetli monit -

$

To jest zachęta, w której możesz wprowadzać polecenia, aby je wykonać.

Note - Opisany tutaj proces inicjalizacji powłoki dotyczy wszystkich Bourne typu powłoki, ale niektóre dodatkowe pliki są używane przez bash i ksh.

Plik .profile

Plik /etc/profile jest obsługiwany przez administratora systemu twojego komputera z systemem Unix i zawiera informacje o inicjalizacji powłoki wymagane przez wszystkich użytkowników systemu.

Plik .profilejest pod twoją kontrolą. Do tego pliku możesz dodać tyle informacji o dostosowywaniu powłoki, ile chcesz. Minimalny zestaw informacji, które musisz skonfigurować, obejmuje:

  • Typ używanego terminala.
  • Lista katalogów, w których można znaleźć polecenia.
  • Lista zmiennych wpływających na wygląd i działanie terminala.

Możesz sprawdzić swoje .profiledostępne w Twoim katalogu domowym. Otwórz go za pomocą edytora vi i sprawdź wszystkie zmienne ustawione dla twojego środowiska.

Ustawianie typu terminala

Zwykle typ używanego terminala jest automatycznie konfigurowany przez plik login lub gettyprogramy. Czasami proces automatycznej konfiguracji nieprawidłowo odgaduje terminal.

Jeśli twój terminal jest ustawiony nieprawidłowo, dane wyjściowe poleceń mogą wyglądać dziwnie lub możesz nie być w stanie poprawnie współdziałać z powłoką.

Aby upewnić się, że tak nie jest, większość użytkowników ustawia swój terminal na najniższy wspólny mianownik w następujący sposób -

$TERM=vt100 $

Ustawianie PATH

Po wpisaniu dowolnego polecenia w wierszu polecenia powłoka musi zlokalizować polecenie, zanim będzie można je wykonać.

Zmienna PATH określa lokalizacje, w których powłoka powinna szukać poleceń. Zwykle zmienna Path jest ustawiona w następujący sposób -

$PATH=/bin:/usr/bin $

Tutaj każdy z poszczególnych wpisów oddzielonych dwukropkiem (:)to katalogi. Jeśli zażądasz, aby powłoka wykonała polecenie i nie może znaleźć go w żadnym z katalogów podanych w zmiennej PATH, pojawi się komunikat podobny do poniższego -

$hello hello: not found $

Istnieją zmienne, takie jak PS1 i PS2, które są omówione w następnej sekcji.

Zmienne PS1 i PS2

Znaki wyświetlane przez powłokę jako wiersz poleceń są przechowywane w zmiennej PS1. Możesz zmienić tę zmienną, aby była dowolna. Jak tylko go zmienisz, będzie używany przez powłokę od tego momentu.

Na przykład, jeśli wydałeś polecenie -

$PS1='=>'
=>
=>
=>

Twój znak zachęty zmieni się na =>. Aby ustawić wartośćPS1 aby pokazał katalog roboczy, wydaj polecenie -

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

Wynikiem tego polecenia jest wyświetlenie w monicie nazwy użytkownika, nazwy komputera (nazwy hosta) i katalogu roboczego.

Jest ich sporo escape sequencesktóre mogą być użyte jako argumenty wartości dla PS1; spróbuj ograniczyć się do najbardziej krytycznych, aby monit nie przytłoczył Cię informacjami.

Sr.No. Sekwencja ucieczki i opis
1

\t

Aktualny czas wyrażony jako HH: MM: SS

2

\d

Bieżąca data wyrażona jako dzień tygodnia i miesiąc

3

\n

Nowa linia

4

\s

Bieżące środowisko powłoki

5

\W

Katalog roboczy

6

\w

Pełna ścieżka do katalogu roboczego

7

\u

Nazwa użytkownika bieżącego użytkownika

8

\h

Nazwa hosta aktualnego komputera

9

\#

Numer polecenia bieżącego polecenia. Zwiększa się po wprowadzeniu nowego polecenia

10

\$

Jeśli efektywny UID to 0 (to znaczy, jeśli jesteś zalogowany jako root), zakończ znak zachęty znakiem #; w przeciwnym razie użyj znaku $

Możesz dokonać zmiany samodzielnie za każdym razem, gdy się logujesz, lub możesz automatycznie wprowadzić zmianę na PS1, dodając ją do swojego .profile plik.

Kiedy wydasz polecenie, które jest niekompletne, powłoka wyświetli dodatkowy monit i zaczeka, aż zakończysz polecenie i naciśnij Enter jeszcze raz.

Domyślny dodatkowy monit to > (znak większości), ale można to zmienić, ponownie definiując PS2 zmienna powłoki -

Poniżej znajduje się przykład, w którym używany jest domyślny dodatkowy monit -

$ echo "this is a > test" this is a test $

Poniższy przykład przedstawia nową definicję PS2 z dostosowanym monitem -

$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$

Zmienne środowiska

Poniżej znajduje się częściowa lista ważnych zmiennych środowiskowych. Te zmienne są ustawiane i dostępne, jak wspomniano poniżej -

Sr.No. Zmienna i opis
1

DISPLAY

Zawiera identyfikator wyświetlacza, który X11 programy powinny domyślnie używać.

2

HOME

Wskazuje katalog osobisty bieżącego użytkownika: domyślny argument dla dysku cd built-in Komenda.

3

IFS

Wskazuje Internal Field Separator używany przez parser do dzielenia słów po interpretacji.

4

LANG

LANG rozwija się do domyślnych ustawień regionalnych systemu; LC_ALL może służyć do nadpisania tego. Na przykład, jeśli jego wartość topt_BR, język jest ustawiony na (brazylijski) portugalski, a ustawienia regionalne to Brazylia.

5

LD_LIBRARY_PATH

System uniksowy z dynamicznym konsolidatorem zawiera zestawioną listę katalogów, które dynamiczny konsolidator powinien szukać w celu znalezienia współdzielonych obiektów podczas budowania obrazu procesu po wykonaniu exec, przed przeszukaniem jakichkolwiek innych katalogów.

6

PATH

Wskazuje ścieżkę wyszukiwania poleceń. Jest to rozdzielona dwukropkami lista katalogów, w których powłoka szuka poleceń.

7

PWD

Wskazuje bieżący katalog roboczy ustawiony za pomocą polecenia cd.

8

RANDOM

Generuje losową liczbę całkowitą z przedziału od 0 do 32767 przy każdym odwołaniu.

9

SHLVL

Zwiększa o jeden za każdym razem, gdy uruchamiana jest instancja bash. Ta zmienna jest przydatna do określenia, czy wbudowane polecenie wyjścia kończy bieżącą sesję.

10

TERM

Odnosi się do typu wyświetlania.

11

TZ

Odnosi się do strefy czasowej. Może przyjmować wartości takie jak GMT, AST itp.

12

UID

Interpretowany jako numeryczny identyfikator użytkownika bieżącego użytkownika, inicjowany podczas uruchamiania powłoki.

Poniżej znajduje się przykładowy przykład pokazujący kilka zmiennych środowiskowych -

$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $

W tym rozdziale omówimy szczegółowo drukowanie i pocztę elektroniczną jako podstawowe narzędzia systemu Unix. Do tej pory próbowaliśmy zrozumieć system operacyjny Unix i naturę jego podstawowych poleceń. W tym rozdziale poznamy kilka ważnych narzędzi uniksowych, które mogą być używane w naszym codziennym życiu.

Drukowanie plików

Przed wydrukowaniem pliku w systemie Unix możesz go przeformatować, aby dostosować marginesy, podświetlić niektóre słowa i tak dalej. Większość plików można również wydrukować bez ponownego formatowania, ale wydruk w formacie raw może nie być tak atrakcyjny.

Wiele wersji Uniksa zawiera dwa potężne programy formatujące tekst, nroff i troff.

Polecenie pr

Plik prpolecenie wykonuje drobne formatowanie plików na ekranie terminala lub dla drukarki. Na przykład, jeśli masz długą listę nazw w pliku, możesz sformatować ją na ekranie w dwie lub więcej kolumn.

Poniżej znajduje się składnia pr polecenie -

pr option(s) filename(s)

Plik przmienia format pliku tylko na ekranie lub na wydrukowanej kopii; nie modyfikuje oryginalnego pliku. Poniższa tabela zawiera listę niektórychpr opcje -

Sr.No. Opcja i opis
1

-k

Produkuje k kolumny danych wyjściowych

2

-d

Podwójne spacje na wyjściu (nie na wszystkich pr wersje)

3

-h "header"

Przyjmuje następny element jako nagłówek raportu

4

-t

Eliminuje drukowanie nagłówka i górnych / dolnych marginesów

5

-l PAGE_LENGTH

Ustawia długość strony na PAGE_LENGTH (66) wierszy. Domyślna liczba wierszy tekstu to 56

6

-o MARGIN

Odsuwa każdą linię za pomocą spacji MARGINES (zero)

7

-w PAGE_WIDTH

Ustawia szerokość strony na PAGE_WIDTH (72) znaków tylko dla wielu kolumn tekstowych

Przed użyciem pr, oto zawartość przykładowego pliku o nazwie food.

$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $

Użyjmy prpolecenie tworzenia dwukolumnowego raportu z nagłówkiem Restauracje -

$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $

Polecenia lp i lpr

Komenda lp lub lprdrukuje plik na papierze, a nie na ekranie. Gdy będziesz gotowy do formatowania przy użyciupr polecenie, możesz użyć dowolnego z tych poleceń, aby wydrukować plik na drukarce podłączonej do komputera.

Administrator systemu prawdopodobnie skonfigurował w Twojej witrynie drukarkę domyślną. Aby wydrukować plik o nazwiefood na drukarce domyślnej użyj rozszerzenia lp lub lpr polecenie, jak w poniższym przykładzie -

$lp food request id is laserp-525 (1 file) $

Plik lp polecenie wyświetla identyfikator, którego można użyć do anulowania zadania drukowania lub sprawdzenia jego statusu.

  • Jeśli używasz lp możesz użyć -nNumopcja drukowania Liczba kopii. Wraz z poleceniemlpr, możesz użyć -Num za to samo.

  • Jeśli jest wiele drukarek podłączonych do udostępnionej sieci, możesz wybrać drukarkę za pomocą -dprinter wraz z poleceniem lp iw tym samym celu możesz użyć -Pprinteropcja wraz z poleceniem lpr. Tutaj drukarka to nazwa drukarki.

Polecenia lpstat i lpq

Plik lpstat Polecenie pokazuje, co jest w kolejce drukarki: identyfikatory żądań, właścicieli, rozmiary plików, kiedy zadania zostały wysłane do drukowania oraz stan żądań.

Posługiwać się lpstat -ojeśli chcesz zobaczyć wszystkie żądania wyjściowe inne niż tylko własne. Żądania są wyświetlane w kolejności, w jakiej zostaną wydrukowane -

$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $

Plik lpq podaje nieco inne informacje niż lpstat -o -

$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $

Tutaj pierwsza linia wyświetla stan drukarki. Jeśli drukarka jest wyłączona lub kończy się papier, w pierwszym wierszu mogą pojawić się różne komunikaty.

Polecenia anulowania i lprm

Plik cancel polecenie kończy żądanie drukowania z pliku lp command. Pliklprm polecenie kończy wszystko lpr requests. Możesz określić identyfikator żądania (wyświetlany przez lp lub lpq) lub nazwę drukarki.

$cancel laserp-575 request "laserp-575" cancelled $

Aby anulować dowolne żądanie, które jest aktualnie drukowane, niezależnie od jego identyfikatora, po prostu wprowadź anuluj i nazwę drukarki -

$cancel laserp request "laserp-573" cancelled $

Plik lprmpolecenie anuluje aktywne zadanie, jeśli należy do Ciebie. W przeciwnym razie możesz podać numery stanowisk jako argumenty lub użyć plikudash (-) aby usunąć wszystkie swoje oferty pracy -

$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $

Plik lprm polecenie informuje o rzeczywistych nazwach plików usuniętych z kolejki drukarki.

Wysyłać email

Do wysyłania i odbierania poczty służy polecenie poczty systemu Unix. Oto składnia wysyłania wiadomości e-mail -

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

Oto ważne opcje związane z poleceniami poczty

Sr.No. Opcja i opis
1

-s

Określa temat w wierszu poleceń.

2

-c

Wysyła kopie do listy użytkowników. Lista powinna być listą nazw oddzielonych przecinkami.

3

-b

Wysyła ukryte kopie do listy. Lista powinna być listą nazw oddzielonych przecinkami.

Poniżej znajduje się przykład wysyłania wiadomości testowej na adres [email protected].

$mail -s "Test Message" [email protected]

Następnie oczekuje się, że wpiszesz swoją wiadomość, a po niej "control-D"na początku wiersza. Aby zatrzymać, po prostu wpisz kropkę(.) w następujący sposób -

Hi,

This is a test
.
Cc:

Możesz wysłać cały plik za pomocą pliku redirect < operator w następujący sposób -

$mail -s "Report 05/06/07" [email protected] < demo.txt

Aby sprawdzić przychodzącą pocztę e-mail w systemie Unix, po prostu wpisz wiadomość e-mail w następujący sposób -

$mail
no email

W tym rozdziale omówimy szczegółowo potoki i filtry w systemie Unix. Możesz połączyć ze sobą dwa polecenia, tak aby dane wyjściowe jednego programu stały się danymi wejściowymi następnego programu. Dwa lub więcej poleceń połączonych w ten sposób tworzy potok.

Aby zrobić rurę, umieść pionowy pasek (|) w wierszu poleceń między dwoma poleceniami.

Gdy program pobiera dane wejściowe z innego programu, wykonuje na tym wejściu jakąś operację i zapisuje wynik na standardowe wyjście. Jest określany jako plikfilter.

Polecenie grep

Polecenie grep przeszukuje plik lub pliki pod kątem wierszy, które mają określony wzorzec. Składnia to -

$grep pattern file(s)

Imię "grep" pochodzi z polecenia ed (edytor liniowy systemu Unix) g/re/p co oznacza „wyszukaj wyrażenie regularne globalnie i wypisz wszystkie zawierające je wiersze”.

Wyrażenie regularne to zwykły tekst (na przykład słowo) i / lub znaki specjalne używane do dopasowywania wzorców.

Najprostszym zastosowaniem grep jest wyszukanie wzorca składającego się z jednego słowa. Można go użyć w potoku, aby tylko te wiersze plików wejściowych zawierające dany ciąg były wysyłane na standardowe wyjście. Jeśli nie podasz grepowi nazwy pliku do odczytu, czyta on swoje standardowe wejście; tak działają wszystkie programy filtrujące -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Istnieje wiele opcji, których można używać wraz z rozszerzeniem grep polecenie -

Sr.No. Opcja i opis
1

-v

Drukuje wszystkie linie, które nie pasują do wzorca.

2

-n

Drukuje dopasowaną linię i jej numer.

3

-l

Wyświetla tylko nazwy plików z pasującymi wierszami (litera „l”)

4

-c

Wyświetla tylko liczbę pasujących wierszy.

5

-i

Dopasowuje wielkie lub małe litery.

Użyjmy teraz wyrażenia regularnego, które mówi grepowi, aby znalazł wiersze "carol", po którym następuje zero lub inne znaki skrócone w wyrażeniu regularnym jako „. *”), a następnie „sie”. -

Tutaj używamy -i opcja wyszukiwania bez rozróżniania wielkości liter -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Polecenie sortowania

Plik sortpolecenie porządkuje wiersze tekstu alfabetycznie lub numerycznie. Poniższy przykład sortuje wiersze w pliku żywności -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

Plik sortpolecenie domyślnie układa wiersze tekstu alfabetycznie. Istnieje wiele opcji kontrolujących sortowanie -

Sr.No. Opis
1

-n

Sortuje numerycznie (na przykład: 10 będzie sortować po 2), ignoruje puste miejsca i tabulatory.

2

-r

Odwraca kolejność sortowania.

3

-f

Sortuje razem wielkie i małe litery.

4

+x

Ignoruje pierwszy x pola podczas sortowania.

W potoku można połączyć więcej niż dwa polecenia. Biorąc przykład z poprzedniej rury przy użyciugrep, możemy dalej sortować pliki zmodyfikowane w sierpniu według rozmiaru.

Poniższy potok składa się z poleceń ls, grep, i sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Ten potok sortuje wszystkie pliki w twoim katalogu zmodyfikowane w sierpniu według rozmiaru i wyświetla je na ekranie terminala. Opcja sortowania + 4n pomija cztery pola (pola są oddzielone spacjami), a następnie sortuje wiersze w porządku numerycznym.

Polecenia pg i nie tylko

Długi plik wyjściowy można zwykle spakować na ekranie, ale jeśli przepuścisz więcej tekstu lub użyjesz rozszerzenia pgpolecenie jako filtr; wyświetlanie zatrzymuje się, gdy ekran jest pełny.

Załóżmy, że masz długą listę katalogów. Aby ułatwić czytanie posortowanej listy, przepuść dane wyjściowemore w następujący sposób -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

Ekran zapełni się, gdy ekran zapełni się tekstem składającym się z linii posortowanych według rozmiaru pliku. U dołu ekranu znajduje się plikmore monit, w którym można wpisać polecenie poruszania się po posortowanym tekście.

Gdy skończysz z tym ekranem, możesz użyć dowolnego z poleceń wymienionych w omówieniu programu more.

W tym rozdziale omówimy szczegółowo zarządzanie procesami w systemie Unix. Kiedy uruchamiasz program w systemie Unix, system tworzy specjalne środowisko dla tego programu. To środowisko zawiera wszystko, co jest potrzebne systemowi do uruchomienia programu, tak jakby żaden inny program nie był uruchomiony w systemie.

Za każdym razem, gdy wydajesz polecenie w systemie Unix, tworzy ono lub uruchamia nowy proces. Kiedy wypróbowałeślspolecenie, aby wyświetlić zawartość katalogu, rozpocząłeś proces. Mówiąc prościej, proces jest instancją działającego programu.

System operacyjny śledzi procesy za pomocą pięciocyfrowego numeru identyfikacyjnego znanego jako pid albo process ID. Każdy proces w systemie ma unikalnypid.

Pidy w końcu się powtarzają, ponieważ wszystkie możliwe liczby są zużywane, a następny pid przechodzi lub zaczyna od nowa. W żadnym momencie w systemie nie istnieją dwa procesy z tym samym pid, ponieważ jest to pid, którego Unix używa do śledzenia każdego procesu.

Rozpoczęcie procesu

Kiedy uruchamiasz proces (uruchamiasz polecenie), możesz go uruchomić na dwa sposoby -

  • Procesy pierwszoplanowe
  • Procesy w tle

Procesy pierwszoplanowe

Domyślnie każdy uruchamiany proces działa na pierwszym planie. Pobiera dane wejściowe z klawiatury i wysyła dane wyjściowe na ekran.

Możesz zobaczyć, jak to się dzieje z lsKomenda. Jeśli chcesz wyświetlić listę wszystkich plików w bieżącym katalogu, możesz użyć następującego polecenia -

$ls ch*.doc

Spowoduje to wyświetlenie wszystkich plików, których nazwy zaczynają się od ch i zakończ .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Proces działa na pierwszym planie, dane wyjściowe są kierowane na mój ekran, a jeśli ls polecenie chce wprowadzić dane (czego nie robi), czeka na to z klawiatury.

Gdy program działa na pierwszym planie i jest czasochłonny, nie można uruchamiać żadnych innych poleceń (uruchamiać inne procesy), ponieważ monit nie byłby dostępny, dopóki program nie zakończy przetwarzania i nie wyjdzie.

Procesy w tle

Proces w tle działa bez połączenia z klawiaturą. Jeśli proces w tle wymaga wprowadzenia danych z klawiatury, czeka.

Zaletą uruchamiania procesu w tle jest to, że można uruchamiać inne polecenia; nie musisz czekać, aż się zakończy, aby rozpocząć kolejny!

Najprostszym sposobem rozpoczęcia procesu w tle jest dodanie znaku handlowego „i” (&) na końcu polecenia.

$ls ch*.doc &

Spowoduje to wyświetlenie wszystkich plików, których nazwy zaczynają się od ch i zakończ .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Tutaj, jeśli ls Polecenie potrzebuje dowolnego wejścia (czego nie robi), przechodzi w stan zatrzymania, dopóki nie przeniesiemy go na pierwszy plan i nie przekażemy mu danych z klawiatury.

Pierwsza linia zawiera informacje o procesie w tle - numer zadania i identyfikator procesu. Musisz znać numer zadania, aby manipulować nim między tłem a pierwszym planem.

Naciśnij klawisz Enter, a zobaczysz następujące -

[1]   +   Done                 ls ch*.doc &
$

Pierwsza linia mówi, że lsproces w tle polecenia kończy się pomyślnie. Drugi to monit o inne polecenie.

Lista uruchomionych procesów

Możesz łatwo zobaczyć własne procesy, uruchamiając ps (stan procesu) polecenie w następujący sposób -

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

Jedną z najczęściej używanych flag dla ps jest -f (pełne), która zawiera więcej informacji, jak pokazano w poniższym przykładzie -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

Oto opis wszystkich pól wyświetlanych przez ps -f polecenie -

Sr.No. Kolumna i opis
1

UID

Identyfikator użytkownika, do którego należy ten proces (osoba go obsługująca)

2

PID

Identyfikator procesu

3

PPID

Identyfikator procesu nadrzędnego (identyfikator procesu, który go uruchomił)

4

C

Wykorzystanie procesora przez proces

5

STIME

Czas rozpoczęcia procesu

6

TTY

Typ terminala powiązany z procesem

7

TIME

Czas procesora zajęty przez proces

8

CMD

Polecenie, które rozpoczęło ten proces

Istnieją inne opcje, których można używać razem z ps polecenie -

Sr.No. Opcja i opis
1

-a

Wyświetla informacje o wszystkich użytkownikach

2

-x

Pokazuje informacje o procesach bez terminali

3

-u

Wyświetla dodatkowe informacje, takie jak opcja -f

4

-e

Wyświetla rozszerzone informacje

Zatrzymywanie procesów

Zakończenie procesu można przeprowadzić na kilka różnych sposobów. Często z poziomu polecenia konsoli wysłanie naciśnięcia klawisza CTRL + C (domyślny znak przerwania) kończy polecenie. Działa to, gdy proces działa w trybie pierwszego planu.

Jeśli proces działa w tle, należy uzyskać jego identyfikator zadania przy użyciu rozszerzenia psKomenda. Następnie możesz użyćkill polecenie zabicia procesu w następujący sposób -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

Tutaj kill polecenie kończy działanie first_oneproces. Jeśli proces ignoruje zwykłe polecenie zabicia, możesz użyćkill -9 a następnie identyfikator procesu w następujący sposób -

$kill -9 6738
Terminated

Procesy nadrzędne i podrzędne

Każdy proces unix ma przypisane dwa numery identyfikacyjne: identyfikator procesu (pid) i identyfikator procesu nadrzędnego (ppid). Każdy proces użytkownika w systemie ma proces nadrzędny.

Większość poleceń, które uruchamiasz, ma powłokę jako rodzica. Sprawdźps -f przykład, w którym to polecenie wyświetlało zarówno identyfikator procesu, jak i identyfikator procesu nadrzędnego.

Procesy zombie i sierocych

Zwykle, gdy proces potomny zostaje zabity, proces nadrzędny jest aktualizowany za pomocą pliku SIGCHLDsygnał. Następnie rodzic może wykonać inne zadanie lub w razie potrzeby ponownie uruchomić nowe dziecko. Jednak czasami proces macierzysty jest zabijany przed zabiciem jego dziecka. W tym przypadku „rodzic wszystkich procesów”initproces, staje się nowym PPID (identyfikator procesu nadrzędnego). W niektórych przypadkach procesy te nazywane są procesami osieroconymi.

Kiedy proces zostaje zabity, a ps lista może nadal wyświetlać proces z rozszerzeniem Zstan. To jest zombie lub nieistniejący proces. Proces jest martwy i nie jest używany. Procesy te różnią się od procesów osieroconych. Zakończyli wykonywanie, ale nadal znajdują wpis w tabeli procesów.

Procesy demona

Demony to związane z systemem procesy w tle, które często działają z uprawnieniami uprawnień administratora i żądań usług pochodzących z innych procesów.

Demon nie ma terminala sterującego. Nie może się otworzyć/dev/tty. Jeśli zrobisz"ps -ef" i spójrz na tty pole, wszystkie demony będą miały ? dla tty.

Mówiąc dokładniej, demon to proces działający w tle, zwykle czekający na coś, z czym jest w stanie pracować. Na przykład demon drukarki czekający na polecenia drukowania.

Jeśli masz program, który wymaga długotrwałego przetwarzania, warto zrobić z niego demona i uruchamiać go w tle.

Najwyższe polecenie

Plik top Polecenie to bardzo przydatne narzędzie do szybkiego wyświetlania procesów posortowanych według różnych kryteriów.

Jest to interaktywne narzędzie diagnostyczne, które często się aktualizuje i wyświetla informacje o pamięci fizycznej i wirtualnej, zużyciu procesora, średnim obciążeniu i zajętych procesach.

Oto prosta składnia, aby uruchomić polecenie top i zobaczyć statystyki wykorzystania procesora przez różne procesy -

$top

Identyfikator zlecenia a identyfikator procesu

Procesy w tle i zawieszone są zwykle obsługiwane za pośrednictwem job number (job ID). Numer ten różni się od identyfikatora procesu i jest używany, ponieważ jest krótszy.

Ponadto zadanie może składać się z wielu procesów uruchomionych szeregowo lub w tym samym czasie, równolegle. Korzystanie z identyfikatora zadania jest łatwiejsze niż śledzenie poszczególnych procesów.

W tym rozdziale omówimy szczegółowo narzędzia komunikacji sieciowej w systemie Unix. Kiedy pracujesz w środowisku rozproszonym, musisz komunikować się ze zdalnymi użytkownikami, a także musisz mieć dostęp do zdalnych maszyn Unix.

Istnieje kilka narzędzi uniksowych, które pomagają użytkownikom wykonywać obliczenia w rozproszonym środowisku sieciowym. W tym rozdziale wymieniono kilka z nich.

Narzędzie ping

Plik pingpolecenie wysyła żądanie echa do hosta dostępnego w sieci. Za pomocą tego polecenia możesz sprawdzić, czy zdalny host reaguje dobrze, czy nie.

Polecenie ping jest przydatne w następujących przypadkach -

  • Śledzenie i izolowanie problemów ze sprzętem i oprogramowaniem.
  • Określanie statusu sieci i różnych hostów zagranicznych.
  • Testowanie, pomiary i zarządzanie sieciami.

Składnia

Poniżej znajduje się prosta składnia użycia polecenia ftp -

$ping hostname or ip-address

Powyższe polecenie rozpoczyna drukowanie odpowiedzi po każdej sekundzie. Aby wyjść z polecenia, możesz je zakończyć, naciskającCNTRL + C Klucze.

Przykład

Poniżej znajduje się przykład sprawdzenia dostępności hosta dostępnego w sieci -

$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $

Jeśli host nie istnieje, otrzymasz następujące dane wyjściowe -

$ping giiiiiigle.com ping: unknown host giiiiigle.com $

Narzędzie ftp

Tutaj, ftp oznacza File Tokup Protocol. To narzędzie pomaga przesyłać i pobierać pliki z jednego komputera na inny.

Narzędzie ftp ma własny zestaw poleceń uniksowych. Te polecenia pomagają wykonywać zadania, takie jak -

  • Połącz się i zaloguj do zdalnego hosta.

  • Poruszanie się po katalogach.

  • Wyświetl zawartość katalogu.

  • Prześlij i pobierz pliki.

  • Prześlij pliki jako ascii, ebcdic lub binary.

Składnia

Poniżej znajduje się prosta składnia użycia polecenia ftp -

$ftp hostname or ip-address

Powyższe polecenie wyświetli monit o podanie identyfikatora logowania i hasła. Po uwierzytelnieniu możesz uzyskać dostęp do katalogu domowego konta logowania i możesz wykonywać różne polecenia.

W poniższych tabelach wymieniono kilka ważnych poleceń -

Sr.No. Polecenie i opis
1

put filename

Przesyła nazwę pliku z komputera lokalnego na komputer zdalny.

2

get filename

Pobiera nazwę pliku z komputera zdalnego na komputer lokalny.

3

mput file list

Przesyła więcej niż jeden plik z komputera lokalnego na komputer zdalny.

4

mget file list

Pobiera więcej niż jeden plik z komputera zdalnego na komputer lokalny.

5

prompt off

Wyłącza monit. Domyślnie otrzymasz monit o przesłanie lub pobranie plików za pomocąmput lub mget polecenia.

6

prompt on

Włącza monit.

7

dir

Wyświetla wszystkie pliki dostępne w bieżącym katalogu zdalnego komputera.

8

cd dirname

Zmienia katalog na dirname na zdalnym komputerze.

9

lcd dirname

Zmienia katalog na dirname na komputerze lokalnym.

10

quit

Pomaga wylogować się z bieżącego logowania.

Należy zauważyć, że wszystkie pliki zostaną pobrane lub przesłane do lub z bieżących katalogów. Jeśli chcesz przesłać pliki do określonego katalogu, musisz najpierw przejść do tego katalogu, a następnie przesłać wymagane pliki.

Przykład

Poniżej znajduje się przykład pokazujący działanie kilku poleceń -

$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x   3 amrood   group       1024 Mar 11 20:04 Mail
drwxr-sr-x   2 amrood   group       1536 Mar  3 18:07 Misc
drwxr-sr-x   5 amrood   group        512 Dec  7 10:59 OldStuff
drwxr-sr-x   2 amrood   group       1024 Mar 11 15:24 bin
drwxr-sr-x   5 amrood   group       3072 Mar 13 16:10 mpl
-rw-r--r--   1 amrood   group     209671 Mar 15 10:57 myfile.out
drwxr-sr-x   3 amrood   group        512 Jan  5 13:32 public
drwxr-sr-x   3 amrood   group        512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r--   1 amrood   group       1630 Aug  8 1994  dboard.f
-rw-r-----   1 amrood   group       4340 Jul 17 1994  vttest.c
-rwxr-xr-x   1 amrood   group     525574 Feb 15 11:52 wave_shift
-rw-r--r--   1 amrood   group       1648 Aug  5 1994  wide.list
-rwxr-xr-x   1 amrood   group       4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$

Narzędzie telnet

Są chwile, kiedy musimy połączyć się ze zdalną maszyną Unix i pracować na tej maszynie zdalnie. Telnet to narzędzie, które umożliwia użytkownikowi komputera w jednej witrynie nawiązanie połączenia, zalogowanie się, a następnie prowadzenie pracy na komputerze w innej witrynie.

Po zalogowaniu się za pomocą usługi Telnet możesz wykonywać wszystkie czynności na zdalnie podłączonym komputerze. Poniżej znajduje się przykład sesji Telnet -

C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.

login: amrood
amrood's Password: 
*****************************************************
*                                                   *
*                                                   *
*    WELCOME TO AMROOD.COM                          *
*                                                   *
*                                                   *
*****************************************************

Last unsuccessful login: Fri Mar  3 12:01:09 IST 2009
Last login: Wed Mar  8 18:33:27 IST 2009 on pts/10

   {  do your work }

$ logout
Connection closed.
C:>

Narzędzie palców

Plik fingerPolecenie wyświetla informacje o użytkownikach na danym hoście. Host może być lokalny lub zdalny.

Palec może być wyłączony w innych systemach ze względów bezpieczeństwa.

Poniżej znajduje się prosta składnia użycia polecenia finger -

Sprawdź wszystkich zalogowanych użytkowników na komputerze lokalnym -

$ finger
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Uzyskaj informacje o konkretnym użytkowniku dostępnym na komputerze lokalnym -

$ finger amrood
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

Sprawdź wszystkich zalogowanych użytkowników na zdalnym komputerze -

$ finger @avtar.com
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Uzyskaj informacje o konkretnym użytkowniku dostępnym na zdalnym komputerze -

$ finger [email protected]
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

W tym rozdziale zrozumiemy, jak działa edytor vi w systemie Unix. Istnieje wiele sposobów edycji plików w systemie Unix. Edycja plików za pomocą ekranowego edytora tekstuvito jeden z najlepszych sposobów. Ten edytor umożliwia edycję linii w kontekście innych linii w pliku.

Ulepszona wersja edytora vi o nazwie VIMzostała również udostępniona teraz. Tutaj VIM oznaczaVi IMudowodnione.

vi jest ogólnie uważane za de facto standard w edytorach Unix, ponieważ -

  • Zwykle jest dostępny we wszystkich wersjach systemu Unix.

  • Jego implementacje są bardzo podobne pod każdym względem.

  • Wymaga bardzo niewielu zasobów.

  • Jest bardziej przyjazny dla użytkownika niż inne edytory, takie jak ed albo ex.

Możesz użyć viedytor do edycji istniejącego pliku lub stworzenia nowego pliku od podstaw. Możesz także użyć tego edytora, aby po prostu przeczytać plik tekstowy.

Uruchomienie edytora vi

W poniższej tabeli wymieniono podstawowe polecenia dotyczące korzystania z edytora vi -

Sr.No. Polecenie i opis
1

vi filename

Tworzy nowy plik, jeśli jeszcze nie istnieje, w przeciwnym razie otwiera istniejący plik.

2

vi -R filename

Otwiera istniejący plik w trybie tylko do odczytu.

3

view filename

Otwiera istniejący plik w trybie tylko do odczytu.

Poniżej znajduje się przykład tworzenia nowego pliku testfile jeśli już nie istnieje w bieżącym katalogu roboczym -

$vi testfile

Powyższe polecenie wygeneruje następujące dane wyjściowe -

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]

Zauważysz tilde(~) w każdym wierszu za kursorem. Tylda reprezentuje nieużywaną linię. Jeśli linia nie zaczyna się od tyldy i wydaje się być pusta, występuje spacja, tabulacja, nowa linia lub inny niewidoczny znak.

Masz teraz jeden otwarty plik, nad którym możesz rozpocząć pracę. Zanim przejdziemy dalej, zrozumiemy kilka ważnych pojęć.

Tryby działania

Podczas pracy z edytorem vi zwykle napotykamy dwa następujące tryby -

  • Command mode- Ten tryb umożliwia wykonywanie zadań administracyjnych, takich jak zapisywanie plików, wykonywanie poleceń, przesuwanie kursora, wycinanie (szarpanie) i wklejanie linii lub słów, a także znajdowanie i zastępowanie. W tym trybie cokolwiek wpiszesz, jest interpretowane jako polecenie.

  • Insert mode- Ten tryb umożliwia wstawianie tekstu do pliku. Wszystko, co wpisano w tym trybie, jest interpretowane jako dane wejściowe i umieszczane w pliku.

vi zawsze zaczyna się w command mode. Aby wprowadzić tekst, musisz być w trybie wstawiania, w którym po prostu piszi. Aby wyjść z trybu wstawiania, naciśnijEsc klawisz, który przeniesie Cię z powrotem do trybu poleceń.

Hint- Jeśli nie jesteś pewien, w którym trybie jesteś, naciśnij dwukrotnie klawisz Esc; spowoduje to przejście do trybu poleceń. Otwierasz plik za pomocą edytora vi. Zacznij od wpisania kilku znaków, a następnie przejdź do trybu poleceń, aby zrozumieć różnicę.

Wyjście z vi

Polecenie wyjścia z vi to :q. W trybie poleceń wpisz dwukropek i „q”, a następnie return. Jeśli plik został w jakikolwiek sposób zmodyfikowany, edytor ostrzeże Cię o tym i nie pozwoli Ci zakończyć. Aby zignorować ten komunikat, polecenie wyjścia z vi bez zapisywania to:q!. Pozwala to wyjść z vi bez zapisywania zmian.

Polecenie do zapisania zawartości edytora to :w. Możesz połączyć powyższe polecenie z poleceniem quit lub użyć:wq i wróć.

Najłatwiejszy sposób save your changes and exit vijest z poleceniem ZZ. Gdy jesteś w trybie poleceń, wpiszZZ. PlikZZ polecenie działa w taki sam sposób, jak :wq Komenda.

Jeśli chcesz określić / podać jakąś konkretną nazwę pliku, możesz to zrobić, określając ją po rozszerzeniu :w. Na przykład, jeśli chcesz zapisać plik, nad którym pracujesz, pod inną nazwą o nazwiefilename2, wpiszesz :w filename2 i wróć.

Poruszanie się w pliku

Aby poruszać się po pliku bez wpływu na tekst, musisz być w trybie poleceń (naciśnij dwukrotnie klawisz Esc). W poniższej tabeli wymieniono kilka poleceń, których możesz użyć do poruszania się po jednym znaku na raz -

Sr.No. Polecenie i opis
1

k

Przesuwa kursor o jedną linię w górę

2

j

Przesuwa kursor o jedną linię w dół

3

h

Przesuwa kursor o jedną pozycję w lewo

4

l

Przesuwa kursor o jedną pozycję w prawo

Aby poruszać się w pliku, należy wziąć pod uwagę następujące punkty -

  • vi rozróżnia wielkość liter. Podczas używania poleceń należy zwrócić uwagę na wielkie litery.

  • Większość poleceń w vi można poprzedzić liczbą przypadków, w których ma nastąpić działanie. Na przykład,2j przesuwa kursor o dwie linie w dół do położenia kursora.

Istnieje wiele innych sposobów przemieszczania się w pliku w vi. Pamiętaj, że musisz być w trybie poleceń (press Esc twice). W poniższej tabeli wymieniono kilka poleceń do poruszania się po pliku -

Sr.No. Polecenie i opis
1

0 or |

Umieszcza kursor na początku wiersza

2

$

Umieszcza kursor na końcu linii

3

w

Umieszcza kursor na następnym wyrazie

4

b

Ustawia kursor na poprzednim wyrazie

5

(

Umieszcza kursor na początku bieżącego zdania

6

)

Umieszcza kursor na początku następnego zdania

7

E

Przechodzi na koniec pustego rozdzielonego słowa

8

{

Przenosi akapit z powrotem

9

}

Przenosi akapit do przodu

10

[[

Przenosi sekcję z powrotem

11

]]

Przenosi sekcję do przodu

12

n|

Przechodzi do kolumny n w bieżącej linii

13

1G

Przechodzi do pierwszej linii pliku

14

G

Przechodzi do ostatniej linii pliku

15

nG

Przechodzi do nth wiersz pliku

16

:n

Przechodzi do nth wiersz pliku

17

fc

Przechodzi do przodu do c

18

Fc

Wraca do c

19

H

Przechodzi na górę ekranu

20

nH

Przechodzi do nth linia od góry ekranu

21

M

Przechodzi na środek ekranu

22

L

Przejdź na dół ekranu

23

nL

Przechodzi do nth wiersz od dołu ekranu

24

:x

Dwukropek, po którym następuje liczba, ustawiłby kursor na numerze wiersza reprezentowanym przez x

Polecenia sterujące

Następujące polecenia mogą być używane z klawiszem Control do wykonywania funkcji podanych w poniższej tabeli -

Sr.No. Polecenie i opis
1

CTRL+d

Przejście do przodu o 1/2 ekranu

2

CTRL+f

Przechodzi do przodu o jeden pełny ekran

3

CTRL+u

Przechodzi do tyłu o 1/2 ekranu

4

CTRL+b

Przechodzi wstecz o jeden pełny ekran

5

CTRL+e

Przesuwa ekran o jedną linię w górę

6

CTRL+y

Przesuwa ekran o jedną linię w dół

7

CTRL+u

Przesuwa ekran w górę o 1/2 strony

8

CTRL+d

Przesuwa ekran o 1/2 strony w dół

9

CTRL+b

Przenosi ekran o jedną stronę w górę

10

CTRL+f

Przenosi ekran o jedną stronę w dół

11

CTRL+I

Odświeża ekran

Edycja plików

Aby edytować plik, musisz być w trybie wstawiania. Istnieje wiele sposobów przejścia do trybu wstawiania z trybu poleceń -

Sr.No. Polecenie i opis
1

i

Wstawia tekst przed bieżącą lokalizacją kursora

2

I

Wstawia tekst na początku bieżącego wiersza

3

a

Wstawia tekst po bieżącej lokalizacji kursora

4

A

Wstawia tekst na końcu bieżącego wiersza

5

o

Tworzy nowy wiersz do wprowadzania tekstu poniżej położenia kursora

6

O

Tworzy nową linię do wprowadzania tekstu powyżej położenia kursora

Usuwanie znaków

Oto lista ważnych poleceń, których można użyć do usunięcia znaków i linii w otwartym pliku -

Sr.No. Polecenie i opis
1

x

Usuwa znak pod pozycją kursora

2

X

Usuwa znak przed położeniem kursora

3

dw

Usuwa od bieżącej lokalizacji kursora do następnego słowa

4

d^

Usuwa od aktualnej pozycji kursora do początku wiersza

5

d$

Usuwa od aktualnej pozycji kursora do końca wiersza

6

D

Usuwa od pozycji kursora do końca bieżącego wiersza

7

dd

Usuwa linię, na której znajduje się kursor

Jak wspomniano powyżej, większość poleceń w vi można poprzedzić liczbą przypadków, w których ma nastąpić działanie. Na przykład,2x usuwa dwa znaki pod położeniem kursora i 2dd usuwa dwie linie, w których znajduje się kursor.

Zaleca się przećwiczenie poleceń, zanim przejdziemy dalej.

Zmień polecenia

Masz również możliwość zmiany znaków, słów lub linii w vi bez ich usuwania. Oto odpowiednie polecenia -

Sr.No. Polecenie i opis
1

cc

Usuwa zawartość wiersza, pozostawiając cię w trybie wstawiania.

2

cw

Zmienia słowo, na którym znajduje się kursor, z kursora na małe litery w koniec słowa.

3

r

Zastępuje znak pod kursorem. vi powraca do trybu poleceń po wprowadzeniu zamiany.

4

R

Zastępuje wiele znaków zaczynających się od znaku aktualnie znajdującego się pod kursorem. Musisz użyćEsc aby zatrzymać nadpisywanie.

5

s

Zastępuje obecny znak wpisanym znakiem. Następnie pozostajesz w trybie wstawiania.

6

S

Usuwa wiersz, na którym znajduje się kursor, i zastępuje go nowym tekstem. Po wprowadzeniu nowego tekstu vi pozostaje w trybie wstawiania.

Polecenia kopiowania i wklejania

Możesz skopiować wiersze lub słowa z jednego miejsca, a następnie wkleić je w innym miejscu za pomocą następujących poleceń -

Sr.No. Polecenie i opis
1

yy

Kopiuje bieżącą linię.

2

yw

Kopiuje bieżące słowo od znaku, na którym znajduje się mały kursor w, aż do końca słowa.

3

p

Umieszcza skopiowany tekst za kursorem.

4

P

Umieszcza szarpany tekst przed kursorem.

Zaawansowane polecenia

Istnieje kilka zaawansowanych poleceń, które upraszczają codzienną edycję i pozwalają na bardziej wydajne korzystanie z vi -

Sr.No. Polecenie i opis
1

J

Łączy bieżącą linię z następną. Liczba poleceń j łączy wiele linii.

2

<<

Przesuwa bieżącą linię w lewo o jedną szerokość przesunięcia.

3

>>

Przesuwa bieżącą linię w prawo o jedną szerokość przesunięcia.

4

~

Zmienia wielkość liter w znaku pod kursorem.

5

^G

Naciśnij jednocześnie klawisze Ctrl i G, aby wyświetlić bieżącą nazwę pliku i stan.

6

U

Przywraca bieżącą linię do stanu, w jakim znajdowała się przed wejściem kursora do linii.

7

u

Pomaga to cofnąć ostatnią zmianę dokonaną w pliku. Ponowne wpisanie „u” spowoduje ponowne wprowadzenie zmiany.

8

J

Łączy bieżącą linię z następną. Licznik łączy tyle wierszy.

9

:f

Wyświetla bieżącą pozycję w pliku w% i nazwę pliku, całkowitą liczbę plików.

10

:f filename

Zmienia nazwę bieżącego pliku na nazwę pliku.

11

:w filename

Zapisuje do pliku nazwa_pliku.

12

:e filename

Otwiera inny plik z nazwą pliku.

13

:cd dirname

Zmienia bieżący katalog roboczy na dirname.

14

:e #

Przełącza między dwoma otwartymi plikami.

15

:n

Jeśli otwierasz wiele plików za pomocą vi, użyj :n aby przejść do następnego pliku w serii.

16

:p

Jeśli otwierasz wiele plików za pomocą vi, użyj :p aby przejść do poprzedniego pliku w serii.

17

:N

Jeśli otwierasz wiele plików za pomocą vi, użyj :N aby przejść do poprzedniego pliku w serii.

18

:r file

Czyta plik i wstawia go po bieżącej linii.

19

:nr file

Czyta plik i wstawia go po linii n.

Wyszukiwanie słów i znaków

Edytor vi ma dwa rodzaje wyszukiwań: string i character. W przypadku wyszukiwania ciągów/ i ?używane są polecenia. Po uruchomieniu tych poleceń, właśnie wpisane polecenie zostanie wyświetlone w ostatnim wierszu ekranu, w którym należy wpisać szukany ciąg.

Te dwa polecenia różnią się tylko kierunkiem, w którym odbywa się wyszukiwanie -

  • Plik / polecenie wyszukuje w przód (w dół) w pliku.

  • Plik ? polecenie wyszukuje wstecz (w górę) w pliku.

Plik n i Npolecenia powtarzają poprzednie polecenie wyszukiwania odpowiednio w tym samym lub przeciwnym kierunku. Niektóre znaki mają specjalne znaczenie. Te znaki muszą być poprzedzone odwrotnym ukośnikiem (\), które mają być częścią wyrażenia wyszukiwania.

Sr.No. Opis postaci
1

^

Wyszukuje na początku wiersza (użyj na początku wyrażenia wyszukiwania).

2

.

Dopasowuje pojedynczy znak.

3

*

Dopasowuje zero lub więcej poprzedniego znaku.

4

$

Koniec wiersza (użyj na końcu wyrażenia wyszukiwania).

5

[

Rozpoczyna zestaw pasujących lub niepasujących wyrażeń.

6

<

Jest to umieszczane w wyrażeniu poprzedzonym ukośnikiem odwrotnym w celu znalezienia końca lub początku słowa.

7

>

Pomaga to zobaczyć „<'opis postaci powyżej.

Wyszukiwanie znaków przeszukuje jeden wiersz w celu znalezienia znaku wprowadzonego po poleceniu. Plikf i F polecenia wyszukują tylko znak w bieżącej linii. f wyszukuje do przodu i F wyszukuje wstecz, a kursor przesuwa się do pozycji znalezionego znaku.

Plik t i T polecenia wyszukują tylko znak w bieżącej linii, ale dla t, kursor przesunie się na pozycję przed znakiem i T przeszukuje linię wstecz do pozycji po znaku.

Ustaw polecenia

Możesz zmienić wygląd i działanie swojego ekranu vi, korzystając z poniższych wskazówek :setpolecenia. Gdy jesteś w trybie poleceń, wpisz:set po którym następuje dowolne z następujących poleceń.

Sr.No. Polecenie i opis
1

:set ic

Ignoruje przypadek podczas wyszukiwania

2

:set ai

Ustawia wcięcie automatyczne

3

:set noai

Cofa automatyczne wcięcie

4

:set nu

Wyświetla wiersze z numerami wierszy po lewej stronie

5

:set sw

Ustawia szerokość tabulatora oprogramowania. Na przykład możesz ustawić szerokość przesunięcia na 4 za pomocą tego polecenia -:set sw = 4

6

:set ws

Jeśli wrapscan jest ustawiony, a słowo nie zostanie znalezione na dole pliku, spróbuje wyszukać go na początku

7

:set wm

Jeśli ta opcja ma wartość większą niż zero, edytor automatycznie „zawija słowa”. Na przykład, aby ustawić margines zawijania na dwa znaki, należy wpisać::set wm = 2

8

:set ro

Zmienia typ pliku na „tylko do odczytu”

9

:set term

Wyświetla typ terminala

10

:set bf

Odrzuca znaki sterujące z danych wejściowych

Uruchamianie poleceń

Vi ma możliwość uruchamiania poleceń z poziomu edytora. Aby uruchomić polecenie, wystarczy przejść do trybu poleceń i wpisać:! Komenda.

Na przykład, jeśli chcesz sprawdzić, czy plik istnieje, zanim spróbujesz zapisać plik pod tą nazwą, możesz wpisać :! ls i zobaczysz wynik ls na ekranie.

Możesz nacisnąć dowolny klawisz (lub sekwencję ucieczki polecenia), aby powrócić do sesji vi.

Zastępowanie tekstu

Polecenie podstawienia (:s/) umożliwia szybkie zastępowanie słów lub grup słów w plikach. Poniżej znajduje się składnia zastępująca tekst -

:s/search/replace/g

Plik goznacza globalnie. Wynikiem tego polecenia jest zmiana wszystkich wystąpień w linii kursora.

Ważne uwagi

Poniższe punkty przyczynią się do Twojego sukcesu z vi -

  • Aby używać poleceń, musisz być w trybie poleceń. (Naciśnij klawisz Esc dwukrotnie w dowolnym momencie, aby upewnić się, że jesteś w trybie poleceń).

  • Musisz uważać na polecenia. W tych jest rozróżniana wielkość liter.

  • Aby wprowadzić tekst, musisz być w trybie wstawiania.

ZA Shellzapewnia interfejs do systemu Unix. Gromadzi dane wejściowe od Ciebie i wykonuje programy na ich podstawie. Gdy program kończy wykonywanie, wyświetla dane wyjściowe tego programu.

Shell to środowisko, w którym możemy uruchamiać nasze polecenia, programy i skrypty powłoki. Istnieją różne odmiany powłoki, podobnie jak różne są wersje systemów operacyjnych. Każdy wariant powłoki ma własny zestaw rozpoznawanych poleceń i funkcji.

Shell Prompt

Monit, $, który nazywa się command prompt, jest wydawany przez powłokę. Gdy wyświetlany jest monit, możesz wpisać polecenie.

Shell odczytuje wprowadzone dane po naciśnięciu Enter. Określa polecenie, które chcesz wykonać, patrząc na pierwsze słowo wprowadzone przez Ciebie. Słowo to nieprzerwany zestaw znaków. Spacje i tabulatory oddzielają słowa.

Poniżej znajduje się prosty przykład date polecenie, które wyświetla aktualną datę i godzinę -

$date
Thu Jun 25 08:30:19 MST 2009

Możesz dostosować wiersz polecenia za pomocą zmiennej środowiskowej PS1, wyjaśnionej w samouczku dotyczącym środowiska.

Rodzaje pocisków

W systemie Unix istnieją dwa główne typy powłok -

  • Bourne shell - Jeśli używasz powłoki typu Bourne, rozszerzenie $ znak to domyślna zachęta.

  • C shell - Jeśli używasz powłoki typu C, domyślnym znakiem zachęty jest znak%.

Bourne Shell ma następujące podkategorie -

  • Powłoka Bourne'a (sh)
  • Korn Shell (ksh)
  • Powłoka Bourne Again (bash)
  • Powłoka POSIX (sh)

Następują różne pociski typu C -

  • Powłoka C (csh)
  • Powłoka TENEX / TOPS C (tcsh)

Oryginalna powłoka systemu Unix została napisana w połowie lat siedemdziesiątych przez Stephena R. Bourne'a, gdy był w AT&T Bell Labs w New Jersey.

Powłoka Bourne'a była pierwszą powłoką, która pojawiła się w systemach uniksowych, dlatego jest nazywana „powłoką”.

Powłoka Bourne jest zwykle instalowana jako /bin/shw większości wersji Uniksa. Z tego powodu jest to powłoka wybierana do pisania skryptów, które mogą być używane w różnych wersjach Uniksa.

W tym rozdziale omówimy większość koncepcji powłoki opartych na powłoce Borne.

Skrypty powłoki

Podstawową koncepcją skryptu powłoki jest lista poleceń, które są wymienione w kolejności wykonywania. Dobry skrypt powłoki będzie miał komentarze poprzedzone znakiem# znak, opisujący kroki.

Istnieją testy warunkowe, takie jak wartość A jest większa niż wartość B, pętle umożliwiające nam przechodzenie przez ogromne ilości danych, pliki do odczytu i przechowywania danych oraz zmienne do odczytu i przechowywania danych, a skrypt może zawierać funkcje.

W następnych sekcjach napiszemy wiele skryptów. Byłby to prosty plik tekstowy, w którym umieścilibyśmy wszystkie nasze polecenia i kilka innych wymaganych konstrukcji, które mówią środowisku powłoki, co ma robić i kiedy.

Skrypty i funkcje powłoki są interpretowane. Oznacza to, że nie są kompilowane.

Przykładowy skrypt

Załóżmy, że tworzymy plik test.shscenariusz. Zauważ, że wszystkie skrypty miałyby rozszerzenie.shrozbudowa. Zanim dodasz cokolwiek innego do swojego skryptu, musisz ostrzec system, że skrypt powłoki jest uruchamiany. Odbywa się to za pomocąshebangzbudować. Na przykład -

#!/bin/sh

To mówi systemowi, że polecenia, które następują, mają być wykonywane przez powłokę Bourne'a. Nazywa się to shebang, ponieważ#symbol nazywa się hashem, a symbol! symbol nazywa się hukiem .

Aby utworzyć skrypt zawierający te polecenia, najpierw umieść linię shebang, a następnie dodaj polecenia -

#!/bin/bash
pwd
ls

Komentarze powłoki

Możesz umieścić swoje komentarze w swoim skrypcie w następujący sposób -

#!/bin/bash

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls

Zapisz powyższą zawartość i spraw, aby skrypt był wykonywalny -

$chmod +x test.sh

Skrypt powłoki jest teraz gotowy do wykonania -

$./test.sh

Po wykonaniu otrzymasz następujący wynik -

/home/amrood
index.htm  unix-basic_utilities.htm  unix-directories.htm  
test.sh    unix-communication.htm    unix-environment.htm

Note - Aby uruchomić program dostępny w bieżącym katalogu, użyj ./program_name

Rozszerzone skrypty powłoki

Skrypty powłoki mają kilka wymaganych konstrukcji, które mówią środowisku powłoki, co i kiedy ma robić. Oczywiście większość skryptów jest bardziej złożona niż powyższy.

W końcu powłoka jest prawdziwym językiem programowania, zawierającym zmienne, struktury kontrolne i tak dalej. Bez względu na to, jak skomplikowany jest skrypt, nadal jest to tylko lista poleceń wykonywanych sekwencyjnie.

Poniższy skrypt używa read polecenie, które pobiera dane wejściowe z klawiatury i przypisuje je jako wartość zmiennej PERSON i ostatecznie wypisuje je na STDOUT.

#!/bin/sh

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

Oto przykładowe uruchomienie skryptu -

$./test.sh What is your name? Zara Ali Hello, Zara Ali $

W tym rozdziale nauczymy się, jak używać zmiennych powłoki w systemie Unix. Zmienna to ciąg znaków, do którego przypisujemy wartość. Przypisywana wartość może być liczbą, tekstem, nazwą pliku, urządzeniem lub dowolnym innym typem danych.

Zmienna to nic innego jak wskaźnik do rzeczywistych danych. Powłoka umożliwia tworzenie, przypisywanie i usuwanie zmiennych.

Nazwy zmiennych

Nazwa zmiennej może zawierać tylko litery (od a do z lub od A do Z), cyfry (od 0 do 9) lub znak podkreślenia (_).

Zgodnie z konwencją, zmienne powłoki systemu Unix będą miały nazwy zapisane WIELKIMI LITERAMI.

Poniższe przykłady to prawidłowe nazwy zmiennych -

_ALI
TOKEN_A
VAR_1
VAR_2

Poniżej znajdują się przykłady nieprawidłowych nazw zmiennych -

2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

Powód, dla którego nie możesz używać innych znaków, takich jak !, *lub - polega na tym, że te znaki mają specjalne znaczenie dla powłoki.

Definiowanie zmiennych

Zmienne definiuje się następująco -

variable_name=variable_value

Na przykład -

NAME="Zara Ali"

Powyższy przykład definiuje zmienną NAME i przypisuje jej wartość „Zara Ali”. Zmienne tego typu nazywane sąscalar variables. Zmienna skalarna może jednocześnie zawierać tylko jedną wartość.

Shell umożliwia przechowywanie dowolnej wartości w zmiennej. Na przykład -

VAR1="Zara Ali"
VAR2=100

Dostęp do wartości

Aby uzyskać dostęp do wartości przechowywanej w zmiennej, należy poprzedzić jej nazwę znakiem dolara ($) -

Na przykład poniższy skrypt uzyska dostęp do wartości zdefiniowanej zmiennej NAZWA i wydrukuje ją na STDOUT -

#!/bin/sh

NAME="Zara Ali"
echo $NAME

Powyższy skrypt wygeneruje następującą wartość -

Zara Ali

Zmienne tylko do odczytu

Powłoka zapewnia sposób oznaczania zmiennych jako tylko do odczytu przy użyciu polecenia tylko do odczytu. Po oznaczeniu zmiennej jako tylko do odczytu nie można zmienić jej wartości.

Na przykład poniższy skrypt generuje błąd podczas próby zmiany wartości NAME -

#!/bin/sh

NAME="Zara Ali"
readonly NAME
NAME="Qadiri"

Powyższy skrypt wygeneruje następujący wynik -

/bin/sh: NAME: This variable is read only.

Unsetting Variables

Cofnięcie lub usunięcie zmiennej kieruje powłokę do usunięcia zmiennej z listy zmiennych, które śledzi. Po usunięciu ustawienia zmiennej nie można uzyskać dostępu do wartości przechowywanej w zmiennej.

Poniżej znajduje się składnia, aby usunąć zdefiniowaną zmienną za pomocą unset polecenie -

unset variable_name

Powyższe polecenie kasuje wartość zdefiniowanej zmiennej. Oto prosty przykład, który pokazuje, jak działa polecenie -

#!/bin/sh

NAME="Zara Ali"
unset NAME
echo $NAME

Powyższy przykład niczego nie drukuje. Nie możesz użyć polecenia unset, abyunset zaznaczone zmienne readonly.

Typy zmiennych

Gdy powłoka jest uruchomiona, występują trzy główne typy zmiennych -

  • Local Variables- Zmienna lokalna to zmienna obecna w bieżącej instancji powłoki. Nie jest dostępna dla programów uruchamianych przez powłokę. Są ustawiane w wierszu polecenia.

  • Environment Variables- Zmienna środowiskowa jest dostępna dla każdego procesu potomnego powłoki. Niektóre programy wymagają zmiennych środowiskowych, aby działać poprawnie. Zwykle skrypt powłoki definiuje tylko te zmienne środowiskowe, które są wymagane przez uruchamiane przez niego programy.

  • Shell Variables- Zmienna powłoki to specjalna zmienna ustawiana przez powłokę i wymagana przez powłokę do prawidłowego działania. Niektóre z tych zmiennych są zmiennymi środowiskowymi, podczas gdy inne są zmiennymi lokalnymi.

W tym rozdziale omówimy szczegółowo zmienną specjalną w systemie Unix. W jednym z naszych poprzednich rozdziałów zrozumieliśmy, jak zachować ostrożność, używając pewnych znaków niealfanumerycznych w nazwach zmiennych. Dzieje się tak, ponieważ te znaki są używane w nazwach specjalnych zmiennych uniksowych. Te zmienne są zarezerwowane dla określonych funkcji.

Na przykład $ znak reprezentuje numer identyfikacyjny procesu lub PID bieżącej powłoki -

$echo $$

Powyższe polecenie zapisuje PID bieżącej powłoki -

29949

W poniższej tabeli przedstawiono kilka specjalnych zmiennych, których można używać w skryptach powłoki -

Sr.No. Zmienna i opis
1

$0

Nazwa pliku bieżącego skryptu.

2

$n

Te zmienne odpowiadają argumentom, z którymi został wywołany skrypt. Tutajn jest dodatnią liczbą dziesiętną odpowiadającą pozycji argumentu (pierwszy argument to $1, the second argument is $2 i tak dalej).

3

$#

Liczba argumentów dostarczonych do skryptu.

4

$*

Wszystkie argumenty są w cudzysłowie. Jeśli skrypt otrzyma dwa argumenty,$* is equivalent to $1 $ 2.

5

$@

Wszystkie argumenty są osobno cudzysłowami. Jeśli skrypt otrzyma dwa argumenty,$@ is equivalent to $1 $ 2.

6

$?

Status wyjścia ostatniego wykonanego polecenia.

7

$$

Numer procesu bieżącej powłoki. W przypadku skryptów powłoki jest to identyfikator procesu, pod którym są wykonywane.

8

$!

Numer procesu ostatniego polecenia w tle.

Argumenty wiersza polecenia

Argumenty wiersza poleceń $1, $2, $3, ...$9 to parametry pozycyjne, z $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... 9 $ jako argumenty polecenia.

Poniższy skrypt używa różnych specjalnych zmiennych związanych z wierszem poleceń -

#!/bin/sh

echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

Oto przykładowe uruchomienie powyższego skryptu -

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

Parametry specjalne $* and $@

Istnieją specjalne parametry, które umożliwiają dostęp do wszystkich argumentów wiersza poleceń jednocześnie. $* i $@ oba będą działać tak samo, chyba że zostaną ujęte w podwójne cudzysłowy, "".

Oba parametry określają argumenty wiersza polecenia. Jednakże "$*" special parameter takes the entire list as one argument with spaces between and the "$Specjalny parametr @ "pobiera całą listę i rozdziela ją na oddzielne argumenty.

Możemy napisać skrypt powłoki, jak pokazano poniżej, aby przetworzyć nieznaną liczbę argumentów wiersza poleceń za pomocą rozszerzenia $* or $@ parametry specjalne -

#!/bin/sh

for TOKEN in $* do echo $TOKEN
done

Oto przykładowe uruchomienie powyższego skryptu -

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

Note - Tutaj do...done jest rodzajem pętli, która zostanie omówiona w kolejnym samouczku.

Status wyjścia

Plik $? zmienna reprezentuje stan wyjścia poprzedniego polecenia.

Status wyjścia to wartość liczbowa zwracana przez każde polecenie po jego zakończeniu. Z reguły większość poleceń zwraca kod zakończenia równy 0, jeśli się powiedzie, i 1, jeśli się nie powiodło.

Niektóre polecenia zwracają dodatkowe statusy wyjścia z określonych powodów. Na przykład niektóre polecenia rozróżniają rodzaje błędów i zwracają różne wartości wyjścia w zależności od określonego typu błędu.

Oto przykład udanego polecenia -

$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $

W tym rozdziale omówimy, jak używać tablic powłoki w systemie Unix. Zmienna powłoki może przechowywać pojedynczą wartość. Te zmienne nazywane są zmiennymi skalarnymi.

Shell obsługuje inny typ zmiennej o nazwie array variable. Może to jednocześnie zawierać wiele wartości. Tablice zapewniają metodę grupowania zestawu zmiennych. Zamiast tworzyć nową nazwę dla każdej wymaganej zmiennej, można użyć jednej zmiennej tablicowej, która przechowuje wszystkie inne zmienne.

Wszystkie reguły nazewnictwa omówione dla zmiennych powłoki miałyby zastosowanie podczas nazywania tablic.

Definiowanie wartości tablicowych

Różnicę między zmienną tablicową a zmienną skalarną można wyjaśnić w następujący sposób.

Przypuśćmy, że próbujesz przedstawić nazwiska różnych uczniów jako zbiór zmiennych. Każda z indywidualnych zmiennych jest zmienną skalarną w następujący sposób -

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Możemy użyć jednej tablicy do przechowywania wszystkich wyżej wymienionych nazw. Poniżej przedstawiono najprostszą metodę tworzenia zmiennej tablicowej. Pomaga to przypisać wartość do jednego z jego indeksów.

array_name[index]=value

Tutaj nazwa_tablicy to nazwa tablicy, indeks to indeks elementu tablicy, który chcesz ustawić, a wartość to wartość, którą chcesz ustawić dla tego elementu.

Na przykład następujące polecenia -

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"

Jeśli używasz ksh powłoce, oto składnia inicjalizacji tablicy -

set -A array_name value1 value2 ... valuen

Jeśli używasz bash powłoce, oto składnia inicjalizacji tablicy -

array_name=(value1 ... valuen)

Dostęp do wartości tablicowych

Po ustawieniu dowolnej zmiennej tablicowej uzyskujesz do niej dostęp w następujący sposób -

${array_name[index]}

W tym przypadku nazwa_tablicy to nazwa tablicy, a indeks to indeks wartości, do której można uzyskać dostęp. Poniżej znajduje się przykład, aby zrozumieć koncepcję -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

Powyższy przykład wygeneruje następujący wynik -

$./test.sh
First Index: Zara
Second Index: Qadir

Możesz uzyskać dostęp do wszystkich elementów w tablicy na jeden z następujących sposobów -

${array_name[*]} ${array_name[@]}

Tutaj array_name to nazwa tablicy, która Cię interesuje. Poniższy przykład pomoże Ci zrozumieć koncepcję -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"

Powyższy przykład wygeneruje następujący wynik -

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

Każda powłoka ma różne operatory. W tym rozdziale omówimy szczegółowo powłokę Bourne'a (domyślną powłokę).

Omówimy teraz następujące operatory -

  • Operatory arytmetyczne
  • Operatorzy relacyjni
  • Operatory boolowskie
  • Operatory łańcuchowe
  • Operatory testów plików

Powłoka Bourne'a pierwotnie nie miała żadnego mechanizmu do wykonywania prostych operacji arytmetycznych, ale korzysta też z programów zewnętrznych awk lub expr.

Poniższy przykład pokazuje, jak dodać dwie liczby -

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

Powyższy skrypt wygeneruje następujący wynik -

Total value : 4

Podczas dodawania należy wziąć pod uwagę następujące punkty -

  • Między operatorami i wyrażeniami muszą znajdować się spacje. Na przykład 2 + 2 nie jest poprawne; należy zapisać jako 2 + 2.

  • Pełne wyrażenie należy umieścić pomiędzy ‘ ‘, nazywany lewy przycisk.

Operatory arytmetyczne

Bourne Shell obsługuje następujące operatory arytmetyczne.

Przyjmij zmienną a posiada 10 i zmienną b mieści wtedy 20 -

Pokaż przykłady

Operator Opis Przykład
+ (Dodawanie) Dodaje wartości po obu stronach operatora `wyr $a + $b` da 30
- (odejmowanie) Odejmuje operand po prawej stronie od operandu po lewej stronie `wyr $a - $b` da -10
* (Mnożenie) Mnoży wartości po obu stronach operatora `wyr $a \* $b` da 200
/ (Podział) Dzieli operand lewej ręki przez operand prawej ręki `wyr $b / $a` da 2
% (Moduł) Dzieli operand po lewej stronie przez operand po prawej stronie i zwraca resztę `wyr $b % $a` da 0
= (Cesja) Przypisuje prawy operand do lewego operandu a = $ b przypisze wartość b do a
== (równość) Porównuje dwie liczby, jeśli obie są takie same, zwraca prawdę. [$ a == $ b] zwróciłoby fałsz.
! = (Nie równość) Porównuje dwie liczby, jeśli obie są różne, zwraca prawdę. [$ a! = $ b] zwróciłoby prawdę.

Bardzo ważne jest, aby zrozumieć, że wszystkie wyrażenia warunkowe powinny na przykład znajdować się wewnątrz nawiasów kwadratowych ze spacjami wokół nich [ $a == $b ] jest poprawne, podczas gdy [$a==$b] jest nieprawidłowe.

Wszystkie obliczenia arytmetyczne są wykonywane przy użyciu długich liczb całkowitych.

Operatorzy relacyjni

Bourne Shell obsługuje następujące operatory relacyjne, które są specyficzne dla wartości liczbowych. Te operatory nie działają dla wartości łańcuchowych, chyba że ich wartość jest liczbowa.

Na przykład następujące operatory sprawdzą relację między 10 a 20, a także między „10” a „20”, ale nie między „dziesięć” a „dwadzieścia”.

Przyjmij zmienną a posiada 10 i zmienną b mieści wtedy 20 -

Pokaż przykłady

Operator Opis Przykład
-eq Sprawdza, czy wartości dwóch operandów są równe, czy nie; jeśli tak, to warunek staje się prawdziwy. [$ a -eq $ b] nie jest prawdą.
-ne Sprawdza, czy wartości dwóch operandów są równe, czy nie; jeśli wartości nie są równe, warunek staje się prawdziwy. [$ a -ne $ b] jest prawdą.
-gt Sprawdza, czy wartość lewego operandu jest większa niż wartość prawego operandu; jeśli tak, to warunek staje się prawdziwy. [$ a -gt $ b] nie jest prawdą.
-lt Sprawdza, czy wartość lewego operandu jest mniejsza niż wartość prawego operandu; jeśli tak, to warunek staje się prawdziwy. [$ a -lt $ b] jest prawdą.
-ge Sprawdza, czy wartość lewego operandu jest większa lub równa wartości prawego operandu; jeśli tak, to warunek staje się prawdziwy. [$ a -ge $ b] nie jest prawdą.
-le Sprawdza, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu; jeśli tak, to warunek staje się prawdziwy. [$ a -le $ b] jest prawdą.

Bardzo ważne jest, aby zrozumieć, że wszystkie wyrażenia warunkowe powinny być umieszczone w nawiasach kwadratowych ze spacjami wokół nich. Na przykład,[ $a <= $b ] jest poprawne, podczas gdy [$a <= $b] jest nieprawidłowe.

Operatory boolowskie

Następujące operatory logiczne są obsługiwane przez Bourne Shell.

Przyjmij zmienną a posiada 10 i zmienną b mieści wtedy 20 -

Pokaż przykłady

Operator Opis Przykład
! To jest logiczna negacja. To odwraca prawdziwy warunek w fałszywy i odwrotnie. [! false] jest prawdą.
-o To jest logiczne OR. Jeśli jeden z operandów jest prawdziwy, warunek staje się prawdziwy. [$ a -lt 20 -o $ b -gt 100] jest prawdą.
-a To jest logiczne AND. Jeśli oba operandy są prawdziwe, warunek staje się prawdziwy, w przeciwnym razie fałszywy. [$ a -lt 20 -a $ b -gt 100] jest fałszem.

Operatory łańcuchowe

Następujące operatory łańcuchowe są obsługiwane przez Bourne Shell.

Przyjmij zmienną a zawiera „abc” i zmienną b zawiera „efg”, a następnie -

Pokaż przykłady

Operator Opis Przykład
= Sprawdza, czy wartości dwóch operandów są równe, czy nie; jeśli tak, to warunek staje się prawdziwy. [$ a = $ b] nie jest prawdą.
!= Sprawdza, czy wartości dwóch operandów są równe, czy nie; jeśli wartości nie są równe, warunek staje się prawdziwy. [$ a! = $ b] jest prawdą.
-z Sprawdza, czy podany rozmiar operandu łańcuchowego wynosi zero; jeśli ma zerową długość, zwraca prawdę. [-z $ a] nie jest prawdą.
-n Sprawdza, czy podany rozmiar operandu łańcuchowego jest różny od zera; jeśli ma niezerową długość, zwraca wartość true. [-n $ a] nie jest fałszem.
str Sprawdza, czy strnie jest pustym łańcuchem; jeśli jest pusty, zwraca fałsz. [$ a] nie jest fałszem.

Operatory testów plików

Mamy kilka operatorów, których można użyć do testowania różnych właściwości powiązanych z plikiem uniksowym.

Załóżmy zmienną file przechowuje istniejącą nazwę pliku „test”, którego rozmiar wynosi 100 bajtów i ma read, write i execute pozwolenie na -

Pokaż przykłady

Operator Opis Przykład
-b file Sprawdza, czy plik jest blokowym plikiem specjalnym; jeśli tak, to warunek staje się prawdziwy. [-b $ plik] jest fałszywe.
-c file Sprawdza, czy plik jest znakowym plikiem specjalnym; jeśli tak, to warunek staje się prawdziwy. [-c $ plik] ma wartość fałsz.
-d file Sprawdza, czy plik jest katalogiem; jeśli tak, to warunek staje się prawdziwy. [-d $ plik] nie jest prawdą.
-f file Sprawdza, czy plik jest zwykłym plikiem w przeciwieństwie do katalogu lub pliku specjalnego; jeśli tak, to warunek staje się prawdziwy. [-f $ plik] jest prawdą.
-g file Sprawdza, czy plik ma ustawiony bit identyfikatora grupy ustawionej (SGID); jeśli tak, to warunek staje się prawdziwy. [-g $ plik] jest fałszywe.
-k file Sprawdza, czy plik ma ustawiony bit lepki; jeśli tak, to warunek staje się prawdziwy. [-k $ plik] jest fałszywe.
-p file Sprawdza, czy plik jest nazwanym potokiem; jeśli tak, to warunek staje się prawdziwy. [-p $ plik] jest fałszywe.
-t file Sprawdza, czy deskryptor pliku jest otwarty i powiązany z terminalem; jeśli tak, to warunek staje się prawdziwy. [-t $ plik] jest fałszywe.
-u file Sprawdza, czy plik ma ustawiony bit Set User ID (SUID); jeśli tak, to warunek staje się prawdziwy. [-u $ plik] jest fałszywe.
-r file Sprawdza, czy plik jest czytelny; jeśli tak, to warunek staje się prawdziwy. [-r $ plik] jest prawdą.
-w file Sprawdza, czy plik jest zapisywalny; jeśli tak, to warunek staje się prawdziwy. [-w $ plik] jest prawdą.
-x file Sprawdza, czy plik jest wykonywalny; jeśli tak, to warunek staje się prawdziwy. [-x $ plik] jest prawdą.
-s file Sprawdza, czy plik ma rozmiar większy niż 0; jeśli tak, to warunek staje się prawdziwy. [-s $ plik] jest prawdą.
-e file Sprawdza, czy plik istnieje; jest prawdą, nawet jeśli plik jest katalogiem, ale istnieje. [-e $ plik] jest prawdą.

Operatory powłoki C.

Poniższy link daje krótkie wyobrażenie o operatorach powłoki C -

Operatory powłoki C.

Korn Shell Operators

Poniższy link pomoże ci zrozumieć operatorów powłoki Korna -

Korn Shell Operators

W tym rozdziale zrozumiemy proces podejmowania decyzji przez powłokę w systemie Unix. Podczas pisania skryptu powłoki może zaistnieć potrzeba przyjęcia jednej ścieżki z podanych dwóch ścieżek. Musisz więc skorzystać z instrukcji warunkowych, które pozwolą programowi na podejmowanie właściwych decyzji i wykonywanie właściwych działań.

Unix Shell obsługuje instrukcje warunkowe, które są używane do wykonywania różnych działań w oparciu o różne warunki. Zrozumiemy teraz tutaj dwa stwierdzenia decyzyjne -

  • Plik if...else komunikat

  • Plik case...esac komunikat

Instrukcje if ... else

Jeśli else, stwierdzenia decyzyjne są przydatne, aby wybrać opcję z danego zestawu opcji.

Unix Shell obsługuje następujące formy if…else oświadczenie -

  • jeśli ... oświadczenie fi
  • if ... else ... fi oświadczenie
  • if ... elif ... else ... fi

Większość instrukcji if sprawdza relacje przy użyciu operatorów relacyjnych omówionych w poprzednim rozdziale.

Sprawa ... Oświadczenie esac

Możesz użyć wielu plików if...elifinstrukcje do wykonania rozgałęzienia wielodrogowego. Jednak nie zawsze jest to najlepsze rozwiązanie, zwłaszcza gdy wszystkie gałęzie zależą od wartości jednej zmiennej.

Obsługa powłoki Unix case...esac oświadczenie, które obsługuje dokładnie tę sytuację i robi to wydajniej niż powtarzane if...elif sprawozdania.

Jest tylko jedna forma case...esac oświadczenie, które zostało szczegółowo opisane tutaj -

  • case ... oświadczenie esac

Plik case...esac instrukcja w powłoce systemu Unix jest bardzo podobna do instrukcji switch...case oświadczenie, które mamy w innych językach programowania, takich jak C lub C++ i PERLitp.

W tym rozdziale omówimy pętle powłoki w systemie Unix. Pętla to potężne narzędzie programistyczne, które umożliwia wielokrotne wykonywanie zestawu poleceń. W tym rozdziale przyjrzymy się następującym typom pętli dostępnych dla programistów powłoki:

  • Pętla while
  • Pętla for
  • Pętla do momentu
  • Pętla wyboru

Będziesz używać różnych pętli w zależności od sytuacji. Na przykładwhilepętla wykonuje podane polecenia, dopóki dany warunek nie pozostanie prawdziwy; theuntil pętla jest wykonywana, dopóki dany warunek nie stanie się prawdziwy.

Kiedy już zdobędziesz dobrą praktykę programowania, zdobędziesz wiedzę, a tym samym zaczniesz używać odpowiedniej pętli w zależności od sytuacji. Tutaj,while i for pętle są dostępne w większości innych języków programowania, takich jak C, C++ i PERLitp.

Pętle zagnieżdżające

Wszystkie pętle obsługują koncepcję zagnieżdżania, co oznacza, że ​​możesz umieścić jedną pętlę wewnątrz innej podobnej lub różnych pętli. To zagnieżdżanie może wzrosnąć do nieograniczonej liczby razy w zależności od wymagań.

Oto przykład zagnieżdżania whilepętla. Pozostałe pętle można zagnieżdżać na podstawie wymagań programowych w podobny sposób -

Zagnieżdżanie pętli podczas

Możliwe jest użycie pętli while jako części ciała innej pętli while.

Składnia

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true

   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done

   Statement(s) to be executed if command1 is true
done

Przykład

Oto prosty przykład zagnieżdżania pętli. Dodajmy kolejną pętlę odliczania wewnątrz pętli, którą liczyłeś do dziewięciu -

#!/bin/sh

a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
   while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
      b=`expr $b - 1` done echo a=`expr $a + 1`
done

Spowoduje to następujący wynik. Ważne jest, aby pamiętać, jak to zrobićecho -ndziała tutaj. Tutaj-n opcja pozwala echo uniknąć drukowania nowego znaku linii.

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

W tym rozdziale omówimy sterowanie pętlą powłoki w systemie Unix. Do tej pory przyglądałeś się tworzeniu pętli i pracy z pętlami w celu wykonania różnych zadań. Czasami trzeba zatrzymać pętlę lub pominąć jej iteracje.

W tym rozdziale nauczymy się następujących dwóch instrukcji, które są używane do sterowania pętlami powłoki:

  • Plik break komunikat

  • Plik continue komunikat

Nieskończona pętla

Wszystkie pętle mają ograniczoną żywotność i wychodzą, gdy warunek jest fałszywy lub prawdziwy, w zależności od pętli.

Pętla może trwać wiecznie, jeśli wymagany warunek nie zostanie spełniony. Pętla, która jest wykonywana w nieskończoność bez przerywania, wykonuje nieskończoną liczbę razy. Z tego powodu takie pętle nazywane są nieskończonymi pętlami.

Przykład

Oto prosty przykład wykorzystujący rozszerzenie while pętla do wyświetlania liczb od zera do dziewięciu -

#!/bin/sh

a=10

until [ $a -lt 10 ] do echo $a
   a=`expr $a + 1`
done

Ta pętla trwa wiecznie, ponieważ a jest zawsze greater than lub equal to 10 i nigdy nie jest mniej niż 10.

Instrukcja Break

Plik breakInstrukcja służy do przerwania wykonania całej pętli, po wykonaniu wszystkich linii kodu, aż do instrukcji break. Następnie przechodzi do kodu następującego po końcu pętli.

Składnia

Następujące break instrukcja służy do wyjścia z pętli -

break

Polecenia break można również użyć do wyjścia z zagnieżdżonej pętli przy użyciu tego formatu -

break n

Tutaj n określa nth obejmująca pętlę do wyjścia z.

Przykład

Oto prosty przykład, który pokazuje, że pętla kończy się tak szybko, jak a staje się 5 -

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

Po wykonaniu otrzymasz następujący wynik -

0
1
2
3
4
5

Oto prosty przykład zagnieżdżonej pętli for. Ten skrypt przerywa obie pętle, jeślivar1 equals 2 i var2 equals 0 -

#!/bin/sh

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
      fi
   done
done

Po wykonaniu otrzymasz następujący wynik. W pętli wewnętrznej masz polecenie przerwania z argumentem 2. Oznacza to, że jeśli warunek zostanie spełniony, powinieneś wyrwać się z pętli zewnętrznej i ostatecznie również z pętli wewnętrznej.

1 0
1 5

Kontynuuj oświadczenie

Plik continue instrukcja jest podobna do break polecenie, z tym wyjątkiem, że powoduje zakończenie bieżącej iteracji pętli, a nie całej pętli.

Ta instrukcja jest przydatna, gdy wystąpił błąd, ale chcesz spróbować wykonać następną iterację pętli.

Składnia

continue

Podobnie jak w przypadku instrukcji break, do polecenia continue można podać argument będący liczbą całkowitą, aby pominąć polecenia z zagnieżdżonych pętli.

continue n

Tutaj n określa nth otaczająca pętla, aby kontynuować od.

Przykład

Poniższa pętla korzysta z continue instrukcja, która wraca z instrukcji continue i rozpoczyna przetwarzanie następnej instrukcji -

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
   Q=`expr $NUM % 2` if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

Po wykonaniu otrzymasz następujący wynik -

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number

Co to jest podstawienie?

Powłoka dokonuje podstawienia, gdy napotka wyrażenie zawierające jeden lub więcej znaków specjalnych.

Przykład

W tym przypadku wartość drukowania zmiennej jest zastępowana jej wartością. W tym samym czasie,"\n" jest zastępowany nową linią -

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

Otrzymasz następujący wynik. Tutaj-e opcja umożliwia interpretację znaków z ukośnikiem odwrotnym.

Value of a is 10

Oto wynik bez -e opcja -

Value of a is 10\n

Oto następujące sekwencje ucieczki, których można użyć w poleceniu echo -

Sr.No. Ucieczka i opis
1

\\

ukośnik wsteczny

2

\a

alert (BEL)

3

\b

Backspace

4

\c

pominąć końcowy znak nowej linii

5

\f

form feed

6

\n

Nowa linia

7

\r

powrót karetki

8

\t

zakładka pozioma

9

\v

zakładka pionowa

Możesz użyć -E opcja wyłączająca interpretację odwrotnego ukośnika (domyślnie).

Możesz użyć -n możliwość wyłączenia wstawiania nowego wiersza.

Zastępowanie poleceń

Podstawianie poleceń to mechanizm, za pomocą którego powłoka wykonuje dany zestaw poleceń, a następnie zastępuje ich dane wyjściowe w miejsce poleceń.

Składnia

Podstawianie poleceń jest wykonywane, gdy polecenie jest podane jako -

`command`

Podczas podstawiania poleceń upewnij się, że używasz odwrotnego cudzysłowu, a nie pojedynczego cudzysłowu.

Przykład

Podstawianie poleceń jest zwykle używane do przypisania wyniku polecenia do zmiennej. Każdy z poniższych przykładów ilustruje podstawianie poleceń -

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"

Po wykonaniu otrzymasz następujący wynik -

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

Zastępowanie zmiennych

Podstawianie zmiennych umożliwia programiście powłoki manipulowanie wartością zmiennej w oparciu o jej stan.

Oto poniższa tabela dla wszystkich możliwych podstawień -

Sr.No. Formularz i opis
1

${var}

Zastąp wartość var .

2

${var:-word}

Jeśli zmienna jest pusta lub nieustawiona, podstawiane jest słowovar. Wartość var nie zmienia się.

3

${var:=word}

Jeśli zmienna jest null lub nieustawiona, zmienna jest ustawiana na wartośćword.

4

${var:?message}

Jeśli zmienna jest pusta lub nieustawiona, komunikat jest wypisywany na standardowy błąd. Sprawdza, czy zmienne są ustawione poprawnie.

5

${var:+word}

Jeśli ustawiona jest zmienna, zmienna jest zastępowana słowem . Wartość var nie zmienia się.

Przykład

Poniżej znajduje się przykład pokazujący różne stany powyższego podstawienia -

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

Po wykonaniu otrzymasz następujący wynik -

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix

W tym rozdziale omówimy szczegółowo mechanizmy cytowania Shell. Zaczniemy od omówienia metaznaków.

Metaznaki

Unix Shell zapewnia różne metaznaki, które mają specjalne znaczenie podczas używania ich w dowolnym skrypcie powłoki i powoduje zakończenie słowa, chyba że jest cytowane.

Na przykład, ? pasuje do pojedynczego znaku podczas wyświetlania plików w katalogu i pliku *dopasowuje więcej niż jeden znak. Oto lista większości znaków specjalnych powłoki (zwanych także metaznakami) -

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Znak można cytować (tj. Ustawić, aby sam siebie) poprzedzał go znakiem \.

Przykład

Poniższy przykład pokazuje, jak wydrukować plik * lub a ? -

#!/bin/sh

echo Hello; Word

Po wykonaniu otrzymasz następujący wynik -

Hello
./test.sh: line 2: Word: command not found

shell returned 127

Spróbujmy teraz użyć cytowanego znaku -

#!/bin/sh

echo Hello\; Word

Po wykonaniu otrzymasz następujący wynik -

Hello; Word

Plik $ znak jest jednym z metaznaków, więc musi być cytowany, aby uniknąć specjalnego traktowania przez powłokę -

#!/bin/sh

echo "I have \$1200"

Po wykonaniu otrzymasz następujący wynik -

I have $1200

W poniższej tabeli wymieniono cztery formy cytowania -

Sr.No. Cytowanie i opis
1

Single quote

Wszystkie znaki specjalne w tych cudzysłowach tracą swoje specjalne znaczenie.

2

Double quote

Większość znaków specjalnych w tych cudzysłowach traci swoje specjalne znaczenie z tymi wyjątkami -

  • $
  • `
  • \$
  • \'
  • \"
  • \\
3

Backslash

Każdy znak występujący bezpośrednio po odwrotnym ukośniku traci swoje specjalne znaczenie.

4

Back quote

Wszystko pomiędzy cudzysłowami wstecznymi będzie traktowane jako polecenie i zostanie wykonane.

Pojedyncze cytaty

Rozważmy polecenie echo, które zawiera wiele specjalnych znaków powłoki -

echo <-$1500.**>; (update?) [y|n]

Umieszczenie odwrotnego ukośnika przed każdym znakiem specjalnym jest żmudne i utrudnia odczytanie wiersza -

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

Istnieje łatwy sposób zacytowania dużej grupy znaków. Umieść pojedynczy cudzysłów (') na początku i na końcu ciągu -

echo '<-$1500.**>; (update?) [y|n]'

Znaki w pojedynczych cudzysłowach są cytowane tak, jakby przed każdym znakiem znajdował się ukośnik odwrotny. Dzięki temu polecenie echo wyświetla się we właściwy sposób.

Jeśli pojedynczy cudzysłów pojawia się w ciągu do wyprowadzenia, nie należy umieszczać całego ciągu w pojedynczych cudzysłowach, zamiast tego należy poprzedzić go ukośnikiem odwrotnym (\) w następujący sposób -

echo 'It\'s Shell Programming

Podwójne cytaty

Spróbuj wykonać następujący skrypt powłoki. Ten skrypt powłoki używa pojedynczego cudzysłowu -

VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

Po wykonaniu otrzymasz następujący wynik -

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

Nie to miało być wyświetlane. Jest oczywiste, że pojedyncze cudzysłowy uniemożliwiają podstawianie zmiennych. Jeśli chcesz podstawić wartości zmiennych i sprawić, by cudzysłowy działały zgodnie z oczekiwaniami, musisz umieścić swoje polecenia w cudzysłowach w następujący sposób -

VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

Po wykonaniu otrzymasz następujący wynik -

ZARA owes <-$1500.**>; [ as of (07/02) ]

Podwójne cudzysłowy usuwają specjalne znaczenie wszystkich znaków z wyjątkiem następujących -

  • $ do podstawiania parametrów

  • Cudzysłowy zastępujące polecenia

  • \$ aby włączyć dosłowne znaki dolara

  • \` aby włączyć dosłowne cudzysłowy

  • \" aby włączyć osadzone podwójne cudzysłowy

  • \\ aby włączyć osadzone ukośniki odwrotne

  • Wszystkie inne \ znaki są dosłowne (nie specjalne)

Znaki w pojedynczych cudzysłowach są cytowane tak, jakby przed każdym znakiem znajdował się ukośnik odwrotny. Pomaga to poprawnie wyświetlać polecenie echo.

Jeśli pojedynczy cudzysłów pojawia się w ciągu do wyprowadzenia, nie należy umieszczać całego ciągu w pojedynczych cudzysłowach, zamiast tego należy poprzedzić go ukośnikiem odwrotnym (\) w następujący sposób -

echo 'It\'s Shell Programming'

Backquotes

Umieszczanie dowolnego polecenia Shell pomiędzy backquotes wykonuje polecenie.

Składnia

Oto prosta składnia do umieszczenia dowolnej powłoki command pomiędzy odwrotnymi cytatami -

var=`command`

Przykład

Plik date polecenie jest wykonywane w poniższym przykładzie, a otrzymany wynik jest przechowywany w zmiennej DATA.

DATE=`date`

echo "Current Date: $DATE"

Po wykonaniu otrzymasz następujący wynik -

Current Date: Thu Jul  2 05:28:45 MST 2009

W tym rozdziale omówimy szczegółowo przekierowania wejścia / wyjścia powłoki. Większość poleceń systemu Unix pobiera dane wejściowe z terminala i wysyła wynikowe dane wyjściowe z powrotem do terminala. Polecenie normalnie czyta swoje dane wejściowe ze standardowego wejścia, które domyślnie jest twoim terminalem. Podobnie, polecenie normalnie wypisuje swoje dane wyjściowe na standardowe wyjście, które domyślnie jest ponownie twoim terminalem.

Przekierowanie wyjścia

Wyjście polecenia zwykle przeznaczonego na standardowe wyjście może być łatwo przekierowane do pliku. Ta funkcja jest znana jako przekierowanie wyjścia.

Jeśli notation> file zostanie dołączony do dowolnego polecenia, które normalnie wypisuje swoje dane wyjściowe na standardowe wyjście, wynik tego polecenia zostanie zapisany do pliku zamiast na terminalu.

Sprawdź, co następuje who polecenie, które przekierowuje pełne dane wyjściowe polecenia w pliku użytkowników.

$ who > users

Zwróć uwagę, że na terminalu nie pojawiają się żadne dane wyjściowe. Dzieje się tak, ponieważ dane wyjściowe zostały przekierowane z domyślnego standardowego urządzenia wyjściowego (terminala) do określonego pliku. Możesz sprawdzić plik użytkowników pod kątem pełnej zawartości -

$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

Jeśli dane wyjściowe polecenia są przekierowane do pliku, a plik zawiera już jakieś dane, dane te zostaną utracone. Rozważmy następujący przykład -

$ echo line 1 > users
$ cat users line 1 $

Możesz użyć operatora >>, aby dołączyć dane wyjściowe do istniejącego pliku w następujący sposób -

$ echo line 2 >> users $ cat users
line 1
line 2
$

Przekierowanie danych wejściowych

Tak jak dane wyjściowe polecenia mogą zostać przekierowane do pliku, tak samo wejście polecenia może zostać przekierowane z pliku. Ponieważgreater-than character > jest używany do przekierowania wyjścia, plik less-than character < służy do przekierowania wejścia polecenia.

Polecenia, które normalnie pobierają dane wejściowe ze standardowego wejścia, mogą mieć przekierowane dane wejściowe z pliku w ten sposób. Na przykład, aby policzyć liczbę wierszy w pliku wygenerowanym przez użytkowników powyżej, możesz wykonać polecenie w następujący sposób -

$ wc -l users
2 users
$

Po wykonaniu otrzymasz następujące dane wyjściowe. Możesz policzyć liczbę wierszy w pliku, przekierowując standardowe wejściewcpolecenie z pliku użytkownicy -

$ wc -l < users
2
$

Zauważ, że istnieje różnica w wynikach generowanych przez dwie formy polecenia wc. W pierwszym przypadku nazwa użytkownika pliku jest wyświetlana wraz z liczbą linii; w drugim przypadku tak nie jest.

W pierwszym przypadku wc wie, że odczytuje swoje dane wejściowe od użytkowników pliku. W drugim przypadku wie tylko, że czyta swoje wejście ze standardowego wejścia, więc nie wyświetla nazwy pliku.

Tutaj Dokument

ZA here document służy do przekierowania danych wejściowych do interaktywnego skryptu lub programu powłoki.

Możemy uruchomić program interaktywny w skrypcie powłoki bez działania użytkownika, dostarczając wymagane dane wejściowe dla programu interaktywnego lub interaktywnego skryptu powłoki.

Ogólny formularz dla here dokument to -

command << delimiter
document
delimiter

Tutaj powłoka interpretuje plik <<operator jako instrukcję odczytu danych wejściowych, dopóki nie znajdzie wiersza zawierającego określony separator. Wszystkie wiersze wejściowe, aż do wiersza zawierającego separator, są następnie wprowadzane na standardowe wejście polecenia.

Separator informuje powłokę, że plik heredokument został ukończony. Bez tego powłoka nadal odczytuje dane wejściowe w nieskończoność. Separator musi być pojedynczym słowem, które nie zawiera spacji ani tabulatorów.

Poniżej znajduje się wejście do polecenia wc -l policzyć całkowitą liczbę wierszy -

$wc -l << EOF
   This is a simple lookup program 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

Możesz użyć here document wydrukować wiele wierszy za pomocą swojego skryptu w następujący sposób -

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF

Po wykonaniu otrzymasz następujący wynik -

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

Poniższy skrypt uruchamia sesję z vi edytor tekstu i zapisuje dane wejściowe w pliku test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

Jeśli uruchomisz ten skrypt z vimem działającym jako vi, prawdopodobnie zobaczysz wyniki takie jak poniżej -

$ sh test.sh Vim: Warning: Input is not from a terminal $

Po uruchomieniu skryptu do pliku powinien zostać dodany następujący komunikat test.txt -

$ cat test.txt This file was created automatically from a shell script $

Odrzuć dane wyjściowe

Czasami będziesz musiał wykonać polecenie, ale nie chcesz, aby dane wyjściowe były wyświetlane na ekranie. W takich przypadkach możesz odrzucić dane wyjściowe, przekierowując je do pliku/dev/null -

$ command > /dev/null

Tutaj polecenie to nazwa polecenia, które chcesz wykonać. Plik/dev/null to specjalny plik, który automatycznie odrzuca wszystkie dane wejściowe.

Aby odrzucić zarówno wyjście polecenia, jak i jego wyjście błędu, użyj przekierowania standardowego STDERR do STDOUT -

$ command > /dev/null 2>&1

Tutaj 2 reprezentuje STDERR i 1 reprezentuje STDOUT. Możesz wyświetlić wiadomość na STDERR, przekierowując STDOUT do STDERR w następujący sposób -

$ echo message 1>&2

Polecenia przekierowania

Poniżej znajduje się pełna lista poleceń, których można użyć do przekierowania -

Sr.No. Polecenie i opis
1

pgm > file

Wyjście pgm jest przekierowywane do pliku

2

pgm < file

Program pgm czyta swoje wejście z pliku

3

pgm >> file

Wyjście pgm jest dołączane do pliku

4

n > file

Dane wyjściowe ze strumienia z deskryptorem n przekierowany do pliku

5

n >> file

Dane wyjściowe ze strumienia z deskryptorem n dołączone do pliku

6

n >& m

Łączy dane wyjściowe ze strumienia n ze strumieniem m

7

n <& m

Łączy dane wejściowe ze strumienia n ze strumieniem m

8

<< tag

Standardowe dane wejściowe przechodzą stąd przez następny znacznik na początku wiersza

9

|

Pobiera dane wyjściowe z jednego programu lub procesu i wysyła je do innego

Zwróć uwagę, że deskryptor pliku 0 jest zwykle standardowym wejściem (STDIN), 1 to standardowe wyjście (STDOUT), a 2 to standardowe wyjście błędów (STDERR).

W tym rozdziale omówimy szczegółowo funkcje powłoki. Funkcje umożliwiają rozbicie ogólnej funkcjonalności skryptu na mniejsze, logiczne podsekcje, które mogą być następnie wywoływane w celu wykonania ich indywidualnych zadań w razie potrzeby.

Używanie funkcji do wykonywania powtarzalnych zadań to doskonały sposób na tworzenie code reuse. Jest to ważna część współczesnych zasad programowania obiektowego.

Funkcje powłoki są podobne do podprogramów, procedur i funkcji w innych językach programowania.

Tworzenie funkcji

Aby zadeklarować funkcję, po prostu użyj następującej składni -

function_name () { 
   list of commands
}

Nazwa Twojej funkcji to function_name, i właśnie tego użyjesz, aby wywołać go z innego miejsca w swoich skryptach. Po nazwie funkcji należy umieścić nawiasy, a po nich listę poleceń w nawiasach.

Przykład

Poniższy przykład pokazuje użycie funkcji -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Po wykonaniu otrzymasz następujące dane wyjściowe -

$./test.sh
Hello World

Przekaż parametry do funkcji

Możesz zdefiniować funkcję, która będzie akceptować parametry podczas wywoływania funkcji. Te parametry byłyby reprezentowane przez$1, $2 i tak dalej.

Poniżej znajduje się przykład, w którym przekazujemy dwa parametry Zara i Ali, a następnie przechwytujemy i drukujemy te parametry w funkcji.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Po wykonaniu otrzymasz następujący wynik -

$./test.sh
Hello World Zara Ali

Zwracanie wartości z funkcji

Jeśli wykonasz plik exit polecenia z wnętrza funkcji, jego skutkiem jest nie tylko zakończenie wykonywania funkcji, ale także programu powłoki, który ją wywołał.

Jeśli zamiast tego chcesz po prostu zakończyć wykonywanie funkcji, istnieje sposób, aby wyjść ze zdefiniowanej funkcji.

W zależności od sytuacji możesz zwrócić dowolną wartość z funkcji za pomocą return polecenie, którego składnia jest następująca -

return code

Tutaj code może być cokolwiek tutaj wybierzesz, ale oczywiście powinieneś wybrać coś, co jest znaczące lub przydatne w kontekście twojego skryptu jako całości.

Przykład

Następująca funkcja zwraca wartość 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?

echo "Return value is $ret"

Po wykonaniu otrzymasz następujący wynik -

$./test.sh
Hello World Zara Ali
Return value is 10

Funkcje zagnieżdżone

Jedną z bardziej interesujących cech funkcji jest to, że mogą nazywać siebie i inne funkcje. Funkcja, która wywołuje samą siebie, jest znana jakorecursive function.

Poniższy przykład demonstruje zagnieżdżanie dwóch funkcji -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Po wykonaniu otrzymasz następujący wynik -

This is the first function speaking...
This is now the second function speaking...

Wywołanie funkcji z Prompt

Możesz umieścić definicje często używanych funkcji w swoim .profile. Te definicje będą dostępne po każdym zalogowaniu się i będzie można ich używać w wierszu polecenia.

Możesz też zgrupować definicje w pliku, powiedzmy test.sh, a następnie uruchom plik w bieżącej powłoce, wpisując -

$. test.sh

Powoduje to wywołanie funkcji zdefiniowanych wewnątrz test.sh do odczytania i zdefiniowania w bieżącej powłoce w następujący sposób -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Aby usunąć definicję funkcji z powłoki, użyj polecenia unset z rozszerzeniem .fopcja. To polecenie służy również do usuwania definicji zmiennej z powłoki.

$ unset -f function_name

Wszystkie polecenia systemu Unix zawierają szereg opcjonalnych i obowiązkowych opcji. Bardzo często zapomina się o pełnej składni tych poleceń.

Ponieważ nikt nie jest w stanie zapamiętać każdego polecenia systemu Unix i wszystkich jego opcji, mamy dostępną pomoc online, aby złagodzić ten problem od samego początku jego rozwoju.

Wersja systemu Unix Help files są nazywane man pages. Jeśli istnieje nazwa polecenia i nie jesteś pewien, jak go użyć, Man Pages pomoże Ci na każdym kroku.

Składnia

Oto proste polecenie, które pomaga uzyskać szczegółowe informacje o każdym poleceniu Uniksa podczas pracy z systemem -

$man command

Przykład

Załóżmy, że istnieje polecenie, które wymaga uzyskania pomocy; załóż, o czym chcesz wiedziećpwd następnie wystarczy użyć następującego polecenia -

$man pwd

Powyższe polecenie pomaga uzyskać pełne informacje na temat pwdKomenda. Wypróbuj sam w wierszu polecenia, aby uzyskać więcej szczegółów.

Możesz uzyskać szczegółowe informacje na temat man polecenie samo za pomocą następującego polecenia -

$man man

Sekcje strony man

Strony podręcznika są ogólnie podzielone na sekcje, które zazwyczaj różnią się w zależności od preferencji autora strony podręcznika. Poniższa tabela zawiera niektóre typowe sekcje -

Sr.No. Sekcja i opis
1

NAME

Nazwa polecenia

2

SYNOPSIS

Ogólne parametry użytkowe polecenia

3

DESCRIPTION

Opisuje, co robi polecenie

4

OPTIONS

Opisuje wszystkie argumenty lub opcje polecenia

5

SEE ALSO

Wyświetla inne polecenia, które są bezpośrednio związane z poleceniem na stronie podręcznika lub bardzo przypominają jego funkcjonalność

6

BUGS

Wyjaśnia wszelkie znane problemy lub błędy związane z poleceniem lub jego danymi wyjściowymi

7

EXAMPLES

Typowe przykłady użycia, które dają czytelnikowi wyobrażenie o tym, jak można użyć polecenia

8

AUTHORS

Autor strony podręcznika / polecenia

Podsumowując, strony podręcznika są ważnym zasobem i pierwszą drogą poszukiwań, gdy potrzebujesz informacji o poleceniach lub plikach w systemie Unix.

Przydatne polecenia powłoki

Poniższy odsyłacz zawiera listę najważniejszych i bardzo często używanych poleceń powłoki Unix.

Jeśli nie wiesz, jak użyć dowolnego polecenia, skorzystaj ze strony podręcznika, aby uzyskać szczegółowe informacje o poleceniu.

Oto lista powłoki Unix - przydatne polecenia

W tym rozdziale omówimy szczegółowo wyrażenia regularne z SED w systemie Unix.

Wyrażenie regularne to ciąg, którego można użyć do opisania kilku sekwencji znaków. Wyrażenia regularne są używane przez kilka różnych poleceń systemu Unix, w tymed, sed, awk, grepi w bardziej ograniczonym zakresie, vi.

Tutaj SED oznacza stream editor. Ten edytor strumieniowy został stworzony wyłącznie do wykonywania skryptów. W ten sposób wszystkie dane wejściowe, które do niego wprowadzasz, przechodzą i trafiają do STDOUT i nie zmienia pliku wejściowego.

Wzywając sed

Zanim zaczniemy, upewnijmy się, że mamy lokalną kopię pliku /etc/passwd plik tekstowy do pracy sed.

Jak wspomniano wcześniej, sed można wywołać, wysyłając do niego dane przez potok w następujący sposób -

$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression = script
...............................

Plik cat polecenie zrzuca zawartość /etc/passwd do sedprzez rurę do przestrzeni wzorcowej seda. Przestrzeń wzorców to wewnętrzny bufor roboczy, którego sed używa do swoich operacji.

Ogólna składnia seda

Poniżej znajduje się ogólna składnia sed -

/pattern/action

Tutaj, pattern jest wyrażeniem regularnym, a actionjest jednym z poleceń podanych w poniższej tabeli. Gdybypattern jest pominięty, action jest wykonywana dla każdej linii, jak widzieliśmy powyżej.

Ukośnik (/) otaczający wzór jest wymagany, ponieważ jest używany jako ograniczniki.

Sr.No. Zakres i opis
1

p

Drukuje linię

2

d

Usuwa linię

3

s/pattern1/pattern2/

Zastępuje pierwsze wystąpienie wzorca 1 wzorcem 2

Usuwanie wszystkich linii za pomocą sed

Teraz zrozumiemy, jak usunąć wszystkie linie za pomocą seda. Przywołaj ponownie seda; ale sed powinien teraz używać rozszerzeniaediting command delete line, oznaczony pojedynczą literą d -

$ cat /etc/passwd | sed 'd' $

Zamiast wywoływać seda przez wysłanie do niego pliku przez potok, sed można poinstruować, aby odczytał dane z pliku, jak w poniższym przykładzie.

Następujące polecenie działa dokładnie tak samo, jak w poprzednim przykładzie, bez polecenia cat -

$ sed -e 'd' /etc/passwd $

Sed Adresy

Sed obsługuje również adresy. Adresy to określone lokalizacje w pliku lub zakres, w którym należy zastosować określone polecenie edycji. Kiedy sed nie napotyka żadnych adresów, wykonuje swoje operacje na każdej linii w pliku.

Następujące polecenie dodaje podstawowy adres do polecenia sed, którego używasz -

$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

Zwróć uwagę, że liczba 1 jest dodawana przed delete editKomenda. Nakazuje sedowi wykonanie polecenia edycji w pierwszej linii pliku. W tym przykładzie sed usunie pierwszą linię/etc/password i wydrukuj pozostałą część pliku.

Zakresy adresów seda

Teraz zrozumiemy, jak pracować z the sed address ranges. A co jeśli chcesz usunąć więcej niż jedną linię z pliku? Możesz określić zakres adresów za pomocą seda w następujący sposób -

$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

Powyższe polecenie zostanie zastosowane do wszystkich linii zaczynających się od 1 do 5. Spowoduje to usunięcie pierwszych pięciu linii.

Wypróbuj następujące zakresy adresów -

Sr.No. Zakres i opis
1

'4,10d'

Linie zaczynające się od 4 th do 10 th są usuwane

2

'10,4d'

Tylko 10 th linia zostanie usunięty, ponieważ sed nie działa w odwrotnym kierunku

3

'4,+5d'

Dopasowuje wiersz 4 w pliku, usuwa ten wiersz, kontynuuje usuwanie kolejnych pięciu wierszy, a następnie zaprzestaje jego usuwania i drukuje resztę

4

'2,5!d'

To wszystko Usuwa z wyjątkiem począwszy od 2 ND do 5 th linii

5

'1~3d'

Spowoduje to usunięcie pierwszej linii, przejście przez następne trzy linie, a następnie usunięcie czwartej linii. Sed kontynuuje stosowanie tego wzorca do końca pliku.

6

'2~2d'

To każe sedowi usunąć drugą linię, przejść przez następną linię, usunąć następną linię i powtarzać aż do końca pliku

7

'4,10p'

Linie wychodząc z 4 TH do 10 p są drukowane

8

'4,d'

To generuje błąd składni

9

',10d'

Spowodowałoby to również błąd składni

Note - Podczas korzystania z p działania, powinieneś użyć -nopcja pozwalająca uniknąć powtórzeń drukowania linii. Sprawdź różnicę między następującymi dwoma poleceniami -

$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'

Komenda podstawienia

Polecenie podstawienia, oznaczone s, zastąpi dowolny określony ciąg dowolnym innym określonym przez Ciebie.

Aby zamienić jeden ciąg na inny, sed musi mieć informacje o tym, gdzie kończy się pierwszy łańcuch, a zaczyna zastępowany łańcuch. W tym celu kontynuujemy zapisywanie dwóch ciągów za pomocą ukośnika (/) postać.

Następujące polecenie zastępuje pierwsze wystąpienie w wierszu ciągu root ze sznurkiem amrood.

$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................

Bardzo ważne jest, aby pamiętać, że sed zastępuje tylko pierwsze wystąpienie w linii. Jeśli pierwiastek ciągu występuje więcej niż raz w wierszu, tylko pierwsze dopasowanie zostanie zastąpione.

Aby sed mógł wykonać globalne podstawienie, dodaj literę g do końca polecenia w następujący sposób -

$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................

Flagi zmiany

Istnieje wiele innych przydatnych flag, które można przekazać oprócz g flagę i możesz określić więcej niż jeden naraz.

Sr.No. Flaga i opis
1

g

Zastępuje wszystkie dopasowania, a nie tylko pierwsze dopasowanie

2

NUMBER

Zastępuje tylko NUMBER- te dopasowanie

3

p

Jeśli dokonano podstawienia, drukuje przestrzeń wzoru

4

w FILENAME

Jeśli dokonano podstawienia, zapisuje wynik do FILENAME

5

I or i

Dopasowuje bez rozróżniania wielkości liter

6

M or m

Oprócz normalnego zachowania znaków specjalnych wyrażeń regularnych ^ i $, this flag causes ^ to match the empty string after a newline and $ aby dopasować pusty ciąg przed nową linią

Korzystanie z alternatywnego separatora ciągów

Załóżmy, że musisz dokonać podstawienia w ciągu zawierającym ukośnik. W takim przypadku możesz określić inny separator, podając wyznaczony znak pos.

$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

W powyższym przykładzie użyliśmy : jako delimiter zamiast ukośnika / ponieważ próbowaliśmy wyszukiwać /root zamiast prostego roota.

Zastąpienie pustą przestrzenią

Użyj pustego ciągu podstawienia, aby usunąć ciąg główny z pliku /etc/passwd plik całkowicie -

$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

Zastępowanie adresu

Jeśli chcesz zastąpić ciąg sh ze sznurkiem quiet tylko w linii 10, możesz to określić następująco -

$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet

Podobnie, aby dokonać podstawienia zakresu adresów, możesz zrobić coś takiego:

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Jak widać na wyjściu, pierwsze pięć wierszy zawierało ciąg sh zmienić na quiet, ale reszta linii pozostała nietknięta.

Dopasowanie polecenia

Używałbyś p opcja wraz z -n opcja drukowania wszystkich pasujących wierszy w następujący sposób -

$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Używanie wyrażeń regularnych

Dopasowując wzorce, możesz użyć wyrażenia regularnego, które zapewnia większą elastyczność.

Sprawdź poniższy przykład, który pasuje do wszystkich linii zaczynających się od daemon, a następnie usuwa je -

$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Poniżej znajduje się przykład, który usuwa wszystkie wiersze kończące się na sh -

$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync

W poniższej tabeli wymieniono cztery znaki specjalne, które są bardzo przydatne w wyrażeniach regularnych.

Sr.No. Opis postaci
1

^

Odpowiada początkowi wierszy

2

$

Dopasowuje koniec wierszy

3

.

Dopasowuje dowolny pojedynczy znak

4

*

Dopasowuje zero lub więcej wystąpień poprzedniego znaku

5

[chars]

Odpowiada dowolnemu ze znaków podanych w chars, gdzie chars jest sekwencją znaków. Możesz użyć znaku -, aby wskazać zakres znaków.

Pasujące znaki

Spójrz na kilka innych wyrażeń, aby zademonstrować użycie metacharacters. Na przykład następujący wzór -

Sr.No. Wyrażenie i opis
1

/a.c/

Dopasowuje wiersze zawierające ciągi, takie jak a+c, a-c, abc, match, i a3c

2

/a*c/

Dopasowuje te same ciągi wraz z ciągami, takimi jak ace, yacc, i arctic

3

/[tT]he/

Pasuje do ciągu The i the

4

/^$/

Dopasowuje puste linie

5

/^.*$/

Dopasowuje całą linię, cokolwiek to jest

6

/ */

Odpowiada co najmniej jednej spacji

7

/^$/

mecze blank linie

Poniższa tabela przedstawia niektóre często używane zestawy znaków -

Sr.No. Ustaw i opis
1

[a-z]

Dopasowuje pojedynczą małą literę

2

[A-Z]

Dopasowuje pojedynczą wielką literę

3

[a-zA-Z]

Dopasowuje pojedynczą literę

4

[0-9]

Dopasowuje pojedynczą liczbę

5

[a-zA-Z0-9]

Dopasowuje pojedynczą literę lub cyfrę

Słowa kluczowe klas znaków

Niektóre specjalne słowa kluczowe są powszechnie dostępne dla regexps, zwłaszcza narzędzia GNU, które wykorzystują regexps. Są one bardzo przydatne w wyrażeniach regularnych sed, ponieważ upraszczają rzeczy i zwiększają czytelność.

Na przykład postacie a through z i postacie A through Z, stanowią jedną taką klasę znaków, która ma słowo kluczowe [[:alpha:]]

Używając słowa kluczowego klasy znaków alfabetu, to polecenie wyświetla tylko te wiersze w /etc/syslog.conf plik zaczynający się od litery alfabetu -

$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*                           /var/log/boot.log

Poniższa tabela zawiera pełną listę dostępnych słów kluczowych klas znaków w GNU sed.

Sr.No. Klasa postaci i opis
1

[[:alnum:]]

Alfanumeryczne [az AZ 0–9]

2

[[:alpha:]]

Alfabetycznie [az AZ]

3

[[:blank:]]

Puste znaki (spacje lub tabulatory)

4

[[:cntrl:]]

Znaki sterujące

5

[[:digit:]]

Liczby [0–9]

6

[[:graph:]]

Wszelkie widoczne znaki (z wyłączeniem białych znaków)

7

[[:lower:]]

Małe litery [az]

8

[[:print:]]

Znaki drukowalne (znaki inne niż sterujące)

9

[[:punct:]]

Znaki interpunkcyjne

10

[[:space:]]

Biała przestrzeń

11

[[:upper:]]

Wielkie litery [AZ]

12

[[:xdigit:]]

Cyfry szesnastkowe [0–9 af AF]

Aampersand Referencing

Plik sed metacharacter &reprezentuje zawartość wzorca, który został dopasowany. Załóżmy na przykład, że masz plik o nazwiephone.txt pełne numerów telefonów, na przykład następujące -

5555551212
5555551213
5555551214
6665551215
6665551216
7775551217

Chcesz, aby area code(pierwsze trzy cyfry) w nawiasach, aby ułatwić czytanie. Aby to zrobić, możesz użyć znaku zastępczego ampersand -

$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215

(666)5551216
(777)5551217

Tutaj w części wzoru dopasowujesz pierwsze 3 cyfry, a następnie używasz & zastępujesz te 3 cyfry otoczeniem parentheses.

Używanie wielu poleceń sed

Możesz użyć wielu poleceń seda w jednym poleceniu sed w następujący sposób -

$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

Tutaj command1 przez commandNsą poleceniami seda typu omówionego wcześniej. Te polecenia są stosowane do każdej linii na liście plików podanej przez pliki.

Korzystając z tego samego mechanizmu, możemy zapisać powyższy przykład numeru telefonu w następujący sposób -

$ sed -e 's/^[[:digit:]]\{3\}/(&)/g'  \ 
   -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt 
(555)555-1212 
(555)555-1213 
(555)555-1214 
(666)555-1215 
(666)555-1216 
(777)555-1217

Note - W powyższym przykładzie zamiast powtarzania słowa kluczowego klasy znaku [[:digit:]] trzy razy zastąpiliśmy go \{3\}, co oznacza, że ​​poprzednie wyrażenie regularne jest dopasowywane trzy razy. Użyliśmy również\ aby dać podział wiersza i to musi zostać usunięte przed wykonaniem polecenia.

Wstecz Referencje

Plik ampersand metacharacterjest przydatna, ale jeszcze bardziej przydatna jest możliwość definiowania określonych regionów w wyrażeniach regularnych. Te specjalne regiony mogą służyć jako odniesienie w ciągach zastępczych. Definiując określone części wyrażenia regularnego, można następnie odwołać się do tych części za pomocą specjalnego znaku odniesienia.

Do zrobienia back references, musisz najpierw zdefiniować region, a następnie odwołać się do tego regionu. Aby zdefiniować region, wstawbackslashed parentheseswokół każdego regionu zainteresowania. Następnie odwołuje się do pierwszego regionu otoczonego odwrotnymi ukośnikami\1, drugi region wg \2, i tak dalej.

Zarozumiały phone.txt ma następujący tekst -

(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

Wypróbuj następujące polecenie -

$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \ 
   code: \1 Second: \2 Third: \3/' 
Area code: (555) Second: 555- Third: 1212 
Area code: (555) Second: 555- Third: 1213 
Area code: (555) Second: 555- Third: 1214 
Area code: (666) Second: 555- Third: 1215 
Area code: (666) Second: 555- Third: 1216 
Area code: (777) Second: 555- Third: 1217

Note - W powyższym przykładzie do każdego wyrażenia regularnego w nawiasie będzie się odwoływać \1, \2i tak dalej. Użyliśmy\aby zrobić przerwanie linii tutaj. Należy to usunąć przed uruchomieniem polecenia.

System plików to logiczna kolekcja plików na partycji lub dysku. Partycja jest pojemnikiem na informacje i w razie potrzeby może obejmować cały dysk twardy.

Dysk twardy może mieć różne partycje, które zwykle zawierają tylko jeden system plików, na przykład jeden system plików zawierający rozszerzenie /file system lub inny zawierający /home file system.

Jeden system plików na partycję umożliwia logiczną konserwację i zarządzanie różnymi systemami plików.

Wszystko w systemie Unix jest uważane za plik, w tym urządzenia fizyczne, takie jak dyski DVD-ROM, urządzenia USB i stacje dyskietek.

Struktura katalogów

Unix używa hierarchicznej struktury systemu plików, podobnej do odwróconego drzewa, z korzeniem (/) u podstawy systemu plików i wszystkimi innymi katalogami, które się stamtąd rozprzestrzeniają.

Unixowy system plików to zbiór plików i katalogów, który ma następujące właściwości -

  • Ma katalog główny (/), który zawiera inne pliki i katalogi.

  • Każdy plik lub katalog jest jednoznacznie identyfikowany przez swoją nazwę, katalog, w którym się znajduje, oraz unikalny identyfikator, zwykle nazywany inode.

  • Zgodnie z konwencją katalog główny ma rozszerzenie inode Liczba 2 i lost+found katalog ma inode Liczba 3. Numery i-węzłów0 i 1nie są używane. Numery i-węzłów pliku można zobaczyć, określając rozszerzenie-i option do ls command.

  • Jest samowystarczalny. Nie ma zależności między jednym systemem plików a innym.

Katalogi mają określone przeznaczenie i zazwyczaj zawierają te same typy informacji, które ułatwiają znajdowanie plików. Poniżej znajdują się katalogi, które istnieją w głównych wersjach Uniksa -

Sr.No. Katalog i opis
1

/

To jest katalog główny, który powinien zawierać tylko katalogi potrzebne na najwyższym poziomie struktury plików

2

/bin

Tutaj znajdują się pliki wykonywalne. Te pliki są dostępne dla wszystkich użytkowników

3

/dev

To są sterowniki urządzeń

4

/etc

Polecenia katalogu nadzorcy, pliki konfiguracyjne, pliki konfiguracyjne dysków, ważne listy użytkowników, grupy, sieć Ethernet, hosty, do których należy wysyłać krytyczne wiadomości

5

/lib

Zawiera pliki bibliotek współdzielonych i czasami inne pliki związane z jądrem

6

/boot

Zawiera pliki do uruchamiania systemu

7

/home

Zawiera katalog domowy dla użytkowników i innych kont

8

/mnt

Służy do montowania innych tymczasowych systemów plików, takich jak cdrom i floppy dla CD-ROM napęd i floppy diskette driveodpowiednio

9

/proc

Zawiera wszystkie procesy oznaczone jako plik przez process number lub inne informacje, które są dynamiczne w systemie

10

/tmp

Przechowuje pliki tymczasowe używane między uruchomieniami systemu

11

/usr

Używany do różnych celów i może być używany przez wielu użytkowników. Obejmuje polecenia administracyjne, udostępnione pliki, pliki bibliotek i inne

12

/var

Zwykle zawiera pliki o zmiennej długości, takie jak pliki dziennika i wydruków oraz inne typy plików, które mogą zawierać zmienną ilość danych

13

/sbin

Zawiera pliki binarne (wykonywalne), zwykle do administrowania systemem. Na przykład,fdisk i ifconfig narzędzia

14

/kernel

Zawiera pliki jądra

Poruszanie się po systemie plików

Teraz, gdy znasz już podstawy systemu plików, możesz rozpocząć nawigację do potrzebnych plików. Do nawigacji w systemie służą następujące polecenia -

Sr.No. Polecenie i opis
1

cat filename

Wyświetla nazwę pliku

2

cd dirname

Przenosi Cię do wskazanego katalogu

3

cp file1 file2

Kopiuje jeden plik / katalog do określonej lokalizacji

4

file filename

Identyfikuje typ pliku (binarny, tekstowy itp.)

5

find filename dir

Znajduje plik / katalog

6

head filename

Pokazuje początek pliku

7

less filename

Przegląda plik od końca lub początku

8

ls dirname

Wyświetla zawartość określonego katalogu

9

mkdir dirname

Tworzy określony katalog

10

more filename

Przegląda plik od początku do końca

11

mv file1 file2

Przenosi lokalizację pliku / katalogu lub zmienia jego nazwę

12

pwd

Pokazuje bieżący katalog, w którym znajduje się użytkownik

13

rm filename

Usuwa plik

14

rmdir dirname

Usuwa katalog

15

tail filename

Pokazuje koniec pliku

16

touch filename

Tworzy pusty plik lub modyfikuje istniejący plik lub jego atrybuty

17

whereis filename

Pokazuje lokalizację pliku

18

which filename

Pokazuje lokalizację pliku, jeśli znajduje się on w Twojej PATH

Możesz skorzystać z pomocy Manpage, aby sprawdzić pełną składnię każdego polecenia wymienionego tutaj.

Polecenie df

Pierwszym sposobem zarządzania przestrzenią partycji jest rozszerzenie df (disk free)Komenda. Komendadf -k (disk free) wyświetla disk space usage in kilobytes, jak pokazano poniżej -

$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $

Niektóre katalogi, takie jak /devices, pokazuje 0 w kilobajtach, używane i dostępne kolumny oraz 0% pojemności. Są to specjalne (lub wirtualne) systemy plików i chociaż znajdują się na dysku pod /, same nie zajmują miejsca na dysku.

Plik df -kdane wyjściowe są generalnie takie same we wszystkich systemach uniksowych. Oto, co zwykle obejmuje -

Sr.No. Kolumna i opis
1

Filesystem

Nazwa fizycznego systemu plików

2

kbytes

Całkowita liczba kilobajtów wolnego miejsca na nośniku danych

3

used

Łączne kilobajty zajmowanego miejsca (według plików)

4

avail

Całkowita liczba kilobajtów dostępnych do użycia

5

capacity

Procent całkowitego miejsca zajmowanego przez pliki

6

Mounted on

Na jakim systemie plików jest zamontowany

Możesz użyć -h (human readable) option aby wyświetlić wynik w formacie, który pokazuje rozmiar w łatwiejszej do zrozumienia notacji.

Du Command

Plik du (disk usage) command umożliwia określenie katalogów, aby pokazać wykorzystanie miejsca na dysku w określonym katalogu.

To polecenie jest przydatne, jeśli chcesz określić, ile miejsca zajmuje dany katalog. Następujące polecenie wyświetla liczbę bloków używanych przez każdy katalog. Pojedynczy blok może zająć 512 bajtów lub 1 kilobajt, w zależności od systemu.

$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $

Plik -h opcja sprawia, że ​​wyjście jest łatwiejsze do zrozumienia -

$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $

Montowanie systemu plików

System plików musi być podłączony, aby był używany przez system. Aby zobaczyć, co jest aktualnie zamontowane (dostępne do użytku) w systemie, użyj następującego polecenia -

$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $

Plik /mntkatalog, zgodnie z konwencją systemu Unix, to miejsce, w którym znajdują się tymczasowe montowania (takie jak napędy CD-ROM, zdalne dyski sieciowe i dyskietki). Jeśli chcesz zamontować system plików, możesz użyć polecenia mount z następującą składnią -

mount -t file_system_type device_to_mount directory_to_mount_to

Na przykład, jeśli chcesz zamontować plik CD-ROM do katalogu /mnt/cdrommożesz wpisać -

$ mount -t iso9660 /dev/cdrom /mnt/cdrom

Zakłada się, że nazwa twojego urządzenia CD-ROM /dev/cdrom i że chcesz go zamontować /mnt/cdrom. Zobacz stronę podręcznika mount, aby uzyskać bardziej szczegółowe informacje lub wpisać typ mount-h w wierszu poleceń, aby uzyskać informacje pomocy.

Po zamontowaniu możesz użyć polecenia cd, aby przejść do nowo dostępnego systemu plików przez właśnie utworzony punkt podłączenia.

Odmontowywanie systemu plików

Aby odmontować (usunąć) system plików z systemu, użyj rozszerzenia umount polecenie, identyfikując punkt podłączenia lub urządzenie.

Na przykład, to unmount cdromużyj następującego polecenia -

$ umount /dev/cdrom

Plik mount command umożliwia dostęp do systemów plików, ale w większości nowoczesnych systemów uniksowych rozszerzenie automount function czyni ten proces niewidocznym dla użytkownika i nie wymaga interwencji.

Przydziały użytkowników i grup

Przydziały dla użytkowników i grup zapewniają mechanizmy, dzięki którym ilość miejsca używanego przez pojedynczego użytkownika lub wszystkich użytkowników w określonej grupie można ograniczyć do wartości określonej przez administratora.

Przydziały działają wokół dwóch limitów, które pozwalają użytkownikowi podjąć pewne działania, jeśli ilość miejsca lub liczba bloków dysku zacznie przekraczać limity zdefiniowane przez administratora -

  • Soft Limit - Jeśli użytkownik przekroczy zdefiniowany limit, obowiązuje okres karencji, który pozwala mu zwolnić trochę miejsca.

  • Hard Limit - Po osiągnięciu twardego limitu, niezależnie od okresu karencji, nie można przydzielać dalszych plików ani bloków.

Istnieje wiele poleceń służących do zarządzania limitami -

Sr.No. Polecenie i opis
1

quota

Wyświetla użycie dysku i limity dla użytkownika grupy

2

edquota

To jest edytor kwot. Przydział użytkowników lub grup można edytować za pomocą tego polecenia

3

quotacheck

Skanuje system plików pod kątem użycia dysku, tworzy, sprawdza i naprawia pliki kwot

4

setquota

To jest edytor limitów wiersza poleceń

5

quotaon

Powoduje to poinformowanie systemu, że przydziały dysku powinny być włączone na jednym lub wielu systemach plików

6

quotaoff

To informuje system, że przydziały dysku powinny być wyłączone dla jednego lub większej liczby systemów plików

7

repquota

Spowoduje to wydrukowanie podsumowania wykorzystania dysku i limitów dla określonych systemów plików

Możesz skorzystać z pomocy Manpage, aby sprawdzić pełną składnię każdego polecenia wymienionego tutaj.

W tym rozdziale omówimy szczegółowo administrowanie użytkownikami w systemie Unix.

Istnieją trzy typy kont w systemie Unix -

Konto główne

Nazywa się to również superuseri miałby pełną i nieskrępowaną kontrolę nad systemem. Superużytkownik może wykonywać dowolne polecenia bez żadnych ograniczeń. Tego użytkownika należy traktować jako administratora systemu.

Konta systemowe

Konta systemowe to konta potrzebne do działania składników specyficznych dla systemu, na przykład kont pocztowych i sshdrachunki. Konta te są zwykle potrzebne do wykonywania określonych funkcji w systemie, a wszelkie ich modyfikacje mogą niekorzystnie wpłynąć na system.

Konta użytkowników

Konta użytkowników zapewniają interaktywny dostęp do systemu dla użytkowników i grup użytkowników. Zwykli użytkownicy są zwykle przypisani do tych kont i zwykle mają ograniczony dostęp do krytycznych plików systemowych i katalogów.

Unix obsługuje koncepcję Konta Grupowego, które logicznie grupuje kilka kont. Każde konto byłoby częścią innego konta grupowego. Grupa uniksowa odgrywa ważną rolę w obsłudze uprawnień do plików i zarządzaniu procesami.

Zarządzanie użytkownikami i grupami

Istnieją cztery główne pliki administracyjne użytkowników -

  • /etc/passwd- Zachowuje informacje o koncie użytkownika i haśle. Ten plik zawiera większość informacji o kontach w systemie Unix.

  • /etc/shadow- Przechowuje zaszyfrowane hasło do odpowiedniego konta. Nie wszystkie systemy obsługują ten plik.

  • /etc/group - Ten plik zawiera informacje o grupie dla każdego konta.

  • /etc/gshadow - Ten plik zawiera informacje o bezpiecznym koncie grupowym.

Sprawdź wszystkie powyższe pliki za pomocą rozszerzenia cat Komenda.

Poniższa tabela zawiera listę poleceń, które są dostępne w większości systemów uniksowych do tworzenia kont i grup oraz zarządzania nimi -

Sr.No. Polecenie i opis
1

useradd

Dodaje konta do systemu

2

usermod

Modyfikuje atrybuty konta

3

userdel

Usuwa konta z systemu

4

groupadd

Dodaje grupy do systemu

5

groupmod

Modyfikuje atrybuty grupy

6

groupdel

Usuwa grupy z systemu

Możesz skorzystać z pomocy Manpage, aby sprawdzić pełną składnię każdego polecenia wymienionego tutaj.

Tworzyć grupę

Teraz zrozumiemy, jak utworzyć grupę. W tym celu musimy utworzyć grupy przed utworzeniem jakiegokolwiek konta, w przeciwnym razie możemy skorzystać z istniejących grup w naszym systemie. Mamy wszystkie grupy wymienione w/etc/groups plik.

Wszystkie domyślne grupy są grupami specyficznymi dla konta systemowego i nie jest zalecane używanie ich do zwykłych kont. Oto składnia tworzenia nowego konta grupowego -

groupadd [-g gid [-o]] [-r] [-f] groupname

W poniższej tabeli wymieniono parametry -

Sr.No. Opcja i opis
1

-g GID

Wartość liczbowa identyfikatora grupy

2

-o

Ta opcja pozwala na dodanie grupy z nieunikalnym GID

3

-r

Ta flaga instruuje groupadd aby dodać konto systemowe

4

-f

Ta opcja powoduje po prostu wyjście ze statusem sukcesu, jeśli podana grupa już istnieje. Z -g, jeśli określony GID już istnieje, wybierany jest inny (unikalny) GID

5

groupname

Rzeczywista nazwa grupy do utworzenia

Jeśli nie określisz żadnego parametru, system użyje wartości domyślnych.

Poniższy przykład tworzy grupę programistów z wartościami domyślnymi, co jest bardzo akceptowalne dla większości administratorów.

$ groupadd developers

Zmodyfikuj grupę

Aby zmodyfikować grupę, użyj groupmod składnia -

$ groupmod -n new_modified_group_name old_group_name

Aby zmienić nazwę grupy developers_2 na developer, wpisz -

$ groupmod -n developer developer_2

Oto, jak zmienisz finansowy GID na 545 -

$ groupmod -g 545 developer

Usuń grupę

Teraz zrozumiemy, jak usunąć grupę. Aby usunąć istniejącą grupę, potrzebujesz tylkogroupdel command i group name. Aby usunąć grupę finansową, polecenie brzmi -

$ groupdel developer

Spowoduje to usunięcie tylko grupy, a nie plików skojarzonych z tą grupą. Pliki są nadal dostępne dla ich właścicieli.

Utwórz konto

Zobaczmy, jak utworzyć nowe konto w systemie Unix. Poniżej znajduje się składnia tworzenia konta użytkownika -

useradd -d homedir -g groupname -m -s shell -u userid accountname

W poniższej tabeli wymieniono parametry -

Sr.No. Opcja i opis
1

-d homedir

Określa katalog osobisty konta

2

-g groupname

Określa konto grupowe dla tego konta

3

-m

Tworzy katalog domowy, jeśli nie istnieje

4

-s shell

Określa domyślną powłokę dla tego konta

5

-u userid

Możesz określić identyfikator użytkownika dla tego konta

6

accountname

Rzeczywista nazwa konta, które ma zostać utworzone

Jeśli nie określisz żadnego parametru, system użyje wartości domyślnych. Plikuseradd polecenie modyfikuje plik /etc/passwd, /etc/shadow, i /etc/group pliki i tworzy katalog domowy.

Poniżej znajduje się przykład tworzenia konta mcmohd, ustawiając swój katalog domowy na /home/mcmohd a grupa jako developers. Ten użytkownik miałby przypisaną Korn Shell.

$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd

Przed wydaniem powyższego polecenia upewnij się, że masz już grupę programistów utworzoną przy użyciu rozszerzeniagroupadd Komenda.

Po utworzeniu konta możesz ustawić jego hasło za pomocą passwd polecenie w następujący sposób -

$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Kiedy piszesz passwd accountname, daje możliwość zmiany hasła, pod warunkiem, że jesteś superużytkownikiem. W przeciwnym razie możesz zmienić tylko hasło za pomocą tego samego polecenia, ale bez określania nazwy konta.

Zmodyfikuj konto

Plik usermodpolecenie umożliwia wprowadzanie zmian na istniejącym koncie z poziomu wiersza poleceń. Używa tych samych argumentów couseradd polecenie oraz argument -l, który umożliwia zmianę nazwy konta.

Na przykład, aby zmienić nazwę konta mcmohd do mcmohd20 i aby odpowiednio zmienić katalog domowy, będziesz musiał wydać następujące polecenie -

$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20

Usuń konto

Plik userdelmożna użyć polecenia do usunięcia istniejącego użytkownika. Jest to bardzo niebezpieczne polecenie, jeśli nie jest używane ostrożnie.

Dla polecenia dostępny jest tylko jeden argument lub opcja .r, do usuwania katalogu domowego konta i pliku poczty.

Na przykład, aby usunąć konto mcmohd20 , wydaj następujące polecenie -

$ userdel -r mcmohd20

Jeśli chcesz zachować katalog osobisty do celów tworzenia kopii zapasowych, pomiń rozszerzenie -ropcja. W razie potrzeby możesz później usunąć katalog domowy.

W tym rozdziale omówimy szczegółowo wydajność systemu w Uniksie.

Przedstawimy Ci kilka bezpłatnych narzędzi, które są dostępne do monitorowania i zarządzania wydajnością w systemach Unix. Narzędzia te zapewniają również wskazówki dotyczące diagnozowania i rozwiązywania problemów z wydajnością w środowisku Unix.

Unix ma następujące główne typy zasobów, które muszą być monitorowane i dostrajane -

  • CPU

  • Memory

  • Disk space

  • Communications lines

  • I/O Time

  • Network Time

  • Applications programs

Komponenty wydajności

W poniższej tabeli wymieniono pięć głównych komponentów, które zajmują czas systemu -

Sr.No. Opis podzespołu
1

User State CPU

Rzeczywista ilość czasu, jaką procesor spędza na uruchamianiu programu użytkownika w stanie użytkownika. Obejmuje czas spędzony na wykonywaniu wywołań biblioteki, ale nie obejmuje czasu spędzonego w jądrze w jej imieniu

2

System State CPU

Jest to ilość czasu, jaką procesor spędza w stanie systemu w imieniu tego programu. WszystkoI/O routineswymagają usług jądra. Programista może wpływać na tę wartość, blokując transfery we / wy

3

I/O Time and Network Time

Jest to ilość czasu spędzona na przenoszeniu danych i obsłudze żądań we / wy

4

Virtual Memory Performance

Obejmuje to przełączanie kontekstów i zamianę

5

Application Program

Czas spędzony na uruchamianiu innych programów - gdy system nie obsługuje tej aplikacji, ponieważ inna aplikacja ma aktualnie procesor

Narzędzia wydajności

Unix zapewnia następujące ważne narzędzia do pomiaru i dostrajania wydajności systemu Unix -

Sr.No. Polecenie i opis
1

nice/renice

Uruchamia program ze zmodyfikowanym priorytetem planowania

2

netstat

Wyświetla połączenia sieciowe, tablice routingu, statystyki interfejsów, połączenia maskujące i członkostwa w multiemisji

3

time

Pomaga określić czas wykonania prostego polecenia lub określić wykorzystanie zasobów

4

uptime

To jest średnie obciążenie systemu

5

ps

Raportuje migawkę bieżących procesów

6

vmstat

Raportuje statystyki pamięci wirtualnej

7

gprof

Wyświetla dane profilu wykresu połączeń

8

prof

Ułatwia profilowanie procesów

9

top

Wyświetla zadania systemowe

Możesz skorzystać z pomocy Manpage, aby sprawdzić pełną składnię każdego polecenia wymienionego tutaj.

W tym rozdziale omówimy szczegółowo logowanie systemowe w systemie Unix.

Systemy uniksowe mają bardzo elastyczny i potężny system rejestrowania, który umożliwia rejestrowanie prawie wszystkiego, co możesz sobie wyobrazić, a następnie manipulowanie dziennikami w celu uzyskania potrzebnych informacji.

Wiele wersji systemu Unix udostępnia narzędzie do logowania ogólnego przeznaczenia o nazwie syslog. Poszczególne programy, które wymagają logowania informacji, przesyłają je do syslog.

Unix syslog jest konfigurowalnym przez hosta, jednolitym narzędziem do rejestrowania systemu. System wykorzystuje scentralizowany proces rejestrowania systemu, który uruchamia program/etc/syslogd lub /etc/syslog.

Obsługa rejestratora systemowego jest dość prosta. Programy wysyłają swoje wpisy dziennika do syslogd , który sprawdza plik konfiguracyjny/etc/syslogd.conf lub /etc/syslog a po znalezieniu dopasowania zapisuje komunikat dziennika do żądanego pliku dziennika.

Istnieją cztery podstawowe terminy syslog, które należy zrozumieć -

Sr.No. Termin i opis
1

Facility

Identyfikator używany do opisu aplikacji lub procesu, który przesłał komunikat dziennika. Na przykład poczta, jądro i ftp.

2

Priority

Wskaźnik ważności wiadomości. Poziomy są definiowane w syslog jako wytyczne, od informacji debugowania po krytyczne zdarzenia.

3

Selector

Połączenie jednego lub więcej obiektów i poziomów. Gdy nadchodzące zdarzenie pasuje do selektora, wykonywana jest akcja.

4

Action

Co dzieje się z wiadomością przychodzącą, która pasuje do selektora - akcje mogą zapisywać wiadomość w pliku dziennika, wysyłać jej echo do konsoli lub innego urządzenia, zapisywać wiadomość do zalogowanego użytkownika lub wysyłać ją do innego serwera syslog.

Funkcje Syslog

Teraz zrozumiemy funkcje syslog. Oto dostępne udogodnienia dla selektora. Nie wszystkie udogodnienia są dostępne we wszystkich wersjach systemu Unix.

Obiekt Opis
1

auth

Aktywność związana z żądaniem nazwy i hasła (getty, su, login)

2

authpriv

To samo, co auth, ale jest logowane do pliku, który może odczytać tylko wybrani użytkownicy

3

console

Służy do przechwytywania wiadomości, które są zazwyczaj kierowane do konsoli systemowej

4

cron

Wiadomości z programu planującego cron

5

daemon

Demon systemowy catch-all

6

ftp

Komunikaty dotyczące demona ftp

7

kern

Wiadomości jądra

8

local0.local7

Lokalne obiekty zdefiniowane dla lokalizacji

9

lpr

Wiadomości z systemu druku liniowego

10

mail

Wiadomości dotyczące systemu pocztowego

11

mark

Pseudo-zdarzenie używane do generowania sygnatur czasowych w plikach dziennika

12

news

Wiadomości związane z protokołem sieciowym (nntp)

13

ntp

Komunikaty dotyczące sieciowego protokołu czasu

14

user

Regularne procesy użytkownika

15

uucp

Podsystem UUCP

Priorytety Syslog

Priorytety syslog podsumowano w poniższej tabeli -

Sr.No. Priorytet i opis
1

emerg

Stan awaryjny, taki jak nieuchronna awaria systemu, jest zwykle transmitowany do wszystkich użytkowników

2

alert

Stan, który powinien zostać natychmiast naprawiony, np. Uszkodzona systemowa baza danych

3

crit

Stan krytyczny, na przykład błąd sprzętu

4

err

Zwykły błąd

5

Warning

Ostrzeżenie

6

notice

Stan, który nie jest błędem, ale powinien być traktowany w specjalny sposób

7

info

Wiadomość informacyjna

8

debug

Komunikaty używane podczas debugowania programów

9

none

Pseudo poziom używany do określenia, aby nie rejestrować komunikatów

Połączenie udogodnień i poziomów umożliwia rozeznanie, co jest rejestrowane i dokąd trafiają te informacje.

Ponieważ każdy program sumiennie wysyła swoje komunikaty do rejestratora systemowego, rejestrator podejmuje decyzje o tym, co śledzić, a co odrzucić, na podstawie poziomów zdefiniowanych w selektorze.

Po określeniu poziomu system będzie śledził wszystko na tym poziomie i wyższym.

Plik /etc/syslog.conf

Plik /etc/syslog.confkontrolki plików, gdzie zapisywane są komunikaty. Typowysyslog.conf plik może wyglądać następująco -

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @prep.ai.mit.edu
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

Każdy wiersz pliku zawiera dwie części -

  • ZA message selectorktóry określa, jakiego rodzaju komunikaty mają być rejestrowane. Na przykład wszystkie komunikaty o błędach lub wszystkie komunikaty o debugowaniu z jądra.

  • Na action fieldto mówi, co należy zrobić z przesłaniem. Na przykład umieść go w pliku lub wyślij wiadomość do terminala użytkownika.

Poniżej przedstawiono godne uwagi punkty dotyczące powyższej konfiguracji -

  • Selektory wiadomości składają się z dwóch części: a facility i a priority. Na przykład kern.debug wybiera wszystkie komunikaty debugowania (priorytet) generowane przez jądro (narzędzie).

  • Selektor wiadomości kern.debug wybiera wszystkie priorytety, które są większe niż debug.

  • Gwiazdka w miejscu obiektu lub priorytetu oznacza „wszystkie”. Na przykład,*.debug oznacza wszystkie komunikaty debugowania, podczas gdy kern.* oznacza wszystkie komunikaty generowane przez jądro.

  • Możesz również użyć przecinków, aby określić wiele obiektów. Dwa lub więcej selektorów można zgrupować razem za pomocą średnika.

Rejestrowanie działań

Pole akcji określa jedno z pięciu działań -

  • Zapisz komunikat do pliku lub urządzenia. Na przykład,/var/log/lpr.log lub /dev/console.

  • Wyślij wiadomość do użytkownika. Możesz określić wiele nazw użytkowników, oddzielając je przecinkami; na przykład korzeń, amrood.

  • Wyślij wiadomość do wszystkich użytkowników. W tym przypadku pole akcji składa się z gwiazdki; na przykład, *.

  • Prześlij wiadomość do programu. W tym przypadku program jest określany po symbolu potoku uniksowego (|).

  • Wyślij wiadomość do syslog na innym hoście. W tym przypadku pole akcji składa się z nazwy hosta poprzedzonej znakiem „małpa”; na przykład @ tutorialspoint.com.

Polecenie rejestratora

Unix zapewnia loggerpolecenie, które jest niezwykle użytecznym poleceniem do obsługi logowania systemu. Pliklogger polecenie wysyła komunikaty logowania do demona syslogd iw konsekwencji prowokuje logowanie systemu.

Oznacza to, że możemy w dowolnym momencie sprawdzić z wiersza poleceń plik syslogddemon i jego konfiguracja. Polecenie logger zapewnia metodę dodawania jednowierszowych wpisów do pliku dziennika systemowego z wiersza poleceń.

Format polecenia to -

logger [-i] [-f file] [-p priority] [-t tag] [message]...

Oto szczegóły parametrów -

Sr.No. Opcja i opis
1

-f filename

Używa zawartości pliku nazwa_pliku jako komunikatu do logowania.

2

-i

Rejestruje identyfikator procesu procesu rejestrującego w każdym wierszu.

3

-p priority

Wprowadza wiadomość z określonym priorytetem (określony wpis selektora); priorytet wiadomości można określić numerycznie lub jako para ułatwienie. priorytet. Domyślnym priorytetem jest user.notice.

4

-t tag

Oznacza każdy wiersz dodany do dziennika określonym znacznikiem.

5

message

Argumenty w postaci ciągów, których zawartość jest łączona razem w określonej kolejności, oddzielone spacją.

Możesz skorzystać z pomocy Manpage, aby sprawdzić pełną składnię tego polecenia.

Obrót dziennika

Pliki dziennika mają tendencję do bardzo szybkiego wzrostu i zajmują duże ilości miejsca na dysku. Aby włączyć rotację dzienników, większość dystrybucji używa narzędzi, takich jaknewsyslog lub logrotate.

Narzędzia te należy wywoływać w częstych odstępach czasu przy użyciu rozszerzenia cron daemon. Sprawdź strony man dla newsyslog lub logrotate, aby uzyskać więcej informacji.

Ważne lokalizacje dziennika

Wszystkie aplikacje systemowe tworzą swoje pliki dziennika w formacie /var/logi jego podkatalogi. Oto kilka ważnych aplikacji i odpowiadających im katalogów dziennika -

Podanie Informator
httpd / var / log / httpd
samba / var / log / samba
cron / var / log /
Poczta / var / log /
mysql / var / log /

W tym rozdziale omówimy szczegółowo sygnały i pułapki w systemie Unix.

Sygnały to przerwania programowe wysyłane do programu w celu wskazania, że ​​wystąpiło ważne zdarzenie. Zdarzenia mogą się różnić, od żądań użytkowników po nielegalne błędy dostępu do pamięci. Niektóre sygnały, takie jak sygnał przerwania, wskazują, że użytkownik poprosił program o zrobienie czegoś, co nie znajduje się w zwykłym przepływie sterowania.

Poniższa tabela zawiera listę typowych sygnałów, które możesz napotkać i których chcesz użyć w swoich programach -

Nazwa sygnału Numer sygnału Opis
SIGHUP 1 Wykryto zawieszenie się na kontrolującym terminalu lub śmierć procesu kontrolującego
SIGINT 2 Wydawane, jeśli użytkownik wyśle ​​sygnał przerwania (Ctrl + C)
SIGQUIT 3 Wydawane, jeśli użytkownik wyśle ​​sygnał wyjścia (Ctrl + D)
SIGFPE 8 Wydawany w przypadku próby wykonania niedozwolonej operacji matematycznej
SIGKILL 9 Jeśli proces otrzyma ten sygnał, musi natychmiast zakończyć pracę i nie będzie wykonywać żadnych operacji czyszczenia
SIGALRM 14 Sygnał budzika (używany do timerów)
SIGTERM 15 Sygnał zakończenia oprogramowania (domyślnie wysyłany jako kill)

Lista sygnałów

Istnieje łatwy sposób na spisanie wszystkich sygnałów obsługiwanych przez Twój system. Po prostu wyślijkill -l polecenie i wyświetli wszystkie obsługiwane sygnały -

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Rzeczywista lista sygnałów różni się w systemach Solaris, HP-UX i Linux.

Akcje domyślne

Każdy sygnał ma przypisaną domyślną akcję. Domyślną akcją dla sygnału jest akcja wykonywana przez skrypt lub program po otrzymaniu sygnału.

Niektóre z możliwych akcji domyślnych to -

  • Zakończ proces.

  • Zignoruj ​​sygnał.

  • Zrzuć rdzeń. Tworzy to plik o nazwiecore zawierający obraz pamięci procesu w momencie otrzymania sygnału.

  • Zatrzymaj proces.

  • Kontynuuj zatrzymany proces.

Wysyłanie sygnałów

Istnieje kilka metod dostarczania sygnałów do programu lub skryptu. Jednym z najczęstszych jest wpisywanie przez użytkownikaCONTROL-C albo INTERRUPT key podczas wykonywania skryptu.

Po naciśnięciu Ctrl+C klucz, a SIGINT jest wysyłany do skryptu i zgodnie z definicją domyślną skrypt akcji kończy działanie.

Inną popularną metodą dostarczania sygnałów jest użycie kill command, którego składnia jest następująca -

$ kill -signal pid

Tutaj signal jest numerem lub nazwą dostarczanego sygnału i pidto identyfikator procesu, do którego ma być wysłany sygnał. Na przykład -

$ kill -1 1001

Powyższe polecenie wysyła sygnał HUP lub sygnał rozłączenia do programu, który jest uruchomiony z process ID 1001. Aby wysłać sygnał zabicia do tego samego procesu, użyj następującego polecenia -

$ kill -9 1001

To zabija proces działający z process ID 1001.

Sygnały zalewkowania

Po naciśnięciu klawisza Ctrl + C lub Break na terminalu podczas wykonywania programu powłoki, zwykle ten program jest natychmiast przerywany, a wiersz polecenia powraca. Nie zawsze jest to pożądane. Na przykład możesz zostawić kilka plików tymczasowych, które nie zostaną wyczyszczone.

Przechwytywanie tych sygnałów jest dość łatwe, a polecenie pułapki ma następującą składnię -

$ trap commands signals

Tutaj polecenie może być dowolną poprawną komendą systemu Unix lub nawet funkcją zdefiniowaną przez użytkownika, a sygnał może być listą dowolnej liczby sygnałów, które chcesz przechwycić.

Są dwa typowe zastosowania pułapki w skryptach powłoki -

  • Wyczyść pliki tymczasowe
  • Ignoruj ​​sygnały

Czyszczenie plików tymczasowych

Jako przykład polecenia trap, poniżej pokazano, jak możesz usunąć niektóre pliki, a następnie wyjść, jeśli ktoś spróbuje przerwać program z terminala -

$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

Z punktu w programie powłoki, w którym jest wykonywana ta pułapka, dwa pliki work1$$ i dataout$$ zostanie automatycznie usunięty, jeśli program odbierze sygnał numer 2.

Dlatego też, jeśli użytkownik przerwie wykonywanie programu po wykonaniu tej pułapki, można być pewnym, że te dwa pliki zostaną wyczyszczone. Plikexit polecenie następujące po rm jest konieczne, ponieważ bez tego wykonanie byłoby kontynuowane w programie w punkcie, w którym zostało przerwane, gdy sygnał został odebrany.

Sygnał numer 1 jest generowany dla hangup. Albo ktoś celowo rozłącza linię, albo linia zostaje przypadkowo rozłączona.

Możesz zmodyfikować poprzednią pułapkę, aby w tym przypadku również usunąć dwa określone pliki, dodając sygnał numer 1 do listy sygnałów -

$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

Teraz te pliki zostaną usunięte, jeśli linia zostanie zawieszona lub jeśli zostanie naciśnięty klawisz Ctrl + C.

Polecenia określone do trap muszą być ujęte w cudzysłowy, jeśli zawierają więcej niż jedno polecenie. Zwróć również uwagę, że powłoka skanuje wiersz poleceń w momencie wykonania polecenia trap, a także po odebraniu jednego z wymienionych sygnałów.

Tak więc w poprzednim przykładzie wartość WORKDIR i $$zostaną podstawione w momencie wykonania polecenia trap. Jeśli chcesz, aby to podstawienie nastąpiło w momencie odebrania sygnału 1 lub 2, możesz umieścić polecenia w pojedynczych cudzysłowach -

$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

Ignorowanie sygnałów

Jeśli polecenie podane dla trap ma wartość null, określony sygnał zostanie zignorowany po odebraniu. Na przykład polecenie -

$ trap '' 2

Określa to, że sygnał przerwania ma być ignorowany. Możesz chcieć zignorować określone sygnały podczas wykonywania operacji, której nie chcesz przerywać. Możesz określić wiele sygnałów, które mają być ignorowane w następujący sposób -

$ trap '' 1 2 3 15

Zauważ, że pierwszy argument musi być określony, aby sygnał był ignorowany i nie jest równoznaczny z zapisaniem następującego, które ma własne znaczenie -

$ trap  2

Jeśli zignorujesz sygnał, wszystkie podpowłoki również ignorują ten sygnał. Jeśli jednak określisz akcję, która ma zostać podjęta po odebraniu sygnału, wszystkie podpowłoki nadal będą podejmować domyślne działania po odebraniu tego sygnału.

Resetowanie pułapek

Po zmianie domyślnej akcji, która ma być podjęta po otrzymaniu sygnału, możesz zmienić ją ponownie za pomocą pułapki, jeśli po prostu pominiesz pierwszy argument; więc -

$ trap 1 2

Spowoduje to zresetowanie akcji, która ma zostać podjęta po otrzymaniu sygnałów 1 lub 2, z powrotem do wartości domyślnych.