Zugriff auf Dateisysteme in Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Jetzt üben

Einführung

In diesem Lab sammeln Sie praktische Erfahrungen bei der Verwaltung von Linux-Dateisystemen auf einem Red Hat Enterprise Linux (RHEL) System. Sie lernen, Dateisysteme und Blockgeräte zu identifizieren, die Festplattennutzung mithilfe von df und du zu untersuchen und das manuelle Ein- und Aushängen von Dateisystemen zu üben.

Darüber hinaus führt Sie dieses Lab durch die effiziente Suche nach Dateien mithilfe von Befehlen wie locate und find, wodurch Sie Dateien basierend auf verschiedenen Kriterien wie Name, Eigentümer, Berechtigungen, Größe, Zeit und Dateityp suchen können.

Dateisysteme und Blockgeräte identifizieren

In diesem Schritt lernen Sie, wie Sie Dateisysteme und Blockgeräte auf einem Red Hat Enterprise Linux-System identifizieren. Das Verständnis der Speicherorganisation ist grundlegend für die Systemadministration. Wir werden verschiedene Befehle untersuchen, um Blockgeräte und die zugehörigen Dateisysteme aufzulisten und zu prüfen.

Zuerst einige grundlegende Konzepte:

  • Blockgerät (Block Device): Ein Blockgerät ist eine Datei, die einen Low-Level-Zugriff auf Speichergeräte ermöglicht. Beispiele sind Festplatten, SSDs und USB-Laufwerke. Unter Linux befinden sich diese normalerweise im Verzeichnis /dev.
  • Partition: Eine Partition ist eine logische Unterteilung eines physischen Speichergeräts. Eine einzelne Festplatte kann mehrere Partitionen haben, die jeweils mit einem anderen Dateisystem formatiert oder für unterschiedliche Zwecke verwendet werden können.
  • Dateisystem: Ein Dateisystem ist eine Methode und Datenstruktur, die ein Betriebssystem verwendet, um zu steuern, wie Daten gespeichert und abgerufen werden. Es organisiert Daten in Dateien und Verzeichnissen. Gängige Linux-Dateisysteme sind XFS und ext4.
  • Einhängepunkt (Mount Point): Ein Einhängepunkt ist ein leeres Verzeichnis in der Dateisystemhierarchie, an dem ein Dateisystem angehängt oder „gemountet“ wird, um dessen Inhalt zugänglich zu machen.

Beginnen wir mit der Auflistung der auf Ihrem System verfügbaren Blockgeräte mithilfe des Befehls lsblk. Dieser Befehl bietet eine baumartige Übersicht aller Blockgeräte und deren Partitionen.

lsblk

Sie sollten eine Ausgabe ähnlich dieser sehen. Ihre VM verwendet möglicherweise Namen wie vda und vdb oder NVMe-Namen wie nvme0n1 und nvme1n1:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda    253:0    0   40G  0 disk
├─vda1 253:1    0    1M  0 part
├─vda2 253:2    0  100M  0 part /boot/efi
└─vda3 253:3    0 39.9G  0 part /
vdb    253:16   0   40G  0 disk

In der Ausgabe:

  • NAME: Der Name des Blockgeräts (z. B. vda, vdb, nvme0n1 oder nvme1n1) oder der Partition (z. B. vda1, vda2 oder nvme0n1p2).
  • MAJ:MIN: Major- und Minor-Gerätenummern.
  • RM: Wechselmedium (1 wenn wechselbar, 0 wenn nicht).
  • SIZE: Die Größe des Geräts oder der Partition.
  • RO: Schreibgeschützt (1 wenn schreibgeschützt, 0 wenn nicht).
  • TYPE: Typ des Geräts (z. B. disk, part für Partition).
  • MOUNTPOINTS: Wo das Gerät oder die Partition aktuell eingehängt ist.

Als Nächstes untersuchen wir die Dateisysteme und deren Nutzung mit dem Befehl df. Der Befehl df meldet die Speicherplatznutzung des Dateisystems.

df

