Linux documentation Project (CS) / 1. Linux –příručka uživatele
Previous Content Next Up

 

9. Konfigurace operačního systému Unix

9.1 Konfigurace příkazového interpretu bash

    Filosofie operačního systému Unix se od filosofie jiných operačních systémů podstatně liší v jedné věci. Autoři Unixu se nepokoušeli předvídat všechny potřeby všech uživatelů. Místo toho se pokusili navrhnout operační systém tak, aby si každý uživatel pracovní prostředí svého operačního systému snadno upravil sám podle svých potřeb. Konfigurace jednotlivých programů operačního systému Unix se definuje prostřednictvím tzv. konfiguračních souborů.

    Někdy jsou označovány jako “ini-files” nebo “rc files” nebo dokonce jako “dot files” (jedná se zpravidla o soubory, jejichž jména začínají tečkou). Pokud si vzpomínáte, tak jména souborů začínající znakem “.” nejsou normálně příkazem ls zobrazována.

    Nejdůležitějií konfigurační soubory jsou ty, které používá příkazový interpret. Implicitním příkazovým procesorem v operačním systému Linux je bash a právě jemu bude věnována tato kapitola. Než začneme popisovat, jak příkazový interpret bash konfigurovat, podívejme se na soubory, které bash vyhledává.

9.1.1 Inicializace příkazového interpretu bash

Existuje několik různých způsobů, jak příkazový procesor bash spustit. Tzv. login-shell se automaticky spouští poté, co se přihlásíte do systému.

    Další způsob spočívá ve spuštění interaktivního příkazového procesoru (interactive shell). To je jakýkoliv příkazový procesor, který se prezentuje příkazovým řádkem. Příkazový interpret, jenž se spustí bezprostředně po přihlášení se do systému, je také interaktivní. Jiným příkladem interaktivního příkazového interpretu je program xterm spuitiný z prostředí X Window.

    Existují také neinteraktivní příkazové interprety. Tyto procesory se používají k vykonávání příkazů uvedených v souboru, jako jsou dávkové soubory s příponou .BAT v operačním systému MS-DOS. Analogií v operačním systému Unix jsou tzv. skripty. Skript příkazového procesoru je něco jako miniprogram. Jsou sice výrazně pomalejší než kompilovaný program, ale snadno se vytvářejí a modifikují.

Příkazové procesory v operačním systému Unix používají v závislosti na typu následující inicializační soubory:

Typ příkazového procesoru inicializační soubor
Interaktivní příkazový interpreter spuštěný při přihlášení se do systému .bash_profile
Interaktivní příkazový procesor .bashrc
Neinteraktivní příkazový procesor skript příkazového procesoru

9.1.2 Inicializační soubory

    Protože většina uživatelů chce mít stejné uživatelské prostředí bez ohledu na to, jaký typ příkazového procesoru se spustí, začneme konfiguraci tím, že do konfiguračního souboru .bash_profile vložíme jednoduchý příkaz “source ~/.bashrc”. Příkaz source “sdělí” příkazovému procesoru, že má jeho argument interpretovat jako skript. To znamená, že se při každém spuštění skriptu .bash_profile také spustí skript .bashrc.

Nyní budeme přidávat příkazy do našeho souboru .bashrc. Do souboru .bash_profile se zadávají pouze příkazy, které se mají spouštět při přihlášení se do systému.

9.1.3 Vytváření druhých jmen

    Jakým způsobem lze měnit konfigurační nastavení? Hned uvedeme příklad, který si do svého konfiguračního souboru .bashrc zadává devadesát procent uživatelů operačního systému Unix:

alias ll="ls -l"

    Příkaz definuje tzv. alias (druhé jméno) příkazu. V našem případě se jméno příkazu ll rozšiřuje a příkaz příkazového procesoru “ls –l”. Za předpokladu, že příkazový procesor bash přečetl uvedenou definici ve vašem konfiguračním souboru .bashrc, pak má příkaz ll stejný efekt jako příkaz ls -l. Přitom ušetříte polovinu stisknutých kláves. Když zadáte v příkazovém řádku ll a stisknete e, příkazový procesor zadaný příkaz rozvine podle definice a pak realizuje příkaz ls -l. Ve skutečnosti v systému příkaz ll neexistuje, ale příkazový procesor bash jej automaticky transformuje na platný program.

    Některé příklady druhých jmen jsou uvedeny na této straně dole. Můžete si je vložit do vašeho souboru .bashrc. Zvláště zajímavý je první z nich. Je-li definován alias ls="ls -F", pak po každém zadání příkazu ls bude automaticky aplikovat volbu -F. Platí, že se alias nikdy nepokusí rekurzivně rozšířit sám sebe. Uvedený příklad demonstruje nejčastěji používaný způsob automatického přidávání voleb do příkazů.

    Všimněte si znaku “#”. Ve skriptech příkazového procesoru se tento znak používá k označení komentáře a příkazový procesor zbytek řádku za znakem # ignoruje.

    Dále jste si mohli všimnout několika dalších věcí. Především se v některých definicích nevyskytují uvozovky, například v definici pu. Platí totiž, že pokud se na pravé straně znaku rovná se (=) vyskytuje jediné slovo, pak se uvozovky nemusejí uvádět.

    Nic by se nestalo, kdyby zde uvozovky byly uvedeny. Určitě však uvozovky používejte v případě, když budete definovat nové jméno pro příkaz s volbami a/nebo argumenty. Například:

alias rf="refrobnicate -verbose -prolix -wordy -o foo.out"

alias ls="ls -F" # give characters at end of listing

alias ll="ls -l" # special ls

alias la="ls -a"

alias ro="rm *~; rm.*~" # removes backup files created by Emacs

alias rd="rmdir" # saves typing!

alias md="mkdir"

alias pu=pushd # pushd, popd, and dirs weren't covered

alias po=popd # manual---you might want to look them up

alias ds=dirs # in the bash manpage

