Úvod GNU/Linux Software Ke stažení Odkazy

Vaše IP: 34.204.168.209
Počet návštěv: 1473496
Hledání příkazů operačního systému Linux podle syntaxe nebo popisu.

Nastavení vzhledu stránek
Dark
Silver
Green
Grey

Radek Tříška

E-mail a Jabber :
radek(at)fastlinux(dot)eu
mseed@njs.netlab.cz

Sekce V.I.P. uživatelů


Pár stébel pro tonoucí 1

V následujícím uvedu pár postupů, které mohou vyjasnit nepřehlednou situaci. Bráním se je nazývat "triky", protože toto slovo budí dojem něčeho skrytého, nestandardního, zatímco všechny uváděné postupy využívají v unixech (a tedy i v Linuxu) naprosto standardní modulárnosti, která Vám umožní řešit problém kombinováním řady drobných nástrojů.

Poznámka: v dalším textu # zastupuje prompt.


1) Někdo radí příkazovou řádku pro její efektivnost, někdo raději grafické uživatelské rozhraní (GUI). Všechny konfiguráky v Linuxu jsou textové soubory, editovatelné běžnými editory. Nachomýtne se, že potřebujete vědět, které textové soubory se změnily konfigurací, kterou jste právě provedli v GUI programu. Prostě se nechcete jen spolehnout na GUI program a chcete umět udělat totéž třeba přes telnet po síti, nebo lokálně v konzoli bez X-ek. Jak na to? Před vlastní konfigurací si založte časovou značku v libovolném adresáři, pro pořádek třeba v /temp:

#touch /timestamp - ale pojmenovat ho můžete libovolně.

Pak se spustí přísluný GUI program a v něm si nastavíte, co chcete, a pak napíšete příkaz :

#find počátečníadresář -newer /tmp/timestamp -print

Jediný problém je s volbou počátečníadresář. Může to být /, ale pak budete hledat i v /proc a to je zdlouhavé. Je proto dobré mít počáteční ponětí, kde jsou asi Vaše konfigurační soubory, nejčastěji to bude pod /etc, pokud šlo o systémové a síťové věci:

#find /etc -newer /tmp/timestamp -type f -print

V případě, že jste nastavovali volbu v konkrétním prostředí, jako je třeba GNOME nebo KDE, volba se uložila pravděpodobně do konfiguračního souboru pod vaším HOME adresářem, takže uživatel Blanka Bečičková (blbec) vytvoří příkaz:

#find /home/blbec -newer /tmp/timestamp -type f -print

Volba -type f způsobí, že se nebudou vypisovat změněné adresáře a má význam hlavně tam, kde budeme změněné soubory nejen vypisovat, ale i prohlížet. Místo závěrečného -print totiž můžete užít jinou volbu, která s vyhledanými soubory vykoná víc, než je jen vypíše:

#find /home/blbec -newer /tmp/timestamp -type f -exec kedit {}\;

Místo kedit si dosaďte libovolný editor nebo prohlížeč.


2) Mnozí novopečení uživatelé Linuxu si stěžují na to, že je zahlcuje množství souborů a adresářů a oni nevědí, kam co patří. Právě o nich potřebují vědět více v případě, že mají podezření, že vlivem experimentování, přepisování, chybného přesměrování si něco přemazali nebo přepsali, nebo zkombinovali věci, které k sobě nepatří. Právě v podobných situacích Linux prokáže svoji vysokou blbuvzdornost.

Strom není jedinou strukturou, která angažuje soubory a adresáře. Ty jsou totiž začleněny také do balíků, nebo jinak řečeno, každý balík instaluje do stromu adresáře a soubory na definované místo, a to velmi přehledně. Ano, řeč bude o RPM (RedHat Package Manager) balíčcích, jak se používají v distribucích RedHat, Suse a Mandrake, Debian má deb balíky.

Jinými slovy, existuje nijak neskrývané a snadno dostupné přiřazení mezi souborem a systémovým nebo aplikačním balíkem, který jste nainstalovali. Vyjděme třeba z ikony, v ní je název spustitelného souboru. Kde ale leží? Příkaz which vypíše celou cestu ke spustitelnému souboru, který leží v cestě obsazené v proměnné PATH. Jako příklad uvedu designer, co je builder pro snadné vytváření přenositelných GUI aplikací, zvykl jsem si ho pouštět zavoláním jména, a teď se ptám, kde leží:

#which designer - systém odpoví
/usr/bin/designer

A my se ptáme na jméno balíku, který tento soubor vlastní:

#rpm -qf /usr/bin/designer
qt-designer-2.3.0-3