Die Ausgabe zeigt verschiedene Dateisysteme, deren Gesamtgröße, belegten Speicherplatz, verfügbaren Speicherplatz und Einhängepunkte:

Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs            4096       0      4096   0% /dev
tmpfs            1822216       0   1822216   0% /dev/shm
tmpfs             728888     616    728272   1% /run
efivarfs             256       9       243   4% /sys/firmware/efi/efivars
/dev/vda3       41773036 3628732  38144304   9% /
/dev/vda2         102156    7198     94958   8% /boot/efi
tmpfs             364440       0    364440   0% /run/user/1000

Um die Ausgabe lesbarer zu machen, insbesondere bei den Größen, können Sie die Option -h für ein menschenlesbares Format verwenden (z. B. M für MiB, G für GiB).

df -h

Sie sehen die Größen nun in einem verständlicheren Format:

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           712M  616K  712M   1% /run
efivarfs        256K  8.5K  243K   4% /sys/firmware/efi/efivars
/dev/vda3        40G  3.5G   37G   9% /
/dev/vda2       100M  7.1M   93M   8% /boot/efi
tmpfs           356M     0  356M   0% /run/user/1000

Verwenden wir abschließend den Befehl lsblk -fp, um den vollständigen Pfad der Geräte, ihre UUIDs (Universally Unique Identifiers) und Dateisystemtypen aufzulisten. UUIDs sind stabile Identifikatoren, die gleich bleiben, selbst wenn sich Gerätenamen ändern, was sie für konsistentes Mounten nützlich macht.

lsblk -fp

Die Ausgabe enthält UUIDs und Dateisystemtypen:

NAME        FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
/dev/vda
├─/dev/vda1
├─/dev/vda2 vfat   FAT16       E52E-0564                              92.7M     7% /boot/efi
└─/dev/vda3 xfs          root  4c234c8b-4f67-4d65-abb5-06753b1ec236   36.4G     9% /
/dev/vdb

Beachten Sie die Spalte UUID, die einen eindeutigen Identifikator für jedes Dateisystem bereitstellt. Dies ist entscheidend für das zuverlässige Einhängen von Dateisystemen, insbesondere in Konfigurationsdateien wie /etc/fstab.

Bevor Sie zum nächsten Schritt übergehen, speichern Sie einen kurzen Bericht in Ihrem Projektverzeichnis, damit Sie die Informationen zu Blockgeräten und Dateisystemen später erneut einsehen können.

{
  lsblk
  echo
  df -h
  echo
  lsblk -fp
} > ~/project/filesystem_overview.txt

Sie können die Erstellung des Berichts bestätigen mit:

cat ~/project/filesystem_overview.txt

Dateisystemnutzung mit df und du untersuchen

In diesem Schritt vertiefen Sie die Untersuchung der Dateisystemnutzung mithilfe der Befehle df und du. Während df einen Überblick über die Festplattennutzung für eingehängte Dateisysteme bietet, wird du (disk usage) verwendet, um den Speicherplatzbedarf für bestimmte Dateien oder Verzeichnisse zu schätzen. Der Unterschied und das Wissen, wann welcher Befehl zu verwenden ist, sind entscheidend für ein effektives Festplattenmanagement.

Beginnen wir damit, den Befehl df mit seiner menschenlesbaren Option erneut zu betrachten. Dieser Befehl eignet sich hervorragend, um eine schnelle Zusammenfassung darüber zu erhalten, wie viel Speicherplatz auf allen eingehängten Dateisystemen belegt und verfügbar ist.

df -h

Die Ausgabe zeigt die Festplattennutzung in einem leicht lesbaren Format (z. B. G für Gigabyte, M für Megabyte):

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        892M     0  892M   0% /dev
tmpfs           915M     0  915M   0% /dev/shm
tmpfs           915M   17M  899M   2% /run
tmpfs           915M     0  915M   0% /sys/fs/cgroup
/dev/vda4       8.0G  1.4G  6.7G  17% /
/dev/vda3      1014M  166M  849M  17% /boot
tmpfs           183M     0  183M   0% /run/user/1000

