System Linux udostępnia ogromny zestaw poleceń i narzędzi, które pozwalają na sprawne i skuteczne wykonywanie zadań administracyjnych.
W ramach obowiązków administratora systemów znajduje się instalacja i konfiguracja oprogramowania, kontrola uprawnień dostępu, monitorowanie wydajności, dbałość o dostępność usług, tworzenie i odtwarzanie kopii zapasowych, a także rozwiązywanie problemów awaryjnych.
W tym opracowaniu skupimy się na wybranych poleceniach, które administratorzy systemów Linux wykorzystują w swojej codziennej praktyce.
uname
Uruchomienie polecenia uname
z opcją -a
pozwala na wyświetlenie szczegółowych informacji o systemie. Zostaną przedstawione: nazwa jądra, wersja jądra, edycja jądra, nazwa hosta, typ procesora oraz dane o platformie sprzętowej.
[email protected]:~$ uname -a Linux ubuntu18 5.3.0-1028-azure #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Poniżej znajduje się wyjaśnienie poszczególnych elementów:
kernel name:Linux hostname: ubuntu18 kernel release: 5.3.0-1028-azure kernel version: #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020 machine hardware name: x86_64 processor: x86_64 hardware-platform: x86_64 operating system: GNU/Linux
df
Polecenie df
umożliwia sprawdzenie rozmiaru partycji dyskowych oraz dostępnego miejsca. Uruchomione bez dodatkowych parametrów, prezentuje informacje w blokach 1K.
[email protected]:~$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 437208 0 437208 0% /dev tmpfs 91100 692 90408 1% /run /dev/sda1 30309264 2383952 27908928 8% / ....
Opcja -h
przedstawia dane w sposób bardziej zrozumiały dla użytkownika, tj. w megabajtach (MB) i gigabajtach (GB).
[email protected]:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 427M 0 427M 0% /dev tmpfs 89M 692K 89M 1% /run /dev/sda1 29G 2.3G 27G 8% / tmpfs 445M 0 445M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 445M 0 445M 0% /sys/fs/cgroup /dev/sda15 105M 3.6M 101M 4% /boot/efi /dev/sdb1 3.9G 16M 3.7G 1% /mnt tmpfs 89M 0 89M 0% /run/user/1001
Aby wykluczyć określone systemy plików, na przykład tmpfs
, co skutkuje bardziej przejrzystym wynikiem, należy zastosować flagę -x
.
[email protected]:~$ df -h -x tmpfs Filesystem Size Used Avail Use% Mounted on udev 427M 0 427M 0% /dev /dev/sda1 29G 2.3G 27G 8% / /dev/sda15 105M 3.6M 101M 4% /boot/efi /dev/sdb1 3.9G 16M 3.7G 1% /mnt
Do wyświetlenia informacji tylko o określonym typie systemu plików, można użyć opcji -t
. Na przykład, by zobaczyć tylko system plików ext4
:
[email protected]:~$ df -h -t ext4 Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 2.3G 27G 8% / /dev/sdb1 3.9G 16M 3.7G 1% /mnt
Dodanie flagi --total
skutkuje wyświetleniem w ostatniej linii sumarycznych danych:
[email protected]:~$ df -h -t ext4 --total Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 2.3G 27G 8% / /dev/sdb1 3.9G 16M 3.7G 1% /mnt <b>total 33G 2.3G 31G 8% -</b>
du
Polecenie du
jest wykorzystywane do weryfikacji zajętości dysku przez poszczególne katalogi. Przykładowo, aby skontrolować wykorzystanie przestrzeni dyskowej w /var/log
, a dane przedstawić w czytelnej formie, użyj flagi -h
.
[email protected]:~$ sudo du -h /var/log 24K /var/log/Microsoft/Azure/NetworkWatcherAgent/Logs 28K /var/log/Microsoft/Azure/NetworkWatcherAgent 32K /var/log/Microsoft/Azure 36K /var/log/Microsoft 60K /var/log/apt 4.0K /var/log/samba 177M /var/log/journal/0f4f926f583b4691af7de11025b19ff6 177M /var/log/journal ... 204M /var/log
Aby wyświetlić tylko ogólne podsumowanie, wystarczy zastosować flagę -s
(summary).
[email protected]:~$ sudo du -hs /var/log 204M /var/log
free
free
jest poleceniem, które pokazuje całkowitą, zużytą oraz wolną pamięć operacyjną systemu. Dla lepszej czytelności danych można użyć flagi -h
.
[email protected]:~$ free -h total used free shared buff/cache available Mem: 889M 272M 100M 712K 517M 443M Swap: 0B 0B 0B
total - Całkowita ilość zainstalowanej pamięci (memtotal + swaptotal) used - Pamięć zajęta free - Pamięć nieużywana (memfree + swapfree) buffers - Pamięć wykorzystywana przez bufory jądra cache - Pamięć zajęta przez pamięć podręczną buff/cache - Suma buforów i pamięci podręcznej available - Szacowana dostępna pamięć dla nowych aplikacji bez użycia swap
ps
ps
dostarcza informacji o aktualnym stanie procesów działających w systemie. Aby wyświetlić wszystkie procesy przypisane do użytkownika „ubuntu”, należy użyć flagi -u
wraz z nazwą użytkownika:
[email protected]:~$ ps -u ubuntu PID TTY TIME CMD 7804 ? 00:00:00 systemd 7805 ? 00:00:00 (sd-pam) 7940 ? 00:00:00 sshd 7941 pts/0 00:00:00 bash 8111 ? 00:00:00 sshd 8112 pts/1 00:00:00 bash 13868 ? 00:00:00 sshd 13869 pts/2 00:00:00 bash 13885 pts/0 00:00:00 man 13895 pts/0 00:00:00 pager 18111 pts/2 00:00:00 man 18121 pts/2 00:00:00 pager 18485 pts/1 00:00:00 ps
Aby wyświetlić wszystkie działające procesy, polecenie ps
należy uruchomić z flagami aux
:
[email protected]:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 160076 7020 ? Ss Jun29 0:34 /sbin/init root 2 0.0 0.0 0 0 ? S Jun29 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< Jun29 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< Jun29 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< Jun29 0:00 [kworker/0:0H-kb] ....
gdzie:
Nagłówek
Znaczenie
PID
Identyfikator procesu
%CPU
Procent czasu wykorzystania procesora
%MEM
Procent wykorzystania pamięci RAM
VSZ
Użycie pamięci wirtualnej w kilobajtach (KB)
RSS
Użycie pamięci fizycznej w kilobajtach (KB)
TTY
Terminal przypisany do procesu
STAT
R – Uruchomiony lub gotowy do pracy, S – Uśpiony, I – Nieaktywny, T – Zatrzymany, Z – Zombie, D – Oczekiwanie na operacje wejścia/wyjścia dysku, X – Martwy, W – Wymieniony, N – Proces o obniżonym priorytecie, < – Proces o podwyższonym priorytecie
top
O ile polecenie ps
przedstawia statyczny obraz stanu procesów, top
zapewnia dynamiczny, na bieżąco aktualizowany (domyślnie co trzy sekundy) widok listy procesów systemowych, posegregowanych według wykorzystania zasobów procesora.
Dane wyjściowe polecenia top
podzielone są na dwie główne sekcje: podsumowanie stanu systemu w górnej części oraz tabela procesów, zorganizowana według obciążenia procesora.
top - 14:25:32 up 44 days, 11:37, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 114 total, 1 running, 59 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 910992 total, 101208 free, 274712 used, 535072 buff/cache KiB Swap: 0 total, 0 free, 0 used. 458492 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 50497 ubuntu 20 0 44528 3944 3368 R 0.7 0.4 0:00.15 top 1 root 20 0 160076 7020 4400 S 0.0 0.8 0:34.85 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:+ 9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_+
Opis wybranych pól w sekcji podsumowania systemu:
up
Czas pracy systemu (uptime). Okres od ostatniego uruchomienia komputera.
load average
Średnie obciążenie systemu, czyli liczba procesów oczekujących na uruchomienie. Wartość poniżej 1.0 sygnalizuje, że system nie jest przeciążony. Podawane są trzy wartości: średnia z ostatniej minuty, z ostatnich 5 minut oraz z ostatnich 15 minut.
%Cpu(s)
Wiersz przedstawiający informacje o wykorzystaniu procesora:
us – Użytkownik
Procent procesora używany przez procesy użytkownika.
sy – System
Procent procesora wykorzystany przez procesy systemowe.
ni – Nice
Procent procesora używany przez procesy o niskim priorytecie.
id – Bezczynność
Procent czasu, w którym procesor jest nieaktywny.
wa – I/O Wait
Procent czasu, w którym procesor oczekuje na operacje wejścia/wyjścia.
hi
Czas spędzony na obsłudze przerwań sprzętowych.
si
Czas poświęcony na obsługę przerwań programowych.
st
Czas spędzony przez wirtualną maszynę w oczekiwaniu na zasoby hipernadzorcy.
Pola tabeli procesów:
PID
Identyfikator procesu
USER
Właściciel procesu
PR
Priorytet procesu
NI
Wartość nice (wpływająca na priorytet)
VIRT
Ilość pamięci wirtualnej używanej przez proces (KB)
RES
Pamięć fizyczna wykorzystywana przez proces
SHR
Pamięć współdzielona używana przez proces
S
Status procesu: R – Uruchomiony, S – Uśpiony, I – Nieaktywny, T – Zatrzymany, Z – Zombie, D – Oczekiwanie na operacje wejścia/wyjścia dysku, W – Wymieniony, X – Martwy
%CPU
Procent wykorzystania czasu procesora przez proces
%MEM
Procent wykorzystania pamięci fizycznej przez proces
TIME+
Całkowity czas użycia procesora przez proces
COMMAND
Nazwa programu
Podczas działania programu top
, można korzystać z dodatkowych poleceń. Naciśnięcie klawisza h
lub ?
wyświetli listę dostępnych opcji. Klawisz k
służy do zakończenia procesu, natomiast q
umożliwia wyjście z programu.
dig
dig
jest znakomitym narzędziem służącym do wykonywania zapytań DNS. Sposób jego użycia prezentuje się następująco:
dig <DNS server> <domain> <query-type>
gdzie:
<DNS server>
to nazwa serwera DNS, do którego kierujemy zapytanie<domain>
to nazwa domeny, o którą pytamy<query-type>
to rodzaj rekordu, jaki chcemy uzyskać – A, MX, NS, SOA itp.
Aby pominąć pełne dane wyjściowe, należy zastosować flagę +short
.
Aby sprawdzić rekord A dla domeny google.com, należy użyć:
[email protected]:~$ dig google.com +short 172.217.164.174
Aby zobaczyć rekordy MX dla domeny google.com:
[email protected]:~$ dig google.com MX +short 50 alt4.aspmx.l.google.com. 10 aspmx.l.google.com. 20 alt1.aspmx.l.google.com. 40 alt3.aspmx.l.google.com. 30 alt2.aspmx.l.google.com.
Można również skorzystać z internetowych narzędzi do wyszukiwania rekordów DNS.
who i w
who
wyświetla listę zalogowanych użytkowników.
[email protected]:~$ who ubuntu pts/0 2020-08-14 17:28 (183.83.211.129) ubuntu pts/1 2020-08-14 17:58 (183.83.211.129)
Polecenie w
przedstawia aktualnie zalogowanych użytkowników wraz z uruchomionymi przez nich procesami. Nagłówek pokazuje aktualny czas, czas pracy systemu, ilość zalogowanych użytkowników oraz średnie obciążenie systemu.
[email protected]:~$ w 18:07:33 up 46 days, 15:19, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT ubuntu pts/0 183.83.211.129 17:28 2.00s 0.10s 0.00s w ubuntu pts/1 183.83.211.129 17:58 9:07 0.05s 0.01s vi
W dalszej części wyświetlane są nazwy użytkowników, nazwy terminali, z jakich IP się logują, czas zalogowania, czas bezczynności, JCPU, PCPU i aktualnie uruchomiony program. JCPU to czas wykorzystany przez wszystkie procesy połączone z danym terminalem, a PCPU to czas użyty przez obecny proces.
tar
Za pomocą GNU tar
można grupować wiele plików w pojedyncze archiwum.
Na przykład, stwórzmy katalog myfiles
oraz trzy pliki a.txt
, b.txt
, c.txt
wewnątrz tego katalogu:
[email protected]:~$ mkdir myfiles ; touch myfiles/{a.txt,b.txt,c.txt}
Teraz utwórzmy archiwum o nazwie allfiles.tar
zawierające wszystkie pliki z katalogu myfiles
:
[email protected]:~$ tar -cvf allfiles.tar myfiles myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
Sprawdźmy zawartość aktualnego katalogu. Powinien zawierać katalog myfiles
oraz archiwum allfiles.tar
:
[email protected]:~$ ls allfiles.tar myfiles
Archiwum można rozpakować za pomocą flagi -x
. A więc aby rozpakować allfiles.tar
:
[email protected]:~$ tar -xvf allfiles.tar myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
Istnieje możliwość kompresji archiwum za pomocą flagi -z
, co stworzy archiwum spakowane algorytmem gzip.
[email protected]:~$ tar -zcvf allfiles.tar.gz myfiles myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt [email protected]:~$ ls allfiles.tar.gz myfiles
Aby rozpakować skompresowane archiwum, należy użyć opcji -z
łącznie z -x
.
[email protected]:~$ tar -zxvf allfiles.tar.gz myfiles/ myfiles/c.txt myfiles/a.txt myfiles/b.txt
grep
grep
służy do przeszukiwania plików w poszukiwaniu określonego wzorca. Wyświetla wszystkie linie, w których ten wzorzec się znajduje. Przykładowo, aby znaleźć linię zawierającą „ServerRoot” w pliku /etc/apache2/apache2.conf
:
[email protected]:~$ grep ServerRoot /etc/apache2/apache2.conf # ServerRoot: The top of the directory tree under which the server's #ServerRoot "/etc/apache2"
Do przeszukania wszystkich plików w katalogu, należy użyć *
. Aby przeszukać również podkatalogi, użyj flagi -r
(recursive). W celu wyszukania wszystkich linii zawierających „VirtualHost” we wszystkich plikach w katalogu /etc/apache2
:
[email protected]:~$ cd /etc/apache2 [email protected]:/etc/apache2$ grep -r VirtualHost * apache2.conf:# If you do not specify an ErrorLog directive within a <VirtualHost> apache2.conf:# logged here. If you *do* define an error logfile for a <VirtualHost> conf-available/localized-error-pages.conf:# even on a per-VirtualHost basis. If you include the Alias in the global server conf-available/other-vhosts-access-log.conf:# Define an access log for VirtualHosts that don't define their own logfile ports.conf:# have to change the VirtualHost statement in sites-available/000-default.conf:<VirtualHost *:80> ...
rsync
rsync
to szybkie narzędzie do synchronizacji plików i katalogów między dwiema lokalizacjami. Może być używane zarówno do kopiowania lokalnego, jak i zdalnego. Jego szybkość wynika z faktu, że przesyła jedynie różnice między plikami źródłowymi, a plikami docelowymi.
Jest powszechnie używane do tworzenia kopii zapasowych oraz jako alternatywa dla zwykłego kopiowania.
Przykład:
Do skopiowania wszystkich plików z katalogu myfiles
do katalogu backups
:
[email protected]:~$ rsync -avh myfiles/ /backups sending incremental file list ./ a.txt b.txt c.txt sent 218 bytes received 76 bytes 588.00 bytes/sec total size is 0 speedup is 0.00
Aby zsynchronizować wszystkie pliki z katalogu myfiles
z katalogiem na zdalnym hoście, w nazwie docelowej trzeba podać użytkownik_zdalny@host_zdalny
. A więc, aby przenieść myfiles
na zdalny host o adresie IP 10.0.0.50:
[email protected]:~$ rsync -avh myfiles/ [email protected]:/home/vagrant [email protected]'s password: sending incremental file list ./ a.txt b.txt c.txt sent 230 bytes received 76 bytes 47.08 bytes/sec total size is 0 speedup is 0.00
ss
Polecenie ss
jest używane do wyświetlania statystyk gniazd, podobnie jak starsze netstat
. Aby zobaczyć gniazda TCP, należy użyć flagi -t
.
[email protected]:~$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 10.0.0.4:53852 168.63.129.16:8037 ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:64118 ESTAB 0 0 10.0.0.4:33256 169.254.169.254:http ESTAB 0 1080 10.0.0.4:ssh 222.186.30.35:11527 ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:63049
Powyższe polecenie nie wyświetli gniazd nasłuchujących. Aby pokazać zarówno gniazda nasłuchujące jak i nienasłuchujące, użyj flag -t
oraz -a
.
[email protected]:~$ ss -t -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* LISTEN 0 80 127.0.0.1:mysql 0.0.0.0:* LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:* ESTAB 0 0 10.0.0.4:53852 168.63.129.16:8037 ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:64118 ESTAB 0 0 10.0.0.4:33256 169.254.169.254:http ESTAB 0 1080 10.0.0.4:ssh 222.186.30.35:11527 ESTAB 0 120 10.0.0.4:ssh 183.83.211.129:63049 LISTEN 0 128 [::]:ssh [::]:* LISTEN 0 128 *:http *:*
locate
locate
używa bazy danych do wyszukiwania plików, co sprawia, że jest ono zazwyczaj dużo szybsze niż find
. Jest proste w użyciu, aby wyszukać plik, np. apache2.conf
:
[email protected]:~$ locate apache2.conf /etc/apache2/apache2.conf /var/lib/dpkg/info/apache2.conffiles
Możesz użyć flagi -c
, gdy interesuje Cię jedynie ilość znalezionych pasujących plików.
[email protected]:~$ locate -c apache2.conf 2
Czasami może zajść konieczność odświeżenia bazy danych używanej przez locate
, czyli mlocate
. W tym celu użyj polecenia updatedb
, które wymaga uprawnień administratora.
[email protected]:~$ sudo updatedb
find
find
jest jednym z najczęściej używanych poleceń w systemie Linux. Używa się go do wyszukiwania plików na podstawie wielu kryteriów, m.in. nazwy, uprawnień, ID użytkownika, ID grupy, rozmiaru, typu.
Aby wyszukać plik po nazwie w aktualnym katalogu, użyj opcji -name
, a po niej nazwy pliku, którego szukasz:
[email protected]:~$ find . -name a.txt ./myfiles/a.txt
Aby wyszukać katalogi, użyj opcji -type d
:
[email protected]:~$ find . -type d . ./.ssh ./myfiles ./.cache ./.gnupg ./.gnupg/private-keys-v1.d ./docker
Aby wyszukać pliki według rozmiaru, na przykład te większe niż 20 MB, użyj opcji -size
:
[email protected]:~$ find . -size +20M ./docker/docker-ce-cli_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb ./docker/docker-ce_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb
systemctl
W większości dystrybucji Linuksa systemd
zastąpił proces init SysV
, a więc do zarządzania usługami i jednostkami systemd
wykorzystuje się polecenie systemctl
.
Aby uruchomić usługę, na przykład apache2
:
[email protected]:~$ sudo systemctl start apache2.service
Można opuścić sufiks .service
.
Aby zatrzymać usługę:
[email protected]:~$ sudo systemctl stop apache2
Aby zobaczyć stan usługi, użyj polecenia systemctl status
. Poniższy przykład pokazuje status Apache2
w czasie jego pracy:
[email protected]:~$ sudo systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Wed 2020-08-19 11:34:04 UTC; 2s ago Process: 25346 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS) Process: 18202 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS) Process: 25536 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 25555 (apache2) Tasks: 55 (limit: 1024) CGroup: /system.slice/apache2.service ├─25555 /usr/sbin/apache2 -k start ├─25558 /usr/sbin/apache2 -k start └─25559 /usr/sbin/apache2 -k start Aug 19 11:34:04 ubuntu18 systemd[1]: Starting The Apache HTTP Server... Aug 19 11:34:04 ubuntu18 systemd[