GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Papa, ich habe es gefunden!, 15 fantastische Beispiele für Linux-Suchbefehle (Teil 2)

Vor einiger Zeit haben wir 15 praktische find-Befehlsbeispiele überprüft (Teil I). Das Find-Kommando kann viel mehr, als nur anhand des Namens nach Dateien zu suchen.
 
Lassen Sie uns in diesem Artikel (Teil 2) 15 fortgeschrittene Beispiele für den Suchbefehl besprechen einschließlich — Suchen von Dateien basierend auf dem Zeitpunkt, zu dem sie aufgerufen, geändert oder geändert wurden, Suchen von Dateien im Vergleich, Ausführen von Operationen an gefundenen Dateien usw.,
 
Ramesh Natarajan: Das ist meine süße kleine Tochter auf diesem Bild. Sie war sehr glücklich, den Seelöwen im California Long Beach Aquarium zu sichten.

Dateien basierend auf Zugriffs-/Änderungs-/Änderungszeit finden

Sie können Dateien basierend auf den folgenden drei Dateizeitattributen finden.

  1. Zugriffszeit der Datei. Die Zugriffszeit wird aktualisiert, wenn auf die Datei zugegriffen wird .
  2. Änderungszeit der Datei. Die Änderungszeit wird aktualisiert, wenn der Dateiinhalt geändert wird .
  3. Uhrzeit ändern der Datei. Die Änderungszeit wird aktualisiert, wenn sich die Inode-Daten ändern .

 
In den folgenden Beispielen wird der Unterschied zwischen der min-Option und die Zeitoption ist das Argument.

  • min Argument behandelt sein Argument als Minuten . Beispiel:min 60 =60 Minuten (1 Stunde).
  • Zeitargument behandelt sein Argument als 24 Stunden . Beispiel:Zeit 2 =2*24 Stunden (2 Tage).
  • Bei der 24-Stunden-Berechnung werden die Bruchteile ignoriert, sodass 25 Stunden als 24 Stunden und 47 Stunden ebenfalls als 24 Stunden angenommen werden, nur 48 Stunden als 48 Stunden. Um mehr Klarheit zu erhalten, lesen Sie den Abschnitt -atime des find-Befehls Manpage.

Beispiel 1:Finden Sie Dateien, deren Inhalt innerhalb der letzten 1 Stunde aktualisiert wurde

Um die Dateien basierend auf der Änderungszeit des Inhalts zu finden, wird die Option -mmin und -mtime verwendet. Es folgt die Definition von mmin und mtime aus der Manpage.

  • -mmin n Die Daten der Datei wurden zuletzt n Minuten geändert vor.
  • -mtime n Die Daten der Datei wurden zuletzt n*24 Stunden geändert vor.

 
Das folgende Beispiel findet Dateien im aktuellen Verzeichnis und Unterverzeichnissen, deren Inhalt innerhalb der letzten 1 Stunde (60 Minuten) aktualisiert wurde

# find . -mmin -60

 
Auf die gleiche Weise findet das folgende Beispiel alle Dateien (unter dem Root-Dateisystem /), die innerhalb der letzten 24 Stunden (1 Tag) aktualisiert wurden.

# find / -mtime -1

Beispiel 2:Dateien finden, auf die vor 1 Stunde zugegriffen wurde

Um die Dateien basierend auf der Dateizugriffszeit zu finden, wird die Option -amin und -atime verwendet. Es folgt die Definition von amin und atime aus der man-Seite find.

  • -amin n Auf die Datei wurde zuletzt n Minuten zugegriffen vor
  • -Zeit n Auf die Datei wurde zuletzt n*24 Stunden zugegriffen vor

 
Das folgende Beispiel findet Dateien im aktuellen Verzeichnis und Unterverzeichnissen, auf die innerhalb der letzten 1 Stunde (60 Minuten) zugegriffen wurde

# find -amin -60

 
Auf die gleiche Weise findet das folgende Beispiel alle Dateien (unter dem Root-Dateisystem /), auf die in den letzten 24 Stunden (1 Tag) zugegriffen wurde.

# find / -atime -1

Beispiel 3:Finde Dateien, die genau vor 1 Stunde geändert wurden

Um die Dateien basierend auf der Änderungszeit des Datei-Inodes zu finden, werden die Optionen -cmin und -ctime verwendet. Es folgt die Definition von cmin und ctime aus der Find-Manpage.

  • -cmin n Der Status der Datei wurde zuletzt n Minuten geändert vor.
  • -ctime n Der Status der Datei wurde zuletzt n*24 Stunden geändert vor.

 