Lassen Sie uns nun den Befehl du erkunden. Im Gegensatz zu df berechnet du den von Dateien und Verzeichnissen innerhalb eines angegebenen Pfades belegten Speicherplatz. Dies ist besonders nützlich, wenn Sie herausfinden möchten, welche Verzeichnisse oder Dateien den meisten Speicherplatz verbrauchen.

Um die Festplattennutzung Ihres aktuellen Verzeichnisses (~/project) zu sehen, verwenden Sie du ohne Argumente. Dies listet die Größe jeder Datei und jedes Unterverzeichnisses innerhalb von ~/project auf.

du

Die Ausgabe kann umfangreich sein und zeigt die Größen standardmäßig in Kilobyte an:

4       ./.config/xfce4/xfconf/xfce-perchannel-xml
8       ./.config/xfce4/xfconf
12      ./.config/xfce4
16      ./.config
4       ./.local/share/nano
8       ./.local/share
12      ./.local
28      .

Um die Ausgabe lesbarer zu machen, ähnlich wie bei df -h, können Sie die Option -h mit du verwenden.

du -h

Dies zeigt die Größen in menschenlesbaren Einheiten an:

4.0K    ./.config/xfce4/xfconf/xfce-perchannel-xml
8.0K    ./.config/xfce4/xfconf
12K     ./.config/xfce4
16K     ./.config
4.0K    ./.local/share/nano
8.0K    ./.local/share
12K     ./.local
28K     .

Oft interessiert man sich eher für die Gesamtgröße eines Verzeichnisses als für die Größe jeder einzelnen Datei und jedes Unterverzeichnisses. Hierfür können Sie die Option -s (summary) zusammen mit -h verwenden. Prüfen wir die Gesamtgröße Ihres Home-Verzeichnisses (~).

du -sh ~

Dieser Befehl gibt die Gesamtgröße Ihres Home-Verzeichnisses aus:

48K     /home/labex

Lassen Sie uns einige Dateien erstellen, um zu sehen, wie du deren Größen meldet. Wir erstellen ein Verzeichnis namens test_data und darin einige Dateien.

Erstellen Sie zuerst das Verzeichnis:

mkdir ~/project/test_data

Navigieren Sie nun in das Verzeichnis test_data:

cd ~/project/test_data

Erstellen Sie als Nächstes einige Dateien mit Inhalt. Wir verwenden den Befehl head, um Dateien bestimmter Größe zu generieren.

head -c 1K < /dev/urandom > file1.txt
head -c 5K < /dev/urandom > file2.txt
head -c 10K < /dev/urandom > file3.txt

Verwenden Sie nun du -h, um die Größen dieser neuen Dateien und des Verzeichnisses test_data zu sehen.

du -h

Sie sollten eine Ausgabe ähnlich dieser sehen:

1.0K    ./file1.txt
5.0K    ./file2.txt
10K     ./file3.txt
24K     .

Die letzte Zeile (24K .) zeigt die Gesamtgröße des aktuellen Verzeichnisses (., also ~/project/test_data).

Gehen Sie abschließend zurück in Ihr ~/project-Verzeichnis und prüfen Sie die Gesamtgröße von test_data mit du -sh.

cd ~/project
du -sh test_data

Dies zeigt die zusammengefasste Größe des Verzeichnisses test_data:

24K     test_data

Dies demonstriert, wie du verwendet werden kann, um den Speicherplatzverbrauch innerhalb bestimmter Verzeichnisse genau zu bestimmen und so den Speicher effektiv zu verwalten.

Dateisysteme manuell ein- und aushängen

In diesem Schritt lernen Sie, wie Sie Dateisysteme manuell ein- und aushängen. Das Einhängen (Mounten) eines Dateisystems macht dessen Inhalt über ein bestimmtes Verzeichnis (Einhängepunkt) in der Dateisystemhierarchie zugänglich. Das Aushängen (Unmounten) trennt das Dateisystem von seinem Einhängepunkt und macht dessen Inhalt unzugänglich, bis es erneut eingehängt wird. Dies ist eine wichtige Fähigkeit für die Verwaltung von Wechselmedien, temporärem Speicher oder neuen Festplattenpartitionen.

