Kamil `JP` Dedecius

Transkript

Kamil `JP` Dedecius
Kamil ’JP’ Dedecius
Jemný úvod do shellů
Jemný úvod do shellů
1 Co je to shell
Shell je anglický výraz vyjadřující totéž, co v českém jazyce slova ”příkazový interpret” (ano,
zejména „interpretÿ je vyloženě české slovo :o)). Úkolem shellu je, jak vyplývá z českého překladu, interpretovat neboli provádět příkazy. které mu zadá uživatel nebo které jsou umístěny
v nějakém souboru (skriptu, dávce). Asi každý zná command.com z MS–DOSu – to je právě
jedna z ukázek příkazového interpretu. V oblasti UNIXů, tedy přesněji UN*Xů vzniklo hned
několik shellů, uživatel tedy narozdíl od DOSu není odkázán na jeden konkrétní (lepší či
horší), ale má na vybranou z více možností.
1.1 Bourne Shell
První skutečný uznávaný UNIXový shell – sh – vznikl v laboratořích AT&T a do UNIXu (již
verze 6) byl přidán roku 1975 (to ještě byly počítače ze dřeva). K obrazu svému jej stvořil
Stephen R. Bourne. Narozdíl od boha použil místo žebra programovací jazyk C, výsledek tedy
sice nebyl tak půvabný (skoro by se dalo říci, že stvořil hranatou potvoru), ale na druhou
stranu alespoň netrpí rozmary. Tento shell umožňoval spoustu nových věcí, měl job control,
uměl pracovat s proměnnými, regulárními výrazy, funkcemi, dalo se v něm obstojně skriptovat
atd. Měl i své nevýhody (proto ta hrbatá potvora) – narozdíl od shellů, na které jsme dnes
zvyklí (stále jsme u UN*Xů!) neuměl doplňovat názvy souborů, neměl historii příkazů a práce
s více procesy na pozadí byla spíše utrpením. Na většině systémů tento shell jej najdete v
/bin/sh (pozor, na GNU/Linuxu jde většinou o symbolický odkaz na /bin/bash).
1.2 C Shell
C Shell vznikl o něco málo později na počátku 80. let na Kalifornské universitě v Berkeley. Jeho
„otcemÿ je Bill Joy. Jeho cílem bylo vytvořit přátelštější interaktivní shell, který by používal
styl jazyka C (Bourne Shell používal styl jazyka ALGOL). Tomuto kroku se nelze divit, neboť
UNIX byl v Berkley psán (přepisován) právě v jazyku C, programátoři na něj byli zvyklí a
nikdo jiný tehdy na UNIXu nepracoval. Jenže osud tomu chtěl tak, že na skriptování C Shell
moc použitelný nebyl, neboť měl slabou kontrolu vstupu a výstupu, postrádal mnoho funkcí
a měl nepříliš dobrou syntaxi příkazů. Nicméně na poli interaktivních shellů jednoznačně vedl
díky doplňování jmen souborů a funkcí, aliasům a vydařenému řízení procesů (jobs). C Shell
najdete v /bin/csh (tedy pokud jej máte nainstalovaný).
1.3 TENEX/TOPS C Shell
Zkráceně se mu říká tcsh a po nainstalování jej najdete v /bin/tcsh. Tento klon rozšiřuje
možnosti klasického C Shellu o možnost pohybu v historii pomocí šipek nahoru a dolu a pohyb
po řádce pomocí kláves šipka vlevo a vpravo.
1.4 Korn Shell
Korn Shell napsal v laboratořích AT&T pan David G. Korn v první polovině 80. let. Tento
shell zavádí výhody C Shellu (zejm. v oblasti interaktivity) do klasického Bournova shellu.
Středisko UN*Xových technologií
1
Kamil ’JP’ Dedecius
Jemný úvod do shellů
Výsledkem byl Bourne–kompatibilní shell, který uměl práci s historií, aliasy, funkcemi, poli,
doplňování, aritmetickými operacemi aj. Tento shell má 3 verze – Official (ksh), Public Domain (pdksh) a Desktop (dtksh, umí práci s GUI). Další variantou ksh je POSIX Shell. Kromě
POSIXového, který má jisté odchylky najdete všechny zmíněné shelly v /bin.
1.5 Bourne Again Shell
Nejbachratější, nejpomalejší a nejmocnější ze zmíněných shellů. Jeho autory je Brian Fox
z Free Software Foundation, maintainerem je Chet Ramey. bash je GNU verze Bourneova
shellu, doplněná o mnoho užitečných i neužitečných vlastností. Je součástí snad každé distribuce linuxové distribuce, najdete jej v /bin/bash. Rovněž /bin/sh většinou ukazuje na
/bin/bash, ovšem pozor na kompatibilitu! Velké množství shellových skriptů napsaných v
bashi na klasickém Bourneově sh nepustíte, i když má na prvním řádku
#!/bin/sh
To je způsobeno tím, že takto spuštěný shell se sice snaží chovat jako sh, ovšem u té snahy
to končí. Více najdete v manuálových stránkách.
1.6 Ostatní shelly
Jako u všeho na UNIXech máte i v oblasti shellů široký výběr. Zde byly vyjmenovány jen ty
nejčastější verze, se kterými se můžete, ale existují i jiné, za všechny jmenujme velmi výkonný
a samozřejmě volný Z–Shell.
2 Interaktivní a neinteraktivní shell, login shell
Od této kapitoly se již budeme zabývat pouze shellem bash.
Interaktivní shell, jak již název vypovídá, je takový, který umožňuje přímou interakci s
uživatelem. To v praxi znamená, že vy mu můžete prostřednictvím klávesnice nadávat a on
vám bude na oplátku zdvořile odpovídat (jste ve výhodě, mužete být vulgární :o)).
$ Ty jsi ale osklivy shell, bashi!
-bash: Ty: command not found
Aby nebylo jen u toho nadávání (k tomu shelly vytvořeny nebyly), můžete mu zadávat také
něco slušnějšího a užitečnějšího, jako třeba v následujícím případě, kde si ukážeme aktuální
datum:
$ date
So lis 20 16:01:53 CET 2004
Neinteraktivní shell je ten, který vás neposlouchá. Tedy víceméně, můžete mu dělat cokoliv
zvenčí, třeba mu zatnout tipec tak, že ho zabijete, ale rozhodně mu jednoduchým způsobem
nebudete zadávat nějaké rozumné příkazy, pokud na to není předem připraven. Pokud se
Středisko UN*Xových technologií
2
Kamil ’JP’ Dedecius
Jemný úvod do shellů
ptáte, k čemu takový shell je, když vás neposlouchá, pak vězte, že slouží ke zpracování skriptů.
Podobně jako jsou dávky v MS–DOSu (nejklasičtější ukázkou je autoexec.bat), které provede
command.com, na UN*Xech jsou skripty, které provádí ten či onen shell.
Login shell je takový, který při svém spuštění načte obsah určitých souborů.
3 Spuštění shellu
Jak již bylo nastíněno, bash může běžet interaktivně nebo neinteraktivně a to ještě volitelně
jako login shell. Co to znamená si vysvětlíme v této kapitole (nebojte, je to jednoduché a zná
to každý, jen to neumí pojmenovat ;o))
Rozdíly by měly být z předchozí kapitolky jasné, proto se teď podíváme na zoubek oněm
„souborůmÿ zmíněným u login shellu.
Při spouštění interaktivního login shellu se čtou následující soubory (dle pořadí):
1. /etc/profile
2. ~/.bash_profile
3. ~/.bash_login
4. ~/.profile
První ze souborů, tedy /etc/profile se čte vždy pokud existuje. Ostatní tři se bash
pokouší otevřít v takovém pořadí, jak bylo napsáno. První z nich, který existuje a je možné
jej přečíst, je spuštěn (přesněji je spuštěn jeho obsah).
Když je interaktivní login shell ukončen, pokusí se načíst soubor .bash logout a spustí
v něm definované příkazy.
Jestliže je spouštěn interaktivní shell, který není zároveň login shellem, bash se pokusí
načíst a provést příkazy v souboru ~/.bashrc.
Praxe tomu chce tak, že v souboru ~/.bashrc bývají nadefinovány vlastnosti, které chceme
aby platily vždy. Proto se tento soubor načítá i při spouštění ~/.bash_profile, a to následujícím způsobem:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Zní to možná celé trochu zamotaně, ale ve skutečnosti má každý bashista o téhle problematice alespoň matnou představu. Pro ukázku a snazší pochopení se podíváme na obsah
zmíněných souborů.
3.1 /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
Středisko UN*Xových technologií
3
Kamil ’JP’ Dedecius
Jemný úvod do shellů
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1=’\u@\h:\w\$ ’
else
if [ "‘id -u‘" -eq 0 ]; then
PS1=’# ’
else
PS1=’$ ’
fi
fi
fi
export PATH
umask 022
3.2 ~
/.bash profile
# .bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Nastavime vi mod
set -o vi on
# Hodne restriktivni umask
umask 0077
3.3
/.bash login
Tento soubor na svém počítači nemám.
3.4
/.profile
Tento soubor na svém počítači nemám.
3.4.1
/.bashrc
# .bashrc
Středisko UN*Xových technologií
4
Kamil ’JP’ Dedecius
Jemný úvod do shellů
# User specific aliases and functions
alias ssh.hept=’ssh beruska@heptium’
alias ssh.sut=’ssh -X beruska@sut-01’
alias ssh.moira=’ssh -X beruska@moira’
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Vlastni nastaveni
PS1=’\[\033[1;32m\][\u@\h \W]$ \[\033[0m\]’
export PS1
# Setting interprets modes
# set -o vi on
#set aliases
alias ls=’ls --color=auto’
alias l=’ls’
alias ll=’ls -l’
alias la=’ls -A’
alias lal=’ls -al’
alias cetc=’cd /etc’
alias clog=’cd /var/log’
alias m=’more’
alias mroe=’more’
alias moer=’more’
alias les=’less’
alias mail=’nail’
alias ps2pdf=’ps2pdf -sPAPERSIZE=a4’
3.5 ~
/.bash logout
clear
3.6 A k čemu to celé je?
Asi jste již pochopili, že ve zmíněných souborech si můžete nastavit spoustu věcí, např. cesty,
barvu a sestavení promptu, mód editace příkazové řádky (v případě výše vi, defaultně je
emacs), smazání obrazovky po odhlášení atd.
Středisko UN*Xových technologií
5
Kamil ’JP’ Dedecius
Jemný úvod do shellů
4 Zjednodušte si práci
Práce v příkazové řádce rozhodně není přežitkem, i když se vám hodně lidí a firem (zejména
zabývajících se vývojem programů pro nové druhy pokémonů zvané klikaču) bude snažit tvrdit
opak. Příkazová řádka je podstatně rychlejší už v principu své činnosti, odpadá nutnost mít v
paměti zavedené celé grafické prostředí (často solidně vytěžující stroj), nejste nuceni k hledání
těch správných ikonek. Stačí si jen pamatovat potřebné příkazy a klikaču se na vás nechytá.
Nehledě na to, že některé věci v grafických prostředích bez drahých a náročných programů
neuděláte. Když vám na UN*Xu přestane jít X–server, stále můžete svou semestrálku dopsat
(pokud ji děláte třeba v LATEXu, stále vám chodí poštovní, ftp, www server a vy se můžete
v klidu věnovat jejich konfiguraci. Můžete si stále prohlížet web, stahovat soubory, pouštět
hudbu, dokonce koukat na film. A kromě toho, většinou jste rychlejší (pokud víte, co a jak
dělat).
4.1 Klávesové zkratky
Práce na příkazové řádce bývala kdysi utrpením, neboť se po ní nedalo normálním způsobem
pohybovat. Ti, kteří vyrostli na MS–DOSu mohou jen dosvědčit, že to bývala spíše otročina.
MS–DOS si pamatoval jen poslední příkaz, který bylo možno vyvolat klávesou F3, na řádce
se nedalo pohybovat, jen psát a mazat klávesou backspace. Takové doby pamatuje i UNIX,
pravdaže v době, kdy MS–DOS vznikl byl už UNIX schopen mnoha věcí, na něž jsme dnes
zvyklí. Mezi nejdůležitější klávesy a klávesové zkratky 1 kromě šipek patří:
TAB – klávesa, která doplní název proměnné (začíná–li text $), uživatelského jména
(začíná–li text ~), hostname (začíná–li text ), příkazu (spustitelného souboru, aliasu i
funkce) a jména souboru v pořadí tak, jak bylo napsáno. Kdyby byl film Dobří holubi
se vracejí o UN*Xu, Rudolf Hrušinský by tam řekl: „Člověk, který nepoužívá tabulátor,
je pro práci definitivně ztracenÿ.
CTRL–a – tato kombinace vrátí kurzor na začátek řádky.
CTRL–l – vyčistí obrazovku ale zachová aktuální řádku tak, jak byla napsána (vhodné,
pokud jste něco lehce nevychytali a nechcete, aby to ten, kdo u vás sedí viděl).
CTRL–e – posune kurzor na konec řádku
CTRL–r – vynikající kombinace, inkremenálně hledá v historii shodu s tím, co píšete.
Kupodivu to používá málo lidí.
CTRL–t – opět skvělá kombinace, prohodí písmenko pod kurzorem s písmenem předcházejícím (obzvlášť vhodné na zkomoleniny mroe apod.)
Klávesových zkratek je z načné množství, více se o nich dozvíte v manuálových stránkách
bashe. Pro úplnost jen dodám, že si můžete klávesové zkratky sami nastavit v souboru, jehož název je uložen v proměnné INPUTRC (zjistíte příkazem echo $INPUTRC), pakliže tato
proměnná je prázdná nebo nedefinovaná, tak v souboru ~/.inputrc. Více se dozvíte v manuálových stránkách bashe nebo knihovny readline (man 3 readline)
1
Uvažujeme nastavený mód emacs, máte–li vi, přepnete mód příkazem set -o emacs on
Středisko UN*Xových technologií
6
Kamil ’JP’ Dedecius
Jemný úvod do shellů
4.2 Funkce
Funkce jsou tématem pro příští přednášky, nicméně se o nich krátce zmíníme. Funkce označuje posloupnost příkazů, které se v daném pořadí provádějí. V mém /etc/profile mám
následující dvě funkce:
# DISTCC ON
function distccon() {
echo "Zapinam distribuovane kompileni na hostech"
export CCACHE_PREFIX="distcc"
export DISTCC_HOSTS="147.32.117.168 147.32.117.20"
}
# DISTCC OFF
function distccoff() {
echo "Vypinam distribuovane kompileni na hostech"
unset CCACHE_PREFIX
unset DISTCC_HOSTS
}
První z nich mi zapíná a druhá vypíná distribuované kompilování na daných hostitelských
počítačích. To pak lze zapnout jednoduše příkazem
$ distccon
Otázka pro vás: Stačí napsat prvních pár písmen a doplnit TABem?
4.3 Aliasy
V této kapitole se dostáváme k jedné z nejužitečnějších možností bashe – aliasům. Alias je
druhý (třetí. . .) název pro funkci, takže pokud trpíte maniakálním rychlopsaním s množstvím
překlepů limitně se blížícím nekonečnu, můžete si nadefinovat tyto překlepy jako aliasy pro
původně zamýšlený příkaz, např.:
alias mroe="more"
alias moer="more"
alias m="more"
Za zmínku stojí, že poslední alias ulehčuje práci nejvíc, stačí pak jen
m mujsoubor
Aby aliasy vydržely, je třeba je umístit do tepla souboru, který čte bash po spuštění
(nejčastěji .bashrc v domovském adresáři).
Za domácí úkol si zjistěte, jak je vyřešit alias na barevný výpis adresářů pomocí ls (řešení
najdete v těchto materiálech ;o)).
Středisko UN*Xových technologií
7
Kamil ’JP’ Dedecius
Jemný úvod do shellů
4.4 Symbolické odkazy – symlinky
Symbolické odkazy, neboli symlinky slouží ke ”vložení” souboru do konkrétního adresáře,
přičemž tento soubor má zůstat v adresáři ve kterém je doteď. Klasická kopie by zbytečně
zabírala místo, proto se vytvoří pouze symlink, jehož velikost je minimální (pouze obsahuje cíl
odkazu) a přitom se na první pohled chová, jako by to byl onen soubor (který je ve skutečnosti
jinde).
Dejme tomu, že chcete mít ve svém domovském adresáři soubor BASH-PROMPT, který
se nachází v /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO. Můžete si ho ještě jednou
zkopírovat, ale jak už jsme řekli, to není systémové řešení, to je řešení a la večerníček Pat a
Mat. Protože chcete být uznávanými UN*Xáky, uděláte to následovně:
ln -s /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO BASH-HOWTO
5 Jemný úvod do proměnných
Každý, kdo si nainstaluje na počítač nějaký ten UN*X se diví, proč že mu nejde síť mimo
koleje. V této kapitole se dozvíte, jak tento problém jednoduše vyřešit.
Nejprve je ale na řadě nutné zlo v podobě teoretického úvodu.
V UN*Xech rozeznáváme několik druhů proměnných podle možností jejich přístupu k
nim. Konkrétně budeme–li uvažovat jako příkazový interpret bash, máme k dispozici lokální,
environmentální a shellové proměnné.
Lokální proměnné jsou ty, které jsou blízké konkrétní instanci shellu. Nemají k nim přístup
programy. Environmentální proměnnéjsou dostupné vší havěti spuštěné z aktuálního shellu.
Některá na nich dokonce může záviset, např. programy pracující se sítí. Shellové proměnné
určují charakteristiky spuštěného shellu. Mezi tyto proměnné patří např.:
BASH VERSION – název mluví sám za sebe :o)
GROUPS – obsahuje seznam skupin, jichž je uživatel členem.
HOSTNAME – „ jménoÿ počítače
PWD – aktuální adresář
IFS – Internal Field Separator – oddělovač polí, defaultně mezera, tabulátor, newline
PATH – cesta, kde se vyhledávají spustitelné soubory
HOME – domovský adresář aktuálního uživatele
PS1, PS2, PS3, PS4 – prompty
Proměnným se v bashi přiřazuje hodnota zápisem
PROMENNA=hodnota
Pakliže chceme mít proměnnou nastavenu jako proměnnou prostředí, musíme ji vyexportovat – možné jsou dva způsoby jak vytvořit globální proměnnou:
Středisko UN*Xových technologií
8
Kamil ’JP’ Dedecius
Jemný úvod do shellů
SUT=’borci’
export PROMENNA
export JP=’borec nejvetsi’
V uvedených případech jsme si vyexportovali dvě proměnné, SUT a JP. První případ je
klasičtější, funguje narozdíl od druhého i na původním Bourneově shellu. Oba ale nejsou k
ničemu, autor si na nich jen spravoval sebevědomí po dlouhém a úmorném dni ;o).
Proměnná, která narozdíl od těch předchozích udělá mnohé, je http proxy. Určitě neuhádnete, čeho docílíte následujícím zápisem:
export http_proxy=’http://cache2.sh.cvut.cz:3128’
Jak asi správně tušíte, začne vám zázračně chodit síť i mimo Strahov 2 :o)
6 Nejčastější programy a příkazy spouštěné ze shellu
Zatím jste se dozvěděli, jak co nastavit a jak si co zjednoduššit. Ovšem šedá je každá teorie
a my jsme mladí a chceme se bavit3 . Nuže, následuje výčet programů a příkazů, který by se
v začátcích mohl hodit.
6.1 Shellové „built–inÿ příkazy
cd – změní adresář
echo – vypíše text nebo proměnnou
exit – ukončí aktuální shell (též CTRL–d)
help – vypíše nápovědu k shellovému příkazu, jehož název následuje
kill – pošle signál procesu (man 7 signal)
logout – ukončí aktuální login shell
pwd – vypíše celou cestu k aktuálnímu adresáři (hodnotu proměnné PWD)
set – inicializuje proměnnou, s parametrem -o mění nastavení shellu
type – vypíše jak by se s tím, co následuje zacházelo (skript, soubor, roura. . .)
ulimit – nastavuje limity uživatele (max. počet procesů, max. velikost souboru. . .)
umask – nastavuje práva nově vytvořených souborů (viz poslední kapitola)
unset – zruší proměnnou
2
Tedy pokud se v cache2.sh opět nešťourá nějaký umělec.
Očekáváte–li nyní návod, jak si v shellu pustit „péčkoÿ nebo zapařit nějakou pořádnou gamesku, jste na
špatné adrese. Nás baví práce v shellu :o))
3
Středisko UN*Xových technologií
9
Kamil ’JP’ Dedecius
Jemný úvod do shellů
Ostatní programy a příkazy
6.2 WWW
lynx – nejklasičtější z klasických webových prohlížečů
links – český webový prohlížeč, podstatně vylepšen (menu přes ESC)
6.3 FTP
ftp – klasický a nepoužitelný FTP klient
lftp – nejlepší FTP klient pod sluncem
curl – stahování po FTP, HTTP (už víte, proč dostala „Didoÿ tolik hlasů? :o)
wget – dtto
6.4 Pošta a news
pine – jednoduchý na ovládání
mutt – nejpoužívanější klient na GNU/Linuxu, trochu složitější než pine
6.5 IM
licq – konzolový klient k licq
centericq – skvělý konzolový IM klient, umí nejen ICQ, ale i Jabber, IRC, AIM a Yahoo!
6.6 Audio a video
mplayer – nevyžaduje komentář ;o)
mpg123 a mpg321 – přehrávače hudby
6.7 IRC
irc
centericq
epic
6.8 Textové editory
piko, nano – jednoduché na ovládání
emacs – vychází z klasického UNIXového emacsu, sofistikovaný
vi – tak trochu hardcore
vim – vi improved, vylepšené vi, stejně hardcore :o) Až ho budete chtít zkusit, zapamatujte si sekvenci kláves escape, :q, enter :o))
Středisko UN*Xových technologií
10
Kamil ’JP’ Dedecius
Jemný úvod do shellů
6.9 Další užitečné drobnosti
V rámci přednášek se potkáte s některými z následujících příkazů a programů. Můžete si je
nastudovat dopředu ;o)
sort – třídí data ze vstupu
uniq – vytváří unikátní data
sed – nástroj na práci s REGEX
awk – nástroj na práci s REGEX
grep – vybírá data ze souborů podle REGEXu
find – vyhledávání souborů
diff – vyhledávání rozdílů v souborech (takto vznikají patche)
cat – výpis obsahu souboru na definovaný výstup
more – stránkovaný výpis souboru
less – méně než more, ale méně je někdy více ;o)
tar, untar – tape archiever
gzip, gunzip – kompresní program
cp – kopírování souborů
mv – přesun souborů
rm – smazání souborů
mkdir – vytvoření adresáře
rmdir – zrušení prázdného adresáře
tree – stromový výpis adresáře
ssh – klient SSH
scp – kopírování po SSH
passwd – změna hesel
adduser, useradd – bez komentáře
ifconfig, ip – nastavení sítě
ps – výpis procesů
top – monitorování procesů
Středisko UN*Xových technologií
11
Kamil ’JP’ Dedecius
Jemný úvod do shellů
7 Prompt, to je pro bashistu výzva
Prompt anglicky znamená výzva, jeho prostřednictvím nás shell nejen vyzívá k zadání příkazu,
ale zároveň k jeho změně. Většina UN*Xových distribucí přichází s více či méně defaultním
promptem, který povětšinou bývá klasicky bílý. V této kapitole se dozvíte, jak jej změnit k
obrazu svému.
Nejprve se podíváme na zoubek escape sekvencím, které by se mohly hodit:
d – datum
e – ASCII escape znak
h – hostname po první tečku (mujscot.doma.pod.mostem.cz -¿ mujscot)
H – kompletní hostname
l – jméno aktuálního terminálu (např. tty1)
n – znak NL
s – název shellu (např. bash)
t – aktuální čas ve 24 hodinovém formátu
T – dtto ve 12 hodinovém formátu
u – aktuální uživatel
v – verze shellu
w – hodnota proměnné PWD
W – basename z proměnné PWD (/home/opicak -¿ opicak)
$ – je–li hodnota EUID = 0, pak vypíše znak #, jinak $
– znak
[ – začátek sekvence netisknutelných znaků
] – konec sekvence netisknutelných znaků
Klasický prompt, na který jsme zvyklí a používáme ho každou chvíli je definován environmentální proměnnou PS1. Prompty PS2 až PS4 se většinou nemění. PS1 tak, jak je používám
já (po odstranění barev) se vytvoří a vypadá následovně:
$ export PS1=’[\u@\h \W]\$ ’
[jp@mojscot ~]$
Středisko UN*Xových technologií
12
Kamil ’JP’ Dedecius
Jemný úvod do shellů
Tabulka 1: Barvičky – sekvence
barva
sekvence
černá
0;30
tmavě šedá
1;31
modrá
0;34
světle modrá
1;34
zelená
0;32
světle zelená
1;32
azurová
0;36
světle azurová
1;36
červená
0;31
světle červená
1;31
fialová
0;35
světle fialová
1;35
hnědá
0;33
žlutá
1;33
světle šedá
0;37
bílá
1;37
Protože tenhle prompt je sice „výkonnýÿ, ale nevzhledný, používám k jeho dokrášlení
barvičky. Ty se zadávají poměrně nepěknými sekvencemi, takže dosáhnout kýženého výsledku
na první pokus je zhola nemožné.
Prompt je pak možné nastavit dvěma způsoby – buď si nastavit proměnné s názvy barev
a z proměnných pak sestavit prompt, nebo rovnou. První způsob je podstatně přehlednější,
já však dávám přednost druhému. Můj prompt pak vypadá následovně 4 :
[jp@mujscot temp]$ export PS1=’ [ 033[1;32m ][ u@ h W]$
[jp@mujscot temp]$
[ 033[0m ]’
Prompt mého vlastního stroje je potom celý zelený. Jelikož jsem většinu času připojen po
SSH i k jiným počítačům, mám na nich nastaven jinak barevný hostname což mi umožňuje
jejich rychlé vizuální odlišení a zvyšuje tím se míra bezpečnosti práce na nich (nestává se mi,
že bych pracoval na jiném stroji než chci). Stroje, k nimž mám roota, mají nastavený prompt
červený a to ještě na každém stroji je prompt jinak sestaven tak, abych je lehce odlišil.
Kdybyc měl roota na více počítačů, přistoupil bych k barevné změně u hostname, zatím to
ale není aktuální. Jak vidíte, i taková drobnost jako je barva promptu může významně vylepšit
bezpečnost.
8 Něco málo o bezpečnosti, aneb root je hrozba systému
Bylo nebylo, jednoho dne byl rootem stvořen funkční desktop. A ten desktop běžel bez problémů tak dlouho, dokud jej ten samý root nesejmul. Možná to zní nesmyslně, ale bohužel
tento scénář je pravdivý. Největší hrozbou pro systém je totiž sám root, pravděpodobnost, že
4
Paradoxně bylo ještě podstatně horší vytvořit ten text v LATEXu než v bashi :o)).
Středisko UN*Xových technologií
13
Kamil ’JP’ Dedecius
Jemný úvod do shellů
jej „sundáÿ hacker je řádově menší. Proto si dávejte pozor, co jako root děláte. Lépe řečeno,
pod rootem nedělejte nic, co jde udělat pod normálním uživatelským účtem.
Vzpomeňme příhodu, kdy se jakýsi člověk, který evidentně neměl s Linuxem žádné zkušenosti, ptal na IRC jak smazat mailovou frontu. I poradil mu nedobrý jedinec zkusit příkaz
rm -rf /
Jak to skončilo si lze domyslet. Ovšem jako vše mělo i toto svou dobrou stránku – frontu
smazal ;o).
Jako jiný příklad uvedu ten, jež se stal mě samotnému (za své chyby bychom se neměli
ani tak stydět, jako se z nich především poučit) – jednou jsem ve spěchu přesouval data mezi
dvěma uživatelskými účty. Abych neměl problémy s právy, dělal jsem tuto činnost jako root s
tím, že pak akorát změním vlastníka. Jelikož se jednalo o celé adresáře, chtěl jsem na to použít
chown rekurzivně, ovšem nějak jsem v tom spěchu napsal cestu špatně a omylem přivlastnil
druhému uživateli trochu víc, než jsem chtěl – celý adresář /home. Naštěstí jsem byl jediným,
kdo měl k onomu kontu přístup. Hlavní věcí bylo, že už jsem uměl skriptovat, takže náprava
trvala několik málo okamžiků, ale krve by se ve mně nedořezal. Proto si na to dávejte pozor.
Jedním z nejhorších zlozvyků je spouštění různých „uživatelskýchÿ programů pod rootem.
Rovněž tak přihlašování roota do desktopu (např. KDE) nebo okenního manageru (WindowMakeru, *wm aj.) by se mělo trestat veřejným bičováním.
Administrátoři různých serverů si často neuvědomují, že ani kompilace programů pod
rootem není bezpečná. Pokud si to troufá někdo na desktopu, jeho hloupost (zdůrazňuji slovo
hloupost), pokud to dělá někdo na serveru, zasloužil by za uši. Důvod je prostý – soubor
Makefile může obsahovat nebezpečné direktivy.
Pokud nutně potřebujete dát někomu rootovská práva na konkrétní činnost (např. čtení
logů), udělejte to přes sudo. Pakliže už něco děláte jako root, okamžitě jak svou práci dokončíte, ukončete všechny programy a odhlašte se z roota. Opět jeden případ za všechny – kolega
editoval /etc/password a v klidu odešel od svého počítače pryč, ponechaje nejen otevřený
rootův účet na svém počítači, ale v něm dokonce i spuštěný editor vipw a v něm otevřený
onen soubor. Samozřejmě aplikace, které pak chtěly do tohoto souboru padaly jak švestky a
důvod nebyl na první pohled patrný.
Vyvarovávejte se suid a sgid binárek, je to cesta do pekel. Programů, které se spouští pod
jiným EUID (efektivní UID), by mělo být na systému minimum, jmenujme např. passwd, sloužící ke změně hesla uživatele. Ten suid být musí, neboť potřebuje zapisovat do /etc/shadow,
kam má práva jen root. Naopak velmi špatným nápadem by byl bash jako suid root. S takovým by měl každý právo dělat si na systému co by chtěl. Opět mi to nedá nevzpomenout na
jiného člověka, jemuž jeho kamarád soustavně hackoval počítač. Důvodem byl dobře schovaný
shell, který byl právě suid root :o)).
Mějte správně nastavená práva současných souborů a na nové soubory (umask). Práva
jsou na linuxu čísla z osmičkové soustavy, kde:
čtení (r) = 4
zápis (w) = 2
spouštění (x) = 1
Středisko UN*Xových technologií
14
Kamil ’JP’ Dedecius
Jemný úvod do shellů
Práva se zapisují v tripletu ugo, kde u je vlastník (user), g skupina (group) a o jsou
ostatní uživatelé (others), přičemž se vyjadřuje hodnota součtu přidělených práv. Práva je
možné také zapisovat písmeny, opět v pořadí ugo. Tedy například 754 je ekvivalentí k rwxrxr–. Práva nových souborů jsou nastavena automaticky dle hodnoty umasku. Hodnota umasku
se odečítá od plných práv v tripletu, tedy od 777. Máme-li např umask 0022 (první nula
vyjadřuje osmičkové číslo), pak nově vytvořené soubory mají práva 755. Pokud chceme být
hodně restriktivní, nastavíme umask 0077, čili skupina a ostatní uživatelé nemají k námi nově
vytvořeným souborům žádná práva.
Tím náš stručný úvod do bezpečnosti končí. Problematika bezpečnosti UN*Xů je ale velice
komplexní, proto se k ní budeme často vracet (a pokud to vyjde, ukážeme si někdy, jak takový
špatně zabezpečený stroj kompromitovat).
9 Otázky, aneb dávali jste pozor?
Jaký shell se nejvíce používá na GNU/Linuxu? Je to Bourne Shell?
V jakém adresáři většinou najdeme shelly?
Jak je to s /bin/sh na GNU/Linuxu?
Co kompatibilita bashe s klasickým sh?
Jaký je rozdíl mezi interaktivním a neinteraktivním shellem? Co je login shell?
Kdy bash načítá ~/.bashrc?
Co vše doplní klávesa TAB?
Kam se běžně umisťují definice aliasů?
K čemu jsou symbolické odkazy a jak se jim běžně říká?
Co značí proměnná PS1?
Co značí proměnná IFS?
Jak se udělá proměnná environmentální?
Proč nepracovat pod rootem, pokud to není nutné?
Jak jsou definována práva na UN*Xech (triplet, hodnoty)?
K čemu je umask?
Naučili jste se něco nového? Nebylo to moc nudné? (odpověď nám můžete dát na
http://sut.sh.cvut.cz)
10 Závěr
Tak jako všechno v životě, i tato přednáška končí. Buďte pilní a poznávejte krásy těchto úžasných operačních systémů, ať už jde přímo o UNIX, anebo o jiný OS který z něj vychází (např.
*BSD nebo GNU/Linux). A neváhejte navštívit naše další přednášky, informace najdete na
webových stránkách projektu SUT http://sut.sh.cvut.cz.
Středisko UN*Xových technologií
15
Kamil ’JP’ Dedecius
Jemný úvod do shellů
11 Literatura
Více se o probraných tématech dozvíte v následující literatuře 5 :
Sams Teach Yourself Shell Programming in 24 Hours (ISBN 0–672–31481–9)
Bash Prompt Howto (najdete v /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO nebo
na internetu)
Hatch, B. a kol.: Hacking bez tajemství – Linux. Computer press, Brno 2003
man 1 bash
man 1 chmod
man 1 umask
man 1 ln
manuálové stránky zmíněných programů
12 O tomto dokumentu
Tento dokument byl vysázen v systému LATEX. Autor se omlouvá za nedokonalou sazbu a problémy s některými fonty, ovšem již nezbývá čas zabývat se kompatibilitou s Acrobat Readerem.
Věcné chyby reportujte na [email protected] nebo na webových stránkách projektu SUT
http://sut.sh.cvut.cz. Tento dokument byl připraven jako pomůcka k přednášce Jemný úvod
do shellů. Můžete jej volně šířit v nezměněné podobě pod stejným názvem.
5
Není citována podle normy, ale za to mě snad popotahovat nebudete :o))
Středisko UN*Xových technologií
16