Das folgende Beispiel findet Dateien im aktuellen Verzeichnis und Unterverzeichnissen, die sich innerhalb der letzten 1 Stunde (60 Minuten) geändert haben

# find . -cmin -60

 
Auf die gleiche Weise findet das folgende Beispiel alle Dateien (unter dem Root-Dateisystem /), die innerhalb der letzten 24 Stunden (1 Tag) geändert wurden.

# find / -ctime -1

Beispiel 4:Beschränken der Suchausgabe nur auf Dateien. (Nur Dateien als Ergebnisse des Suchbefehls anzeigen)

Die obigen Suchbefehle zeigen auch die Verzeichnisse an, da auf Verzeichnisse zugegriffen wird, wenn auf die darin enthaltene Datei zugegriffen wird. Wenn Sie jedoch möchten, dass nur die Dateien angezeigt werden, geben Sie -type f im Befehl find als
  ein
Der folgende Suchbefehl zeigt Dateien an, auf die in den letzten 30 Minuten zugegriffen wurde.

# find /etc/sysconfig -amin -30
.
./console
./network-scripts
./i18n
./rhn
./rhn/clientCaps.d
./networking
./networking/profiles
./networking/profiles/default
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
./networking/devices
./apm-scripts
[Note: The above output contains both files and directories]

# find /etc/sysconfig -amin -30 -type f
./i18n
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
[Note: The above output contains only files]

Beispiel 5:Einschränken der Suche nur auf unversteckte Dateien. (Versteckte Dateien nicht in der Suchausgabe anzeigen)

Wenn wir nicht möchten, dass die versteckten Dateien in der Suchausgabe aufgelistet werden, können wir die folgende Regex verwenden.
Die folgende Suche zeigt die Dateien an, die in den letzten 15 Minuten geändert wurden. Und es listet nur die unversteckten Dateien auf. d.h. versteckte Dateien, die mit einer . (Punkt) werden in der Suchausgabe nicht angezeigt.

# find . -mmin -15 \( ! -regex ".*/\..*" \)

Vergleichssuche von Dateien mit dem Suchbefehl

Der menschliche Geist kann sich Dinge besser merken, indem er sich auf Referenzen bezieht, wie zum Beispiel:Ich möchte Dateien finden, die ich bearbeitet habe, nachdem ich die Datei „test“ bearbeitet habe. Sie können Dateien finden, indem Sie auf die anderen Dateimodifikationen wie folgt verweisen.

Beispiel 6:Finden Sie Dateien, die nach der Änderung einer bestimmten DATEI geändert wurden

Syntax: find -newer FILE

 
Das folgende Beispiel zeigt alle Dateien, die geändert wurden, nachdem die /etc/passwd-Dateien geändert wurden. Dies ist hilfreich, wenn Sie alle Aktivitäten nachverfolgen möchten, die Sie nach dem Hinzufügen eines neuen Benutzers durchgeführt haben.

# find -newer /etc/passwd

Beispiel 7:Finden Sie Dateien, auf die nach der Änderung einer bestimmten DATEI zugegriffen wird

Syntax: find -anewer FILE

 
Das folgende Beispiel zeigt alle Dateien, auf die nach dem Ändern von /etc/hosts zugegriffen wird. Wenn Sie sich daran erinnern, einen Eintrag zu /etc/hosts hinzugefügt zu haben, und alle Dateien sehen möchten, auf die Sie seitdem zugegriffen haben, verwenden Sie den folgenden Befehl.

# find -anewer /etc/hosts

Beispiel 8:Finden Sie Dateien, deren Status sich nach der Änderung einer bestimmten DATEI geändert hat.

Syntax: find -cnewer FILE

 
Das folgende Beispiel zeigt alle Dateien, deren Status geändert wurde, nachdem die Datei /etc/fstab geändert wurde. Wenn Sie sich daran erinnern, einen Einhängepunkt in der /etc/fstab hinzugefügt zu haben und alle Dateien wissen möchten, deren Status seitdem geändert wurde, verwenden Sie den folgenden Befehl.

find -cnewer /etc/fstab

Führen Sie beliebige Operationen mit Dateien durch, die über den Befehl „Suchen“ gefunden wurden

Wir haben uns viele verschiedene Möglichkeiten zum Suchen von Dateien mit dem Suchbefehl angesehen in diesem Artikel und auch in unserem vorherigen Artikel. Wenn Sie nicht damit vertraut sind, Dateien auf verschiedene Arten zu finden, empfehle ich Ihnen dringend, Teil 1 zu lesen.
 