Für diese Übung verwenden wir die zusätzliche, nicht eingehängte Festplatte, die in Ihrer LabEx-VM-Umgebung verfügbar ist. Abhängig von der VM könnte diese Festplatte /dev/vdb, /dev/nvme1n1 oder ähnlich heißen, daher werden wir sie erkennen, anstatt einen Gerätenamen fest zu kodieren.

Identifizieren wir zuerst die Root-Festplatte und die zusätzliche Festplatte, die Sie formatieren und einhängen werden.

ROOT_PARTITION=$(findmnt -n -o SOURCE /)
ROOT_DISK="/dev/$(lsblk -no PKNAME \"$ROOT_PARTITION\")"
DATA_DISK=$(lsblk -dnpo NAME,TYPE | awk '$2 == "disk" {print $1}' | grep -vx "$ROOT_DISK" | head -n 1)
echo "$DATA_DISK"

Dieser Befehl sollte den Pfad zur zusätzlichen Festplatte ausgeben, wie z. B. /dev/vdb oder /dev/nvme1n1.

/dev/nvme1n1

Bevor Sie ein Dateisystem einhängen können, benötigen Sie einen Einhängepunkt, also ein leeres Verzeichnis. Es ist üblich, /mnt für temporäre Mounts zu verwenden oder ein Unterverzeichnis darin zu erstellen. Erstellen wir ein neues Verzeichnis namens mydata in Ihrem ~/project-Verzeichnis, das als Einhängepunkt dienen soll.

mkdir ~/project/mydata

Nun müssen wir die zusätzliche Festplatte, die in $DATA_DISK gespeichert ist, mit einem Dateisystem formatieren. Wir verwenden das XFS-Dateisystem, das der Standard für Red Hat Enterprise Linux ist. Seien Sie vorsichtig mit diesem Befehl, da er alle Daten auf dem angegebenen Gerät löscht.

sudo mkfs.xfs "$DATA_DISK"

Sie sehen eine Ausgabe, die die Erstellung des XFS-Dateisystems anzeigt. Der Gerätename in der Ausgabe entspricht Ihrer VM:

meta-data=/dev/nvme1n1           isize=512    agcount=4, agsize=2621440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=10485760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Nachdem $DATA_DISK nun ein XFS-Dateisystem hat, können Sie es an Ihren Einhängepunkt ~/project/mydata anhängen. Der Befehl mount erfordert sudo-Rechte.

sudo mount "$DATA_DISK" ~/project/mydata

Um zu überprüfen, ob das Dateisystem erfolgreich eingehängt wurde, verwenden Sie erneut den Befehl df -h. Sie sollten Ihr erkanntes Laufwerk mit /home/labex/project/mydata als Einhängepunkt aufgelistet sehen.

df -h

Suchen Sie in der Ausgabe nach Ihrem erkannten Laufwerk:

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/nvme1n1     40G  318M   40G   1% /home/labex/project/mydata

Jetzt können Sie Dateien und Verzeichnisse innerhalb von ~/project/mydata erstellen, die auf der Festplatte in $DATA_DISK gespeichert werden. Erstellen wir eine Testdatei:

sudo touch ~/project/mydata/testfile.txt

Sie können den Inhalt von ~/project/mydata auflisten, um die Erstellung der Datei zu bestätigen:

ls -l ~/project/mydata

Sie sollten testfile.txt aufgelistet sehen:

total 0
-rw-r--r--. 1 root root 0 Jun 16 11:09 testfile.txt

Wenn Sie mit der Verwendung eines eingehängten Dateisystems fertig sind, ist es wichtig, es auszuhängen, um Datenbeschädigungen zu vermeiden, insbesondere bevor ein physisches Gerät entfernt wird. Verwenden Sie den Befehl umount, um das Dateisystem auszuhängen.

sudo umount ~/project/mydata