# these all are just keyboard shortcuts

alias to="telnet cs.oberlin.edu"

alias ta="telnet altair.mcs.anl.gov"

alias tg="telnet wombat.gnu.ai.mit.edu"

alias tko="tpalk kold@cs.oberlin.edu"

alias tjo="talk jimb@cs.oberlin.edu"

alias mroe="more" # spelling correction!

alias moer="more"

alias email="emacs -f rmail" # my mail reader

alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\""

# one way of invoking emacs

Asi se vám zdá, že poslední alias má divně umístěné uvozovky:

alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\""

    Jak asi tušíte, chtěl jsem umístit uvozovky do samotných voleb. Proto jsem musel před každou uvozovku vložit obrácené lomítko. Příkazový procesor pak takovou uvozovku nebude interpretovat obvyklým způsobem.

    Všimněte si také dvou definic pro opravu chybně zadaného příkazu more. Pokud omylem zadám “mroe” nebo “moer”, bude příkazový procesor “vědět”, že jsem chtěl zadat “more”.

Aliasy neinterferují s argumenty předávanými programům. To znamená, že například příkaz /home/larry# mroe hurd.txt bude fungovat dobře.

    Určitě platí, že správné používání definice druhých jmen představuje polovinu konfiguračních možností, které jsou u příkazových procesorů k dispozici. Při práci v operačním systému Unix si všímejte, které příkazy často zadáváte, a pak si pro ně pořiďte druhá jména, tedy zkratky. Zjistíte, že se vám pak bude pracovat mnohem radostněji.

9.1.4 Systémové proměnné

    V souboru .bashrc se definují další důležitá konfigurační nastavení prostřednictvím systémových proměnných (environment variables). Co jsou to systémové proměnné? Pojďme na to z druhé strany: předpokládejme, že čtete dokumentaci k programu fruggle a že narazíte na následující věty:

Fruggle normally looks for its configuration file, .frugglerc, in the user's home directory. However, if the environment variable FRUGGLEPATH is set to a different filename, it will look there instead.

Každý program běží v nějakém prostředí a to je definováno příkazovým interpretem, jenž program volá.

    Lze si představit, že prostředí existuje uvnitř příkazového interpretu. Programátoři mají k dispozici speciální funkci pro získání hodnoty systémové proměnné a program fruggle tuto funkci využívá. To znamená, že ověří hodnotu v systémové proměnné FRUGGLEPATH. Pokud není tato systémová proměnná definována, pak program použije soubor .frugglerc ve vašem domovském adresáři. Pokud však je definována, program fruggle použije její hodnotu místo implicitního souboru .frugglerc.

Nyní si uveďme ukázku, jak změnit prostředí v příkazovém procesoru bash:

/home/larry# export PGPPATH=/home/larry/secrets/pgp

    Pod příkazem export si můžete představit následující větu: “Exportuj tuto proměnnou do prostředí, ze kterého budu spouštět program, tak, aby proměnná byla z tohoto programu viditelná.” Později uvidíte, že jsou i jiné důvody pro používání příkazu export.

    Uvedenou systémovou proměnnou používá program pgp pro šifrování, jehož autorem je Phil Zimmerman. Program pgp implicitně používá váš domovský adresář jako adresář, ve kterém hledá jisté soubory (šifrovací klíče). Také tento adresář využívá k vytvoření dočasných pracovních souborů. Nastavením systémové proměnné PGPPATH jsem změnil pracovní adresář na /home/larry/secrets/pgp. Abych zjistil přesné jméno této systémové proměnné, musel jsem si přečíst manuál k programu pgp. Systémové proměnné se zpravidla uvádějí velkými písmeny a končí na “PATH”.

Je užitečné vědět, jak hodnotu systémové proměnné zjistit:

/home/larry# echo $PGPPATH

/home/larry# .pgp

/home/larry#

    Všimněte si, že jsme před jméno systémové proměnné uvedli znak $. Jedině tak lze zjistit hodnotu systémové proměnné. Pokud byste znak dolaru neuvedli, dostali byste následující výpis:

/home/larry# echo PGPPATH

PGPPATH

/home/larry#

    Znak dolaru se používá k vyhodnocení systémové proměnné, avšak pouze v kontextu s příkazovým procesorem - přesněji s příkazovým procesorem, jenž realizuje interpretaci příkazu.

V jakých případech realizuje příkazový procesor interpretaci?

Proměnná Obsahuje Příklad
HOME Váš domovský adresář /home/larry
TERM Typ vašeho terminálu xterm, vt100, console
SHELL Cesta k vašemu příkazovému procesoru /bin/bash
USER Jméno vašeho účtu   larry
PATH Seznam adresářů, ve kterých se automaticky
vyhledávají programy ke spuštění
/bin:/usr/local/bin:/usr/bin/X11

