One place for hosting & domains

      Lesen und Einrichten von Umgebungs- und Shell-Variablen unter Linux


      Einführung

      Wenn Sie mit Ihrem Server über eine Shell-Sitzung interagieren, gibt es viele Informationen, die Ihre Shell kompiliert, um ihr Verhalten und den Zugriff auf Ressourcen zu bestimmen. Einige dieser Einstellungen sind innerhalb der Konfigurationseinstellungen enthalten und andere werden durch Benutzereingabe bestimmt.

      Eine Möglichkeit, wie die Shell alle diese Einstellungen und Details verfolgt, ist ein Bereich, den sie als Umgebung bezeichnet. Die Umgebung ist ein Bereich, den die Shell jedes Mal, wenn sie eine Sitzung startet, erstellt und der Variablen enthält, die Systemeigenschaften definieren.

      In diesem Leitfaden besprechen wir, wie Sie mit der Umgebung interagieren und Umgebungs- und Shell-Variablen interaktiv und über Konfigurationsdateien lesen oder einrichten.

      Funktionsweise der Umgebung und Umgebungsvariablen

      Bei jedem Starten einer Shell-Sitzung findet ein Prozess statt, der Informationen sammelt und kompiliert, die dem Shell-Prozess und seinen Unterprozessen verfügbar sein sollen. Die Daten für diese Einstellungen bezieht er aus einer Vielzahl verschiedener Dateien und Einstellungen auf dem System.

      Die Umgebung stellt ein Medium bereit, über das der Shell-Prozess Einstellungen erhalten oder einrichten kann und diese wiederum an seine Unterprozesse weitergibt.

      Die Umgebung ist als Zeichenketten implementiert, die Schlüsselwertpaare darstellen. Werden mehrere Werte übergeben, werden sie typischerweise durch Doppelpunkte (:) getrennt. Jedes Paar sieht allgemein etwa so aus:

      KEY=value1:value2:...
      

      Wenn der Wert signifikante Leerzeichen enthält, werden Anführungszeichen verwendet:

      KEY="value with spaces"
      

      Die Schlüssel in diesen Szenarien sind Variablen. Sie können einer von zwei Typen sein, Umgebungsvariablen oder Shell-Variablen.

      Umgebungsvariablen sind Variablen, die für die aktuelle Shell definiert sind und an alle untergeordneten Shells oder Prozesse vererbt werden. Umgebungsvariablen werden verwendet, um Informationen an Prozesse zu übergeben, die von der Shell gestartet werden.

      Shell-Variablen sind Variablen, die ausschließlich innerhalb der Shell enthalten sind, in der sie festgelegt oder definiert wurden. Sie werden oft verwendet, um kurzlebige Daten wie das aktuelle Arbeitsverzeichnis zu verfolgen.

      Gemäß der Konvention werden diese Arten von Variablen normalerweise mit Großbuchstaben definiert. Dies hilft dem Benutzer, Umgebungsvariablen innerhalb anderer Kontexte zu unterscheiden.

      Ausgeben von Shell- und Umgebungsvariablen

      Jede Shell-Sitzung verfolgt ihre eigenen Shell- und Umgebungsvariablen. Wir können auf diese auf verschiedene Weise zugreifen.

      Wir können eine Liste aller unsere Umgebungsvariablen sehen, indem wir die Befehle env oder printenv verwenden. In ihrem Standardzustand sollten sie genau gleich funktionieren:

      Output

      SHELL=/bin/bash TERM=xterm USER=demouser LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:... MAIL=/var/mail/demouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games PWD=/home/demouser LANG=en_US.UTF-8 SHLVL=1 HOME=/home/demouser LOGNAME=demouser LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/printenv

      Dies ist ziemlich typisch für die Ausgabe sowohl von printenv als auch env. Der Unterschied zwischen den beiden Befehlen ist nur in ihrer spezifischeren Funktionalität sichtbar. Beispielsweise können Sie mit printenv die Werte einzelner Variablen anfordern:

      Output

      /bin/bash

      Mit env hingegen können Sie die Umgebung, in der Programme ausgeführt werden, ändern, indem Sie einen Satz von Variablendefinitionen wie folgt an einen Befehl übergeben:

      • env VAR1="value" command_to_run command_options

      Da, wie wir vorstehend gelernt haben, untergeordnete Prozesse typischerweise die Umgebungsvariablen des übergeordneten Prozesses erben, bietet Ihnen dies die Möglichkeit, Werte zu überschreiben oder zusätzliche Variablen für den untergeordneten Prozess hinzuzufügen.

      Wie Sie in der Ausgabe unseres Befehls printenv sehen können, gibt es eine ganze Reihe von Umgebungsvariablen, die, ohne unsere Eingabe, durch unsere Systemdateien und Prozesse eingerichtet wurden.

      Diese zeigen die Umgebungsvariablen, aber wie sehen wir Shell-Variablen?

      Hierfür kann der Befehl set verwendet werden. Wenn wir set ohne zusätzliche Parameter eingeben, erhalten wir eine Liste aller Shell-Variablen, Umgebungsvariablen, lokalen Variablen und Shell-Funktionen:

      Output

      BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() . . .

      Dies ist normalerweise eine riesige Liste. Wahrscheinlich möchten Sie sie in ein Pager-Programm leiten, um die Menge der Ausgabe leichter bewältigen zu können:

      Die Menge zusätzlicher Informationen, die wir zurückerhalten, ist etwas überwältigend. Wahrscheinlich müssen wir nicht alle Bash-Funktionen kennen, die beispielsweise definiert sind.

      Wir können die Ausgabe bereinigen, indem wir angeben, dass set im POSIX-Modus arbeiten soll, wodurch die Shell-Funktionen nicht ausgegeben werden. Wir können dies in einer Unter-Schell ausführen, sodass es unsere aktuelle Umgebung nicht verändert:

      Dies listet alle Umgebungs- und Shell-Variablen auf, die definiert sind.

      Wir können versuchen, diese Ausgabe mit der Ausgabe der Befehle env oder printenv zu vergleichen, um zu versuchen, nur eine Liste der Shell-Variablen zu erhalten, aber dies wird aufgrund der unterschiedlichen Art und Weise, wie diese Befehle Informationen ausgeben, nicht perfekt sein:

      • comm -23 <(set -o posix; set | sort) <(env | sort)

      Es werden wahrscheinlich immer noch einige Umgebungsvariablen enthalten sein, da der Befehl set Werte in Anführungszeichen ausgibt, währen die Befehle printenv und env die Werte von Zeichenketten nicht in Anführungszeichen setzen.

      Dennoch sollte dies Ihnen einen guten Überblick über die Umgebungs- und Shell-Variablen geben, die in Ihrer Sitzung festgelegt sind.

      Diese Variablen werden für alle möglichen Dinge verwendet. Sie bieten einen alternativen Weg, um zwischen Prozessen dauerhafte Werte für die Sitzung zu setzen, ohne Änderungen in eine Datei zu schreiben.

      Häufige Umgebungs- und Shell-Variablen

      Einige Umgebungs- und Shell-Variablen sind sehr nützlich und werden ziemlich oft referenziert. Hier sind einige häufige Umgebungsvariablen, denen Sie begegnen werden:

      • SHELL: Dies beschreibt die Shell, die alle von Ihnen eingegebenen Befehle interpretiert. In den meisten Fällen wird dies standardmäßig Bash sein, jedoch können auch andere Werte festgelegt werden, wenn Sie andere Optionen bevorzugen.
      • TERM: Dies gibt die Art des Terminals an, das bei der Ausführung der Shell emuliert werden soll. Es können verschiedene Hardware-Terminals für unterschiedliche Betriebsanforderungen emuliert werden. Normalerweise müssen Sie sich darüber aber keine Gedanken machen.
      • USER: Der aktuelle angemeldete Benutzer.
      • PWD: Das aktuelle Arbeitsverzeichnis.
      • OLDPWD: Das vorherige Arbeitsverzeichnis. Dieses wird von der Shell beibehalten, um durch Ausführen von cd - wieder in Ihr vorheriges Verzeichnis zu wechseln.
      • LS_COLORS: Dies definiert Farbcodes, die verwendet werden, um dem Befehl Is optional eine farbige Ausgabe hinzuzufügen. Dies wird verwendet, um verschiedene Dateitypen zu unterscheiden und dem Benutzer auf einen Blick mehr Informationen zu bieten.
      • MAIL: Der Pfad zur Mailbox des aktuellen Benutzers.
      • PATH: Eine Liste von Verzeichnissen, die das System bei der Suche nach Befehlen überprüfen wird. Wenn ein Benutzer einen Befehl eingibt, überprüft das System die Verzeichnisse in dieser Reihenfolge auf die ausführbare Datei.
      • LANG: Die aktuelle Sprach- und Lokalisierungseinstellungen, einschließlich der Zeichencodierung.
      • HOME: Das Heimatverzeichnis des aktuellen Benutzers.
      • _: Der letzte zuvor ausgeführte Befehl.

      Zusätzlich zu diesen Umgebungsvariablen gibt es noch einige Shell-Variablen, die Sie oft sehen werden:

      • BASHOPTS: Die Liste der Optionen, die bei der Ausführung von Bash verwendet wurden. Dies kann nützlich sein, um herauszufinden, ob die Shell-Umgebung so funktioniert, wie Sie es wünschen.
      • BASH_VERSION: Die Version von Bash, die ausgeführt wird, in menschenlesbarer Form.
      • BASH_VERSINFO: Die Version von Bash, in maschinenlesbarer Ausgabe.
      • COLUMNS: Die Anzahl der Spaltenbreite, die zur Ausgabe auf dem Bildschirm verwendet wird.
      • DIRSTACK: Der Stack von Verzeichnissen, die mit den Befehlen pushd und popd verfügbar sind.
      • HISTFILESIZE: Anzahl der Zeilen der Befehlshistorie, die in einer Datei gespeichert werden.
      • HISTSIZE: Anzahl der Zeilen der Befehlshistorie, die im Speicher erlaubt sind.
      • HOSTNAME: Der Hostname des Computers zu diesem Zeitpunkt.
      • IFS: Das interne Feldtrennzeichen zur Trennung der Eingabe in der Befehlszeile. Standardmäßig ist dies ein Leerzeichen.
      • PS1: Die primäre Definition der Eingabeaufforderung. Damit wird definiert, wie Ihre Eingabeaufforderung beim Starten einer Shell-Sitzung aussieht. Der PS2 wird verwendet, um sekundäre Eingabeaufforderungen zu deklarieren, wenn sich ein Befehl über mehrere Zeilen erstreckt.
      • SHELLOPTS: Shell-Optionen, die mit der Option set festgelegt werden können.
      • UID: Die UID des aktuellen Benutzers.

      Einstellen von Shell- und Umgebungsvariablen

      Um den Unterschied zwischen Shell- und Umgebungsvariablen besser zu verstehen und die Syntax für die Einstellung dieser Variablen einzuführen, werden wir eine kleine Demonstration durchführen.

      Erstellen von Shell-Variablen

      Wir beginnen mit der Definition einer Shell-Variable innerhalb unserer aktuellen Sitzung. Dies ist einfach zu erreichen; wir müssen nur einen Namen und einen Wert angeben. Wir halten uns an die Konvention, den Variablennamen in Großbuchstaben zu schreiben, und setzen ihn auf eine einfache Zeichenkette.

      Hier haben wir Anführungszeichen verwendet, da der Wert unserer Variable ein Leerzeichen enthält. Außerdem haben wir einfache Anführungszeichen verwendet, weil das Ausrufezeichen ein Sonderzeichen in der Bash-Shell ist, das sich normalerweise in den Bash-Verlauf ausdehnt, wenn es nicht mit einem Escape-Zeichen versehen oder in einfache Anführungszeichen gesetzt wird.

      Wir haben nun eine Shell-Variable. Diese Variable ist in unserer aktuellen Sitzung verfügbar, wird aber nicht an untergeordnete Prozesse übergeben.

      Wir können dies sehen, indem wir mit dem Befehl „grep“ in der Ausgabe set nach unserer neuen Variable suchen:

      Output

      TEST_VAR='Hello World!'

      Wir können überprüfen, dass es sich nicht um eine Umgebungsvariable handelt, indem wir das Gleiche mit printenv versuchen:

      Es sollte keine Ausgabe zurückgegeben werden.

      Nehmen wir dies zum Anlass, eine Möglichkeit zu demonstrieren, wie auf den Wert einer beliebigen Shell- oder Umgebungsvariablen zugegriffen werden kann.

      Output

      Hello World!

      Wie Sie sehen können, referenzieren Sie den Wert einer Variable, indem Sie ihr ein $-Zeichen voranstellen. Die Shell bezeichnet damit, dass sie den Wert der Variable ersetzen soll, wenn sie auf diese stößt.

      Jetzt haben wir eine Shell-Variable. Sie sollte nicht an untergeordnete Prozesse übergeben werden. Wir können zur Demonstration eine neue Bash-Shell aus unserer aktuellen heraus starten:

      Wenn wir bash eingeben, um eine untergeordnete Shell zu starten, und dann versuchen, auf den Inhalt der Variable zuzugreifen, wird nichts zurückgegeben. Das haben wir erwartet.

      Gehen Sie zurück zu unserer ursprünglichen Shell, indem Sie exit eingeben:

      Erstellen von Umgebungsvariablen

      Lassen Sie uns nun unsere Shell-Variable in eine Umgebungsvariable verwandeln. Wir können dies tun, indem wir die Variable exportieren. Der Befehl dazu heiß passenderweise:

      Dadurch wird unsere Variable in eine Umgebungsvariable umgewandelt. Wir können dies überprüfen, indem wir unsere Umgebungsliste erneut überprüfen:

      Output

      TEST_VAR=Hello World!

      Diesmal wird unsere Variable angezeigt. Versuchen wir unser Experiment mit unserer untergeordneten Shell:

      Output

      Hello World!

      Klasse! Unsere untergeordnete Shell hat die Variable, die von ihrer übergeordneten Shell gesetzt wurde, erhalten. Bevor wir diese untergeordnete Shell verlassen, versuchen wir, eine andere Variable zu exportieren. Wir können Umgebungsvariablen in einem einzigen Schritt wie folgt setzen:

      • export NEW_VAR="Testing export"

      Testen Sie, dass sie als Umgebungsvariable exportiert wird:

      Output

      NEW_VAR=Testing export

      Lassen Sie uns nun wieder in unsere ursprüngliche Shell gehen:zurückkehren:

      Sehen wir, ob unsere neue Variable verfügbar ist:

      Es wird nichts zurückgegeben.

      Das liegt daran, dass Umgebungsvariablen nur an untergeordnete Prozesse übergeben werden. Es gibt keine integrierte Möglichkeit, Umgebungsvariablen der übergeordneten Shell zu setzen. Dies ist in den meisten Fällen gut und verhindert, dass Programme die Betriebsumgebung beeinträchtigen, aus der sie aufgerufen wurden.

      Die Variable NEW_VAR wurde in unserer untergeordneten Shell als Umgebungsvariable gesetzt. Diese Variable würde für sie selbst und alle untergeordneten Shells und Prozesse verfügbar sein. Beim Verlassen zurück in unsere Haupt-Shell wurde diese Umgebung zerstört.

      Herunterstufen und Zurücksetzen von Variablen

      Wir haben noch immer unsere Variable TEST_VAR als Umgebungsvariable definiert. Wir können sie wieder in eine Shell-Variable umwandeln, indem wir Folgendes eingeben:

      Sie ist keine Umgebungsvariable mehr:

      Sie ist jedoch noch immer eine Shell-Variable:

      Output

      TEST_VAR='Hello World!'

      Wenn wir eine Variable, egal ob Shell- oder Umgebungsvariable, komplett zurücksetzen möchten, können wir dies mit dem Befehl unset tun:

      Wir können überprüfen, dass sie nicht mehr gesetzt ist:

      Es wird nichts zurückgegeben, da die Variable zurückgesetzt wurde.

      Setzen von Umgebungsvariablen bei der Anmeldung

      Wir haben bereits erwähnt, dass viele Programme Umgebungsvariablen verwenden, um die Besonderheiten der Funktionsweise zu entscheiden. Wir wollen nicht jedes Mal, wenn wir eine neue Shell-Sitzung starten, wichtige Variablen setzen müssen, und wir haben bereits gesehen, wie viele Variablen beim Anmelden bereits gesetzt sind, also wie können wir Variablen automatisch erstellen und definieren?

      Dies ist tatsächlich ein komplexeres Problem, als es auf den ersten Blick scheint, aufgrund der zahlreichen Konfigurationsdateien, die die Bash-Shell liest, je nachdem, wie sie gestartet wird.

      Der Unterschied zwischen Anmelde-, Nicht-Anmelde-, interaktiven und nicht-interaktiven Shell-Sitzungen

      Die Bash-Shell liest verschiedene Konfigurationsdateien, je nachdem, wie die Sitzung gestartet wird.

      Ein Unterschied zwischen verschiedenen Sitzungen ist, ob die Shell als Anmelde- oder Nicht-Anmelde-Sitzung gestartet wird.

      Eine Anmelde-Shell ist eine Shell-Sitzung, die mit der Authentifizierung des Benutzers beginnt. Wenn Sie sich in einer Terminal-Sitzung oder über SSH anmelden und sich authentifizieren, wird Ihre Shell-Sitzung als Anmelde-Shell gesetzt.

      Wenn Sie aus Ihrer authentifizierten Sitzung eine neue Shell-Sitzung starten, wie wir es mit dem Aufruf des Befehls bash über das Terminal getan haben, wird eine Nicht-Anmelde-Shell-Sitzung gestartet. Sie wurden beim Start Ihrer untergeordneten Shell nicht nach Ihren Authentifizierungsdetails gefragt.

      Eine weitere Unterscheidung, die vorgenommen werden kann, ist, ob eine Shell-Sitzung interaktiv oder nicht interaktiv ist.

      Eine interaktive Shell-Sitzung ist eine Shell-Sitzung, die an ein Terminal gebunden ist. Eine nicht interaktive Shell-Sitzung ist eine Shell-Sitzung, die nicht an eine Terminal-Sitzung gebunden ist.

      Jede Shell-Sitzung wird also entweder als Anmelde oder Nicht-Anmelde und interaktiv oder nicht interaktiv klassifiziert.

      Eine normale Sitzung, die mit SSH beginnt, ist normalerweise eine interaktive Anmelde-Shell. Ein Skript, das von der Befehlszeile ausgeführt wird, wird normalerweise in einer nicht interaktiven, Nicht-Anmelde-Shell ausgeführt. Eine Terminal-Sitzung kann eine beliebige Kombination dieser beiden Eigenschaften sein.

      Ob eine Shell-Sitzung als Anmelde- oder Nicht-Anmelde-Shell klassifiziert wird, hat Auswirkungen darauf, welche Dateien zur Initialisierung der Shell-Sitzung gelesen werden.

      Eine als Anmelde-Sitzung gestartete Sitzung liest zuerst die Konfigurationsdetails aus der Datei /etc/profile. Sie sucht nach der ersten Anmelde-Shell-Konfigurationsdatei im Heimatverzeichnis des Benutzers, um benutzerspezifische Konfigurationsdetails zu erhalten.

      Sie liest die erste Datei, die sie aus ~/.bash_profile, ~/.bash_login und ~/.profile finden kann, und liest keine weiteren Dateien.

      Im Gegensatz dazu liest eine als Nicht-Anmelde-Shell definierte Sitzung /etc/bash.bashrc und dann die benutzerspezifische Datei ~/.bashrc, um ihre Umgebung zu erstellen.

      Nicht-interaktive Shells lesen die Umgebungsvariable namens BASH_ENV und lesen die angegebene Datei, um die neue Umgebung zu definieren.

      Implementieren von Umgebungsvariablen

      Wie Sie sehen können, gibt es eine Vielzahl von verschiedenen Dateien, die wir normalerweise für die Platzierung unserer Einstellungen ansehen müssten.

      Dies bietet eine Menge Flexibilität, die in bestimmten Situationen hilfreich sein kann, in denen wir bestimmte Einstellungen in einer Anmelde-Shell und andere Einstellungen in einer Nicht-Anmelde-Shell wünschen. Die meiste Zeit werden jedoch die gleichen Einstellungen in beiden Situationen wünschen.

      Glücklicherweise konfigurieren die meisten Linux-Distributionen die Anmelde-Konfigurationsdateien als Quelle für die Nicht-Anmelde-Konfigurationsdateien. Das bedeutet, dass Sie Umgebungsvariablen, die Sie in beiden Fällen benötigen, in den Nicht-Anmelde-Konfigurationsdateien definieren können. Sie werden dann in beiden Szenarien gelesen.

      Normalerweise werden wir benutzerspezifische Umgebungsvariablen setzen, und wir werden normalerweise wünschen, dass unsere Einstellungen sowohl in Anmelde- als auch Nicht-Anmelde-Shells verfügbar sind. Das bedeutet, dass sich der Ort zur Definition dieser Variablen in der Datei ~/.bashrc befindet.

      Öffnen Sie nun diese Datei:

      Diese wird wahrscheinlich bereits eine ganze Menge Daten enthalten. Die meisten Definitionen hier sind für das Setzen von Bash-Optionen, wobei diese nichts mit Umgebungsvariablen zu tun haben. Sie können Umgebungsvariablen genauso setzen wie Sie es über die Befehlszeile tun würden:

      Neue Umgebungsvariablen können an beliebiger Stelle in der Datei ~/.bashrc eingefügt werden, solange sie nicht in der Mitte eines anderen Befehls oder einer for-Schleife stehen. Anschließend können wir die Datei speichern und schließen. Wenn Sie das nächste Mal eine Shell-Sitzung starten, wird Ihre Umgebungsvariablendeklaration gelesen und an die Shell-Umgebung übergeben. Sie können Ihre aktuelle Sitzung zwingen, die Datei nun zu lesen, indem Sie Folgendes eingeben:

      Wenn Sie systemweite Variablen setzen müssen, sollten Sie darüber nachdenken, diese in /etc/profile, /etc/bash.bashrc oder /etc/environment hinzuzufügen.

      Zusammenfassung

      Umgebungs- und Shell-Variablen sind in Ihren Shell-Sitzungen immer vorhanden und können sehr nützlich sein. Sie sind eine interessante Möglichkeit für einen übergeordneten Prozess, die Konfigurationsdetails für seinen untergeordneten Prozess festzulegen und bieten eine Möglichkeit, Optionen außerhalb von Dateien zu setzen.

      Dies hat in bestimmten Situationen viele Vorteile. Einige Bereitstellungsmechanismen verlassen sich beispielsweise auf Umgebungsvariablen, um Authentifizierungsinformationen zu konfigurieren. Dies ist nützlich, da es nicht erforderlich ist, diese in Dateien zu halten, die von Außenstehenden gesehen werden können.

      Es gibt viele andere, alltäglichere, aber häufigere Szenarien, in denen Sie die Umgebung Ihres Systems auslesen oder ändern müssen. Diese Tools und Techniken sollten Ihnen eine gute Grundlage für die Durchführung dieser Änderungen und die korrekte Verwendung bieten.



      Source link

      Verwenden von Find und Locate zur Suche nach Dateien unter Linux


      Einführung

      Ein Problem, auf das Benutzer stoßen, wenn sie zum ersten Mal mit einem Linux-Rechner arbeiten, ist die Frage, wie Sie die gesuchten Dateien finden können.

      Dieser Leitfaden behandelt die Verwendung des treffend benannten Befehls find Dies hilft Ihnen bei der Suche nach Dateien auf Ihrem VPS unter Verwendung einer Vielzahl von Filtern und Parametern. Wir werden auch kurz auf den Befehl locate eingehen, mit dem Sie auf andere Weise nach Dateien suchen können.

      Suchen nach Name

      Die offensichtlichste Möglichkeit der Suche nach Dateien ist nach Name.

      Um eine Datei anhand ihres Namens zu finden, geben Sie Folgendes ein:

      Dabei wird die Groß- und Kleinschreibung beachtet, d. h. eine Suche nach file unterscheidet sich von einer Suche nach File.

      Um eine Datei nach dem Namen zu suchen, aber die Groß-/Kleinschreibung der Abfrage zu ignorieren, geben Sie Folgendes ein:

      Wenn Sie alle Dateien finden möchten, die sich nicht an ein bestimmtes Muster halten, können Sie die Suche mit -not oder ! umkehren. Wenn Sie ! verwenden, müssen Sie das Zeichen Maskieren, damit die Bash nicht versucht, es zu interpretieren, bevor „find“ agieren kann:

      • find -not -name "query_to_avoid"

      Oder

      • find ! -name "query_to_avoid"

      Suchen nach Typ

      Sie können den Typ der Dateien angeben, die Sie mit dem Parameter -type finden möchten. Es funktioniert wie folgt:

      • find -type type_descriptor query

      Einige der gebräuchlichsten Deskriptoren, die Sie zur Angabe des Dateityps verwenden können, sind:

      • f: reguläre Datei

      • d: Verzeichnis

      • l: symbolischer Link

      • c: Zeichengeräte

      • b: Blockgeräte

      Wenn wir beispielsweise alle Zeichengeräte in unserem System finden möchten, könnten wir diesen Befehl ausgeben:

      Output

      /dev/parport0 /dev/snd/seq /dev/snd/timer /dev/autofs /dev/cpu/microcode /dev/vcsa7 /dev/vcs7 /dev/vcsa6 /dev/vcs6 /dev/vcsa5 /dev/vcs5 /dev/vcsa4 . . .

      Wir können nach allen Dateien suchen, die in .conf enden:

      • find / -type f -name "*.conf"

      Output

      /var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf /usr/share/base-files/nsswitch.conf /usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf /usr/share/rsyslog/50-default.conf /usr/share/adduser/adduser.conf /usr/share/davfs2/davfs2.conf /usr/share/debconf/debconf.conf /usr/share/doc/apt-utils/examples/apt-ftparchive.conf . . .

      Filtern nach Zeit und Größe

      „Find“ bietet Ihnen eine Vielzahl von Möglichkeiten, um Ergebnisse nach Größe und Zeit zu filtern.

      Größe

      Sie können mit dem Parameter -size nach Größe filtern.

      Wir fügen ein Suffix am Ende unseres Wertes hinzu, das angibt, wie wir zählen. Dies sind einige beliebte Optionen:

      • c: Bytes

      • k: Kilobytes

      • M: Megabytes

      • G: Gigabytes

      • b: 512-Byte-Blöcke

      Um alle Dateien zu finden, die genau 50 Bytes groß sind, geben Sie Folgendes ein:

      Um alle Dateien zu finden, die kleiner als 50 Bytes sind, können wir stattdessen diese Form verwenden:

      Um alle Dateien zu finden, die größer als 700 Megabytes sind, können wir diesen Befehl verwenden:

      Zeit

      Linux speichert Zeitdaten über Zugriffszeiten, Modifizierungszeiten und Änderungszeiten.

      • Zugriffszeit: Letzter Zeitpunkt, in dem eine Datei gelesen oder geschrieben wurde.

      • Modifizierungszeit: Letzter Zeitpunkt, an dem der Inhalt der Datei modifiziert wurde.

      • Änderungszeit: Letzter Zeitpunkt, an dem die Inode-Metadaten der Datei geändert wurden.

      Wir können diese mit den Parametern -atime, -mtime und -ctime verwenden. Diese können die Plus- und Minus-Symbole verwenden, um größer als oder kleiner als anzugeben, wie wir es bei der Größe getan haben.

      Der Wert dieses Parameters gibt an, wie viele zurückliegende Tage Sie suchen möchten.

      Um Dateien zu finden, die eine Modifizierungszeit von vor einem Tag haben, geben Sie Folgendes ein:

      Wenn wir Dateien möchten, auf die vor weniger als einem Tag zugegriffen wurden, können wir Folgendes eingeben:

      Um Dateien zu erhalten, deren letzte Änderung der Metadaten mehr als 3 Tage zurückliegt, geben Sie Folgendes ein:

      Es gibt auch einige Begleitparameter, mir denen wir Minuten anstelle von Tagen angeben können:

      Dadurch werden die Dateien angegeben, die in der letzten Minute im System modifiziert wurden.

      „Find“ kann auch Vergleiche gegen eine Referenzdatei durchführen und diejenigen zurückgeben, die neuer sind:

      Suchen nach Eigentümern und Berechtigungen

      Sie können auch nach Dateien anhand des Dateieigentümers oder des Gruppeneigentümers suchen.

      Dazu verwenden Sie die Parameter -user bzw. -group. Suchen Sie eine Datei, deren Eigentümer der Benutzer „syslog“ ist, indem Sie Folgendes eingeben:

      Ähnlich können wir Dateien angeben, deren Eigentümer die Gruppe „shadow“ ist, indem wir Folgendes eingeben:

      Wir können auch nach Dateien mit bestimmten Berechtigungen suchen.

      Wenn wir einen genauen Satz von Berechtigungen abgleichen möchten, verwenden wir diese Form:

      Dies gleicht Dateien mit genau den angegebenen Berechtigungen ab.

      Wenn wir etwas mit zumindest diesen Berechtigungen angeben möchten, können Sie diese Form verwenden:

      Dies gleicht alle Dateien ab, die zusätzliche Berechtigungen aufweisen. Eine Datei mit der Berechtigung „744“ würde in diesem Fall gefunden werden.

      Filtern nach Tiefe

      Für diesen Abschnitt erstellen wir eine Verzeichnisstruktur in einem temporären Verzeichnis. Es enthält drei Verzeichnisebenen, mit zehn Verzeichnissen auf der ersten Ebene. Jedes Verzeichnis (einschließlich des temporären Verzeichnisses) enthält zehn Dateien und zehn Unterverzeichnisse.

      Erstellen Sie diese Struktur durch Ausgabe der folgenden Befehle:

      • cd
      • mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}
      • touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}
      • cd ~/test

      Sie können sich die Verzeichnisstrukturen mit ls und cd ansehen, um einen Überblick über die Organisation zu erhalten. Wenn Sie fertig sind, kehren Sie in das Testverzeichnis zurück:

      Wir werden uns damit beschäftigen, wie bestimmte Dateien aus dieser Struktur zurückgegeben werden. Versuchen wir zunächst ein Beispiel mit einer regulären Namenssuche, zum Vergleich:

      Output

      ./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 ./level1dir7/level2dir8/level3dir6/file1 ./level1dir7/level2dir8/level3dir5/file1 ./level1dir7/level2dir8/file1 . . .

      Es gibt eine Menge Ergebnisse. Wenn wir die Ausgabe in einen Zähler leiten, können wir sehen, dass es insgesamt 1111 Ergebnisse gibt:

      Output

      1111

      Das sind wahrscheinlich zu viele Ergebnisse, um für Sie in den meisten Fällen nützlich zu sein. Versuchen wir, dies einzugrenzen.

      Sie können die maximale Tiefe der Suche unter dem Suchverzeichnis auf höchster Ebene festlegen:

      • find -maxdepth num -name query

      Um „file1“ nur in den Verzeichnissen „level1“ und höher zu finden, können Sie eine maximale Tiefe von 2 (1 für das Verzeichnis auf höchster Ebene und 1 für die Verzeichnisse level1) festlegen:

      • find -maxdepth 2 -name file1

      Output

      ./level1dir7/file1 ./level1dir1/file1 ./level1dir3/file1 ./level1dir8/file1 ./level1dir6/file1 ./file1 ./level1dir2/file1 ./level1dir9/file1 ./level1dir4/file1 ./level1dir5/file1 ./level1dir10/file1

      Das ist eine wesentlich besser verwaltbare Liste.

      Sie können auch ein Mindestverzeichnis angeben, wenn Sie wissen, dass alle Dateien ab einem bestimmten Punkt unter dem aktuellen Verzeichnis bestehen:

      • find -mindepth num -name query

      Wir können dies verwenden, um nur die Dateien am Ende der Verzeichniszweige zu finden:

      • find -mindepth 4 -name file

      Output

      ./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 . . .

      Wiederum wird dies aufgrund unserer verzweigten Verzeichnisstruktur eine große Anzahl von Ergebnissen (1000) zurückgegeben.

      Sie können die Parameter Min- und Max-Tiefe kombinieren, um sich auf einen engen Bereich zu konzentrieren:

      • find -mindepth 2 -maxdepth 3 -name file

      Output

      ./level1dir7/level2dir8/file1 ./level1dir7/level2dir5/file1 ./level1dir7/level2dir7/file1 ./level1dir7/level2dir2/file1 ./level1dir7/level2dir10/file1 ./level1dir7/level2dir6/file1 ./level1dir7/level2dir3/file1 ./level1dir7/level2dir4/file1 ./level1dir7/file1 . . .

      Ausführen und Kombinieren von „Find“-Befehlen

      Sie können einen beliebigen Hilfsbefehl auf alles, was „find“ findet, ausführen, indem Sie den Parameter -exec verwenden. Dieser wird wie folgt aufgerufen:

      • find find_parameters -exec command_and_params {} ;

      Die {} werden als Platzhalter für die Dateien verwendet, die „find“ findet. Das ; wird verwendet, damit „find“ weiß, wo der Befehl endet.

      Wir könnten beispielsweise die Dateien im vorherigen Abschnitt finden, die 644 Berechtigungen aufwiesen, und sie so ändern, dass sie 664 Berechtigungen aufweisen:

      • cd ~/test
      • find . -type f -perm 644 -exec chmod 664 {} ;

      Wir könnten dann die Verzeichnisberechtigungen wie folgt ändern:

      • find . -type d -perm 755 -exec chmod 700 {} ;

      Wenn Sie verschiedene Ergebnisse miteinander verketten möchten, können Sie die Befehle -and oder -or verwenden. Das -and wird angenommen, wenn es weggelassen wird.

      • find . -name file1 -or -name file9

      Suchen von Dateien unter Verwendung von „locate“

      Eine Alternative zur Verwendung von find, ist der Befehl locate. Dieser Befehl ist oft schneller und kann das gesamte Dateisystem mit Leichtigkeit durchsuchen.

      Sie können den Befehl unter Debian oder Ubuntu mit apt installieren:

      Unter CentOS verwenden Sie stattdessen dnf:

      Der Grund, warum locate schneller ist als find, ist, dass er sich auf eine Datenbank der Dateien im Dateisystem verlässt.

      Die Datenbank wird normalerweise einmal täglich mit einem Cron-Skript aktualisiert, aber Sie können sie manuell aktualisieren, indem Sie Folgendes eingeben:

      Führen Sie diesen Befehl nun aus. Denken Sie daran, dass die Datenbank immer aktuell sein muss, wenn Sie kürzlich erworbene oder erstellte Dateien finden möchten.

      Um Dateien mit „locate“ zu finden, verwenden Sie einfach diese Syntax:

      Sie können die Ausgabe auf einige Arten filtern.

      Um beispielsweise nur Dateien zurückzugeben, die die Abfrage selbst enthalten, anstatt jede Datei zurückzugeben, die die Abfrage in den Verzeichnissen aufweist, die zu ihr führen, können Sie das -b verwenden, um nur den „Basisnamen“ zu suchen:

      Wenn „locate“ nur Ergebnisse zurückgeben soll, die noch im Dateisystem vorhanden sind (die nicht zwischen dem letzten Aufruf von updatedb und dem aktuellen Aufruf von locate entfernt wurden), verwenden Sie das Flag -e:

      Um eine Statistik über die Informationen anzuzeigen, die „locate“ katalogisiert hat, verwenden Sie die Option -S:

      Output

      Database /var/lib/mlocate/mlocate.db: 3,315 directories 37,228 files 1,504,439 bytes in file names 594,851 bytes used to store database

      Zusammenfassung

      Sowohl „find“ als auch „locate“ sind gute Methoden, um Dateien auf einem System zu finden. Es ist Ihnen überlassen zu entscheiden, welches dieser Tools in der jeweiligen Situation angemessen ist.

      „Find“ und „locate“ sind leistungsfähige Befehle, die durch die Kombination mit anderen Dienstprogrammen über noch verstärkt werden können. Experimentieren Sie mit der Filterung durch Verwendung von Befehlen wie wc, sort und grep.



      Source link

      Konfigurieren des Remotezugriffs für MongoDB unter Ubuntu 20.04


      Eine frühere Version dieses Tutorials wurde von Melissa Anderson verfasst.

      Einführung

      MongoDB, auch als Mongo bekannt, ist eine Open-Source-Dokumentendatenbank, die für gewöhnlich in modernen Webanwendungen verwendet wird. Standardmäßig erlaubt sie nur Verbindungen, die von demselben Server stammen, auf dem sie installiert ist. Wenn Sie MongoDB aus der Ferne verwalten oder die Datenbank mit einem separaten Anwendungsserver verbinden möchten, müssen Sie einige Änderungen an der Standardkonfiguration vornehmen.

      In diesem Tutorial konfigurieren Sie eine MongoDB-Installation so, dass der Zugriff von einem vertrauenswürdigen Remotecomputer aus sicher möglich ist. Dazu aktualisieren Sie Ihre Firewall-Regeln, um dem Remotecomputer Zugriff auf den Port zu gewähren, auf dem MongoDB auf Verbindungen lauscht, und aktualisieren dann ihre Konfigurationsdatei, um ihre IP-Bindungseinstellung zu ändern. Als letzten Schritt testen Sie dann, dass Ihr Remotecomputer die Verbindung zu Ihrer Datenbank erfolgreich herstellen kann.

      Voraussetzungen

      Um dieses Tutorial zu absolvieren, benötigen Sie:

      • Einen Server, auf dem Ubuntu 20.04 ausgeführt wird. Dieser Server sollte über einen administrativen non-root user und eine mit UFW konfigurierte Firewall verfügen. Sie können dies einrichten, indem Sie unserem Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 folgen.
      • MongoDB, das auf Ihrem Server installiert ist. Dieses Tutorial geht davon aus, dass Sie MongoDB 4.4 oder eine neuere Version installiert haben. Sie können diese Version installieren, indem Sie unserem Leitfaden zum Installieren von MongoDB unter Ubuntu 20.04 folgen.
      • Einen zweiten Computer, von dem Sie auf Ihre MongoDB-Instanz zugreifen. Aus Gründen der Einfachheit geht dieses Tutorial davon aus, dass es sich bei diesem Computer um einen weiteren Ubuntu 20.04-Server handelt, der mit einem administrativen non-root user und einer UFW-Firewall gemäß unserem Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 konfiguriert ist. Schritt 1 und 2, die das eigentliche Verfahren zur Aktivierung des Remote-Zugriffs auf den Datenbankserver beschreiben, funktionieren jedoch unabhängig davon, unter welchem Betriebssystem der Remotecomputer ausgeführt wird.

      Auch wenn es zum Abschließen dieses Tutorials nicht erforderlich ist, empfehlen wir außerdem dringend, dass Sie Ihre MongoDB-Installation sichern, indem Sie ein administratives Benutzerkonto für die Datenbank erstellen und die Authentifizierung aktivieren. Folgen Sie dazu unserem Leitfaden Sichern von MongoDB unter Ubuntu 20.04.

      Schritt 1 — Anpassen der Firewall

      Unter der Annahme, dass Sie dem Leitfaden zur Ersteinrichtung des Servers aus den Voraussetzungen gefolgt sind und eine UFW-Firewall auf Ihrem Server aktiviert haben, ist Ihre MongoDB-Installation vom Internet nicht zugänglich. Wenn Sie MongoDB nur lokal mit Anwendungen verwenden möchten, die auf dem gleichen Server ausgeführt werden, ist dies die empfohlene und sichere Einstellung. Wenn Sie jedoch eine Verbindung mit Ihrem MongoDB-Server von einem entfernten Ort herstellen möchten, müssen Sie eingehende Verbindungen zu dem Port zulassen, auf dem die Datenbank lauscht, indem Sie eine neue UFW-Regel hinzufügen.

      Überprüfen Sie zunächst mit dem Befehl lsof, auf welchem Port Ihre MongoDB-Installation lauscht. Dieser Befehl gibt normalerweise eine Liste mit jeder offenen Datei in einem System aus. Wenn er jedoch mit der Option -i kombiniert wird, listet er nur netzwerkbezogene Dateien oder Datenströme auf.

      Der folgende Befehl leitet die von lsof -i erstellte Ausgabe an einen grep-Befehl weiter, der nach einer Zeichenfolge namens mongo sucht:

      • sudo lsof -i | grep mongo

      Diese Beispielausgabe zeigt, dass MongoDB den Verbindungen auf ihrem Standard-Port 27017 lauscht:

      Output

      mongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)

      In den meisten Fällen sollte nur von bestimmten vertrauenswürdigen Orten auf MongoDB zugegriffen werden, wie z. B. von einem anderen Server, der eine Anwendung hostet. Um dies zu konfigurieren, besteht unter anderem die Möglichkeit, den folgenden Befehl auf Ihrem MongoDB-Server auszuführen. Dieser erlaubt den Zugriff auf den Standardport von MongoDB, lässt dabei jedoch nur die IP-Adresse des anderen vertrauenswürdigen Servers zu.

      Führen Sie den folgenden Befehl aus und ersetzen Sie hierbei trusted_server_ip mit der IP-Adresse des vertrauenswürdigen Remotecomputers, den Sie für den Zugriff auf Ihre MongoDB-Instanz nutzen möchten:

      Anmerkung: Wenn die Ausgabe des vorherigen Befehls gezeigt hat, dass Ihre Installation von MongoDB auf einem nicht standardmäßigen Port lauscht, verwenden Sie in diesem Befehl diese Portnummer anstelle von 27017.

      • sudo ufw allow from trusted_server_ip to any port 27017

      Wenn Sie in Zukunft von einem anderen Computer auf MongoDB zugreifen möchten, führen Sie diesen Befehl erneut mit der IP-Adresse des neuen Computers anstelle von trusted_server_ip aus.

      Sie können die Änderung der Firewall-Einstellungen mit ufw überprüfen:

      Die Ausgabe zeigt an, dass der Datenverkehr zum Port 27017 vom Remoteserver nun zugelassen wird:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 27017 ALLOW trusted_server_ip OpenSSH (v6) ALLOW Anywhere (v6)

      Weitere erweiterte Firewall-Einstellungen zum Einschränken des Zugriffs auf Dienste finden Sie in UFW-Grundlagen: gebräuchliche Firewall-Regeln und -Befehle.

      Als Nächstes binden Sie MongoDB an die öffentliche IP-Adresse des Servers, damit Sie von Ihrem Remotecomputer darauf zugreifen können.

      Schritt 2 — Konfigurieren einer öffentlichen bindIP

      Obwohl der Port geöffnet ist, ist MongoDB derzeit an 127.0.0.1 gebunden, die lokale Loopback-Netzwerkschnittstelle. Das bedeutet, dass MongoDB nur Verbindungen akzeptieren kann, die von dem Server stammen, auf dem die Datenbank installiert ist.

      Um Remoteverbindungen zu ermöglichen, müssen Sie die Konfigurationsdatei von MongoDB — /etc/mongod.conf — bearbeiten, um MongoDB zusätzlich an die öffentlich routbare IP-Adresse Ihres Servers zu binden. Auf diese Weise kann Ihre MongoDB-Installation auf Verbindungen zu Ihrem MongoDB-Server von Remotecomputern lauschen.

      Öffnen Sie die MongoDB-Konfigurationsdatei in Ihrem bevorzugten Editor. Das folgende Beispiel verwendet nano:

      • sudo nano /etc/mongod.conf

      Finden Sie den Abschnitt network interfaces und dann den bindIp-Wert:

      /etc/mongod.conf

      . . .
      # network interfaces
      net:
        port: 27017
        bindIp: 127.0.0.1
      
      . . .
      

      Hängen Sie dieser Zeile ein Komma an, gefolgt von der öffentlichen IP-Adresse Ihres MongoDB-Servers:

      /etc/mongod.conf

      . . .
      # network interfaces
      net:
        port: 27017
        bindIp: 127.0.0.1,mongodb_server_ip
      
      . . .
      

      Speichern und schließen Sie die Datei. Wenn Sie nano verwendet haben, drücken Sie STRG+X, Y, dann die EINGABETASTE.

      Starten Sie dann MongoDB neu, um diese Änderung umzusetzen:

      • sudo systemctl restart mongod

      Danach kann Ihre MongoDB-Installation Remoteverbindungen von allen Computern akzeptieren, denen Sie Zugriff auf Port 27017 gewährt haben. Als abschließenden Schritt können Sie testen, ob der vertrauenswürdige Remoteserver, den Sie in Schritt 1 über die Firewall erlauben, die MongoDB-Instanz auf Ihrem Server erreichen kann.

      Schritt 3 — Testen der Remotekonnektivität

      Nachdem Sie Ihre MongoDB-Installation so konfiguriert haben, dass sie auf Verbindungen lauscht, die von ihrer öffentlich routbaren IP-Adresse stammen, und Ihrem Remotecomputer Zugriff über die Firewall Ihres Servers auf den Standardport von Mongo gewährt haben, können Sie testen, ob der Remotecomputer in der Lage ist, sich zu verbinden.

      Anmerkung: Wie im Abschnitt Voraussetzungen erwähnt, geht dieses Tutorial davon aus, dass Ihr Remotecomputer ein anderer Server ist, auf dem Ubuntu 20.04 ausgeführt wird. Das in den Schritten 1 und 2 beschriebene Verfahren zur Aktivierung von Remoteverbindungen sollte unabhängig davon funktionieren, welches Betriebssystem auf Ihrem Remotecomputer ausgeführt wird. Die in diesem Schritt beschriebenen Testmethoden funktionieren jedoch nicht universell bei allen Betriebssystemen.

      Eine Möglichkeit, zu testen, dass Ihr vertrauenswürdiger Remoteserver eine Verbindung mit der MongoDB-Instanz herstellen kann, besteht in der Verwendung des nc-Befehls. nc, kurz für netcat, ist ein Dienstprogramm, das zum Erstellen von Netzwerkverbindungen mit TCP oder UDP verwendet wird. Er ist für Tests in Fällen wie diesen nützlich, da Sie sowohl eine IP-Adresse als auch eine Portnummer angeben können.

      Melden Sie sich zunächst mit SSH bei Ihrem vertrauenswürdigen Server an:

      • ssh sammy@trusted_server_ip

      Führen Sie dann den folgenden nc-Befehl aus, der die Option -z enthält. Dadurch wird nc darauf beschränkt, nur nach einem lauschenden Daemon auf dem Zielserver zu suchen, ohne diesem Daten zu senden. Erinnern Sie sich aus der Installationsanleitung in den Voraussetzungen, dass MongoDB als Dienst-Daemon ausgeführt wird. Daher ist diese Option nützlich zum Testen der Konnektivität. Außerdem enthält er die Option v, der die Ausführlichkeit des Befehls erhöht und bewirkt, dass netcat eine Ausgabe ausgibt, was sonst nicht geschehen würde.

      Führen Sie den folgenden nc-Befehl von Ihrem vertrauenswürdigen Remoteserver aus und stellen Sie sicher, mongodb_server_ip durch die IP-Adresse des Servers, auf dem Sie MongoDB installiert haben, zu ersetzen:

      • nc -zv mongodb_server_ip 27017

      Wenn der vertrauenswürdige Server auf den MongoDB-Daemon zugreifen kann, wird seine Ausgabe angeben, dass die Verbindung erfolgreich war:

      Output

      Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!

      Wenn Sie eine kompatible Version der mongo-Shell auf Ihrem Remoteserver installiert haben, können Sie sich nun direkt mit der auf dem Hostserver installierten MongoDB-Instanz verbinden.

      Eine Möglichkeit zur Verbindung bietet eine URI-Verbindungszeichenfolge wie diese:

      • mongo "mongodb://mongo_server_ip:27017"

      Anmerkung: Wenn Sie dem empfohlenen Leitfaden Sichern von MongoDB unter Ubuntu 20.04 gefolgt sind, haben Sie den Zugriff auf Ihre Datenbank für nicht authentifizierte Benutzer geschlossen. In diesem Fall müssen Sie eine URI verwenden, die so wie die folgende einen gültigen Benutzernamen angibt:

      • mongo "mongodb://username@mongo_server_ip:27017"

      Die Shell wird Sie automatisch dazu auffordern, das Passwort des Benutzers einzugeben.

      Damit haben Sie bestätigt, dass Ihr MongoDB-Server Verbindungen vom vertrauenswürdigen Server akzeptieren kann.

      Zusammenfassung

      Sie können nun von einem Remoteserver auf Ihre MongoDB-Installation zugreifen. Jetzt können Sie Ihre Mongo-Datenbank von dem vertrauenswürdigen Server aus der Ferne verwalten. Alternativ können Sie eine Anwendung so konfigurieren, dass sie auf dem vertrauenswürdigen Server ausgeführt wird und die Datenbank aus der Ferne verwendet.

      Wenn Sie keinen administrativen Benutzer konfiguriert und die Authentifizierung nicht aktiviert haben, kann jeder, der Zugriff auf Ihren Remoteserver hat, auch auf Ihre MongoDB-Installation zugreifen. Sollten Sie es bisher nicht getan haben, empfehlen wir Ihnen dringend, unserem Leitfaden Sichern von MongoDB unter Ubuntu 20.04 zu folgen, und für eine erhöhte Absicherung einen administrativen Benutzer hinzuzufügen.



      Source link