Wenn der Befehl zum Aushängen mit einem Fehler "target is busy" fehlschlägt, bedeutet dies, dass ein Prozess noch auf den Einhängepunkt zugreift. Dies passiert oft, wenn sich Ihr aktuelles Arbeitsverzeichnis innerhalb des eingehängten Dateisystems befindet. Um dies zu beheben, wechseln Sie in ein Verzeichnis außerhalb des Einhängepunkts, zum Beispiel in Ihr Home-Verzeichnis (~).

cd ~

Versuchen Sie dann erneut, es auszuhängen:

sudo umount ~/project/mydata

Überprüfen Sie nach dem Aushängen, ob Ihr erkanntes Laufwerk nicht mehr eingehängt ist, indem Sie erneut df -h prüfen.

df -h

Sie sollten Ihr erkanntes Laufwerk nicht mehr unter /home/labex/project/mydata eingehängt sehen.

Filesystem      Size  Used Avail Use% Mounted on
...
## Ihr zusätzliches Laufwerk sollte hier nicht mehr aufgelistet sein.

Damit ist der Prozess des manuellen Ein- und Aushängens eines Dateisystems abgeschlossen.

Dateien nach Name mit locate und find suchen

In diesem Schritt lernen Sie, wie Sie Dateien auf Ihrem System mithilfe zweier leistungsstarker Befehle finden: locate und find. Beide Befehle helfen Ihnen bei der Suche nach Dateien, arbeiten jedoch unterschiedlich und eignen sich für verschiedene Szenarien.

Verwendung des Befehls locate

Der Befehl locate ist sehr schnell, da er eine vorgefertigte Datenbank mit Dateinamen und Pfaden durchsucht. Das bedeutet jedoch, dass er möglicherweise keine Dateien findet, die seit der letzten Datenbankaktualisierung erstellt oder gelöscht wurden. Die Datenbank wird normalerweise täglich durch einen Cron-Job aktualisiert, aber Sie können eine Aktualisierung erzwingen.

Auf diesem Image ist der Befehl locate bereits verfügbar. Bestätigen Sie, dass der Befehl existiert, bevor Sie seine Datenbank aktualisieren.

command -v locate

Sie sollten eine Ausgabe ähnlich dieser sehen:

/usr/bin/locate

Nach der Installation müssen Sie die locate-Datenbank aktualisieren. Dieser Befehl erfordert sudo-Rechte.

sudo updatedb

Dieser Befehl läuft im Hintergrund und kann je nach Größe Ihres Dateisystems einige Augenblicke dauern.

Suchen wir nun nach einer gängigen Systemdatei, wie passwd.

locate passwd

Sie sehen eine Liste von Pfaden, die "passwd" enthalten:

/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz
...output omitted...

Um eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, verwenden Sie die Option -i. Suchen wir nach Dateien, die "messages" enthalten, ohne auf die Großschreibung zu achten.

locate -i messages

Sie sehen Ergebnisse wie:

/usr/share/locale/zza/LC_MESSAGES
/usr/share/makedumpfile/eppic_scripts/ap_messages_3_10_to_4_8.c
/usr/share/vim/vim82/ftplugin/msmessages.vim
...output omitted...

Sie können die Anzahl der Ergebnisse auch mit der Option -n begrenzen. Finden wir die ersten 5 Vorkommen von "passwd".

locate -n 5 passwd

Dies zeigt nur die ersten 5 Treffer:

/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz

Verwendung des Befehls find

Der Befehl find durchsucht das Dateisystem in Echtzeit, was ihn langsamer als locate macht, aber sicherstellt, dass er alle Dateien findet, die Ihren Kriterien entsprechen, einschließlich derer, die erst kürzlich erstellt wurden. Er bietet auch wesentlich leistungsfähigere Suchoptionen.

Die grundlegende Syntax für find lautet find [Pfad] [Ausdruck]. Wenn kein Pfad angegeben ist, wird das aktuelle Verzeichnis durchsucht.

Suchen wir nach der Datei sshd_config, beginnend im Root-Verzeichnis (/).

find / -name sshd_config

Sie sollten den Pfad zur Konfigurationsdatei sehen:

/etc/ssh/sshd_config

