struct stat { dev_t st_dev; /* device*/ mode_t st_mode; /* hard link*/ uid_t st_gid; Gruppen-ID */ dev_t st_rdev; /* Gerätetyp */ off_t st_off; /* Anzahl der Bytes in der Datei*/ unsigned long st_blksize; /* Blockgröße*/ unsigned long st_blocks; /* Anzahl der Blöcke*/ time_t st_mtime; / time_t st_ctime; /* Zeitpunkt der letzten Änderung (bezogen auf Attribute) */};
Lassen Sie uns diese Attribute einzeln kennenlernen. Wenn Sie die Attribute einer bestimmten Datei anzeigen müssen, verwenden Sie
statGeben Sie einfach den Befehl ein und die Informationen werden gemäß der obigen Struktur aufgelistet. Zusätzlich,
lsDer Befehl kann auch die relevanten Attribute der Datei anzeigen, nachdem bestimmte Parameter befolgt wurden, z
-lParameter.
Die Dateitypen entsprechen den oben genannten
st_modeEs gibt viele Dateitypen, z. B. reguläre Dateien, symbolische Links (Hardlinks, Softlinks), Pipe-Dateien, Gerätedateien (symbolische Geräte, Blockgeräte), Socket-Dateien usw. Verschiedene Dateitypen entsprechen unterschiedlichen Funktionen und Rollen.
$ ls -ltotal 12drwxr-xr-x 2 Root Root 4096 2007-12-07 20:08 Directory_fileprw-r--r-- 1 Root Root 0 2007-12-07 20:18 Fifo_pipebrw-r--r-- 1 Root Root 3, 1 07.12.2007 21:44 hda1_block_dev_filecrw-r--r-- 1 Root Root 1, 3 2007-12-07 21:43 Null_char_dev_file-rw-r--r-- 2 Root Root 506 2007-12-07 21:55 Regular_file-rw -r--r-- 2 Wurzel Wurzel 506 2007-12-07 21:55 Regular_file_hard_linklrwxrwxrwx 1 Root Root 12 2007-12-07 20:15 Regular_file_soft_link -> Regular_file$ stat Verzeichnisdatei/ Datei: `directory_file/' Größe: 4096 Blöcke: 8 IO-Block: 4096 Verzeichnisgerät: 301h/769d Inode: 521521 Links: 2Zugriff: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)Zugriff: 2007-12-07 20:08:18.000000000 +0800Änderung: 2007- 12-07 20:08:18.000000000 +0800Änderung: 2007-12-07 20:08:18.000000000 +0800$ stat null_char_dev_file Datei: `null_char_dev_file' Größe: 0 Blöcke: 0 IO-Block: 4096 Zeichen SpezialdateiGerät: 301h/769d Inode: 521240 Links: 1 Gerätetyp: 1,3Zugriff: (0644/crw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Zugriff: 2007-12-07 21 :43:38.000000000 +0800Ändern: 07.12.2007 21:43:38.000000000 +0800Änderung: 07.12.2007 21:43:38.000000000 +0800
Beschreibung: Bestanden
lsSie können sehen, dass sich die ersten Zeichen jeder Zeile der Befehlsergebnisse voneinander unterscheiden, was lediglich die Typen der unterschiedlichen Dateien widerspiegelt.
DStellt ein Verzeichnis dar,
-Stellt eine gewöhnliche Datei (oder einen Hardlink) dar.
lStellt einen symbolischen Link dar,
PStellt eine Pipeline-Datei dar,
BUnd
CStellt Blockgeräte bzw. Zeichengeräte dar (zusätzlich).
Säußern
Buchsedokumentieren). existieren
statIm Ergebnis des Befehls finden Sie die Beschreibung am Ende der zweiten Zeile. Wie aus der obigen Operation ersichtlich ist,
Verzeichnisdateiist das Verzeichnis,
statWird in den Ergebnissen von Befehlen verwendet
Verzeichnisrepräsentiert, und
null_char_dev_fileEs nutzt
Zeichen-Spezialdateiveranschaulichen.
Normalerweise werden nur Verzeichnisse, gewöhnliche Dateien und symbolische Links verwendet, und andere Dateitypen kommen selten vor. Diese Dateien haben jedoch immer noch ihre eigenen Verwendungszwecke. Wenn Sie eingebettete Entwicklungs- oder Prozesskommunikationsdateien usw. durchführen, werden Gerätedateien und Named Pipes verwendet (FIFO). Das Folgende ist eine einfache Operation, um den Unterschied zwischen ihnen darzustellen (die spezifischen Prinzipien werden im nächsten Abschnitt „Shell Programming Paradigm File System“ vorgestellt). Wenn Sie interessiert sind, können Sie auch im Voraus online gehen, um die Rolle von Gerätedateien zu ermitteln , Blockgeräte und Zeichengeräteunterschiede und wie verwandte Gerätetreiber in den Treiber geschrieben werden usw.).
Für gewöhnliche Dateien: Es handelt sich um eine Sammlung von Zeichen, die gelesen, geschrieben usw. werden können.
$ echo hallo, Welt > Regular_File$ Cat Regular_Filehello, Welt
Im Verzeichnis können neue Dateien erstellt werden, daher wird das Verzeichnis auch als Ordner bezeichnet. Die Struktur der Verzeichnisdatei wird später analysiert. Darin werden tatsächlich die Dateinamen jeder Datei gespeichert.
$ cd Verzeichnisdatei$ touch Datei1 Datei2 Datei3
Für Named Pipes ist der Vorgang interessanter: Wenn Sie es lesen möchten, wird es blockiert, es sei denn, es gibt Inhalt. Wenn Sie darauf schreiben möchten, wird es blockiert, es sei denn, jemand kommt, um es zu lesen. Es wird häufig in der Prozesskommunikation verwendet. Es können zwei Terminals geöffnet werden
terminal1Und
Terminal2, probieren Sie es aus:
terminal1$ cat fifo_pipe #Hier wird zunächst blockiert und die Testzeichenfolge erst gedruckt, wenn die folgende Schreibaktion erfolgt terminal2$ echo test > fifo_pipe
In Bezug auf Blockgeräte entsprechen Zeichengeräte und Gerätedateien
/dev/hda1Und
/dev/null, wenn Sie einen USB-Stick verwendet oder ein einfaches Skript geschrieben haben, sollten Sie diese Methode schon einmal verwendet haben: :-)
$ mount hda1_block_dev_file /mnt #Mounten Sie die erste Partition der Festplatte in /mnt (das Prinzip des Mountens wird im nächsten Abschnitt besprochen) $ echo fivefewfef > /dev/null #/dev/null ist wie ein schwarzes Loch, so etwas fehlt. Sobald man drinnen ist, verschwindet alles
Die letzten beiden Dateien sind
reguläre_DateiHardlinks und Softlinks von Dateien: Wenn Sie sie lesen und schreiben, sind ihre Inhalte gleich, aber wenn Sie sie löschen, haben sie nichts miteinander zu tun. Was ist der Unterschied zwischen Hardlinks und Softlinks? Ersteres kann als Originaldatei bezeichnet werden, während letzteres nur eine solche hat
InodeDa jedoch kein tatsächlicher Speicherplatz vorhanden ist, wird die Verwendung empfohlen
statBefehl, um die Unterschiede zwischen ihnen zu sehen, einschließlich ihrer
Blöcke,
InodeÄquivalent können Sie auch in Betracht ziehen
diffVergleichen Sie ihre Größen.
$ ls reguläre_Datei*ls reguläre_Datei* -l-rw-r--r-- 2 Root Root 204800 2007-12-07 22:30 Regular_file-rw-r--r-- 2 Root Root 204800 2007-12-07 22 :30 regular_file_hard_linklrwxrwxrwx 1 root root 12 2007-12-07 20:15 Regular_file_soft_link -> Regular_file$ rm Regular_file # Löschen Sie die Originaldatei $ Cat Regular_File_Hard_Link # Der Hardlink ist immer noch da und es ist noch Inhalt darin fefe$ Cat Regular_File_Soft_LinkCat: Regular_File_Soft_link: Keine solche Datei oder kein solches Verzeichnis
Obwohl die Softlink-Datei selbst noch vorhanden ist, kann sie nichts lesen, da sie den Inhalt selbst nicht speichert. Dies ist der Unterschied zwischen Softlinks und Hardlinks.
Es ist zu beachten, dass Hardlinks keine Dateisysteme überqueren können, Softlinks jedoch schon. Darüber hinaus ist es nicht erlaubt, Hardlinks zu Verzeichnissen zu erstellen.
Dateitypen werden ab der Ebene des Linux-Dateisystems in die oben genannten Typen unterteilt, normale Dateien können jedoch weiterhin unterteilt werden (gemäß der „Datenstruktur“ des Dateiinhalts), z. B. allgemeine Textdateien und ausführbare Dateien
ELFdokumentieren,
seltsamdokumentieren,
jpgBildformat,
tauschenPartitionsdatei,
ELFWenn Sie sich für das Funktionsprinzip der Datei interessieren, empfiehlt es sich, die Referenzen und zu lesen
ELFDer relevante Teil der Datei. Dieser Teil ist für Embedded-Linux-Ingenieure von entscheidender Bedeutung.
Obwohl verschiedene Arten gewöhnlicher Dateien über eigene Betriebstools verfügen, können Sie sie dennoch direkt lesen und schreiben. Ich werde diese Tools zuerst erwähnen und die Details später besprechen.
od: Dateiinhalte in oktalen oder anderen Formaten „exportieren“.
Saiten: Lesen Sie die Zeichen in der Datei (druckbare Zeichen).
gcc,
gdb,
readelf,objdump
Warten:ELF
Tools zur Dateianalyse und -verarbeitung (gcc
Compiler,gdb
Debugger,readelf
ELF-Dateien analysieren,objdump`-Dekompilierungstool)
Fügen Sie einen weiteren sehr wichtigen Befehl hinzu:
DateiMit diesem Befehl können Sie die Eigenschaften verschiedener Dateitypen anzeigen. Und
statIm Vergleich zum Befehl kann es gewöhnliche Dateien weiter identifizieren, nämlich
statBefehl angezeigt
reguläre Datei. Weil
reguläre DateiEs kann eine Vielzahl unterschiedlicher Strukturen geben und somit unterschiedlich interpretiert werden und mit Unterstützung des Betriebssystems unterschiedliche Aktionen ausführen. Obwohl unter Linux bestimmte Suffixe zu Dateien hinzugefügt werden, damit Benutzer den Dateityp leicht identifizieren können, identifiziert das Linux-Betriebssystem verschiedene Dateitypen anhand des Dateiheaders und nicht anhand des Dateisuffixes, was die Interpretation noch schwieriger macht entsprechende Dateien. Im Folgenden finden Sie eine kurze Einführung
DateiVerwendung des Befehls.
$ Datei ././: Verzeichnis$ Datei /etc/profile/etc/profile: Englischer ASCII-Text$ Datei /lib/libc-2.5.so/lib/libc-2.5.so: ELF 32-Bit LSB Shared Object, Intel 80386, Version 1 (SYSV), nicht entfernt$-Datei /bin/test/bin/test: ELF 32-Bit-LSB-ausführbare Datei, Intel 80386, Version 1 (SYSV), dynamisch verknüpft (verwendet gemeinsam genutzte Bibliotheken), entfernt$ Datei /dev/hda/dev/hda: Blockspezial (3/0)$ Datei /dev/console/dev/console: Zeichenspezial (5/1) $ cp /etc/profile .$ tar zcf Profile.tar.gz Profile$ Datei Profile.tar.gzProfile.tar.gz: Gzip-komprimierte Daten, von Unix, letzte Änderung: Di, 4. Januar 18:53:53 2000$ mkfifo fifo_test$ Datei fifo_testfifo_test: fifo (benannte Pipe)
Weitere Verwendungsmöglichkeiten anzeigen
DateiBefehlshandbuch, ungefähr
DateiInformationen zum Implementierungsprinzip des Befehls finden Sie unter
MagieHandbuch (siehe
/etc/file/magicDatei, verstehen Sie, was eine Datei ist
magische ZahlWarten).
Als Mehrbenutzersystem bietet Linux großen Komfort für mehrere Benutzer, um dasselbe System zu verwenden. Beispielsweise unterscheidet es für Dateien auf dem System verschiedene Benutzer anhand ihrer Besitzer, um ihre Betriebsberechtigungen verschiedenen Dateien zuzuweisen. Zur einfacheren Verwaltung umfasst der Dateieigentümer den Benutzer, zu dem die Datei gehört, und die Benutzergruppe, zu der die Datei gehört, da ein Benutzer mehreren Gruppen angehören kann. Lassen Sie uns zunächst kurz die Verwaltung von Benutzern und Gruppen unter Linux vorstellen.
Linux bietet eine Reihe von Befehlen zum Verwalten von Benutzern und Gruppen, beispielsweise zum Erstellen von Benutzern
Benutzer hinzufügenUnd
Gruppenhinzufügen, wird zum Löschen von Benutzern verwendet
BenutzerdelUnd
Gruppendel,Zusätzlich,
PasswortMit dem Befehl wird das Benutzerpasswort geändert. Natürlich bietet Linux auch zwei entsprechende Konfigurationen, nämlich
/etc/passwdUnd
/etc/groupDarüber hinaus legen einige Systeme das Passwort auch separat in der Konfigurationsdatei ab
/etc/shadowMitte. Bitte beachten Sie die folgenden Informationen für ihre detaillierte Verwendung. Sie werden hier nicht vorgestellt. Es werden nur einige Beziehungen zwischen Dateien und Benutzern vorgestellt.
$ chown Benutzername:Gruppenname Dateiname
Wenn Sie die Besitzer aller Dateien in einem Verzeichnis rekursiv ändern möchten, können Sie hinzufügen
-ROptionen.
Anhand der am Anfang dieses Abschnitts aufgeführten Dateistruktur können wir erkennen, dass es nur Benutzer gibt
AUSWEISund Gruppe
AUSWEISInformationen, aber
ls -lDas Ergebnis zeigt die Informationen zum Benutzernamen und Gruppennamen. Werfen wir zunächst einen Blick darauf
-NDas Ergebnis von:
$ ls -n reguläre_Datei-rw-r--r-- 1 0 0 115 2007-12-07 23:45 reguläre_Datei$ ls -l reguläre_Datei-rw-r--r-- 1 root root 115 2007-12-07 23:45 reguläre_Datei
Wie Sie sehen können,
ls -nBenutzer angezeigt
AUSWEISund Gruppe
AUSWEIS,Und
ls -lIhre Namen werden angezeigt. Denken Sie an die beiden oben genannten Konfigurationsdateien
/etc/passwdUnd
/etc/groupDatei? Sie speichern jeweils Benutzer
AUSWEISund Benutzername, Gruppe
AUSWEISentsprechende Beziehung zum Gruppennamen, sodass es leicht zu denken ist
ls -lWie der Befehl bei der Implementierung die Dateistruktur durchläuft
AUSWEISInformationen finden die entsprechenden Namensinformationen. Wenn du Recht haben willst
ls -lZum besseren Verständnis der Implementierung des Befehls können Sie verwenden
straceVerfolgen Sie, ob beide Konfigurationsdateien gelesen werden.
$ strace -f -o strace.log ls -l regular_file$ cat strace.log |. egrep passwd|group|shadow2989 open(/etc/passwd, O_RDONLY) = 32989 open(/etc/group, O_RDONLY) = 3
veranschaulichen:
straceKann zur Verfolgung von Systemaufrufen und Signalen verwendet werden. als
gdbWie andere leistungsstarke Tools basiert es auf System
ptraceImplementierung eines Systemaufrufs.
Tatsächlich ist es nicht sinnvoll, Eigentümer und Berechtigungen getrennt einzuführen, da nur die Kombination beider ein Mehrbenutzersystem ermöglicht. Andernfalls ist es unmöglich, die Vorgänge verschiedener Benutzer für eine bestimmte Datei, also den Dateivorgang, zu isolieren Berechtigungen werden unten vorgestellt.
aus
ls -lIn den letzten 9 Zeichen der ersten Spalte des Befehlsergebnisses können Sie ähnliche Informationen sehen
rwxr-xr-x, die der Dateistruktur entsprechen
st_modeTeil(
st_modeEnthält zwei Teile: Dateitypinformationen und Dateiberechtigungsinformationen. Diese Art von Informationen kann in drei Teile unterteilt werden, nämlich
wx,
rx,
rx, entsprechend den Betriebsberechtigungen des Benutzers, der Gruppe und anderer Gruppen für die Datei, zu der die Datei gehört
wxJeder von ihnen bedeutet lesbar, beschreibbar und ausführbar, wenn
-Zeigt an, dass keine solche Berechtigung vorliegt. Dementsprechend kann es oktal dargestellt werden, z
rwxr-xr-xEs kann als binär 111101101 ausgedrückt werden, und das entsprechende Oktal ist 755. Aus diesem Grund gibt es viele Möglichkeiten, die Betriebsberechtigungen von Dateien zu ändern, und alle können über diese Methode durchgeführt werden
chmodBefehl zum Ändern.
Zum Beispiel setzen
reguläre_DateiÄndern Sie die Dateiberechtigungen so, dass sie für alle Benutzer lesbar, beschreibbar und ausführbar sind, d. h.
rwxrwxrwx, kann auch als 111111111 ausgedrückt werden, in Oktal übersetzt ist es 777. Diese Berechtigung kann auf zwei Arten geändert werden.
$ chmod a+rwx reguläre_Datei
oder
$ chmod 777 reguläre_Datei
veranschaulichen:
ABezieht sich auf den verwendeten Benutzer. Wenn Sie dem Benutzer nur Lese-, Schreib- und Ausführungsrechte erteilen möchten, können Sie dies tun
AErsetzen durch
u;Und
+Fügen Sie einfach Berechtigungen hinzu. Wenn Sie hingegen eine bestimmte Berechtigung entfernen möchten, verwenden Sie
-,Und
wxEs entspricht lesbar, beschreibbar und ausführbar. Weitere Verwendungsmöglichkeiten anzeigen
chmodBefehlshilfe.
Tatsächlich gibt es zusätzlich zu diesen Berechtigungen zwei weitere Berechtigungen im Zusammenhang mit der Sicherheit, nämlich
setuid/setgidund schreibgeschützte Steuerung usw.
Wenn eine Datei (Programm oder Befehl) festgelegt ist
setuid/setgidBerechtigungen, dann wird der Benutzer dazu in der Lage sein
WurzelDaher kann dies Sicherheitsrisiken mit sich bringen; wenn die schreibgeschützten Berechtigungen der Datei festgelegt sind, verfügt der Benutzer nur über lesbare Berechtigungen für die Datei, wodurch Situationen wie vermieden werden
rm -rfDie „abscheuliche“ Operation bringt gewisse Segnungen mit sich.
Standardmäßig lässt das System keine Ausführung durch normale Benutzer zu
PasswortBefehl, Pass
setuid/setgid, können normale Benutzer zur Ausführung autorisiert werden.
$ ls -l /usr/bin/passwd-rwx--x--x 1 root root 36092 2007-06-19 14:59 /usr/bin/passwd$ su #Wechseln Sie zum Root-Benutzer und fügen Sie „Sticky Bit“ hinzu. $ chmod +s /usr/bin/passwd$ ls -l /usr/bin/passwd-rws--s--x 1 root root 36092 2007-06-19 14:59 /usr/bin/passwd$ exit$ passwd #Normale Benutzer können ihre Passwörter ändern, indem sie diesen Befehl ausführen.
veranschaulichen:
setuidUndsetgidBit ermöglicht normalen Benutzern diesWurzelDie Rolle des Benutzers wird nur ausgeführtWurzelEin Programm oder Befehl, der nur von einem Konto ausgeführt werden kann.
Obwohl dies beispielsweise in gewissem Maße Komfort bei der Verwaltung bietet, ermöglicht der obige Vorgang beispielsweise normalen Benutzern, ihre Konten zu ändern
WurzelKonto, um diese Arbeit für jeden Benutzer zu erledigen. um
setuid/setgidEine ausführlichere Erläuterung finden Sie in den letzten empfohlenen Informationen.
Beispiel für eine schreibgeschützte Berechtigung: Wichtige Dateien sperren (unveränderliches Bit hinzufügen [unveränderlich])), um katastrophale Folgen zu vermeiden, die durch verschiedene Fehlbedienungen verursacht werden (z. B
:``rm -rf)
$ chattr +i reguläre_Datei$ lsattr reguläre_Datei----i-------- reguläre_Datei$ rm reguläre_Datei #Nachdem Sie das unveränderliche Bit hinzugefügt haben, können Sie keine „zerstörerischen“ Aktivitäten an der Datei ausführen: rm: schreibgeschützt entfernen reguläre Datei „regular_file“? yrm: „regular_file“ kann nicht entfernt werden: Vorgang nicht zulässig$ chattr -i regular_file #Wenn Sie reguläre Vorgänge daran ausführen möchten, können Sie dieses Bit entfernen$ rm regular_file
veranschaulichen:
chattrKann zum Festlegen spezieller Berechtigungen für Dateien verwendet werden. Weitere Informationen zur Verwendung finden Sie unter
chattrhelfen.
Bei gewöhnlichen Dateien ist die Dateigröße die Größe des Dateiinhalts. Als spezielle Datei werden verschiedene Dateiinformationen in einer Verzeichnisstruktur gespeichert. Daher ist die Größe des Verzeichnisses im Allgemeinen festgelegt hat eine Obergrenze, d. h. seine Größe geteilt durch die Länge des Dateinamens. Die „Dateigröße“ der Gerätedatei entspricht der Haupt- und Nebengerätenummer des Geräts, und die Größe der berühmten Pipe-Datei ist aufgrund ihrer speziellen Lese- und Schreibeigenschaften immer 0. Ein Hardlink (Verzeichnisdateien können keine Hardlinks erstellen) ist im Wesentlichen eine vollständige Kopie der Originaldatei, daher entspricht seine Größe der Größe der Originaldatei. Ein Softlink ist nur ein
Inode, speichert einen Zeiger auf die Originaldatei, sodass ihre Größe nur der Anzahl der Bytes des Originaldateinamens entspricht. Als nächstes erhöhen wir den Speicher durch Demonstration.
Beispiele für Dateigrößen für Originaldateien und verknüpfte Dateien:
$ echo -n abcde > Regular_file #Schreibe 5 Bytes in Regular_File $ ls -l Regular_file*-rw-r--r-- 2 Root Root 5 2007-12-08 15:28 Regular_file-rw-r--r -- 2 Root Root 5 2007-12-08 15:28 Regular_file_hard_filerwxrwxrwx 1 Root Root 12 07.12.2007 20:15 Regular_File_Soft_Link -> Regular_Filerwxrwxrwx 1 Root Root 22 08.12.2007 15:21 Regular_file_soft_link_link -> Regular_file_soft_link$ i=regular_file$ j=regular_file_soft_link$ echo ${#i} ${# J} #Softlinks speichern genau die Anzahl der Bytes des Dateinamens der Originaldatei, auf die sie verweisen 12 22
Dateigröße entsprechend der Gerätenummer: Haupt- und Nebengerätenummer
$ ls -l hda1_block_dev_filebrw-r--r-- 1 root root 3, 1 2007-12-07 21:44 hda1_block_dev_file$ ls -l null_char_dev_filecrw-r--r-- 1 root root 1, 3 2007-12-07 21:43 null_char_dev_file
Ergänzung: Haupt
(Hauptfach), ZeitenDie (Neben-)Gerätenummer hat unterschiedliche Funktionen. Wenn eine Gerätedatei geöffnet wird, ermittelt der Kernel die Hauptgerätenummer (
Hauptzahl), um den Treiber zu finden, der mit der Hauptgerätenummer im Kernel registriert wurde (Sie können
cat /proc/devicesÜberprüfen Sie die Übereinstimmung zwischen der registrierten Treibernummer und der Hauptgerätenummer sowie der Nebengerätenummer (
Nebenzahl) wird über den Kernel an den Treiber selbst übergeben (siehe Kapitel 10 von „The Linux Primer“). Daher kann für den Kernel der entsprechende Treiber gefunden werden, um ein Gerät anhand der Hauptgerätenummer zu identifizieren, und für den Treiber, um auf komplexere Weise auf das Gerät zugreifen zu können, z. B. auf verschiedene Teile des Geräts (z. B Hardware, die durch Partitionen in verschiedene Teile unterteilt ist) Teil, erscheinen
hda1,
hda2,
hda3usw.), wie z. B. das Generieren von Zufallszahlen mit unterschiedlichen Anforderungen (z. B
/dev/randomUnd
/dev/urandomWarten).
Warum ist die Größe der Verzeichnisdatei so? Schauen Sie sich die Größe der Verzeichnisstruktur unten an. Der Block der Verzeichnisdatei speichert die Einträge für alle Dateinamen im Verzeichnis.
$ ls -ld Verzeichnisdatei/drwxr-xr-x 2 Root Root 4096 07.12.2007 23:14 Verzeichnisdatei/
Der Aufbau des Verzeichnisses ist wie folgt:
struct dirent { long d_ino; off_t d_off; unsigned short d_reclen;
Das Zeitattribut einer Datei kann die Betriebsinformationen des Benutzers in der Datei aufzeichnen und dem Administrator eine Referenz bei der Systemverwaltung, der Bestimmung von Dateiversionsinformationen usw. bieten. Daher wird beim Lesen von Dokumenten die Verwendung empfohlen
KatzeWarten Sie auf Lesewerkzeuge, verwenden Sie keine Bearbeitungswerkzeuge
vimLesen Sie weiter, denn selbst wenn keine Änderungsvorgänge durchgeführt werden, werden die Zeitstempelinformationen der Datei geändert, sobald der Speicherbefehl ausgeführt wird.
Der Dateiname wird nicht in der Dateistruktur gespeichert, sondern in der Verzeichnisstruktur, in der er liegt. Daher müssen Dateinamen innerhalb derselben Verzeichnisebene eindeutig sein.
Zu den allgemeinen Vorgängen bei Dateien gehören das Erstellen, Löschen, Ändern, Lesen, Schreiben usw. Die den verschiedenen Vorgängen entsprechenden „Aktionen hinter den Kulissen“ werden im nächsten Kapitel „Dateisystemoperationen des Shell-Programmierparadigmas“ ausführlich analysiert.
BuchseDatei ist ein spezieller Dateityp, der über die C-Sprache erstellt werden kann. Er wird hier nicht vorgestellt (es ist nicht bekannt, ob er direkt mit Befehlen erstellt werden kann).
$ touch Regular_file #Eine normale Datei erstellen $ mkdir Verzeichnis_Datei #Eine Verzeichnisdatei erstellen, die mehr Dateien enthalten kann $ ln Regular_File Regular_File_Hard_link #Hardlink, eine vollständige Kopie der Originaldatei $ ln -s Regular_File Regular_File_Soft_link #Ähnlich einem Dateizeiger, Wenn Sie auf die Originaldatei $ mkfifo fifo_pipe # zeigen oder über mknod fifo_pipe p erstellen, erfüllt FIFO die First-In-First-Out-Eigenschaften $ mknod hda1_block_dev_file b 3 1 #Blockgerät $ mknod null_char_dev_file c 1 3 #Zeichengerät
Durch das Erstellen einer Datei wird tatsächlich ein Knoten zum Dateisystem hinzugefügt (
Inode) werden die Knoteninformationen in der Knotentabelle des Dateisystems gespeichert. Anschaulicher ausgedrückt bedeutet es, dass an einem Baum ein neues Blatt (Datei) oder ein Zweig (Verzeichnisdatei, die Art mit darauf wachsenden Blättern) wächstBaum
Befehl bzwDer Befehl ls wird visuell dargestellt. Aus der Perspektive des täglichen Gebrauchs kann das Dateisystem als umgekehrter Baum betrachtet werden, da es so ähnlich und leicht zu merken ist.
$ Tree aktuelles Verzeichnis
oder
$ ls aktuelles Verzeichnis
Der direkteste Eindruck beim Löschen einer Datei ist, dass die Datei nicht mehr existiert. Dies kann auch dadurch erreicht werden
lsoder
BaumDer Befehl wird so dargestellt, als würde ein Ast von einem Baum abgeschnitten oder ein Blatt gepflückt. Tatsächlich verschwinden diese Dateien nach dem Löschen nicht sofort, sondern werden nur zum Löschen markiert. Daher können sie grundsätzlich wiederhergestellt werden, wenn nach dem Löschen keine relevanten Festplattenschreibvorgänge vorhanden sind , solche Arbeiten sind oft mühsam, also denken Sie bitte zweimal darüber nach, bevor Sie wichtige Daten löschen, z. B. durch Ausführen eines Sicherungsauftrags. Informationen zur entsprechenden Methode finden Sie in den folgenden Informationen.
Die spezifischen Befehle zum Löschen von Dateien sind
rm, wenn Sie leere Verzeichnisse löschen möchten, können Sie verwenden
rmdirBefehl. Zum Beispiel:
$ rm reguläre_Datei$ rmdir Verzeichnisdatei$ rm -r Verzeichnisdatei_nicht_leer
rmEs gibt zwei sehr wichtige Parameter, einer ist
-FDieser Befehl ist sehr „barbarisch“ und bereitet wahrscheinlich vielen Linux-Benutzern Schmerzen
-ichDieser Befehl ist sehr „sanft“ und löst wahrscheinlich bei vielen Benutzern Irritationen aus. Welche Sie verwenden, hängt von Ihrer „Stimmung“ ab. Wenn Sie ausreichende Sicherheitsmaßnahmen ergriffen oder wirksame Maßnahmen ergriffen haben, um katastrophale Folgen zu vermeiden, können Sie sich bei der Erledigung dieser Aufgaben wohler fühlen.
Beim Kopieren einer Datei handelt es sich normalerweise um eine „temporäre“ Kopie des Dateiinhalts. Durch die Einführung am Anfang dieses Abschnitts sollten wir verstehen, dass die Hardlinks und Softlinks von Dateien in gewissem Sinne auch „Dateien kopieren“ sind. Erstere kopieren den Dateiinhalt synchron und letztere „kopieren“ synchron Fall des Lesens und Schreibens. Zum Beispiel:
verwenden
vglBefehl zum normalen Kopieren von Dateien (das Kopieren von Verzeichnissen erfordert
-ROptionen)
$ cp reguläre_Datei reguläre_Dateikopie$ cp -r Verzeichnisdatei Verzeichnisdatei_Kopie
Hardlink erstellen (
LinkUnd
KopieDer Unterschied besteht darin, dass Letzteres synchron aktualisiert wird, Ersteres jedoch nicht. Nach dem Kopieren sind die beiden nicht mehr relevant.
$ ln reguläre_Datei reguläre_Datei_harter_Link
Erstellen Sie einen Softlink
$ ln -s reguläre_Datei reguläre_Datei_Soft_Link
Durch das Ändern des Dateinamens wird eigentlich nur die Dateinamen-ID geändert. kann passieren
mvBefehl zum Ändern des Dateinamens (d. h. Umbenennen).
$ mv reguläre_Datei reguläre_Datei_neuer_Name
Das Bearbeiten einer Datei bedeutet eigentlich das Bearbeiten des Inhalts der Datei, was dem Bearbeiten gewöhnlicher Textdateien entspricht. Dies umfasst hauptsächlich das Lesen, Schreiben, Anhängen, Löschen usw. des Dateiinhalts. Diese Aufgaben werden normalerweise von spezialisierten Editoren ausgeführt, beispielsweise Befehlszeileneditoren.
vim,
Emacsund grafische Oberfläche
gedit,keditWarten. Wenn es sich um bestimmte Dateien handelt, sind spezielle Bearbeitungs- und Verarbeitungswerkzeuge erforderlich, beispielsweise eine Bildverarbeitungssoftware
gimp, Software zur Dokumentenbearbeitung
OpenOfficeWarten. Für diese Tools gibt es im Allgemeinen spezielle Tutorials.
Im Folgenden finden Sie eine kurze Einführung in diese gängigen Bearbeitungsvorgänge von Dateien durch Umleitung unter Linux.
Erstellen Sie eine Datei und schreiben Sie
abcde
$ echo abcde > neue_reguläre_Datei
Fügen Sie der obigen Datei eine weitere Zeile hinzu
abcde
$ echo abcde >> neue_reguläre_Datei
Lesen Sie eine Datei Zeile für Zeile
$ while read LINE; do echo $LINE done < test.sh
Tipp: Wenn Sie eine String-Variable, die eine Umleitung enthält, als Befehl ausführen möchten, verwenden Sie
evaluBefehl, andernfalls kann die Umleitung nicht interpretiert werden. Zum Beispiel,
$ redirect=echo abcde >test_redirect_file$ $redirect #Here > wird als Zeichen ausgegeben, anstatt als Redirect-Abcde interpretiert zu werden >test_redirect_file$ eval $redirect #This will interpreted > as a Redirect$ cat test_redirect_fileabcde
Das Komprimieren und Dekomprimieren von Dateien soll in gewissem Sinne die Übertragung von Dateiinhalten erleichtern, kann jedoch auch bestimmte Verwendungszwecke haben, z. B. Kernel- und Dateisystem-Image-Dateien usw. (Weitere Informationen zu diesem Thema finden Sie in den folgenden Materialien).
Hier sind nur einige gängige Komprimierungs- und Dekomprimierungsmethoden:
Teer
$ tar -cf file.tar Datei #Komprimieren $ tar -xf file.tar #Dekomprimieren
gz
$ gzip -9-Datei $ gunzip-Datei
tar.gz
$ tar -zcf file.tar.gz file$ tar -zxf file.tar.gz
bz2
$ bzip2-Datei$ bunzip2-Datei
tar.bz2
$ tar -jcf file.tar.bz2 file$ tar -jxf file.tar.bz2
Aus der obigen Demonstration sollte es sehr klar sein
Teer,
bzip2,bunzip2,
gzip,gunzip
Ist es die Rolle des Befehlshabers? Wenn es noch nicht klar ist, machen Sie mehr und vergleichen Sie einige der oben genannten Befehle und sehen Sie sich deren Handbücher an:Mann, Tar`...
Unter Dateisuche versteht man das Finden des Speicherorts von Dateien mit bestimmten Attributen in einem Dateisystem in einer bestimmten Verzeichnishierarchie. Wenn dieser Speicherort auf das gesamte Netzwerk ausgedehnt wird, kann er ausgedrückt werden als
URLAdresse kann für eine lokale Adresse ausgedrückt werden als:
Datei://+lokaler Pfad. Der lokale Pfad im Linux-System beginnt mit
/Zunächst kann beispielsweise das Home-Verzeichnis jedes Benutzers wie folgt dargestellt werden:
file:///home/. Im Folgenden werden nur einige Methoden der lokalen Dateisuche vorgestellt.
findenDer Befehl bietet eine „Just-in-Time“-Suchmethode. Basierend auf der Anforderung des Benutzers durchsucht er alle Dateien in der angegebenen Verzeichnishierarchie, bis die erforderliche Datei gefunden wird. Und
aktualisiertb+locateBietet eine „schnelle“ Suchstrategie,
aktualisiertbAktualisieren und generieren Sie eine lokale Dateidatenbank
lokalisierenDurchsuchen Sie diese Datenbank nach Dateinamen, um schnell die entsprechende Datei zu finden. Ersteres unterstützt die Suche nach verschiedenen Dateiattributen und stellt eine Schnittstelle bereit (
-execOption) wird zur Verarbeitung der gesuchten Dateien verwendet. Daher bietet es großen Komfort für Fans von „Einzelbefehl“-Skripten, aber für Suchen basierend auf Dateinamen,
aktualisiertb+locateDiese Methode wird die Sucheffizienz erheblich verbessern. Im Folgenden finden Sie eine kurze Einführung in diese beiden Methoden:
findenDemonstration der grundlegenden Befehlsverwendung
$ find ./ -name *.c -o -name *.h #Alle C-Sprachdateien finden, -o ist oder $ find ./ ( -name *.c -o -name *.h ) - exec mv '{}' ./c_files/ ;# Verschieben Sie die gefundenen Dateien nach c_files. Diese Verwendung ist sehr interessant.
Die obige Verwendung kann verwendet werden
xargsBefehlsersetzung
Ich muss zum Beispiel den Befehl $ find ./ -name *.c -o -name *.h | korrigieren
Ändern Sie alle Dateinamensuffixe in Großbuchstaben.
$ find ./ -name *.c -o -name *.h |. xargs -i ./toupper.sh '{}' ./c_files/
toupper.shEs handelt sich um eine Verarbeitungsdatei, die wir implementieren müssen, um Kleinbuchstaben in Großbuchstaben umzuwandeln. Die spezifische Implementierung ist wie folgt:
$ cat toupper.sh#!/bin/bash# das {} wird auf die aktuelle Zeile erweitert und wird zum ersten Argument dieses SkriptsFROM=$1BASENAME=${FROM##*/}BASE=${BASENAME%.* }SUFFIX=${BASENAME##*.}TOSUFFIX=$(echo $SUFFIX | tr '[az]' '[AZ]')TO=$2/$BASE.$TOSUFFIXCOM=mv $FROM $TOecho $COMeval $COM
aktualisiertb+locateDemonstration der grundlegenden Verwendung
$ aktualisiertb #Bibliothek aktualisieren $ find find*.gz #Alle gz-komprimierten Pakete finden, die die Suchzeichenfolge enthalten
Tatsächlich gibt es unter Linux zusätzlich zu den beiden oben genannten Befehlen auch Tools zur Befehlssuche:
welcheUnd
wo istErsteres wird verwendet, um den vollständigen Pfad eines bestimmten Befehls zurückzugeben, während letzteres verwendet wird, um einen bestimmten Befehl, eine bestimmte Quelldatei usw. zurückzugeben.
Der Pfad zur Man-Datei. Finden Sie zum BeispielBefehl „Absoluter Pfad zum Finden“:
$ which find/usr/bin/find$ whereis findfind: /usr/bin/find /usr/X11R6/bin/find /usr/bin/X11/find /usr/X11/bin/find /usr/man/man1/ find.1.gz /usr/share/man/man1/find.1.gz /usr/X11/man/man1/find.1.gz
Es sollte erwähnt werden, dass, wenn Sie nach einer Datei anhand ihres Inhalts suchen möchten, dann
findenUnd
aktualisiertb+locatesowie
welche,
wo istWir können nichts tun, die Alternative ist
grep,
sedWarten Sie auf den Befehl, ersterer wird hinzugefügt
-RZukünftig kann der Parameter verwendet werden, um in den Dateien im angegebenen Verzeichnis nach dem angegebenen Dateiinhalt zu suchen und ihn dann zu verwenden
-ichNach Übergabe der Parameter kann der Dateiinhalt ersetzt werden. Ihre grundlegende Verwendung wurde in den vorherigen Kapiteln ausführlich vorgestellt und wird hier nicht wiederholt.
Es ist hervorzuheben, dass diese Befehle für Dateioperationen von großer Bedeutung sind. Sie abstrahieren die Dateisystemstruktur bis zu einem gewissen Grad und vereinfachen die Operation des gesamten Dateisystems in die Operation einer einzelnen Datei. Wenn eine einzelne Datei nur den Textteil berücksichtigt, wird sie schließlich in die vorherige Zeichenfolgenoperation konvertiert was im vorherigen Abschnitt besprochen wurde. Um ein klareres Verständnis der Organisationsstruktur von Dateien und der Beziehungen zwischen Dateien zu erhalten, wird im nächsten Abschnitt ausführlich auf das Dateisystem eingegangen.
Betrachten Sie das virtuelle Linux-Dateisystem anhand der Datei-E/A
Analyse des Linux-Dateisystems
„Linux Core“ Kapitel 9 Dateisystem
Linux-Gerätetreiber, 3. Auflage
Tipps: Einige Tipps zur Linux-E/A-Umleitung
Laden, Parsen und Beispielanalyse der dynamischen ELF-Dateiverknüpfung unter Linux auf der Intel-Plattform:
Teil1,
Teil2
Shell-Skript-Debugging-Technologie
Zusammenfassung des ELF-Dateiformats und des Programmlade-Ausführungsprozesses
C-Sprachprogrammierung unter Linux – Dateioperationen
Dateioperation ist Teil der C-Sprachprogrammierung unter Linux
Dateisystemhierarchiestandard
Erfahren Sie, wie Sie gelöschte Ext3-Dateien im Linux-System wiederherstellen
Verwenden Sie mc, um gelöschte Dateien wiederherzustellen
Prinzip des versehentlichen Löschens und Wiederherstellens von Linux ext3
Eine vollständige Liste der Linux-Komprimierungs-/Dekomprimierungsmethoden
Alles ist ein Byte
Angesichts der Bedeutung von Dateien und Dateisystemen wird die Einführung in drei Unterabschnitte unterteilt: Dateien, Dateisysteme, Programme und Prozesse. Im Abschnitt „Datei“ stellen wir hauptsächlich die grundlegenden Attribute und regulären Operationen von Dateien vor. Im Abschnitt „Dateisystem“ werden wir die verschiedenen Teile des Linux-Dateisystems ausführlich besprechen (einschließlich der Struktur des Linux-Dateisystems). die allgemeine Struktur eines bestimmten Dateisystems, das Funktionsprinzip des zugrunde liegenden Treibers), wird im Abschnitt „Programme und Prozesse“ speziell auf den relevanten Inhalt ausführbarer Dateien eingegangen (einschließlich verschiedener Programmtypen, Lade- und Ausführungsprozesse, Interaktionen zwischen verschiedenen). Prozesse [Befehlspipelines und unbenannte Pipes, Signalkommunikation], Steuerung von Prozessen usw.)
Es ist notwendig, die Bedeutung der Verzeichnisgröße klar zu besprechen. Darüber hinaus ist es am besten, alle herkömmlichen Dateivorgänge zu berücksichtigen, einschließlich Lesen, Schreiben, Ausführen, Löschen, Ändern, Kopieren, Komprimieren/Dekomprimieren usw.
Ich bin gerade aus Shanghai zurückgekommen. und entdeckte, dass Shanghai eine schöne Stadt ist. Als ich zurückkam, fing ich an, diesen Blog zu klären, den ich aufgrund der Konkurrenz zwei Wochen lang verpasst hatte.
Am 15. Dezember fügen Sie den Dateisuchenteil hinzu