Podobné dokumenty

sborník souhrnů - Lékařská fakulta

sborník souhrnů - Lékařská fakulta kteří chtěji pracovat, zařadit. Proto byl vypracován postup, který doporučuje zařazování alergiků a k alergii predisponovaných osob do

Více

Abíčko - AbcLinuxu.cz

Abíčko - AbcLinuxu.cz Vítejte u čtení časopisu Abíčko. Abíčko vychází jako měsíční příloha serveru http://www.abclinuxu.cz a obsahuje výběr toho nejzajímavějšího obsahu, který zde byl v minulém měsíci publikován. Touto ...

Více

Anna Bernáthovámá doma hodně telefonů. A my jsme toho využili!

Anna Bernáthovámá doma hodně telefonů. A my jsme toho využili! ale naopak ctíte jednoduché a přímé ovládání? Pak je právě pro vás určen program CenterICQ! Nenechte se zmást tím, že obsahuje v názvu slovo ICQ. Dnes už si poradí i s mnoha dalšími protokoly, jako...

Více

Žalmy - Rozhovor nad Biblí

Žalmy - Rozhovor nad Biblí jistým konkrétním způsobem si jeho činů používá, přiznává se k nim. I když se věci nedaří podle našich vlastních představ, můžeme se v každé situaci pokusit o svých sto procent, ke kterým nás vede ...

Více

Jemný úvod do shellů II

Jemný úvod do shellů II Soubory můžeme dále vyhledávat podle velikosti, data poslední změny, modifikace, přístupu, podle regulárních výrazů, nastavených práv, uživatele atd. Některé z těchto možností jsou specifikovány čí...

Více

1) Živá příroda 3.r.

1) Živá příroda 3.r. sedmikráska chudobka, smetánka lékařská (pampeliška) 2) Zjisti z učebnice, jakými způsoby se rozmnožují: Jahodník ……………………………………………………………………………….. Tulipán .……………………………………………………………………………….. Brambory...

Více