Bei der Suche nach Teilnamen oder der Verwendung von Platzhaltern ist es wichtig, das Dateinamenmuster in Anführungszeichen zu setzen, um zu verhindern, dass die Shell es vorzeitig erweitert. Finden wir alle Dateien, die auf .txt enden, in Ihrem ~/project-Verzeichnis.

find ~/project -name '*.txt'

Wenn Sie im vorherigen Schritt file1.txt, file2.txt und file3.txt erstellt haben, sollten diese aufgelistet werden:

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

Um eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung mit find durchzuführen, verwenden Sie die Option -iname. Suchen wir nach Dateien, die "README" enthalten (Groß-/Kleinschreibung ignoriert), im Verzeichnis /usr/share/doc.

find /usr/share/doc -iname '*readme*'

Sie sehen viele Ergebnisse, zum Beispiel:

/usr/share/doc/libselinux/README
/usr/share/doc/libsepol/README
/usr/share/doc/libsemanage/README
...output omitted...

Der Befehl find ist sehr vielseitig und kann mit anderen Kriterien kombiniert werden, die Sie in den nächsten Schritten erkunden werden.

Bevor Sie fortfahren, speichern Sie die wichtigsten locate- und find-Ergebnisse, damit Sie sie später vergleichen können.

{
  locate -n 5 passwd
  echo "---"
  find ~/project -name '*.txt'
} > ~/project/search-results.txt

Sie können die gespeicherten Ergebnisse überprüfen mit:

cat ~/project/search-results.txt

Dateien nach Eigentümer, Berechtigungen, Größe und Zeit finden

In diesem Schritt lernen Sie, wie Sie den leistungsstarken Befehl find verwenden, um Dateien basierend auf verschiedenen Kriterien jenseits ihres Namens zu lokalisieren. Dazu gehört die Suche nach Eigentümer, Berechtigungen, Größe und Änderungszeit. Diese erweiterten Suchfunktionen sind für Systemadministrationsaufgaben wie Auditing, Bereinigung und Fehlerbehebung unerlässlich.

Dateien nach Eigentümer finden

Sie können nach Dateien suchen, die einem bestimmten Benutzer oder einer Gruppe gehören, indem Sie die Optionen -user bzw. -group verwenden. Sie können den Benutzer-/Gruppennamen oder deren numerische ID angeben.

Finden wir alle Dateien in Ihrem Home-Verzeichnis (~), die dem Benutzer labex gehören.

find ~ -user labex

Dies listet viele Dateien auf, einschließlich Ihrer Konfigurationsdateien:

/home/labex
/home/labex/.bash_logout
/home/labex/.bash_profile
/home/labex/.bashrc
/home/labex/.config
/home/labex/.config/xfce4
/home/labex/.config/xfce4/xfconf
/home/labex/.config/xfce4/xfconf/xfce-perchannel-xml
/home/labex/.local
/home/labex/.local/share
/home/labex/.local/share/nano
/home/labex/project
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
...output omitted...

Ebenso, um Dateien zu finden, die der Gruppe labex gehören:

find ~ -group labex

Die Ausgabe ist ähnlich, da labex normalerweise die primäre Gruppe für den Benutzer labex ist.

Sie können auch nach User ID (UID) oder Group ID (GID) suchen. Der Benutzer labex hat normalerweise eine UID und GID von 1000.

find ~ -uid 1000
find ~ -gid 1000

Dateien nach Berechtigungen finden

Die Option -perm des Befehls find ermöglicht es Ihnen, nach Dateien mit bestimmten Berechtigungen zu suchen. Berechtigungen können im oktalen (z. B. 755) oder symbolischen (z. B. u=rwx,g=rx,o=rx) Modus angegeben werden.

Erstellen wir eine Testdatei in Ihrem ~/project-Verzeichnis mit bestimmten Berechtigungen.

touch ~/project/permission_test.txt
chmod 644 ~/project/permission_test.txt

Finden wir nun Dateien in ~/project, die exakt die Berechtigungen 644 haben.

find ~/project -perm 644

Sie sollten permission_test.txt aufgelistet sehen:

/home/labex/project/permission_test.txt