Je to v těch případech, kdy zadáváte příkaz z příkazového řádku nebo kdy příkazový procesor te příkazy z nějakého souboru, například ze souboru .bashrc.

    Existuje další důležitý příkaz, pomocí kterého lze získat informace o prostředí. Tímto příkazem je env. Po zadání příkazu env se vám zobrazí seznam všech systémových proměnných. Jste-li uživateli systému X Window, pak bude tento seznam velmi dlouhý, proto používejte příkaz env | more.

    Některé systémové proměnné jsou opravdu důležité, proto jsou uvedeny v tabulce 9.1. Tyto systémové proměnné se automaticky definují po přihlášení se do systému. Není proto nutné je nastavovat v souboru .bashrc nebo .bash_login.

    Nyní se blíže podívejme na systémovou proměnnou TERM. Abychom jí mohli porozumět, podívejme se zpět do historie operačního systému Unix. Operační systém musí znát jisté údaje o vaší konzole, aby mohl realizovat takové funkce, jako je zápis znaků na obrazovku, pohyb kurzoru v textovém řádku a podobně. V počátcích rozvoje výpočetní techniky výrobci terminálů průběžně rozšiřovali jejich vlastnosti: nejdříve inverzní video, později znaky pro evropské jazyky, dokonce i první funkce pro kreslení (připomínáme, že jde o dobu, kdy se ještě nikomu ani nesnilo o grafických oknech a myších). Každá nová vlastnost však přinášela programátorům problémy: jak měli vědět, co terminál podporuje a co ne? Jak měli podporovat nové vlastnosti a přitom “neodepsat” staré terminály?

    V operačním systému Unix najdete odpověď na tyto otázky v souboru /etc/termcap. Soubor /etc/termcap obsahuje seznam všech terminálů, o kterých váš operační systém “ví” a dále informace, jakým způsobem se má řídit kurzor. Pokud systémový správce dostane nový terminál, pak pouze do souboru /etc/termcap přidá záznam vztahující se k novému terminálu a nemusí pracně konfigurovat celý operační systém Unix. Někdy je situace ještě jednodušší. Kdysi se stal terminál vt100 od firmy Digital Equipment Corporation jakýmsi pseudostandardem, který převážná většina moderních terminálů respektuje a umí emulovat.

    V operačním systému Linux je někdy hodnota systémové proměnné TERM nastavena jako console, což znamená emulaci terminálu vt100 s některými speciálními funkcemi.

Další proměnná, PATH, je rovněž kritickou systémovou proměnnou z hlediska funkčnosti příkazového procesoru. Zde uvádím nastavení na mém počítači:

/home/larry# env | grep ^PATH

PATH=/home/larry/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/

TeX/bin

/home/larry#

    Systémová proměnná PATH obsahuje seznam adresářů oddělených dvojtečkou, ve kterých systém automaticky vyhledává spustitelné programy. Když například zadám příkaz ls a stisknu klávesu e, bude příkazový procesor bash hledat program ls nejdříve v adresáři /home/larry/bin, který jsem vytvořil pro ukládání mých vlastních programů.

    Program ls jsem však nenapsal já (ten byl pravděpodobně napsán ještě před tím, než jsem se narodil), proto zde příkazový procesor tento příkaz nenašel. Jako další prohledává příkazový procesor adresář /bin. A zde program ls našel. Protože soubor ls je spustitelný program, přestane příkazový procesor dále hledat a spustí jej. Může se stát, že v jiném adresáři bude také uložen spustitelný program ls (například v adresáři /usr/bin), ale příkazový procesor jej nespustí, pokud mu to výslovně nepřikážete:

/home/larry# /usr/bin/ls

    Systémová proměnná PATH existuje hlavně proto, abychom nemuseli při každém spouštění nějakého programu zadávat celou cestu k tomuto programu. Zadáte-li tedy jakýkoliv příkaz, prohledá příkazový procesor všechny adresáře uvedené v systémové proměnné PATH. Když jej najde, spustí jej, a pokud ne, vypíše následující zprávu:

/home/larry# clubly

clubly: command not found

Všimněte si, že moje systémová proměnná PATH neobsahuje aktuální adresář, tedy “.”.

Pokud by obsahovala, pak by vypadala takto:

/home/larry# echo $PATH

.:/home/larry/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr

/TeX/bin

/home/larry#

    Zda zadávat nebo nezadávat aktuální adresář do systémové proměnné PATH je předmětem diskuse v kuloárech okolo operačního systému Unix. Problém tkví v tom, že aktuální adresář v systémové proměnné PATH by mohl představovat “díru” v bezpečnosti systému.

    Předpokládejme, že se přepnete do adresáře, ve kterém někdo nechal virový program “Trójský kůň” a nazval jej ls. Vy nic zlého netušíte a zadáte příkaz ls, což je přirozené, chcete-li se seznámit s novým adresářem. Protože je aktuální adresář uveden v systémové proměnné PATH jako první, spustí příkazový procesor právě tuto verzi příkazu ls. I když jste nechtěli udělat nic špatného, rozpoutali jste ve vašem systému virovou nákazu. Proti takovým haváriím neexistuje dost účinná ochrana. Virový program může spustit osoba, která ani nemá privilegia uživatele root. Stačí, aby měla právo zapisovat do adresáře, ve kterém se virový program nachází. Dokonce to může být její domovský adresář.

Pokud jde o váš systém, je pravděpodobné, že jeden uživatel neklade druhému různé nástrahy ve formě “Trojských koňů” a že kolektiv uživatelů je založen na přátelských a kolegiálních vztazích. Avšak ve velkých systémech s mnoha uživateli (jako jsou například universitní počítače), mohou být desítky programátorů, které byste nejraději ani nepotkali. Z toho vyplývá, že zařazení aktuálního adresáře do systémové proměnné PATH závisí na konkrétní situaci.

Skutečný způsob, kterým je nastavena systémová proměnná PATH v mém počítači, je dostatečně ilustrativní. Zde je uvedeno nastavení v souboru .bashrc:

