Vyhledávání
OBSAH
Vyhledávání
Find
Locate
Lsof
Fuser
Whereis, Whitch
tady je moc pěknej článek
tohle jsem zařadil trochu podrobněji,protože mnoha lidem to dělá problémy(včetně mě :-)) )
Find
find [přepínače] [cesty] [výraz]
find . –print vyhledá vse v aktualním adresáři a ukáže na obrazovce
find *sex* –print vyhledá soubory, které obsahují v názvu "sex" v aktualním adresáři a ukáže na obrazovce
POZOR
find sex –print vyhledá pouze slovo "sex" v aktualním adresáři a ukáže na obrazovce
find . -name Nejaky_soubor -print vyhledá soubor Nejaky_soubor v aktualním adresáři a ukáže na obrazovce
find . -atime +8 -size +10240 –print vyhledá soubory starší 8 dní,které se neotvírali a jsou větší jak 10MB
parametry příkazu (přepínače)
-amin +5m | soubor byl otevřen před 5 minutami. |
-atime +5d | soubor byl otevřen před 5 dny. |
-anewer soubor | soubor byl otevřen dříve než uvedený soubor |
-cmin n | i-uzel souboru byl změněn před n minutami. |
-ctime n | i-uzel souboru byl změněn(vytvořen) před n dny. |
-cnewer soubor | i-uzel souboru byl změněn dříve než uvedený soubor |
-mmin n | soubor byl změněn před n minutami. |
-mtime n | soubor byl změněn před n dny. |
-empty | soubor (platí i pro adresář) je prázdný |
-perm | práva soubor má nastavena daná přístupová práva |
-uid uid | soubor má uid |
-gid gid | soubor má gid |
-group skupina | soubor patří skupině |
-user uživatel | soubor patří uživateli |
-regex | vzor jméno souboru s cestou vyhovuje vzoru |
-type | typ testuje soubor na zadaný typ
f | - běžný soubor |
b | - blokové zařízení |
c | - znakové zařízení |
d | - adresář |
p | - roura |
l | - symbolický odkaz |
s | - socket |
|
-size n[jednotka] | soubor má danou velikost |
pro časové filtry se používají tyto zkratky
-d | mínus=mladší než den (d) |
+d | plus=starší než den (d) |
d | bez znaménka=staré přesně den (d) |
w | zkratka pro týden |
d | zkratka pro den |
h | zkratka pro hodinu |
m | zkratka pro minutu |
s | zkratka pro vteřínu |
>
stejně platí použití znaménem pro filtry velikostí souborů
proved toto (výrazy)
-print | tiskne jména vyhovujících souborů, tato akce je nastavená implicitně |
-fprint | soubor tiskne jména vyhovujících souborů do souboru |
-printf | formát formátování výstupu |
-fprintf | soubor formát stejné jako -printf, ale přesměruje výstup do souboru |
-exec | příkaz provede příkaz, přičemž {} se expanduje do názvu zpracovávaného souboru |
-ok | příkaz stejně jako -exec, ale vyžádá si potvrzení akce |
-ls | výpis informací o souboru |
-print0 | tiskne jména souborů oddělená znakem NUL, což je výhodné v kombinaci s příkazem xargs -0 |
-quit | konec vykonávání príkazu |
smazání souborů starších 10 dní
find /tmp/ -ctime +10 -exec rm -f {} \;
POZOR-při použití akce exec, je třeba ukončit příkaz středníkem a před shellem jej ochránit obráceným lomítkem
\; nebo uvozovkami
";".
Do závorek
{} se vloží cesta nalezených souborů
jiné rychlejší řešení stejného
find /tmp -ctime +10 -print0 |xargs rm -f
tento příkaz vyhledá soubory ve /var/virusmails/,které začínají slovem banned nebo spam a jsou starší 90 dní , ty pak následně smaže
find /var/virusmails/ -name "[banned spam]*" -ctime +90 -print | xargs rm -f
POZOR- pokud se používají regulární výrazy je třeba hledaný výraz zamknout do uvozovek, jinak jej expanduje již shell
Locate
locate nejaky_soubor
přepínače
-d | databáze použije se uvedená databáze namísto implicitní |
-i | ignoruje velikost písmen |
-c | vypisuje pouze počet výsledků |
-S | vypisuje statistiky |
-r, --regex | vzor se vyhodnocuje jako regulární výraz |
Lsof
Vyhledává otevřené soubory.Hodí se při umountu disku pokud přitom nevíte, který proces jej má uzamčený.
nainstalujeme příkazem
cd /usr/ports/sysutils/lsof
make all install
-a | spojování podmínek |
-p | výpis podle PIDu |
-u | výpis podle uživatele |
-c | výraz vypíše soubory které začínají na výraz |
-i | vypíše otevřená připojení |
+D | vypíše i obsahy podadresářů |
Příklady
vypsat veškerá IP spojení
lsof | grep IPv
který uživatel má co otevřené
lsof -u votruba
vypíše sokety využívající port 80(http)
lsof -i:80
vypíše soubory otevřené na svazku
/dev/ad0s2d
vypíše soubory otevřené jardou a sdružené s procesy vi
lsof -u jarda -ac vi
Fuser
umí identifikovat procesy, které mají otevřené soubory.
nainstalujeme příkazem
cd /usr/ports/sysutils/fuser
make all install
-k | kill - ukončit proces, který přistupuje k určenému souboru |
-i | před ukončením procesu se zeptat |
-m | mounted FS - namountovaný souborový systém |
-w | soubory jsou otevřeny pro zápis |
-u | soubory jsou přiřazeny uživateli |
Příklady
ukončit všechny všechny procesy, které mají otevřené soubory na svazku /mnt/cdrom
fuser -km /mnt/cdrom
Where
vyhledá kde je program mc
whereis mc
Whitch
Kde je program
which mc