Sie können auch einen führenden / oder - mit den oktalen Berechtigungen verwenden:

  • /: Stimmt überein, wenn irgendeines der angegebenen Berechtigungsbits gesetzt ist.
  • -: Stimmt überein, wenn alle der angegebenen Berechtigungsbits gesetzt sind.

Finden wir Dateien in ~/project, bei denen andere mindestens Leseberechtigung haben (o=r oder 004).

find ~/project -perm -004

Dies listet permission_test.txt und andere Dateien auf, die anderen Lesezugriff gewähren.

/home/labex/project/permission_test.txt
...output omitted...

Dateien nach Größe finden

Die Option -size ermöglicht es Ihnen, nach Dateien basierend auf ihrer Größe zu suchen. Sie können die Größe mit Einheiten angeben (z. B. k für Kilobyte, M für Megabyte, G für Gigabyte). Sie können auch + für "größer als" und - für "kleiner als" verwenden.

Finden wir Dateien in Ihrem Verzeichnis ~/project/test_data, die exakt 1 Kilobyte groß sind.

find ~/project/test_data -size 1k

Sie sollten file1.txt sehen:

/home/labex/project/test_data/file1.txt

Finden Sie nun Dateien, die größer als 5 Kilobyte sind.

find ~/project/test_data -size +5k

Dies sollte file3.txt auflisten:

/home/labex/project/test_data/file3.txt

Und Dateien, die kleiner als 10 Kilobyte sind.

find ~/project/test_data -size -10k

Dies sollte file1.txt und file2.txt auflisten:

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt

Dateien nach Änderungszeit finden

Sie können nach Dateien basierend auf ihrer Änderungszeit suchen, indem Sie Optionen wie -mmin (vor Minuten geändert) oder -mtime (vor Tagen geändert) verwenden.

Finden wir Dateien in Ihrem ~/project-Verzeichnis, die in den letzten 60 Minuten geändert wurden.

find ~/project -mmin -60

Dies beinhaltet wahrscheinlich permission_test.txt und die Dateien in test_data, falls Sie sie kürzlich erstellt haben:

/home/labex/project
/home/labex/project/permission_test.txt
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

Um Dateien zu finden, die vor mehr als 1 Tag (24 Stunden) geändert wurden, können Sie +1 mit -mtime verwenden.

find ~/project -mtime +1

Dieser Befehl gibt möglicherweise keine Dateien zurück, wenn alle Ihre ~/project-Dateien kürzlich erstellt oder geändert wurden.

Diese Optionen können kombiniert werden, um sehr spezifische Suchanfragen zu erstellen, mit denen Sie Dateien auf Ihrem System effizient verwalten können.

Speichern Sie zwei Ihrer Suchergebnisse, damit die nächste Überprüfung bestätigen kann, dass die richtigen Dateien gefunden wurden.

find ~/project -perm 644 > ~/project/find-perm-results.txt
find ~/project/test_data -size +5k > ~/project/find-size-results.txt

Nach Dateien basierend auf dem Dateityp suchen

In diesem letzten Schritt lernen Sie, wie Sie den Befehl find verwenden, um nach Dateien basierend auf ihrem Typ zu suchen. Dies ist besonders nützlich, wenn Sie alle Verzeichnisse, regulären Dateien, symbolischen Links oder Gerätedateien innerhalb eines bestimmten Pfades lokalisieren müssen.

Der Befehl find verwendet die Option -type gefolgt von einem einzelnen Zeichen, um den Dateityp anzugeben. Hier sind einige gängige Dateitypen, nach denen Sie suchen können:

  • f: Reguläre Datei
  • d: Verzeichnis
  • l: Symbolischer Link (Symlink)
  • b: Blockgerät
  • c: Zeichengerät (Character device)
  • p: Benannte Pipe (FIFO)
  • s: Socket

Beginnen wir mit der Suche nach allen Verzeichnissen innerhalb Ihres ~/project-Verzeichnisses.

find ~/project -type d

Sie sollten eine Ausgabe ähnlich dieser sehen, die alle Verzeichnisse und Unterverzeichnisse auflistet:

/home/labex/project
/home/labex/project/test_data