In diesem Abschnitt wird erläutert, wie Sie verschiedene Operationen mit den Dateien vom Find-Befehl ausführen. d.h. wie man die Dateien manipuliert, die von der Ausgabe des Find-Befehls zurückgegeben werden.
 
Wir können jede Operation für die Dateien spezifizieren, die vom Find-Befehl gefunden werden.

find <CONDITION to Find files> -exec <OPERATION> \;

 
Die OPERATION kann alles sein wie:

  • rm-Befehl um die mit dem find-Befehl gefundenen Dateien zu entfernen.
  • mv-Befehl um die gefundenen Dateien umzubenennen.
  • ls -l Befehl um Details zu den Ausgabedateien des Find-Befehls zu erhalten.
  • md5sum on Befehlsausgabedateien finden
  • WC-Befehl um die Gesamtzahl der Wörter in den Ausgabedateien des Suchbefehls zu zählen.
  • Führen Sie einen beliebigen Unix-Shell-Befehl aus on Befehlsausgabedateien finden.
  • oder Führen Sie Ihr eigenes benutzerdefiniertes Shell-Skript aus / command on Befehlsausgabedateien suchen.

Beispiel 9:ls -l in der Ausgabe des Befehls find. Lange Liste der Dateien, die innerhalb der letzten 1 Stunde bearbeitet wurden.

# find -mmin -60
./cron
./secure

# find -mmin -60 -exec ls -l {} \;
-rw-------  1 root root 1028 Jun 21 15:01 ./cron
-rw-------  1 root root 831752 Jun 21 15:42 ./secure

Beispiel 10:Suche nur im aktuellen Dateisystem

Systemadministratoren möchten im Root-Dateisystem suchen, aber nicht in den anderen gemounteten Partitionen. Wenn Sie mehrere Partitionen gemountet haben und in / suchen möchten. Sie können Folgendes tun.
 
Der folgende Befehl sucht nach *.log-Dateien beginnend mit /. d.h. wenn Sie mehrere Partitionen unter / (root) gemountet haben, wird der folgende Befehl alle diese gemounteten Partitionen durchsuchen.

# find / -name "*.log"

 
Dadurch wird nur im aktuellen Dateisystem nach der Datei gesucht. Es folgt die xdev-Definition aus der Find-Manpage:

  • -xdev Keine Verzeichnisse auf anderen Dateisystemen absteigen.

 
Der folgende Befehl sucht nach *.log-Dateien beginnend mit / (Root) und nur im aktuellen Dateisystem. d.h. wenn Sie mehrere Partitionen unter / (root) gemountet haben, wird der folgende Befehl NICHT alle diese gemounteten Partitionen durchsuchen.

# find / -xdev -name "*.log"

Beispiel 11:Verwendung von mehr als einem { } im selben Befehl

Laut Handbuch ist nur eine Instanz von {} möglich. Sie können jedoch mehr als ein {} im selben Befehl verwenden, wie unten gezeigt.

# find -name "*.txt" cp {} {}.bkup \;

 
Die Verwendung dieses {} im selben Befehl ist möglich, aber die Verwendung in einem anderen Befehl ist nicht möglich, sagen wir, Sie möchten die Dateien wie folgt umbenennen, was nicht das erwartete Ergebnis liefern wird.

find -name "*.txt" -exec mv {} `basename {} .htm`.html \;

Beispiel 12:Verwendung von { } in mehr als einer Instanz.

Sie können es simulieren, indem Sie ein Shell-Skript wie unten gezeigt schreiben.

# mv "$1" "`basename "$1" .htm`.html"

 
Diese doppelten Anführungszeichen dienen dazu, Leerzeichen im Dateinamen zu behandeln. Rufen Sie dann dieses Shell-Skript über den find-Befehl auf wie unten gezeigt.

find -name "*.html" -exec ./mv.sh '{}' \;

Wenn Sie also aus irgendeinem Grund möchten, dass derselbe Dateiname mehr als einmal verwendet wird, dann ist das Schreiben des einfachen Shell-Skripts und das Übergeben der Dateinamen als Argument der einfachste Weg, dies zu tun.

Beispiel 13:Umleitung von Fehlern nach /dev/null

Das Umleiten der Fehler ist keine gute Praxis. Ein erfahrener Benutzer versteht, wie wichtig es ist, den Fehler auf dem Terminal auszudrucken und ihn zu beheben.
 
