Przekierowania w powłoce bash, przeglądanie plików

Przekierowania w powłoce bash, przeglądanie plików

Ważne polecenia i programy

polecenie opis
cd zmiana katalogu
pwd wypisanie katalogu roboczego (bieżącego)
mkdir tworzenie nowego katalogu
cat wypisanie zawartości pliku
man podręcznik systemowy
less oglądanie plików

Podstawy nawigacji w less (a także w man):

klawisz działanie
q wyjście
/słowo<enter> wyszukiwanie
n wyszukaj następne wystąpienie
N wyszukaj poprzednie
G przewiń do końca
gg przewiń do początku
h przewiń w lewo
j przewiń w dół
k przewiń w górę
l przewiń w prawo
13g przejdź do linii 13
<spacja> przewiń stronę w dół
C-u przewiń pół strony w górę
C-d przewiń pół strony w dół

Podstawowe użycie podręcznika systemowego:

$ man komenda

wyświetla informacje na temat polecenia komenda.

Proszę zwrócić uwagę na często stosowaną konwencję przy podawaniu poleceń do wpisania w terminalu:

$ ls

oznacza żeby wykonać polecenie ls. Symbol dolara mówi tylko, że to polecenie powinien wykonać zwykły, nieuprzywilejowany użytkownik, nie należy go przepisywać. Dla odróżnienia, gdyby polecenie wymagało uprawnień administratora, zapisane byłoby ze znakiem # z przodu:

# shutdown -h now

Konwencja ta wynika z typowego zakończenia zachęty w interpreterze poleceń sh i pochodnych.

Przekierowania

$ wywolanie > wyjscie
$ wywolanie >> wyjscie
$ wywolanie < wejscie

Odpowiednio: przekierowanie standardowego wyjścia do pliku wyjscie, zastępując poprzednią zawartość, przekierowanie standardowego wyjścia do pliku wyjscie, dopisując za istniejącą zawartością, przekierowanie standardowego wejścia z pliku wejscie.

deskryptor strumień
0 stdin
1 stdout
2 stderr

Przekierowanie strumienia o danym numerze:

$ wywolanie 2> plik

Przekierowanie między deskryptorami (strumieniami).
Przypomnienie: 1>&2
przekierowuje dane ze strumienia 1 do 2.

Ćwiczenia

We wszystkich sytuacjach, gdy trzeba sprawdzić zawartość jakiegoś pliku, można użyć cat lub less.

ls i opcje

Przypomnienie: man ls wyświetli podręcznik systemowy dla ls.

  1. ls – wyświetlanie listy plików
    Wywołać:

    $ ls

    zmienić katalog na /etc i ponownie wywołać ls
    Co drukuje ls bez żadnych parametrów?
    Wywołać ls z jednym zwykłym plikiem jako parametrem.
    Wywołać ls z dwoma zwykłymi plikami jako parametrami.
    (Zwykły plik, czyli plik nie będący katalogiem ani plikiem specjalnym, na przykład /etc/passwd /etc/group)__

    Wywołać ls z katalogiem jako parametrem, wywołać ls z dwoma katalogami (Można użyć np katalogu domowego) i katalogu ~/Desktop.
    Wywołać ls z kilkoma parametrami, gdzie część to pliki, a część katalogi.

    Zaobserwować: Jakie są różnice gdy wywołaniem z plikiem i katalogiem jako parametrem? Co się dzieje, gdy podamy kilka plików i katalogów jako parametry? (5p)

  2. ls – użycie opcji. W tym ćwiczeniu należy znaleźć w podręczniku systemowym informacje o potrzebnych opcjach. Spróbować zarówno długiego (rozszerzenie GNU), jak i krótkiego (POSIX) wariantu opcji.

    Wyświetlić listę wszystkich plików w katalogu domowym, uwzględniając pliki ukryte.

    Zmienić zachowanie ls tak, aby przy podaniu katalogu jako parametr zachowanie było takie samo jak w przypadku zwykłych plików

    Posortować wyświetlaną listę plików według daty modyfikacji

    Zobaczyć listę ze szczegółami – opcja -l – przeczytać jakie informacje się tam znajdują.

    Wyświetlić listę ze szczegółami, zawierającą pliki ukryte i posortowaną wg. czasów. Zaobserwować, że krótkie opcje można łączyć pod jednym - (polecenie -xyz) lub pisać oddzielnie (polecenie -x -y -z).

