Wielu z Was koledzy użytkownicy Ubuntu będą zaznajomieni z narzędziem „Search for Files”, który pozwala szukać plików. Jak to jest z większością rzeczy w Linuksie, istnieją świetne narzędzia pulpitu, ale więcej mocy można znaleźć w Terminalu niż jakiekolwiek usprawnione narzędzie pulpitu może dopasować.
Dzisiaj, chciałbym przedstawić ci kilka narzędzi, które mogą zmienić obowiązek znalezienia plików w łatwy proces.
locate
Pierwsze narzędzie, które powinno stać się wygodne z jest również jednym z najprostszych. Program locate
działa w sposób podobny do większości graficznych narzędzi wyszukiwania.
Używanie
Powiedzmy, że przeczytałeś o tym, jak zmodyfikować X, aby zapewnić lepszą wydajność wideo. Dokument, który czytasz, mówi, że należy zmodyfikować plik xorg.conf
, ale dokument nie mówi, gdzie on się znajduje, a Ty nie wiesz, jak go znaleźć. Możesz użyć locate
, aby szybko go znaleźć:
$ 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
Jasne jest, że /etc/X11/xorg.conf
jest plikiem, którego szukamy, ale co by było, gdyby zwrócono dziesiątki lub nawet setki wyników? Jak mógłbyś sobie z tym wszystkim poradzić? Jeśli wiesz co nieco o wyrażeniach regularnych (każdy użytkownik Linuksa naprawdę powinien nauczyć się podstaw), możesz łatwo użyć wyrażeń regularnych do wyszukiwania katalogów lub plików. Na przykład, możemy szukać dokładnego dopasowania dla xorg.conf
za pomocą następującego polecenia:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Jeśli chcesz szukać plików bez rozróżniania wielkości liter, możesz użyć opcji -i
. Na przykład:
$ 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
Coś, co może cię zmylić, gdy po raz pierwszy zaczniesz używać locate
, to fakt, że nie tylko zwraca ono dopasowania, ale jeśli dopasowanie jest katalogiem, wylicza również wszystkie katalogi i pliki w tym katalogu. Na przykład:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
To polecenie zwraca ponad tysiąc wpisów w moim systemie. Aby zredukować wyniki do listy wpisów pasujących do wyszukiwanego terminu bez wszystkich zawartych plików i katalogów, użyj opcji -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
Wciąż jest sporo dopasowań, ale nie musimy już sortować wszystkich dodatkowych wyników, aby znaleźć to, czego szukamy.
Important Note
Polecenie locate
do działania opiera się na bazie danych slocate. Ta baza danych buforuje nazwy katalogów i plików systemu plików i pozwala poleceniu locate
działać w ciągu kilku chwil, zamiast zajmować długie okresy czasu na przeszukiwanie całego systemu plików.
Ta zdolność nie przychodzi bez kosztów chociaż. Domyślnie, twój system będzie uruchamiał polecenie aktualizacji tej bazy danych raz dziennie o 6:25 rano. To polecenie zaktualizuje bazę danych o wszelkie zmiany dokonane w systemie plików od czasu ostatniej aktualizacji.
Jeśli ostatnio dokonałeś zmian, takich jak dodanie lub usunięcie dużej ilości plików i katalogów, i chcesz użyć polecenia locate
do przeszukania tych nowych katalogów i plików, możesz ręcznie zaktualizować bazę danych slocate w dowolnym momencie za pomocą następującego polecenia:
$ sudo updatedb
Zależnie od ilości zmian dokonanych od ostatniej aktualizacji bazy danych slocate, aktualizacja może potrwać od kilku sekund do kilku minut. Gdy już to zrobisz, jesteś gotowy do ponownego wyszukiwania za pomocą locate
.
, które
locate
jest świetne do przeszukiwania całego systemu plików. Jednakże, czasami chcesz po prostu znaleźć miejsce, w którym znajduje się polecenie. To właśnie tam which
wchodzi do gry.
which
robi tylko jedną rzecz, ale robi to dobrze. Biorąc pod uwagę nazwę polecenia, powie ci, gdzie znajduje się plik tego polecenia w systemie plików.
Wyobraźmy sobie, że chcemy się dowiedzieć, gdzie znajduje się polecenie firefox
. Możemy po prostu wykonać następujące polecenie, aby się tego dowiedzieć:
$ which firefox/usr/bin/firefox
Dlaczego w ogóle chciałbyś szukać konkretnej komendy? Wyobraź sobie, że masz jakiś kod, który musi zastąpić starą komendę. Naprawdę musisz najpierw usunąć starą komendę (ja zwykle zmieniam jej nazwę na taką samą, po której następuje „.bak”, aby zachować ją na wypadek, gdybym jej potrzebował), zanim wstawisz na jej miejsce nową. which
pomoże ci znaleźć plik szybko i łatwo, więc nie będziesz musiał szukać go wszędzie.
whereis
Komenda whereis
jest podobna do which, ale idzie o krok dalej. Nie tylko powie ci, gdzie znajduje się plik wykonywalny, ale także zlokalizuje źródło, stronę man i inne powiązane katalogi, jak również.
Pozostając przy przykładzie which
, zapytajmy whereis
o polecenie firefox
:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Pomogło mi ono znaleźć /usr/lib/firefox/plugins
wcześniej podczas pracy nad rozwiązaniem dla Flasha, ponieważ w tej lokalizacji są przechowywane globalne dodatki dla Firefoksa.
find
find
jest ostatecznym narzędziem wyszukiwania, szwajcarskim scyzorykiem Linuksa, jeśli chcesz. find
może zrobić wszystko, od wyszukiwania plików na podstawie czasu ostatniej modyfikacji, właścicieli i grup, uprawnień, typu (plik, katalog, dowiązanie symboliczne, itp.), czy plik jest odczytywalny/zapisywalny/wykonywalny przez bieżącego użytkownika, rozmiaru pliku, czy plik lub katalog jest pusty, i wiele więcej. Możesz także wyszukiwać dopasowania według wyrażeń regularnych.
Kiedy używasz tego narzędzia w połączeniu z poleceniem xargs
(które będę musiał omówić innym razem), możesz robić naprawdę niesamowite rzeczy w wierszu poleceń. Wyobraź sobie, że możesz rekursywnie przeszukiwać bieżący katalog w poszukiwaniu plików kończących się na „.bak”, które zostały ostatnio zmodyfikowane ponad 100 dni temu, a następnie usuwać je jednym poleceniem:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Na początku będzie to wyglądało na bardzo skomplikowane, ale kiedy opanujesz sztukę używania find
, stanie się to drugą naturą. Wkrótce będziesz się zastanawiał, jak kiedykolwiek szukałeś rzeczy bez niego.
Będąc szczerym, jest o wiele więcej do znalezienia niż jestem skłonny pokryć i jest wiele, wiele wspaniałych wprowadzeń do tego narzędzia, które wykonują lepszą pracę niż ja. Więc, po prostu wskażę ci trzy świetne referencje, które mogą być użyte do rozpoczęcia pracy z find.
- Przykładowe zastosowania linuksowego polecenia find
- (z góry przepraszam za okropne kolory) Unix/Linux „find” Command Tutorial
- Używanie polecenia find
Szczęśliwe poszukiwania.
Czy ci pomogłem?
- Wyślij mi napiwek przez Paypal.
- Pomóż w hostingu tej witryny, korzystając z mojego kodu polecającego Linode.
.