Besonders beim Find-Befehl ist das Umleiten der Fehler keine gute Praxis. Aber wenn Sie die Fehler nicht sehen möchten und sie auf null umleiten möchten, tun Sie es wie unten gezeigt.

find -name "*.txt" 2>>/dev/null

 
Manchmal kann dies hilfreich sein. Wenn Sie beispielsweise versuchen, die gesamte *.conf-Datei unter / (root) Ihres Kontos zu finden, erhalten Sie möglicherweise eine Vielzahl von „Permission denied“-Fehlermeldungen, wie unten gezeigt.

$ find / -name "*.conf"
/sbin/generate-modprobe.conf
find: /tmp/orbit-root: Permission denied
find: /tmp/ssh-gccBMp5019: Permission denied
find: /tmp/keyring-5iqiGo: Permission denied
find: /var/log/httpd: Permission denied
find: /var/log/ppp: Permission denied
/boot/grub/grub.conf
find: /var/log/audit: Permission denied
find: /var/log/squid: Permission denied
find: /var/log/samba: Permission denied
find: /var/cache/alchemist/printconf.rpm/wm: Permission denied
[Note: There are two valid *.conf files burned in the "Permission denied" messages]

 
Wenn Sie also nur die tatsächliche Ausgabe des find-Befehls sehen möchten und nicht die Fehlermeldung „Zugriff verweigert“, können Sie die Fehlermeldung wie unten gezeigt nach /dev/null umleiten.

$ find / -name "*.conf" 2>>/dev/null
/sbin/generate-modprobe.conf
/boot/grub/grub.conf
[Note: All the "Permission denied" messages are not displayed]

Beispiel 14:Leerzeichen durch Unterstrich im Dateinamen ersetzen.

Audiodateien, die Sie aus dem Internet herunterladen, enthalten meistens Leerzeichen. Aber Leerzeichen im Dateinamen zu haben ist nicht so gut für Linux-Systeme. Sie können die unten gezeigte Befehlskombination zum Suchen und Umbenennen verwenden, um die Dateien umzubenennen, indem Sie das Leerzeichen durch einen Unterstrich ersetzen.
 
Im Folgenden wird Leerzeichen in allen *.mp3-Dateien durch _

ersetzt
$ find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;

Beispiel 15:Zwei Suchbefehle gleichzeitig ausführen

Wie in den Beispielen des Find-Befehls auf seiner Handbuchseite gezeigt, ist das Folgende die Syntax, die verwendet werden kann, um zwei Befehle in einem einzigen Durchlauf auszuführen.
 
Das folgende find-Befehlsbeispiel durchläuft das Dateisystem nur einmal und listet setuid-Dateien und -Verzeichnisse in /root/suid.txt und große Dateien in /root/big.txt auf.

# find /    \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
 \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

Unsere anderen 15 Beispielserienartikel

  • 15 praktische Beispiele für Unix-Suchbefehle – Teil 1
  • 15 praktische Beispiele für Linux-Grep-Befehle
  • Master Unix Command Line History mit 15 Beispielen
  • Manipulieren Sie Audiodateien mit 15 fantastischen Sox-Befehlsbeispielen (Sound eXchange)
  • 15 fortgeschrittene PostgreSQL-Befehlsbeispiele
  • 15 hervorragende Hacks, Tipps und Tricks für die Google-Suche
  • 15 fortgeschrittene PostgreSQL-DBA-Beispiele
  • 15 Praktische Verwendung von Mysqladmin-Befehlsbeispielen
  • 15 fantastische Linux-Cron-Job-Beispiele

 
Falls Sie zurückkehren müssen, setzen Sie ein Lesezeichen für diese Seite unter del.icio.us als praktische Referenz.


Linux
  1. 5 Befehlszeilen-Tools zum schnellen Auffinden von Dateien unter Linux

  2. 25 Nützliche praktische Beispiele für find-Befehle unter Linux

  3. 25 einfache Beispiele für den Linux-Suchbefehl

  4. Finden Sie Befehlsbeispiele in Linux

  5. diff-Befehlsbeispiele in Linux

lsof-Befehl unter Linux (10 Beispiele)

So finden Sie Dateien mit dem fd-Befehl in Linux

Tutorial für Linux-Suchbefehle (mit Beispielen)

Mama, ich habe es gefunden! — 15 praktische Beispiele für Linux-Suchbefehle

lsof-Befehl unter Linux mit Beispielen

Linux-Comm-Befehl mit Beispielen