Skip to content

Podstawowe wykorzystanie powłoki

Materiały:

Kilka dodatkowych faktów

Strumień błędu

Oprócz strumienia standardowego wyjścia, każdy program może też pisać do strumienia standardowego błędu. Przy normalnym uruchomieniu programu oba te wyjścia są wyświetlane w terminalu. Ale każde z tych wyjść można osobno przekierować, np.

./program >wyjscie 2>blad
Większość programów wyorzystuje strumień wyjścia do prezentowania oczekiwanego wyniku działania programu, a strumień błędu do prezentowania informacji o błędach, ostrzeżeń dla użytkownika, czy informacji debugowej. Żeby pisać do strumienia błędu w języku C, należy wykorzystać funkcję fprintf w następujący sposób:
    fprintf(stderr, "Napis '%s' zostanie wypisany na strumień standardowego błędu", "ten napis");
Wszelkie informacje debugowe najlepiej kierować na ten strumień, bo w przypadku zadań programistycznych w systemeie satori, zawartość strumienia błędu jest zazwyczaj ignorowana.

Specjalne urządzenia w /dev

Katalog /dev pod Linuksem zawiera rożne wpisy związane z urządzeniami, jak dyski, mikrofony, karty graficzne, itp. Wśród nich znajduje się kilka przydatnych dla nas urządzeń znakowych:

  • /dev/null - to zawsze pusty plik, do którego można też pisać i nic się wtedy nie dzieje.
  • /dev/zero - to nieskończony plik w którym wszystkie bajty są zerami.
  • /dev/stdin - to urządzenie reprezentujące standardowe wejście procesu, który otworzy ten plik.

Najczęstsze zastosowania to:

  • Zignorowanie wyjścia z programu:
    ./program >/dev/null 2>/dev/null 
    
  • Przekazanie pustego wejścia do programu:
    ./program </dev/null
    
  • Zainicjowanie pliku o rzomiarze 1 MB zawierającego same zera przy pomocy programu dd:
    dd if=/def/zero of=plik.1mb bs=1024 bc=1024
    

Użytkownicy

Baza danych użytkowników zazwyczaj przechowywana jest w pliku /etc/passwd, ale lepszym sposobem jej przeglądania jest wykonanie polecenia getent:

gutowski@student:~$ getent passwd
[...]
grygiel:x:622:622:Katarzyna Grygiel,,,:/home/grygiel:/bin/bash
gutowski:x:621:621:Grzegorz Gutowski,,,:/home/gutowski:/bin/bash
hodor:x:751:751:Jedrzej Hodor,,,:/home/hodor:/bin/bash
[...]
Każda linijka wyjście zawiera rekord informacji o jednym użytkowniku w formacie
login:x:uid:gid:Informacje o użytkowniku:katalog domowy:wybrany program powłoki
Numeryczne pole uid to identyfikator użytkownika. Pole gid określa domyślną grupę dla procesów tego użytkownika.

Podobnie, wywołanie getent group zwraca bazę danych grup zdefiniowanych w systemie.

Wykonywanie poleceń z uprawnieniami administratora

Do wykonywania poleceń administracyjnych, takich jak np. dodawanie użytkowników, potrzebne jest uzyskanie uprawnień administrtora. Do wykonywania takich zadań jest specjalny użytkownik root z uidem równym 0. Żeby wykonać jakieś polecenie jako root należy skorzystać z polecenia sudo: Np. żeby zainstalować dodatkowe oprogramowanie w systemie

gutowski@guliwer:~$ sudo apt install nextcloud-desktop
[sudo] password for gutowski:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libcloudproviders0 libnextcloudsync0 libqt5keychain1 libqt5websockets5 nextcloud-desktop-common nextcloud-desktop-doc nextcloud-desktop-l10n
The following NEW packages will be installed:
  libcloudproviders0 libnextcloudsync0 libqt5keychain1 libqt5websockets5 nextcloud-desktop nextcloud-desktop-common nextcloud-desktop-doc nextcloud-desktop-l10n
0 upgraded, 8 newly installed, 0 to remove and 12 not upgraded.
Need to get 5343 kB of archives.
After this operation, 17,9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
[...]
Na serwerze studenckim nie można wykorzystywać sudo:
gutowski@student:~$ sudo adduser bombelek
[sudo] password for gutowski:
gutowski is not in the sudoers file.
This incident has been reported to the administrator.
Zasady dostępu do sudo są definiowane w pliku konfiguracyjnym /etc/sudoers.

Mechanizmy przepisujące polecenia w bash

  • ~ jest zamieniane na katalog domowy użytkownika
  • $ZMIENNA jest zamieniane na wartość zmiennej. Listę dostępnych zmiennych środowiskowych podaje polecenie env
  • {a,b,c} jest zamieniane na trzy osobne napisy, jeden z podstawionym a, drugi z b, a trzeci z c.
  • {1..10} jest zamieniane na dziesięć osobnych napisów, z kolejnymi liczbami od 1 do 10.
  • *.txt jest zamieniane osobne napisy, każdy zawierający jedną ścieżkę pasującą do wyrażenia globowego.

Wyrażenia glob

  • * - dowolny ciąg znaków
  • ? - dowolny pojedynczy znak
  • [zbiór] - dowolny znak należący do zbioru
  • [0-9] - dowolna cyfra