Nejprve se seznámíme s několika základními termíny, v příštích dílech se dostaneme k psaní skriptů v BASHi
Před pár lety jsem si nadšeně nainstaloval linux a zjistil jsem, že vlastně nevím, co do té příkazové řádky napsat. Rád bych proto tento článek věnoval čtenářům, kteří by chtěli v podobné situaci alespoň trochu zkrotit příkazový řádek. Ovšem než začneme horlivě psát skripty v shellu, vysvětlíme si nejdříve, co vlastně je ten shell, kernel, filesystem, atd.
Konvence v článku
Pevnou část příkazu budu psát neproporcionálně:
man [-k] keyword1 [keyword2]
Proměnlivou část budu psát kurzívou:
man [-k] keyword1 [Keyword2]
Volitelná (nepovinná) část příkazu bude v hranatých závorkách:
např. man [-k] keyword1 [Keyword2]
Konečně více variant oddělených svislítkem uzavřu do složených závorek:
{ PROMĚNNÁ | /regulární výraz/ | parametr
}
Jádro (kernel)
Základem systému je jádro (kernel). Jádro řídí procesy (spuštění, ukončení, komunikace, uspání, přístup k zařízením,...), dále spravuje systém souborů, přiděluje a chrání paměť, odkládá dočasně nepoužívanou paměť (swap). Ještě má na starosti přidělování CPU času procesům a určování priorit.
V době psaní tohoto článku je aktuální jádro verze 2.6.10 - většina běžných linuxových distribucí používá jádro řady 2.6.
Systém souborů (filesystem)
Jak vlastně vypadá strom adresářů v linuxu? Hlavním diskem je vždy adresář
"/", říká se mu kořenový (root). Důležitým poznatkem je, že lomítka
v cestě k souborům či adresářům nejsou zpětná (na to jste možná byli zvyklí),
ale přímá.
Adresář "/" obvykle obsahuje:
/dev
- speciální soubory (zařízení, devices)
např.
/dev/dsp
je obvyklý pro zvukovou kartu
/etc
- konfigurační adresář
/home
- kořen domovských adresářů
/lib
- základní systémové knihovny
/usr
- systémové soubory (velmi zjednodušeně)
/usr/include
- hlavičkové soubory knihoven C
/usr/man
- manuálové stránky
/var
/var/log
- logovací soubory
/var/spool
- pošta, tisk, ...
K zařízením i adresářům se v linuxu přistupuje jednotně ("vše je soubor").
Ještě bych mohl dodat, že každý soubor/adresář (adresář je speciální soubor) má svá přístupová práva, tzn. že nějaký uživatel či skupina uživatelů jej může nebo nemůže číst, zapisovat do něj, příp. jej spouštět. O změně přístupových práv se zmíním později.
shell, procesy, PID
Dále bychom mohli vědět, že hlavním programem pro komunikaci se systémem je shell (interpret příkazů), shellů je několik (BASH je jen jedním z mnoha). Příkazy spouštíme takto:
příkaz -přepínače parametry
(např.: man -k dir
)
Proces je zjednodušeně řečeno běžící uživatelský nebo systémový program, vzniká duplikací rodičovkého procesu (hlavní systémový proces init má PID 1. PID (process ID) je unikátní číslo procesu. Procesy spolu komunikují - otec předává při startu synovi data, avšak syn otci data předat nemůže!!! Důležitým nástrojem pro komunikaci procesů je roura (pípa), pomocí ní lze jednosměrně předat data. Procesy mohou komunikovat ještě dalšími způsoby (např. sdílenou pamětí, signály).
Manuálové stránky, man
man [-k] [sekce] příkaz
Manuály - ty jsou v linuxu asi nepostradatelné a také pro UNIXové systémy
charakteristické (asi nenajdete příkaz man
mezi jinými operačními
systémy). Příkaz man
je neodmyslitelný, neboť jen těžko si lze
pamatovat všechny příkazy, natož jejich volby (parametry), se kterými je lze
spouštět, a právě s pomocí man
si je hnedle vybavíme (no dobrá,
někdy musíme chvíli hledat).
Zmíněný příkaz man
slouží k prohlížení manuálových stránek,
tedy proč hned nezkusit napsat:
bash$ man man
Zobrazí se nám manuálová stránka příkazu man
. Sami pak
můžete nahlédnout, kolik parametrů tento příkaz má. Velmi užitečný
je parametr -k
; pomocí něho lze vyhledávat
v databázi krátkých popisků systémových příkazů na základě klíčových slov.
Stejnou funkci plní příkaz apropos
, vlastně volání
man -k
je totéž, co apropos
.
Ještě bych mohl dodat, co je to ta sekce. Sekce je zařazení, ve kterém chceme danou manuálovou stránku hledat. Následuje seznam sekcí:
1- uživatelské příkazy
2- sekce služeb jádra
3- knihovny jazyka C
4- zařízení + ovladače
5- formáty souborů (konfiguračních)
6- manuály jednoduchých programů
7- co dům dal (různé)
8- administrátorské příkazy
Uživatel, skupina (/etc/passwd,/etc/group
)
Měli bychom vědět, že root, neboli superuživatel je uživatel s kompletními pravomocemi. Např. instalaci programu, globální změny nastavení a jiné neběžné akce v systému většinou nelze provést jako běžný uživatel. Pracovat na počítači jako běžný uživatel má své výhody, např. z důvodu omezených pravomocí se snadno brání virům (viry se nemohou vetřít do systému, protože prostě nemají přístupová práva pro zápis do souborů, které běžný uživatel potřebuje jen číst, případně spouštět).
Group je skupina uživatelů. Skupiny jsou výhodné k hromadnému
definování práv pro více uživatelů, např. přidáním uživatele do skupiny
cdrom
mu umožníme čtení kompaktních disků. Jeden uživatel může
patřit do více skupin.
Podívejme se na formát souboru /etc/passwd
(v něm jsou
definováni všichni uživatelé). Každý řádek definuje jednoho uživatele.
Obvyklý první řádek tohoto souboru je uživatel "root":
root:x:0:0::/root:/bin/bash
Jednotlivá pole jsou oddělena dvojtečkou (jak jste si zajisté všimli)
a popořadě znamenají: uživatelské jméno, x
znamená, že zakódované
heslo je uloženo v jiném souboru (/etc/shadow
), dříve bylo
součástí tohoto souboru (oddělením hesel do jiného souboru se zvyšuje
bezpečnost systému, protože shadow
není čitelný pro běžné
uživatele), další položka je UID (user ID), sami vidíte, že živatel root
má UID 0, pokračuje GID (group ID), taktéž skupina root má GID 0.
V tomto záznamu prázdná položka je místo pro poznámku (často se sem píše celé
jméno uživatele). Následuje domovský adresář (u superuživatele obvykle
/root
) a nakonec příkaz programu spuštěného po úspěšném přihlášení,
většinou tedy nějaký shell - v tomto případě /bin/bash
. Tuto
informaci získáte příkazem "man 5 passwd
".
Asi pro vás nebude překvapením, že skupiny najdeme v souboru
/etc/group
, na prvním řádku opět sedí root (tentokrát skupina).
root::0:root
Opět pole oddělené dvojtečkami, první pozice je jméno skupiny, druhá pozice
je zakódované heslo (prázdné znamená žádné, popravdě jsem se ještě nesetkal
s heslama pro skupiny), třetí položka je GID a poslední je seznam
uživatelů patřících do skupiny (oddělení čárkou), do skupiny navíc patří
uživatelé, kteří mají skupinu uvedenou jako svoji primární (tedy v
passwd
souboru).
Ještě uvedu několik příkazů - logout
odhlásí uživatele
(překvapivě), login user
přihlášení uživatele
user
, su [-] [user]
dočasně
změní uživatele (bez uvedení user
se jedná o změnu na
superuživatele), příkazem exit
ukončíne su
.
Abychom zjistili, jakou máme identitu (kdybychom náhodou zapoměli), stačí se
zeptat příkazem id
nebo whoami
(id
nám
navíc řekne, do jakých skupin patříme), příkazy w
a who
jsou ke zjištění aktuálně nalogovaných uživatelů, příkazem last
můžeme zjistit kdo, kdy a odkud se nám logoval na počítač.
Autor: J.N.