Mnozí z vás, uživatelů Ubuntu, jistě znají nástroj „Vyhledávání souborů“, který umožňuje vyhledávat soubory. Stejně jako u většiny věcí v Linuxu, i zde existují skvělé nástroje na ploše, ale větší výkon lze nalézt v Terminálu, než jaký může mít jakýkoli zjednodušený nástroj na ploše.
Dnes bych vás rád seznámil s několika nástroji, které mohou z obtížného hledání souborů udělat snadný proces.
locate
První nástroj, se kterým byste se měli seznámit, je zároveň jedním z nejjednodušších. Program locate
funguje podobně jako většina grafických vyhledávacích nástrojů.
Použití
Řekněme, že jste si přečetli, jak upravit program X, aby poskytoval vyšší výkon videa. V dokumentu, který čtete, se píše, že máte upravit soubor xorg.conf
, ale v dokumentu není uvedeno, kde se nachází, a vy nevíte, jak ho najít. Můžete použít locate
, který vám ho rychle najde:
$ locate xorg.conf/etc/X11/xorg.conf/usr/share/man/man5/xorg.conf.5.gz/var/lib/x11/xorg.conf.md5sum/var/lib/x11/xorg.conf.roster
Je jasné, že /etc/X11/xorg.conf
je soubor, který hledáme, ale co kdyby se vrátily desítky nebo dokonce stovky výsledků? Jak byste to všechno zvládli? Pokud víte něco málo o regulárních výrazech (základy by se měl naučit opravdu každý uživatel Linuxu), můžete regulární výrazy snadno použít k vyhledávání adresářů nebo souborů. Například můžeme hledat přesnou shodu pro xorg.conf
pomocí následujícího příkazu:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Pokud chcete hledat soubory bez rozlišování velkých a malých písmen, můžete použít volbu -i
. Například:
$ locate -i 'monthly report'/home/chris/Documents/August Monthly Report.doc/home/chris/Documents/July Monthly Report.doc/home/chris/Downloads/latest monthly report.doc
Něco, co vás může zmást, když poprvé začnete používat příkaz locate
, je to, že nevrací pouze shody, ale pokud je shodou adresář, vypíše také všechny adresáře a soubory pod tímto adresářem. Například:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
Tento příkaz vrátí více než tisíc položek v mém systému. Chceme-li výsledky omezit na seznam položek, které odpovídají hledanému výrazu, bez všech obsažených souborů a adresářů, použijeme volbu -b
:
$ locate -b Desktop/home/chris/Desktop/home/chris/bin/recordSoundAndDesktop.sh/opt/HipChat4/lib/QtQuick/Controls/Styles/Desktop/usr/include/qt4/QtGui/QDesktopServices/usr/include/qt4/QtGui/QDesktopWidget/usr/lib/libreoffice/program/wizards/common/Desktop.py/usr/lib/libreoffice/share/gallery/computers/Computer-Desktop.png/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.py/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.pyc/usr/lib/python3/dist-packages/xdg/DesktopEntry.py/usr/lib/python3/dist-packages/xdg/__pycache__/DesktopEntry.cpython-35.pyc/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/Styles/Desktop/usr/share/kde4/apps/kio_desktop/DesktopLinks/usr/share/man/man3/File::DesktopEntry.3pm.gz/usr/share/perl5/File/DesktopEntry.pm/usr/share/sounds/KDE-Window-All-Desktops-Not.ogg/usr/share/sounds/KDE-Window-All-Desktops.ogg
Stále je zde poměrně dost shod, ale už nemusíme třídit všechny další výsledky, abychom našli to, co hledáme.
Důležitá poznámka
Příkaz locate
spoléhá při své funkci na databázi slocate. Tato databáze ukládá do mezipaměti názvy adresářů a souborů souborového systému a umožňuje příkazu locate
pracovat během chvilky, místo aby prohledávání celého souborového systému trvalo dlouhou dobu.
Tato schopnost však není zadarmo. Ve výchozím nastavení systém jednou denně v 6:25 spustí příkaz pro aktualizaci této databáze. Tento příkaz aktualizuje databázi o všechny změny provedené v souborovém systému od poslední aktualizace.
Pokud jste nedávno provedli změny, například přidali nebo odstranili velké množství souborů a adresářů, a chcete použít příkaz locate
k prohledání těchto nových adresářů a souborů, můžete databázi slocate kdykoli ručně aktualizovat následujícím příkazem:
$ sudo updatedb
V závislosti na objemu změn provedených od poslední aktualizace databáze slocate může aktualizace trvat několik sekund až několik minut. Jakmile je to hotovo, můžete znovu vyhledávat pomocí locate
.
který
locate
je skvělý pro prohledávání celého souborového systému. Někdy však chcete pouze najít místo, kde se příkaz nachází. Tehdy přichází na řadu which
.
which
dělá jen jednu věc, ale dělá ji dobře. Vzhledem k názvu příkazu vám řekne, kde se v souborovém systému nachází soubor pro tento příkaz.
Představme si, že chceme zjistit, kde se nachází příkaz firefox
. Můžeme jednoduše spustit následující příkaz, abychom to zjistili:
$ which firefox/usr/bin/firefox
Proč byste vůbec chtěli hledat konkrétně nějaký příkaz? Představte si, že máte nějaký kód, který potřebuje nahradit starý příkaz. Opravdu musíte nejprve odstranit ten starý (já ho obvykle přejmenovávám na stejný název následovaný „.bak“, abych ho měl po ruce pro případ, že ho budu potřebovat), než na jeho místo vložíte nový. Příkaz which
vám pomůže soubor snadno a rychle najít, abyste ho nemuseli hledat všude možně.
whereis
Příkaz whereis
je podobný příkazu which, ale jde ještě o krok dál. Nejenže vám řekne, kde se spustitelný soubor nachází, ale vyhledá také zdrojový kód, manuálovou stránku a další související adresáře.
Pokračujeme-li v příkladu which
, zeptejme se whereis
na příkaz firefox
:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Pomohl mi dříve najít /usr/lib/firefox/plugins
při práci na řešení pro Flash, protože v tomto umístění jsou uloženy globální doplňky pro Firefox.
find
find
je dokonalý vyhledávací nástroj, švýcarský armádní nůž linuxového vyhledávání, chcete-li. find
Umí vše od vyhledávání souborů na základě časů posledních změn, vlastníků a skupin, oprávnění, typu (soubor, adresář, symbolický odkaz atd.), zda je soubor čitelný/zapisovatelný/spustitelný aktuálním uživatelem, velikosti souboru, zda je soubor nebo adresář prázdný a mnoho dalšího. Můžete také vyhledávat shody pomocí regulárních výrazů.
Při použití tohoto nástroje v kombinaci s příkazem xargs
(kterému se budu muset věnovat někdy jindy) můžete na příkazovém řádku dělat opravdu úžasné věci. Představte si, že můžete rekurzivně prohledávat aktuální adresář a hledat v něm soubory končící na „.bak“, které byly naposledy změněny před více než 100 dny, a pak je jedním příkazem smazat:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Zpočátku to bude vypadat velmi složitě, ale až si osvojíte umění používat příkaz find
, stane se to vaší druhou přirozeností. Brzy se budete divit, jak jste bez něj vůbec mohli něco hledat.
Přímo řečeno, je toho mnohem víc, než jsem ochoten popsat, a existuje mnoho a mnoho skvělých úvodů do tohoto nástroje, které odvádějí lepší práci, než bych odvedl já. Proto vás jednoduše odkážu na tři skvělé odkazy, které lze použít pro začátek práce s příkazem find.
- Příklad použití linuxového příkazu find
- (předem se omlouvám za příšerné barvy) Unix/Linux „find“ Command Tutorial
- Použití příkazu find
Šťastné hledání.
Pomohl jsem vám?
- Pošlete mi tip přes Paypal.
- Pomozte s hostingem tohoto webu pomocí mého referenčního kódu Linode.