Suchen wir als Nächstes nach allen regulären Dateien innerhalb Ihres ~/project-Verzeichnisses.

find ~/project -type f

Dies listet Dateien wie file1.txt, file2.txt und file3.txt auf, die Sie zuvor erstellt haben:

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

Erstellen wir nun einen symbolischen Link, um die Suche nach Symlinks zu demonstrieren. Wir erstellen einen Symlink auf file1.txt in Ihrem ~/project-Verzeichnis.

ln -s ~/project/test_data/file1.txt ~/project/link_to_file1.txt

Überprüfen Sie mit ls -l, ob der Symlink erstellt wurde:

ls -l ~/project/link_to_file1.txt

Sie sollten eine Ausgabe sehen, die anzeigt, dass es sich um einen symbolischen Link handelt:

lrwxrwxrwx. 1 labex labex 32 May 15 08:00 /home/labex/project/link_to_file1.txt -> /home/labex/project/test_data/file1.txt

Suchen Sie nun nach allen symbolischen Links innerhalb Ihres ~/project-Verzeichnisses.

find ~/project -type l

Sie sollten Ihren neu erstellten Symlink sehen:

/home/labex/project/link_to_file1.txt

Suchen wir abschließend nach Blockgeräten. Blockgeräte befinden sich normalerweise im Verzeichnis /dev.

find /dev -type b

Dies listet Blockgeräte wie vda, vda1, vda2 usw. auf:

/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2
/dev/nvme0n1p3
/dev/nvme1n1

Sie können die Option -type mit anderen find-Optionen kombinieren, die Sie in den vorherigen Schritten gelernt haben. Um beispielsweise alle Verzeichnisse in /etc zu finden, die dem Benutzer root gehören:

find /etc -type d -user root

Dies erzeugt eine lange Liste von Verzeichnissen:

/etc
/etc/selinux
/etc/selinux/targeted
/etc/selinux/targeted/active
/etc/selinux/targeted/active/modules
...output omitted...

Speichern Sie die Suchergebnisse für symbolische Links, bevor Sie das Lab beenden.

find ~/project -type l > ~/project/find-type-results.txt

Damit ist das Lab zum Zugriff auf Linux-Dateisysteme und zum Suchen von Dateien abgeschlossen. Sie haben gelernt, wie man Geräte identifiziert, die Festplattennutzung untersucht, Dateisysteme manuell ein- und aushängt und locate sowie find mit verschiedenen Kriterien verwendet.

Zusammenfassung

In diesem Lab haben wir praktische Erfahrungen bei der Verwaltung von Linux-Dateisystemen auf einem Red Hat Enterprise Linux-System gesammelt. Wir begannen damit, Dateisysteme und Blockgeräte mithilfe von Befehlen wie lsblk zu identifizieren und grundlegende Konzepte wie Blockgeräte, Partitionen, Dateisysteme und Einhängepunkte zu verstehen. Anschließend untersuchten wir, wie die Dateisystemnutzung mit df und du überprüft wird, wobei wir zwischen deren Funktionalitäten zur Meldung von Speicherplatz unterschieden. Das Lab behandelte auch die wesentliche Fähigkeit, Dateisysteme manuell ein- und auszuhängen, und demonstrierte, wie man Dateisysteminhalte zugänglich macht und wieder trennt.

Darüber hinaus haben wir uns mit der effizienten Suche nach Dateien anhand verschiedener Kriterien befasst. Wir haben gelernt, Dateien mit locate und find nach Namen zu suchen und die Unterschiede sowie die geeigneten Anwendungsfälle für jeden Befehl zu verstehen. Das Lab erweiterte dies, indem es lehrte, wie man nach Dateien basierend auf Eigentümer-, Berechtigungs-, Größen- und Zeitattributen sucht, was leistungsstarke Werkzeuge für die Systemadministration und Fehlerbehebung bietet. Abschließend haben wir die Suche nach Dateien basierend auf ihren spezifischen Dateitypen geübt und damit einen umfassenden Überblick über die Dateisystemverwaltung und Dateisuchtechniken erhalten.