Der Inhalt dieses Artikels besteht darin, verschiedene Dateitypen unter Linux vorzustellen. Ich hoffe, dass er für Freunde hilfreich ist. [Video-Tutorial-Empfehlung: Linux-Tutorial]
Unter dem Linux-System gibt es sieben Dateitypen:
Gewöhnliche Dateien ( - )
Verzeichnis (d)
Softlink (Zeichenlink L)
Socket-Datei(en)
Zeichengerät(e)
Gerät blockieren (B)
Pipe-Datei (benannte Pipe P)
Normale Dateien, Verzeichnisse und Softlinks bedürfen keiner weiteren Erklärung. Werfen wir einen Blick auf Pipe-Dateien, Socket-Dateien, Zeichengeräte und Blockgerätetypen.
Pipe-Datei
Pipes werden in anonyme Pipes und benannte Pipes unterteilt. Pipes werden an einem Ende geschrieben und am anderen Ende gelesen. Ihre Daten werden direkt im Speicher übertragen, z. B. beim Schreiben von übergeordneten Prozessen und beim Lesen von untergeordneten Prozessen. .
In der Shell ist die anonyme Pipe ein Pipe-Symbol „|“, z. B. ls | grep xxx
, wobei der Prozess, der ls entspricht, der übergeordnete Prozess in dieser unabhängigen Prozessgruppe ist und der Prozess, der grep entspricht, der übergeordnete Prozess ist Der untergeordnete Prozess schreibt die Lesevorgänge des untergeordneten Prozesses.
In Programmiersprachen werden anonyme Pipes implementiert, indem zwei Dateihandles oder Dateideskriptoren (z. B. A, B) erstellt werden. Ein Dateihandle wird zum Schreiben von Daten verwendet (z. B. A-Schreibende, Daten-Schreibende Eingabe von A). schiebt es automatisch nach B) und ein anderes Dateihandle wird zum Lesen der Daten verwendet (d. h. B).
Für Named Pipes, also Pipes mit Namen, behalten Named Pipes Dateien im Dateisystem, es wird auch FIFO genannt, was „First In First Out“ bedeutet. Obwohl die Named-Pipe-Datei im Dateisystem gespeichert bleibt, ist diese Datei nur ein Einstiegspunkt für die Verwendung der Named-Pipe. Wenn die Named-Pipe zum Übertragen von Daten verwendet wird, erfolgt die Ausführung weiterhin im Speicher, was bedeutet, dass sie nicht gespeichert wird Das Dateisystem ist weniger effizient.
In der Shell können Sie den Befehl mknod
oder den Befehl mkfifo
verwenden, um eine Named Pipe zu erstellen. Named Pipes sind sehr nützlich, wenn Sie Shell-Skripte mit bestimmten speziellen Anforderungen schreiben. Tatsächlich wird die Funktion von Coroutinen (mit dem Befehl coproc) seit Bash 4 unterstützt (ksh und zsh unterstützen Coroutinen seit langem), aber die Anforderungen von Coroutinen können über Named Pipes realisiert werden.
Allgemeine Pipes sind unidirektionale Kommunikation und können die Funktion der bidirektionalen Kommunikation nicht realisieren, das heißt, sie können nur gleichzeitig schreiben und lesen, aber nicht auf beiden Seiten lesen und schreiben. Wenn Sie eine bidirektionale Kommunikation erreichen möchten, können Sie zwei Pipes erstellen (also vier Dateihandles, zwei Leseenden und zwei Schreibenden) oder einen bequemeren Socket verwenden.
Socket
Socket wird verwendet, um die Kommunikation zwischen beiden Enden zu realisieren. Wie oben analysiert, kann es die prozessübergreifende Kommunikationsfunktion einer bidirektionalen Pipeline realisieren. Darüber hinaus können Sockets auch die prozessübergreifende Kommunikation zwischen Hosts über das Netzwerk realisieren.
Sockets müssen gepaart sein, um sinnvoll zu sein, das heißt, sie sind in zwei Enden unterteilt. Jedes Ende verfügt über einen Dateideskriptor (oder Dateihandle) zum Lesen und Schreiben, was einer bidirektionalen Kommunikation entspricht Rohre.
Sockets werden entsprechend der Protokollfamilie in zwei Kategorien unterteilt: Netzwerk-Sockets (Typ AF_INET, unterteilt in inet4 und inet6 entsprechend ipv4 und ipv6) und Unix-Domänen-Sockets (Typ AF_UNIX). Natürlich können Sockets von der Protokollfamilie abwärts in viele Typen unterteilt werden. Beispielsweise können INET-Sockets in TCP-Sockets, UDP-Sockets, Link-Layer-Sockets, Raw-Sockets usw. unterteilt werden. Unter diesen sind Netzwerk-Sockets die Grundlage und der Kern der Netzwerkprogrammierung.
Unix-Domänen-Socket
Für die Kommunikation zwischen Prozessen auf einem einzelnen Computer ist es besser, den Unix-Domänen-Socket als den Inet-Socket zu verwenden, da der Unix-Domänen-Socket keine Netzwerkkommunikationskomponente hat, und zwar nur Es fehlen viele Netzwerkfunktionen und es ist leichter. Tatsächlich werden die von einigen Sprachen auf bestimmten Betriebssystemplattformen implementierten Pipeline-Funktionen über die Unix-Domäne implementiert, und man kann sich ihre hohe Effizienz vorstellen.
Der Unix-Domänen-Socket verfügt über zwei Dateihandles (z. B. A, B). Beide Dateihandles sind gleichzeitig lesbar und beschreibbar. Wenn Prozess 1 Daten nach A schreibt, werden diese automatisch nach B gepusht. Prozess 2 kann die von A geschriebenen Daten von B lesen. Wenn Prozess 2 Daten nach B schreibt, werden sie automatisch nach A gepusht. Prozess 1 kann lesen die von B von A geschriebenen Daten. Wie folgt:
进程1 进程2 ------------------------ A -----------> B B -----------> A
In Programmiersprachen verfügt das Erstellen eines Unix-Domain-Sockets natürlich über entsprechende Funktionen, um es einfach zu erstellen (kann man socketpair
sein). Für die Bash-Shell können Sie sie über den Befehl nc
(NetCat) erstellen oder einfach zwei Named Pipes verwenden, um die entsprechenden Funktionen zu implementieren. Bei Bedarf können Sie lernen, wie Sie Unix-Domain-Sockets in der Bash-Shell verwenden.
Netzwerk-Sockets
Für die prozessübergreifende Kommunikation über ein Netzwerk sind Netzwerk-Sockets erforderlich. Jeder Netzwerk-Socket besteht aus 5 Teilen, die als 5-Tupel des Sockets bezeichnet werden. Das Format ist wie folgt:
{protocol, src_addr, src_port, dest_addr, dest_port}
d. h. Protokoll, Quelladresse, Quellport, Zieladresse, Zielport.
Jedes Ende des Sockets hat zwei Puffer im Kernelraum (das heißt, ein Paar Sockets hat 4 Puffer), und jedes Ende hat einen Empfangspuffer und einen Sendepuffer. Prozess 1 schreibt Daten in den Sendepuffer seines eigenen Sockets, die an den Empfangspuffer des Peers gesendet werden, und dann kann Prozess 2 des Peers Daten aus dem Empfangspuffer lesen und umgekehrt.
Aber bevor Sie den Netzwerk-Socket tatsächlich lesen und schreiben können, benötigt der Netzwerk-Socket noch einige Einstellungen. Nachdem der Server-Socket erstellt wurde (Socket ()-Funktion, gibt es ein Dateihandle oder einen Dateideskriptor für Lese- und Schreibvorgänge), muss er auch die Adresse (über die Funktion bind ()) und den Überwachungsport (über listen () binden. )-Funktion), muss der Client nur den Socket erstellen und direkt die Funktion connect() verwenden, um eine Verbindungsanforderung an den Server-Socket zu initiieren.
Wenn der Client bei TCP-Sockets eine Verbindungsanforderung initiiert, bedeutet dies, dass er einen Drei-Wege-Handshake mit dem Server durchführen muss (wird vom Kernel ausgeführt und hat nichts mit dem User-Space-Prozess zu tun). Teilen Sie jeden dieser drei Handshakes auf. Wenn der Client zum ersten Mal eine SYN-Anfrage sendet, stellt der Kernel die Verbindung in die Syn-Warteschlange, setzt den Status auf syn-recv und sendet dann ack+syn an Auf der Clientseite verschiebt der Kernel nach Erhalt der Antwortbestätigung des Clients die Verbindung von der Syn-Warteschlange in die eingerichtete Warteschlange (oder Akzeptanzwarteschlange) und markiert den Status der Verbindung als hergestellt. Schließlich initiiert der auf Benutzerbereich wartende Prozess den Systemaufruf „accept()“, damit der Kernel ihn aus der Akzeptanzwarteschlange entfernen kann. Die Verbindung nach der Annahme () zeigt an, dass die Verbindung hergestellt wurde, wodurch die Datenübertragung zwischen den Prozessen an beiden Enden tatsächlich realisiert werden kann.
Weitere Informationen zu den Prinzipien von TCP-Sockets finden Sie in meinem anderen Artikel: Der Socket- und TCP-Verbindungsprozess, den man kennen muss.
Blockgeräte und Zeichengeräte
Blockgeräte sind Hardwaregeräte, die sich durch zufälligen (nicht unbedingt sequenziellen) Zugriff auf Datenblöcke fester Größe auszeichnen. Ein Chunk mit fester Größe wird als Block bezeichnet. Das häufigste Blockgerät ist die Festplatte, aber es gibt auch viele andere Blockgeräte, wie zum Beispiel Diskettenlaufwerke, Blu-ray-Lesegeräte und Flash-Speicher. Beachten Sie, dass es sich dabei um Geräte handelt, auf denen Dateisysteme gemountet sind, und dass Dateisysteme wie eine Verkehrssprache für Blockgeräte sind.
Der Zugriff auf Zeichengeräte erfolgt über einen kontinuierlichen Datenstrom, Byte für Byte. Typische Zeichengeräte sind Terminals (es gibt viele Arten von Terminals, sowohl physische als auch virtuelle) und Tastaturen .
Der einfachste Weg, Blockgeräte und Zeichengeräte zu unterscheiden, besteht darin, sich die Art und Weise anzusehen, wie auf Daten zugegriffen wird. Auf Blockgeräte kann nach dem Zufallsprinzip zugegriffen werden, um Daten zu erhalten, und auf Zeichengeräte muss in Bytereihenfolge zugegriffen werden.
Wenn Sie hier ein paar Daten lesen können, dort ein paar Daten lesen und sie schließlich zu einem kontinuierlichen Datenstück verketten können, dann ist dies ein Blockgerät, genau wie die Daten auf der Festplatte diskontinuierlich sind Möglicherweise muss über eine Direktzugriffsmethode zugegriffen werden, um ein Datenelement zu erhalten. Beispielsweise können sich in einer etwas größeren Datei auf einer Festplatte die ersten 10.000 Daten in zusammenhängenden Datenblöcken oder in zusammenhängenden Sektoren befinden, und die nächsten 10.000 Daten können weit davon entfernt oder sogar auf verschiedenen Zylindern liegen.
Wenn jedes Byte in einem Datenelement dieselbe Bytereihenfolge wie beim Zugriff aufweist, d. h. die Bytereihenfolge vom Zeitpunkt des Zugriffs bis zur endgültigen Verarbeitung der Daten vollständig konsistent ist, dann Dies ist ein Zeichengerät. Mit anderen Worten: Zeichengeräte können als Stream-Geräte betrachtet werden. Genau wie bei der Eingabe von Daten auf einer Tastatur müssen beim kontinuierlichen Drücken zweier Tasten die diesen beiden Tasten entsprechenden Bytedaten beim Empfang zuerst vorne und dann hinten eingegeben werden. Ebenso funktioniert das Endgerät. Wenn das Programm Daten an das Terminal ausgibt, gibt das Programm zuerst den Buchstaben a und dann die Zahl 3 aus. Bei der Anzeige auf dem Terminal muss dann a vorne und 3 innen stehen die Rückseite.
Das obige ist der detaillierte Inhalt vonEinführung in Dateitypen unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In diesem Artikel werden verschiedene Methoden eingeführt, um die OpenSSL -Konfiguration des Debian -Systems zu überprüfen, um den Sicherheitsstatus des Systems schnell zu erfassen. 1. Bestätigen Sie zuerst die OpenSSL -Version und stellen Sie sicher, ob OpenSSL installiert wurde und Versionsinformationen. Geben Sie den folgenden Befehl in das Terminal ein: Wenn OpenSslversion nicht installiert ist, fordert das System einen Fehler auf. 2. Zeigen Sie die Konfigurationsdatei an. Die Hauptkonfigurationsdatei von OpenSSL befindet sich normalerweise in /etc/ssl/opensl.cnf. Sie können einen Texteditor (z. B. Nano) verwenden: Sudonano/etc/ssl/openSSL.cnf Diese Datei enthält wichtige Konfigurationsinformationen wie Schlüssel-, Zertifikatpfad- und Verschlüsselungsalgorithmus. 3.. Verwenden Sie OPE