Vypsaný balík lze při podezření verifikovat, tedy zjistit, jestli je úplný co do počtu souborů, které soubory jsou změněné apod.:

rpm -V qt-designer

Všimněte si, že stačí psát zkrácené jméno bez specifikací čísel verzí a podverzí. Kdy výpis předchozího příkazu není prázdný, něco se stalo se soubory balíku, ale ne vždy je to tragedie. Například konfigurační soubory budou z principu označeny jako změněné. Význam symbolů změny v balíku je vzat z manuálových stránek příkazu rpm:

man rpm ......
The following characters denote failure of certain tests:
5 MD5 sum S File size L Symlink T Mtime D Device U User G Group M Mode (includes permissions and file type)
5 - je změna kontrolního součtu, tedy obsahu souboru, u konfiguráků přirozený jev. S ní se druží změna délky
S, L - indikuje že se jedná o odkaz (link) na soubor
D - o speciální zařízení
U a G - souvisí se změnou uživatele a skupiny
M - s právy a typem souboru.

Evidentně poškozený balík lze reinstalovat:

#rpm -U --replacepkgs balik*-*-*-*-rpm

Volba -U zachová stávající konfiguráky a opatří je příponou pmsaved, volba --replacepkgs umožní náhradu stejného stejným. Tentokrát se musí psát úplné jméno balíku až po závěrečné rpm.


3) Knihovny - jak zjistit, které nějaký program využívá? Ptám se na to zase u programu designer:

#ldd /usr/bin/designer

Příkaz ldd je všechny vypíše, pro stručnost jen začátek

libqutil.so.1 => /usr/lib/qt-2.3.0/lib/libqutil.so.1 (0x40028000)
libqt.so.2 => /usr/lib/qt-2.3.0/lib/libqt.so.2 (0x4002f000)
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x40504000)

Tady nastal čas ukázat, jak lze výpis zformátovat za chodu využitím unixovské modularity. Nejdřív chceme z výpisu separovat druhou část s cestami ke knihovnám, a pak na tyto soubory uplatnit příkaz :

ls -l, abychom o nich věděli víc:

#ldd /usr/bin/designer |cut -d">" -f2

Použili jsme příkaz cut a sdělili mu, že v proudu dat má najít delimiter (oddělovač) > a propustit field (pole) č. 2 na výstup. Dále z proudu odsekneme od vlastních cest a souborů ty specifikace offsetů (asi to budou ony) následující po mezeře :

#ldd /usr/bin/designer |cut -d">" -f2 | cut -d" " -f2

Výpis vypadá nějak takhle:
/usr/lib/qt-2.3.0/lib/libqutil.so.1
/usr/lib/qt-2.3.0/lib/libqt.so.2
/usr/lib/libstdc++-libc6.2-2.so.3

Výstup příkazu lze včlenit do jiného:

#prikaz1 `prikaz2` nebo nověji # prikaz1$(prikaz2)

ls -l `ldd /usr/bin/designer |cut -d">" -f2 | cut -d" " -f2`
nebo třeba do příkazu stat (vypíše všechny existující informace o souboru):

stat `ldd /usr/bin/designer |cut -d">" -f2 | cut -d" " -f2`

Novějším způsobem:

ls -l $(ldd /usr/bin/designer |cut -d">" -f2 | cut -d" " -f2)
stat $(ldd /usr/bin/designer |cut -d">" -f2 | cut -d" " -f2)

Už chápete, proč si tolik správců oblibuje příkazovou řádku? Místo aby se uklikali k smrti, mnoho z nich řeší na první pohled složité úlohy tak, že si v ní odladí velmi efektivní příkazy, zapíše je do dávkového souboru a je vymalováno.

Konkrétně lze takhle napsat třeba kontrolní systém zkoumající integitu celé instalace, nebo zálohovací utility - rád s nimi pomohu.

Ale co s cykly ? Shelly větve sh i csh umí sekundární prompt, který umožní zadat jako příkaz i cyklus. Následující příklad je pro shelly typu sh, čili třeba bash:

Napište k promptu #for Q in `ls` systém vypíše sekundární prompt
>
a to je výzva, abyste pokračovali cyklem
> do
> stat $Q
> done

a rozběhne se výpis vlastností všech souborů, jejich jména jsou v cyklu dosazována do proměnné Q.

Myslím, že když se i v příkazové řádce dá dynamicky měnit proměnná, otevírá se tím cesta k zajímavým a hlavně využitelným experimentům. Hodně zdaru.

Autor : Jiří Kouba
| Verze projektu: 1.52 | © 2000 - 2011 | Historie |