Przekierowania

  1. Utworzyć katalog lab2 i wejść do niego, aby tam tworzyć wszystkie pliki powstałe w ramach dalszych ćwiczeń:

    $ mkdir lab2
    $ cd lab2
  2. sort i stdin, stdout, stderr Uruchomić sort bez parametrów, wpisać kilka linii tekstu, na koniec podać nową linię (enter) i koniec pliku (Ctrl-D) Zaobserwować efekt. W tym przypadku standardowym wejściem był tekst wpisany z klawiatury, a standardowym wyjściem drukowanie tekstu w terminalu.

    Uruchomić sort z przekierowaniem standardowego wyjścia do pliku wyjscie.txt:

    $ sort > wyjscie.txt

    Powtórzyć wpisywanie sekwencji na stdin. Obejrzeć powstały plik z użyciem programu less:

    $ less wyjscie.txt

    Posortować odwrotnie plik wyjscie.txt:

    $ sort -r < wyjscie.txt

    Sort nie będzie czytał standardowego wejścia, gdy podamy mu plik lub pliki do posortowania jako argument:

    $ sort -r wyjscie.txt

    Przekierowania można łączyć. Skopiować plik wyjscie.txt do wejscie.txt:

    $ cp wyjscie.txt wejscie.txt

    Można przekierować więcej niż jeden strumień na raz. Wywołać sort z przekierowaniem wejścia z pliku wejscie.txt i wyjścia do wyjscie2.txt na raz. Obejrzeć efekt programem less.

    Co się stanie, gdy przekierujemy wejście i wyjście z/do tego samego pliku? (7p)

    Sprawdzić co się stanie, gdy dwa razy wywołamy program z przekierowaniem wyjścia do tego samego pliku. Spróbować w tym celu przekierowania ( > ) i dopisywania ( >> ). Jakie są różnice między > a >> ?

  3. stdout, stderr
    Wywołać

    $ sort /etc/passwd > plik_wyjsciowy.txt

    z przekierowaniem wyjścia do pliku. Następnie umyślnie podać nazwę nieistniejącego pliku, czy cały czas wszystko drukowane przez program jest przekierowane do pliku? A co się stanie po przekierowaniu stderr?

    Przekierowanie wyjścia błędów na standardowe wyjście:

    $ ls /etc/passwd /etc/group /etc/abcdef  >plik  2>&1 # Wszystko trafia do jednego pliku

    Sprawdzić, czy kolejność przekierowań 2>&1 i >plik ma znaczenie.

    Jaki jest skutek polecenia

    $ ls /etc/passwd /etc/group /etc/abcdef  >plik1  2>&1 >plik2

    ? (jakiś chętny do wyjaśnienia całej grupie)?

  4. pipe |

    $ ls --help

    Drukuje zbyt długą informację, by mieściła się na jednym ekranie.
    Spróbować

    $ ls --help | less

    Na chwilę zapomnijmy o tym, że ls ma opcje pozwalające kontrolować sortowanie. Cały czas możemy posortować wynik ls z użyciem sort. Na przykład w odwrotnej kolejności:

    $ ls /etc | sort -r

    Wynik nie mieści się na ekranie?

    $ ls /etc | sort -r | less

    Wywołać:

    $ ls /etc/passwd /etc/group /etc/abdefg | less

    Spróbować przewinąć wynik – co trafiło, a co nie trafiło do less? Dlaczego? (Jakiś chętny to wyjaśnienia wszystkim?) Spróbować użyć |& zamiast |

  5. |, filtry Użyć podręcznika systemowego (manual), aby zapoznać się z podanymi poleceniami.

    • Używając cut, sort, head wypisać 4 pierwsze alfabetycznie słowa z pierwszej kolumny pliku /etc/passwd (najpierw sprawdzić jaki jest separator kolumn w /etc/passwd) (Jakiś chętny to wyjaśnienia wszystkim?)

    • Używając cut i sort stworzyć posortowaną listę nazw z pierwszej kolumny plików /etc/passwd i /etc/group (obu plików połączonych). Wynik powinien znaleźć się w pliku moja_lista.txt Dodatkowo: usunąć z pliku wynikowego duplikaty nazw (Jakiś chętny to wyjaśnienia wszystkim?)

    • Używając head i tail wypisać linie o numerach 4,5,6,7 z /etc/passwd (Jakiś chętny to wyjaśnienia wszystkim?)

    • Program dmesg wyświetla komunikaty jądra systemu Linux, na przykład te dotyczące sprzętu. Wypisać na ekran komunikaty zawierające ciąg usb. Wypisać ostatnie 10 linii komunikatów. (Jakiś chętny to wyjaśnienia wszystkim?) Użyć grep i tail.