In diesem Leitfaden wird beschrieben, wie Sie eine Hadoop -Entwicklungsumgebung für ein Debian -System erstellen. 1. Installieren Sie Java Development Kit (JDK) zuerst, OpenJDK: Java_home = "/usr/lib/jvm/java-11-openjdk-amd64" speichern und beenden und dann ausführen: Quelle/etc.

Das effektive Verwalten von Hadoop -Ressourcen im Debian -System erfordert die folgenden Schritte: Hadoop -Bereitstellung: Füllen Sie zunächst die Installation und Konfiguration von Hadoop im Debian -System aus. Dies beinhaltet die erforderlichen Vorgänge wie das Herunterladen von Hadoop -Verteilungspaketen, Dekomprimierung, Einstellungsvariablen usw. Clusterkonfiguration: Konfigurieren Sie nach Abschluss der Installation den Hadoop -Cluster, wobei die Einstellungen von HDFs (Hadoop -verteiltes Dateisystem) und Garn (Yetanotherresourcenegotiator) abdeckt. Sie müssen die Kernkonfigurationsdatei ändern, wie z.

Um die Sicherheit von Debiantomcat -Protokollen zu verbessern, müssen wir auf die folgenden Schlüsselrichtlinien achten: 1. Berechtigungssteuerung und Dateiverwaltung: Protokolldateiberechtigungen: Die Standardprotokolldateiberechtigungen (640) beschränkt den Zugriff. Es wird empfohlen, den Ummask -Wert im Skript von Catalina.sh zu ändern (z. B. Wechsel von 0027 auf 0022) oder direkte Filepermissionen in der Konfigurationsdatei log4j2 festlegen, um die entsprechenden Lesen- und Schreibberechtigungen sicherzustellen. LOG -Dateispeicherort: Tomcat -Protokolle befinden sich normalerweise in/opt/tomcat/logs (oder einen ähnlichen Pfad), und die Berechtigungseinstellungen dieses Verzeichnisses müssen regelmäßig überprüft werden. 2. Protokolldrehung und Format: Protokolldrehung: konfigurieren server.xml