export PATH=${PATH}:.:${HOME}/bin:/bin:/usr/bin:/usr/local/bin:/usr:/bin/X1:/usr/TeX/bin

    Zde jsem využil skutečnosti, že proměnná HOME je nastavena před tím, než příkazový procesor bash přečte můj soubor .bashrc. Systémová proměnná PATH je tedy nastavena prostřednictvím systémové proměnné HOME. Složené závorky (“{...}") představují další úroveň uvozovek. Oddělují to, co se vyhodnotí po znaku $, proto bude příkazový procesor moci jednoznačně identifikovat následující část příkazu (tedy “/bin” v tomto případě). Zde uvádíme další příklad efektu, který vyvolají složené závorky:

/home/larry# echo ${HOME}foo

/home/larryfoo

/home/larry#

Bez uvedení složených závorek se nevypíše nic, protože neexistuje proměnná prostředí  HOMEfoo:

/home/larry# echo $HOMEfoo

/home/larry#

    Nyní se podívejme na další zvláštní konstrukci v uvedeném příkazu. Jaký je význam řetězce “$PATH"? Tento řetězec zařadí do proměnné prostředí PATH hodnotu proměnné prostředí PATH dříve definovanou. Kde byla nastavena původní hodnota? Soubor /etc/profile slouží jako jistý typ globálního souboru .bash_profile, kde se nacházejí nastavení společná pro všechny uživatele systému. Jeden soubor s globálním nastavením má jistou výhodu. Má-li například systémový správce přidat do proměnné prostředí PATH důležitou cestu, stačí, když to udělá v souboru s globální platností a nemusí opravovat inicializační soubory všech uživatelů. Proto je proměnná prostředí PATH již nastavena a vy ji můžete použít.

    Prostřednictvím jisté proměnné prostředí můžete také specifikovat, jak má vypadat váš příkazový řádek. Tato proměnná prostředí má označení jako PS1. Předpokládejme, že dáváte přednost tomu, aby se stále zobrazovala cesta do aktuálního adresáře. Pak nastavte proměnnou prostředí PS1 takto:

export PS1='$PWD#'

    Jak asi tušíte, jsou zde ve skutečnosti použity dvě proměnné prostředí. První, která se nastavuje, je PS1 a druhou je PWD. Proměnná prostředí PWD může znamenat buď “Print Working Directory”, nebo “PATH to Working Directory”. Vyhodnocení proměnné prostředí však probíhá uvnitř jednoduchých uvozovek. Jednoduché uvozovky slouží k vyhodnocení vnitřního výrazu. Výsledkem tohoto vyhodnocení je proměnná prostředí PWD. Kdybyste použili výraz export PS1=$PWD, pak by se vám stále zobrazoval ten adresář, který byl aktuální v době vyhodnocení tohoto výrazu. Trochu jsme pohled na vyhodnocování proměnných prostředí zkomplikovali, ale to není tak důležité. Pouze si pamatujte, že budete-li chtít zobrazovat v příkazovém řádku aktuální adresář, budete muset použít jednoduché uvozovky.

    Možná, že budete chtít podobný příkazový řádek jako v operačním systému MS-DOS. Pak zadejte export PS1='$PWD>'. Chcete-li mít v příkazovém řádku jméno vašeho systému, zadejte PS1='hostname''>'.

    V posledním příkladu jsme použili nový typ uvozovek, tzv. zpětné uvozovky. Tyto uvozovky ve skutečnosti nic nechrání. Výraz uzavřený ve zpětných uvozovkách se vyhodnotí jako příkaz a výstup se objeví na místě zpětných uvozovek.

Vyzkoušejte si příkazy echo `ls` nebo wc `ls`. Čím více budete seznámeni s příkazovým procesorem, tím užitečnějií vám budou uvedené techniky.

    V souboru .bashrc je mnoho dalších možností, jak konfigurovat váš příkazový procesor, ale zde není dostatek prostoru všechny prodiskutovat. Další podrobnosti si nastudujte v manuálových stránkách k příkazovému procesoru bash nebo se zeptejte zkušených uživatelů. Dále uvádíme kompletní soubor .bashrc, abyste si jej mohli nastudovat.

Představuje typický standard, i když je proměnná prostředí PATH poněkud dlouhá.

# some random stuff:

ulimit -c unlimited

export history_control=ignoredups

export PS1='$PWD>'

umask O22

# application-specific PATHs:

export MANPATH=/usr/local/man:/usr/man

export INFOPATH=/usr/local/info

export PGPPATH=${HOME}/.pgp

# make the main PATH:

homepath=${HOME}:~/bin

stdpath=/bin:/usr/bin:/usr/local/bin:/usr/ucb:/etc:/usr/etc:/urs

/games

pubpath=/usr/public/bin:/usr/gnusoft/bin:/usr/local/contribs/bin

softpath=/usr/bin/X11:/usr/local/bin/X11:/usr/TeX/bin

export PATH=.:${homepath}:${stdpath}:${pubpath}:${softpath}

# Technically, the curly braces were not necessary, because the

colons

# were valid delimiters; nevertheless, the curly braces are a good

# habit to get into, and they can't hurt.

# aliases

alias ls="ls -CF"

alias fg1="fg %1"

alias fg2="fg %2"

alias tba="talk sussman@tern.mcs.anl.gov"

alias tko="take kold@cs.oberlin.edu"

alias tji="talk jimb@totoro.bio.indiana.edu"

alias mroe="more"

alias moer="more"

alias ll="ls -l"

alias la="ls -a"

alias ro="rm *~; rm.*~"

alias rd="rmdir"

alias pu=pushd

alias po=popd

alias ds=dirs

alias to="telnet cs.oberlin.edu"

alias ta="telnet altair.mcs.anl.gov"

alias tg="telnet wobat.gnu.ai.mit.edu"

alias email="emacs -f rmail"

alias ed2="emacs -d floss:0 -fg \"grey95\" -bg \"grey50\""

function gco

{

gcc -o $1 $1.c -g

}

9.2 Inicializační soubory systému X Window

    Většina lidí dává při své práci přednost grafickému uživatelskému prostředí, kterým je v opeačním systému Unix systém X Window. Jestliže jste seznámeni s operačním systémem Macintosh nebo Microsoft Windows, pak vám systém X Window bude připadat velmi známý.

Méně známé vám však budou připadat konfigurační možnosti, které systém X Window nabízí.

    V případě operačního systému Macintosh nebo Microsoft Windows se konfigurace realizuje přímo v grafickém uživatelském prostředí. Když chcete například změnit barvu pozadí, klepnete myší na novou barvu nějakého speciálního inicializačního grafického programu. V systému X Window se implicitní hodnoty řídí textovými soubory, které můžete přímo editovat jinými slovy, chcete-li například zadat novou barvu pozadí, musíte její jméno uvést v jistém inicializačním souboru.

    Nikdo nepopírá, že inicializační metody v systému X Window jsou poněkud těžkopádnějií než u komerčních programů. Domnívám se, že tendence zachovávat textově orientované inicializační metody dokonce i v grafickém uživatelském prostředí tkví v tom, že například systém X Window vytvořila poměrně nesourodá skupina programátorů, kteří až příliš lpí na tradicích dodržovaných v operačních systémech typu Unix. Tyto tendence se mohou v příštích verzích systému X Window změnit (alespoň doufám, že se změní), ale nyní se budeme zabývat inicializací prostřednictvím textových souborů. Tak alespoň máte k dispozici velmi flexibilní a přesnou kontrolu nad konfigurací.

Nejdůležitějií konfigurační soubory pro systém X Window jsou tyto:

.xinitrc Skript, který systém X Window spouští ve fázi startování.

.twmrc Soubor, který čte správce oken twm.

.fvwmrc Soubor, který čte správce oken fvwm.

    Všechny uvedené soubory by měly být uloženy ve vašem domovském adresáři. Soubor .xinitrc je jednoduchý skript příkazového procesoru, jenž se automaticky spouští ve fázi startování systému X Window. Může dělat vše, co mohou dělat ostatní skripty, avšak nejvíce ze všeho má smysl jej použít k nastartování různých programů systému X Window a k nastavení parametrů. Posledním příkazem v souboru .xinitrc je obvykle příkaz pro spuštění správce oken, například /usr/bin/X11/twm.

    Jaký druh konfiguračních nastavení má smysl v souboru .xinitrc uvádět? Snad nějaká volání programu xsetroot, čímž si můžete nastavit pozadí okna a vlastnosti kurzoru. Dále volání programu xmodmap, jenž předá serveru informace o tom, jak má interpretovat signály z vaší klávesnice. Všechny ostatní programy, které se mají spustit pokaždé spolu se systémem X Window (například xclock).

Zde uvádím některé řádky z mého souboru .xinitrc. Váš konfigurační soubor bude jistě vypadat jinak, proto jej považujte za pouhý příklad.

#!/bin/sh

# The first line tells the operating system which shell to use in

# interpreting this script. The script itself ought to be marked as

# executable; you can make it so with "chmod Ctrl+x ~/.xinitrc".

# xmodmap is a program for telling the X server how to interpret your

# keyboard's signals. It is *definitely* worth learning out. You

# can do "man xmodmap", "xmodmap -help", "xmodmap -grammar", and more.

# I don't guarantee that the expressions below will mean anything on

# your system (I don't even guarantee that they mean anything on

# mine):

xmodmap -e 'clear Lock'

xmodmap -e 'keycode 176 = Control_R'

xmodmap -e 'add control = Control_R'

xmodmap -e 'clear Mod2'

xmodmap -e 'add Mod1 = Alt_L Alt_R'

# xset is a program for setting other parameters of the X server:

xset m 3 2 & # mouse parameters

xset s 600 5 & # screen saver prefs

xset s noblank # ditto

xset fpCtrl+ /home/larry/x/fonts # for cxterm

# To find out more, do "xset -help"

# Tell the X server to superimpose fish.cursor over fish.mask, and use

# the resulting pattern as my mouse cursor:

xsetroot -cursor /home/lab/larry/x/fish.cursor

/home/lab/larry/x/fish.mask &

# a pleasing background pattern and color:

xsetroot -bitmap /home/lab/larry/x/pyramid.xbm -bg tan

# todo: xrdb here? What about .Xdefaults file?

# You should do "man xsetroot", or "xsetroot -help" for

# more information on the program above.

# A client program, the imposing circular color-clock by Jim Blandy:

/usr/local/bin/circles

# Maybe you'd like to have a clock on your screen at all time:

/usr/bin/X11/xclock -digital &

# Allow client program running at occs.cs.oberlin.edu to display

# themselves here, do the same thing for juju.mcs.anl.gov:

xhost occs.cs.oberlin.edu

xhost juju.mcs.anl.gov

# You can simply tell the X server to allow clients running on any

# other host (a host being a remote machine) to display here, but this

# is a security hole -- those clients can be run by someone else,

# and watch your keystrokes as you type your password or something!

# However, if you wanted to do it anyway, you could use a "+" to stand

# for all possible hostnames, instead of a specific hostname, like

# this:

# xhost +

# And finally, run the window namager:

/usr/bin/X11/twm

# Some people prefer other window manager. I use twm, but fvwm is

# often distributed with Linux too:

# /usr/bin/X11/fvwm

    Všimněte si, že některé programy běží na pozadí. Jsou to ty programy, jejichž zadání je ukončeno znakem &. Jiné programy se na pozadí nespouštějí. Rozdíl spočívá v tom, že se startují současně se systémem X Window a běží na pozadí, dokud systém X Window neukončíte.

Jiné se vykonají bezprostředně a ihned skončí - jedním z nich je xsetroot, který pouze nastaví základní okno a chování kurzoru a pak skončí.

    Jakmile se nastartuje správce oken, načte svůj vlastní inicializační soubor. Tento inicializační soubor řídí takové věci, jako je nastavení nabídek, pozice oken, řízení ikon a další. Pokud používáte jako správce oken program twm, pak tímto inicializačním souborem je soubor .twmrc, který se nachází ve vašem domovském adresáři. Jestliže však používáte fvwm, pak je inicializačním souborem soubor .fvwmrc. V následujících oddílech se budeme zabývat pouze těmito dvěma, protože se běžně distribuují s operačním systémem Linux.

9.2.1 Konfigurace programu twm

Soubor .twmrc není skript příkazového procesoru - je napsán v jazyku speciálně vyvinutém pro program twm.

Při konfiguraci prostřednictvím souboru .twmrc si uživatelé nejraději hrají s nastavením oken (barvy a podobně) a nabídek. Zde uvádíme příklad konfiguračního souboru .twmrc:

# Set colors for various parts of windows. This has a great

# impact no the "feel" of your environment.

Color

{

BorderColor "OrangeRed"

BorderTitleForeground "Black"

BorderTitleBackground "Black"

TitleForeground "black"

TitleBackground "gold"

MenuForeground "black"

MenuBackground "LightGrey"

MenuTitleForeground "LightGrey"

MenuTitleBackground "LightSlateGrey"

MenuShadowColor "black"

IconForeground "DimGray"

IconBackground "Gold"

IconBorderColor "OrangeRed"

IconManagerForeground "black"

IconManagerBacground "honeydew"

}

# I hope you don't have a monochrome system, but if you do...

Monochrome

{

BorderColor "black"

BorderTitleForeground "black"

BorderTitleBackground "white"

TitleForeground "black"

TitleBackground "white"

}

# I created beifang.bmp with the program "bitmap". Here I tell twm to

# use it as the default highlight pattern on windows' title bars:

Pixmaps

{

TitleHighlight "/home/larry/x/beifang.bmp"

}

# Don't worry about this stuff, it's only for power users :-)

BorderWidth 2

TitleFont "-adobe-new century schoolbook-bold-r-normal--14-140-75-75

-p-87-iso8859-1"

MenuFont "6x13"

IconFont "lucidasans-italic-14"

ResizeFont "fixed"

Zoom 50

RandomPlacement

# These programs will not get a window titlebar by default:

NoTitle

{

"stamp"

"xload"

"xclock"

"xlogo"

"xbiff"

"xeyes"

"oclock"

"xoid"

}

# "AutoRaise" means that a window is brought to the front whenever the

# mouse pointer enters it. I find this annoying, so I have turned

# off. As you can see, I inherited my .twmrc from people who also

# did not like autoraise.

AutoRaise

{

"nothing" # I don't like auto-raise # Me either # nor I

}

# Here is where the mouse button functions are defined. Notice the

# pattern: a mouse button pressed on the root window, with no modifier

# key being pressed, always brings up a menu. Other locations usually

# result in window manipulation of some kind, and modifier keys are

# used in conjuction with mouse buttons to get at the more

# sophisticated window manipulations.

#

# You don't have to follow this pattern in your own .twmrc -- it's

# entirely up to you how you arrange your environment.

# Button = KEYS : CONTEXT : FUNCTION

# ---------------------------------Button1 = : root : f.menu "main"

Button1 = : title : f.raise

Button1 = : frame : f.raise

Button1 = : icon : f.iconify

Button1 = m : window : f.iconify

Button2 = : root : f.menu "stuff"

Button2 = : icon : f.move

Button2 = m : window : f.move

Button2 = : title : f.move

Button2 = : frame : f.move

Button2 = s : frame : f.zoom

Button2 = s : window : f.zoom

Button3 = : root : f.menu "z"

Button3 = : title : f.lower

Button3 = : frame : f.lower

Button3 = : icon : f.raiselower

# You can write your own functions; this one gets used in the menu

# "windowops" near the end of this file:

Function "raise-n-focus"

{

f.raise

f.focus

}

# Okay, below are the actual menus reffered to in the mouse button

# section. Note that many of these menu entries themselves call

# sub-menus. You can have as many levels of menus as you want, but be

# aware that recursive menus don't work. I tried it.

menu "main"

{

"Vanilla" f.title

"Emacs" f.menu "emacs"

"Logins" f.menu "logins"

"Xlock" f.menu "xlock"

"Misc" f.menu "misc"

}

# This allows me to invoke emacs on several different machines. See

# the section on .rhosts files for more information about how this

# works:

{

"Emacs" f.title

"here" !"/usr/bin/emacs &"

"" f.nop

"phylo" !"rsh phylo \"emacs -d floss:O\" &"

"geta" !"rsh geta \"emacs -d floss:O\" &"

"darwin" !"rsh darwin \"emacs -d floss:O\" &"

"ninja" !"rsh ninja \"emacs -d floss:O\" &"

"indy" !"rsh indy \"emacs -d floss:O\" &"

"oberlin" !"rsh cs.oberlin.edu \"emacs -d floss.life.uiuc.edu:O\" &"

"gnu" !"rsh gate-1.gnu.ai.mit.edu \"emacs -d floss.life.uiuc.edu:O\" &"

}

# This allows me to invoke xterms on several different machines. See

# the section on .rhosts files for more information about how this

# work:

menu "logins"

{

"Logins" f.title

"here" !"/usr/bin/X11/xterm -ls -T `hostname` -n `hostname` &"

"phylo" !"rsh phylo \"xterm -ls -display floss:0 -T phylo\" &"

"geta" !"rsh geta \"xterm -ls -display floss:0 -T geta\" &"

"darwin" !"rsh darwin \"xterm -ls -display floss:0 -T darwin\" &"

"ninja" !"rsh ninja \"xterm -ls -display floss:0 -T ninja\" &"

"indy" !"rsh indy \"xterm -ls -display floss:0 -T indy\" &"

}

# The xlock screensaver, called with various options (each of which

# gives a different pretty picture):

menu "xlock"

{

"Help" !"xlock -mode hop &"

"Qix" !"xlock -mode qix &"

"Flame" !"xlock -mode flame &"

"Worm" !"xlock -mode worm &"

"Swarm" !"xlock -mode swarm &"

"Hop NL" !"xlock -mode hop -nolock &"

"Qix NL" !"xlock -mode qix -nolock &"

"Flame NL" !"xlock -mode flame -nolock &"

"Worm NL" !"xlock -mode worm -nolock &"

"Swarm NL" !"xlock -mode swarm -nolock &"

}

# Miscellaneous programs I run occassionally:

menu "misc"

{

"Xload" !"/usr/bin/X11/xload &"

"XV" !"/usr/bin/X11/xv &"

"Bitmap" !"/usr/bin/X11/bitmap &"

"Tetris" !"/usr/bin/X11/xtetris &"

"Hextris" !"/usr/bin/X11/xhextris &"

"XRoach" !"/usr/bin/X11/xroach &"

"Analog Clock" !"/usr/bin/X11/xclock -analog &"

"Digital Clock" !"/usr/bin/X11/xclock -digital &"

}

# This is the one I bound to the middle mouse button:

menu "stuff"

{

"Chores" f.title

"Sync" !"/bin/sync"

"Who" !"who | xmessage -file - -columns 80 -lines 24 &"

"Xhost Ctrl+" !"/usr/bin/X11/xhost Ctrl+ &"

"Rootclear" !"/home/larry/bin/rootclear &"

}

# X functions that are sometimes convenient

menu "x"

{

"X Stuff" f.title

"Xhost Ctrl+" !"xhost Ctrl+ &"

"Refresh" f.refresh

"Source .twmrc" f.twmrc

"(De)Iconify" f.iconify

"Move Window" f.move

"Resize Window" f.resize

"Destroy Window" f.destroy

"Window Ops" f.menu "windowops"

"" f.nop

"Kill twm" f.quit

}

# This is submenu from above:

menu "windowops"

{

"Window Ops" f.title

"Show Icon Mgr" f.showiconmgr

"Hide Icon Mgr" f.hideiconmgr

"Refresh" f.refresh

"Refresh Window" f.winrefresh

"twm version" f.version

"Focus on Root" f.unfocus

"Source .twmrc" f.twmrc

"Cut File" f.cutfile

"(De)Iconify" f.iconify

"DeIconify" f.deiconify

"Move Window" f.move

"ForceMove Window" f.forcemove

"Resize Window" f.resize

"Raise Window" f.raise

"Lower Window" f.lower

"Raise or Lower" f.raiselower

"Focus on Window" f.focus

"Raise-n-Focus" f.function "raise-n-focus"

"Destroy Window" f.destroy

"Kill twm" f.quit

}

    Věřte mi, že to není zdaleka nejobsáhlejší soubor .twmrc, jaký jsem kdy viděl. Je vysoce pravděpodobné, že nějaký příklad souboru .twmrc bude obsažen ve vaší distribuci systému X Window. Prohledejte adresář /usr/lib/X11/twm/ nebo /usr/X11/lib/X11/twm. Zde byste měli uvedený soubor nalézt.

    Často dělají uživatelé chybu a zapomínají uvádět znak & na konec příkazů. Pokud systém X Window “zatuhne” právě když spustíte nějaký příkaz, pak pravděpodobně tkví příčina v tom, že jste zapomněli uvést znak &. V takovém případě ukončete systém X Window kombinací kláves -a-b opravte soubor .twmrc a spusšte systém X Window znovu.

9.2.1 Konfigurace programu fvwm

Pokud používáte jako správce oken program fvwm, prohledejte tento adresář:  /usr/lib/X11/fvwm/ nebo /usr/X11/lib/X11/fvwm. Zde najdete nějaké příklady konfiguračních souborů.

Poznámka: O programu fvwm nic nevím. Asi bych byl schopen něco vyčíst z příkladů konfiguračních souborů, ale zůstal bych pouze čtenářem a těžko bych dokázal něco vysvětlovat.

Zájemcům o program fvwm a jeho konfiguraci doporučuji přečíst si příslušné manuálové stránky a prostudovat příklady konfiguračních souborů nacházejících se ve výše zmíněných adresářích.

9.3 Ostatní inicializační soubory

Za zmínku stojí následující inicializační soubory:

.emacs Inicializační soubor editoru Emacs. Editor jej čte ve fázi startování.

.netrc Soubor obsahující implicitní jména a hesla pro ftp.

.rhosts Zpřístupňuje váš účet vzdáleným systémům.

.forward Inicializační soubor pro automatické přesměrování elektronické pošty.

9.3.1 Inicializační soubor pro editor Emacs

Pokud používáte editor Emacs jako primární editor, pak má pro vás soubor .emacs

mimořádný význam. Podrobně jsme jej popsali v kapitole 8.

9.3.2 Implicitní nastavení pro FTP

V souboru .netrc můžete mít uložena některá implicitní nastavení pro ftp. Následující řádky obsahují příklad takového souboru:

machine floss.life.uiuc.edu login larry password fishSticks

machine darwin.life.uiuc.edu login larry password fishSticks

machine geta.life.uiuc.edu login larry password fishSticks

machine phylo.life.uiuc.edu login larry password fishSticks

machine ninja.life.uiuc.edu login larry password fishSticks

machine indy.life.uiuc.edu login larry password fishSticks

machine clone.mcs.anl.gov login fogel password doorm@

machine osprey.mcs.anl.gov login fogel password doorm@

machine tern.mcs.anl.gov login fogel password doorm@

machine altair.mcs.anl.gov login fogel password doorm@

machine dalek.mcs.anl.gov login fogel password doorm@

machine juju.mcs.anl.gov login fogel password doorm@

machine sunsite.unc.edu login anonymous password

larry@cs.oberlin.edu

    Každý řádek souboru .netrc specifikuje jméno počítače, přihlaýovací jméno, které se má použít jako implicitní pro tento počítač, a heslo. Uvedená nastavení vám ušetří velké množství času, protože jinak byste při přihlaýování se k jednotlivým serverům ftp museli pokaždé zadávat dlouhé identifikační řetězce. Pokud se budete přihlaýovat k serveru ftp, jehož jméno je uvedeno v souboru .netrc, pokusí se program ftp aplikovat uživatelské jméno a heslo z tohoto souboru.

Při spouštění programu ftp můžete pomocí parametru -n specifikovat, že nechcete použít implicitní nastavení ze souboru .netrc. Příkaz pak bude mít tvar “ftp –n”.

    Musíte se ujistit, že soubor .netrc jste schopni číst pouze vy. K nastavení príslušných přístupových práv použijte program chmod. Kdyby soubor .netrc mohli číst jiní uživatelé, pak by mohli odhalit vaše hesla platná pro servery ftp uvedené v tomto souboru.

    Takový případ by představoval značnou “bezpečnostní díru”. Naštěstí program ftp a ostatní programy, které čtou soubor .netrc, odmítnou pokračovat ve své činnosti, pokud zjistí, že přístupová práva k tomuto souboru nejsou v pořádku.

Další informace týkající se souboru .netrc si najděte v manuálových stránkách prostřednictvím příkazu “man .netrc” nebo “man ftp”.

9.3.3 Povolení snadného vzdáleného přístupu k vašemu účtu

    Jestliže se ve vašem domovském adresáři nachází soubor .rhosts, pak lze ze vzdálených počítačů spouštět aplikace na vašem počítači. Uveďme si příklad. Předpokládejme, že jste přihlášeni na počítači cs.oberlin.edu. Na počítači floss.life.uiuc.edu je správně konfigurován soubor .rhosts.

    Pak ze svého počítače můžete na počítači floss.life.uiuc.edu spustit aplikaci, jejíž výstup bude přesměrován na vaši obrazovku, a dokonce se před tím nebudete muset přihlašovat a zadávat heslo.

Soubor .rhosts může vypadat takto:

frobnozz.cs.knowledge.edu jsmith

aphrodite.classics.havhaahd.edu wphilps

frobbo.hoola.com trixie

    Formát souboru je velmi jednoduchý: jméno počítače následované jménem uživatele. Předpokládejme nyní, že uvedený příklad je mým skutečným souborem .rhosts na vzdáleném počítači floss.life.uiuc.edu. To by znamenalo, že bych mohl spustit program na počítači floss a výstup by mohl být přesměrován na kterýkoliv počítač uvedený v tomto souboru, pokud bych byl přihlášen jako odpovídající uživatel.

    Přesný mechanismus, prostřednictvím kterého uživatel uskutečňuje spouštění vzdáleného programu, je realizován programem rsh, jehož název je zkratkou pro “remote shell”, tedy “vzdálený příkazový procesor”. Ten nastartuje příkazový procesor na vzdáleném počítači a spustí specifikovaný program. Uveďme si příklad:

frobbo$ whoami

trixie

frobbo$ rsh floss.life.uiuc.edu "ls ~"

foo.txt mbox url.ps snax.txt

frobbo$ rsh floss.life.uiuc.edu "more ~/snax.txt"

[nyní se zobrazí stránky souboru snax.txt]

    Uživatel trixie na počítači floss.life.uiuc.edu, který má soubor .rhosts uvedený v předcházejícím příkladě, umožňuje uživateli trixie na počítači frobbo.hoola.com spouštět programy z počítače floss.

    Soubor .rhosts bude pracovat správně, i když nemáte na všech počítačích stejné uživatelské jméno. Chcete-li “sdělit” vzdálenému počítači, jaké jméno uživatele chcete použít k přihlášení se, použijte při zadání příkazu rsh volbu “-l”. Pokud takový uživatel na vzdáleném počítači existuje a pokud zde existuje soubor .rhosts obsahující jméno vašeho (t.j. lokálního) počítače a jméno uživatele, pak se příkaz rsh provede úspěšně.

frobbo$ whoami

trixie

frobbo$ rsh -l larry floss.life.uiuc.edu "ls ~"

[zde se objeví seznam souborů mého adresáře na počítači floss]

    Uvedený příklad bude fungovat, pokud má uživatel larry na počítači floss.life.uiuc.edu takový soubor .rhosts, jenž umožňuje uživateli trixie z počítače frobbo.hoola.com spouštět programy. Není relevantní, zda se jedná nebo nejedná o tutéž osobu. Důležitá jsou pouze jména uživatelů, jména počítačů a záznamy v souboru .rhosts.

    V souboru .rhosts mohou být uvedeny i jiné kombinace - například jméno uživatele následující za jménem vzdáleného počítače se může vynechat a tak umožnit kterémukoliv uživateli na vzdáleném počítači spouštět programy na vašem počítači. To je však spojeno s jistými riziky. Nepovolaná osoba by mohla například zrušit vaše soubory. Pokud se rozhodnete pro takto organizovaný soubor .rhosts, pak byste se měli ujistit, že právo číst soubor .rhosts

máte pouze vy.

9.3.4 Přesměrování elektronické pošty

    Kromě jiných souborů můžete také mít soubor .forward, který nelze přímo nazvat “inicializačním” souborem. Pokud tento soubor obsahuje adresu elektronické pošty, pak veýkeré zprávy elektronické pošty budou odesílány na tuto adresu. Soubor je užitečný v případě, kdy máte účet na několika různých systémech, ale elektronickou poštu chcete číst pouze na jednom.

    Na vašem počítači se mohou nacházet i jiné inicializační soubory. Jejich počet se liší podle operačního systému, jenž používáte, a také podle programů, které máte nainstalovány. Jeden ze způsobů, jak získat více informací o inicializačních souborech, spočívá v tom, že si prostudujete soubory ve vašem domovském adresáři začínající tečkou. Není sice garantováno, že všechny takové soubory jsou inicializační, ale převážná většina z nich určitě bude.

9.4 Kde si můžete prohlédnou některé příklady

    Jestliže na svém počítači máte instalován operační systém Linux a jestliže máte přístup do sítě Internet, pak se můžete přihlásit prostřednictvím služby telnet do systému floss.life.uiuc.edu. Přihlašte se jako “guest” a heslo uveďte jako “explorer”. Připravili jsme pro vás spoustu příkladů, z nichž většina je uložena v adresáři /home/kfogel. Tyto příklady si můžete zkopírovat a prostudovat. Buďte ale opatrní. Počítač floss nepředstavuje zcela zabezpečený systém a když se budete dostatečně snažit, podaří se vám získat přístupová práva uživatele root. Dali jsme přednost důvěře před neustálou ostražitostí a doufáme, že toho nikdo nezneužije.

Previous Content Next Up