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.
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:
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:
- Przekazanie pustego wejścia do programu:
- Zainicjowanie pliku o rzomiarze 1 MB zawierającego same zera przy pomocy programu
dd
:
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
[...]
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 5 343 kB of archives.
After this operation, 17,9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
[...]
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.
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 polecenieenv
{a,b,c}
jest zamieniane na trzy osobne napisy, jeden z podstawionyma
, drugi zb
, a trzeci zc
.{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