Warnmeldungen in den Tomcat -Server -Protokollen zeigen potenzielle Probleme an, die die Anwendungsleistung oder -stabilität beeinflussen können. Um diese Warninformationen effektiv zu interpretieren, müssen Sie auf die folgenden wichtigen Punkte achten: Warninhalt: Untersuchen Sie die Warninformationen sorgfältig, um den Typ, die Ursache und die möglichen Lösungen zu klären. Warninformationen liefern normalerweise eine detaillierte Beschreibung. Protokollstufe: Tomcat-Protokolle enthalten unterschiedliche Informationen, wie z. B. Informationen, Warn, Fehler usw. "Warn" -Stegwarnungen sind nicht tödliche Probleme, aber sie brauchen Aufmerksamkeit. TIMESTAMP: Erfassen Sie die Zeit, in der die Warnung auftritt, um den Zeitpunkt zu verfolgen, wenn das Problem auftritt, und die Beziehung zu einem bestimmten Ereignis oder Operation zu analysieren. Kontextinformationen: Zeigen Sie den Protokollinhalt vor und nach der Warninformationen an, erhalten Sie

Tomcat -Protokolle sind der Schlüssel zur Diagnose von Speicherleckproblemen. Durch die Analyse von Tomcat -Protokollen können Sie Einblicke in das Verhalten des Speicherverbrauchs und des Müllsammlung (GC) erhalten und Speicherlecks effektiv lokalisieren und auflösen. Hier erfahren Sie, wie Sie Speicherlecks mit Tomcat -Protokollen beheben: 1. GC -Protokollanalyse zuerst aktivieren Sie eine detaillierte GC -Protokollierung. Fügen Sie den Tomcat-Startparametern die folgenden JVM-Optionen hinzu: -xx: printgCDetails-xx: printgCDatESTAMPS-XLOGGC: GC.Log Diese Parameter generieren ein detailliertes GC-Protokoll (GC.Log), einschließlich Informationen wie GC-Typ, Recycling-Objektgröße und Zeit. Analyse gc.log

Die Auswirkungen von Apache-Protokollen auf die Serverleistung unter dem Debian-System sind ein zweischneidiges Schwert, das sowohl positive Auswirkungen als auch potenzielle negative Auswirkungen hat. Positiver Aspekt: Problemdiagnose -Tool: Apache -Protokoll zeichnet alle Anforderungen und Antworten auf dem Server aus. Durch die Analyse des Fehlerprotokolls können Konfigurationsfehler, Berechtigungsfragen und andere Ausnahmen leicht identifiziert werden. Sicherheitsüberwachung Sentinel: Zugriffsprotokolle können potenzielle Sicherheitsbedrohungen wie böswillige Angriffsversuche verfolgen. Durch das Festlegen von Protokollprüfungsregeln können abnormale Aktivitäten effektiv erkannt werden. Leistungsanalyse Assistent: Zugriff auf Protokollierungsanforderungsfrequenz und Ressourcenverbrauch, um zu analysieren, welche Seiten oder Dienste am beliebtesten sind, wodurch die Ressourcenzuweisung optimiert wird. Kombiniert mit Top oder HTOP usw.

In diesem Artikel wird erläutert, wie die Leistung der Website verbessert wird, indem Apache -Protokolle im Debian -System analysiert werden. 1. Log -Analyse -Basics Apache Protokoll Datensätze Die detaillierten Informationen aller HTTP -Anforderungen, einschließlich IP -Adresse, Zeitstempel, URL, HTTP -Methode und Antwortcode. In Debian -Systemen befinden sich diese Protokolle normalerweise in /var/log/apache2/access.log und /var/log/apache2/error.log verzeichnis. Das Verständnis der Protokollstruktur ist der erste Schritt in der effektiven Analyse. 2. Tool mit Protokollanalyse Mit einer Vielzahl von Tools können Apache -Protokolle analysiert: Befehlszeilen -Tools: GREP, AWK, SED und andere Befehlszeilen -Tools.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor