Ausführliche Erklärung der Umgebungsvariablen und Konfigurationsdateien in CentOS

Ausführliche Erklärung der Umgebungsvariablen und Konfigurationsdateien in CentOS

Vorwort

Das Konfigurationsdateisystem der CentOS-Umgebungsvariablen ist ein hierarchisches System, das den Konfigurationsdateien anderer Mehrbenutzer-Anwendungssysteme ähnelt. Es gibt globale, Benutzer- und Shell-Konfigurationsdateien. Darüber hinaus haben verschiedene Ebenen manchmal Vererbungsbeziehungen.

In diesem Artikel werden die relevanten Inhalte zu CentOS-Umgebungsvariablen und Konfigurationsdateien ausführlich vorgestellt. Werfen wir einen Blick auf die ausführliche Einführung.

Was sind Umgebungsvariablen?

Die Bash-Shell verwendet eine Funktion namens Umgebungsvariablen, um Informationen zu Ihrer Shell-Sitzung und Arbeitsumgebung zu speichern. Das heißt, es ermöglicht die Speicherung von Daten im Speicher, sodass in einem Programm oder einer Shell ausgeführte Skripte darauf zugreifen können.

In der Bash-Shell werden Umgebungsvariablen in zwei Kategorien unterteilt:

  • Globale Variablen
  • Lokale Variablen

Globale Umgebungsvariablen

Globale Umgebungsvariablen sind für die Shell-Sitzung und alle erzeugten Sub-Shells sichtbar. Lokale Variablen sind nur für die Shell sichtbar, die sie erstellt hat.

Um globale Variablen anzuzeigen, können Sie den Befehl env oder printenv verwenden.

[root@dev ~]# Umgebung
HOSTNAME=localhost
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.100.17 56344 22
SSH_TTY=/dev/pts/0
USER=root


[root@dev ~] 
[root@dev ~]# printenv
HOSTNAME=localhost
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.100.17 56344 22
SSH_TTY=/dev/pts/0
USER=root


[root@dev ~]# printenv TERM
linux

Verwenden Sie Umgebungsvariablen, indem Sie $ + Variablenname verwenden.

[root@dev ~]# echo $HOME
/Wurzel

Systemumgebungsvariablen werden im Allgemeinen in Großbuchstaben geschrieben, um sie von Umgebungsvariablen normaler Benutzer zu unterscheiden.

Lokale Umgebungsvariablen

Wie der Name schon sagt, sind lokale Umgebungsvariablen nur innerhalb des Prozesses sichtbar, in dem sie definiert sind. Der Befehl „Set“ zeigt alle für einen bestimmten Prozess festgelegten Umgebungsvariablen an, einschließlich lokaler, globaler und benutzerdefinierter Variablen.

[root@dev ~]# festlegen
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="Veröffentlichung" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-Version'
FARBEN=/etc/DIR_COLORS
SPALTEN=165

Benutzerdefinierte Variablen

Nachdem Sie eine Bash-Shell gestartet haben, können Sie lokale Variablen erstellen, die innerhalb dieses Shell-Prozesses sichtbar sind. Die vom Prozess erstellte Unter-Shell kann die lokalen Variablen der übergeordneten Shell nicht lesen.

[root@dev-Shell]# sh a.sh

2
zweiundzwanzig
2
[root@dev-Shell]# cat a.sh
#!/bin/bash

ein = 1;
exportiere b=2;

sch b.sch

echo $b;


[root@dev-Shell]# cat b.sh
#!/bin/bash

echo $a;
echo $b;
b=22;
echo $b;
[root@dev-Shell]# sh a.sh 

2
zweiundzwanzig
2

Benutzer können Variablen exportieren, um sie zu globalen Variablen zu machen, sodass Subshells sie auch lesen können. Wenn die untergeordnete Shell die Variable ändert, ist die übergeordnete Shell davon nicht betroffen.

Wenn Sie eine Umgebungsvariable in einer Untershell festlegen, was passiert, wenn Sie sie in der übergeordneten Shell lesen möchten?

Ein Anwendungsszenario ist: Mehrere Ausführungsskripte basieren auf einer gemeinsamen Umgebungskonfiguration, die in einem env.sh-Skript geschrieben ist. Wie können andere Ausführungsskripte die Variablen in env.sh lesen? Das Exportieren von Variablen in einer untergeordneten Shell hat keine Auswirkungen auf die übergeordnete Shell.

Der Quellbefehl (aus der C-Shell) ist ein integrierter Befehl der Bash-Shell. Der Punktbefehl, ein Punktsymbol (aus der Bourne Shell), ist eine andere Bezeichnung für Quelle. Beide Befehle verwenden als Argument ein Skript, das als Umgebung der aktuellen Shell ausgeführt wird, d. h. es wird kein neuer Unterprozess gestartet. Alle im Skript festgelegten Variablen werden Teil der aktuellen Shell.

[root@dev-Shell]# cat c.sh
. ./env.sh
Quelle ./profile.sh

echo $env;
echo $profile;
[root@dev-Shell]# cat env.sh
Umgebung = "Test";
[root@dev-Shell]# cat-Profil.sh 
Profil="Entwickler";
[root@dev-Shell]# sh c.sh 
prüfen
Entwickler

Wenn Sie die Umgebungsvariable löschen möchten

Variablenname aufheben

Festlegen globaler Umgebungsvariablen

Aus dem Obigen können wir erkennen, ob wir in diesem Prozess und im untergeordneten Prozess gemeinsame Umgebungsvariablen verwenden möchten. Dies kann erreicht werden, indem der Quellbefehl zum Lesen desselben Umgebungsvariablenskripts verwendet wird. Dies ist ein benutzerdefiniertes Schema. Aber oft kennen wir die Quelle der globalen Umgebungsvariable, die wir lesen müssen, nicht und benötigen daher eine Standardumgebungsvariable zum Lesen der Datei.

Wenn Sie sich bei Ihrem Linux-System anmelden, wird die Bash-Shell als Anmelde-Shell gestartet. Die Login-Shell liest aus 5 verschiedenen Startdateien

  • /etc/Profil
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

/etc/Profil

Die Datei /etc/profile ist die standardmäßige Hauptstartdatei für die Bash-Shell. Solange Sie sich beim Linux-System anmelden, führt bash die Befehle in der Startdatei /etc/profile aus.

[root@dev-Shell]# cat /etc/profile
# /etc/profile

# Systemweite Umgebungs- und Startprogramme zur Einrichtung der Anmeldung
# Funktionen und Aliase kommen in /etc/bashrc

# Es ist KEINE gute Idee, diese Datei zu ändern, es sei denn, Sie wissen, was Sie
# tun. Es ist viel besser, ein custom.sh Shell-Skript in
# /etc/profile.d/ um benutzerdefinierte Änderungen an Ihrer Umgebung vorzunehmen, da dies
# verhindert, dass bei zukünftigen Updates eine Zusammenführung erforderlich ist.

Pfadmunge () {
 Fall ":${PATH}:" in
  *:"$1":*)
   ;;
  *)
   wenn [ "$2" = "nach" ] ; dann
    PFAD=$PFAD:$1
   anders
    PFAD=$1:$PFAD
   fi
 esac
}


wenn [ -x /usr/bin/id ]; dann
 wenn [ -z "$EUID" ]; dann
  # Ksh-Problemumgehung
  EUID=`id -u`
  UID=`id -ru`
 fi
 BENUTZER="`id -un`"
 LOGNAME=$USER
 MAIL="/var/spool/mail/$USER"
fi

# Pfadmanipulation
wenn [ "$EUID" = "0" ]; dann
 Pfadmunge /sbin
 Pfad /usr/sbin
 Pfad /usr/local/sbin
anders
 pathmunge /usr/local/sbin nach
 pathmunge /usr/sbin nach
 pathmunge /sbin nach
fi

HOSTNAME=`/bin/hostname 2>/dev/null`
HISTSIZE=1000
wenn [ "$HISTCONTROL" = "Leerzeichen ignorieren" ] ; dann
 export HISTCONTROL=ignoreboth
anders
 export HISTCONTROL=ignoredups
fi

export PFAD BENUTZER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# Standardmäßig soll umask gesetzt werden. Dies setzt es für die Login-Shell
# Der aktuelle Schwellenwert für vom System reservierte UIDs/GIDs beträgt 200
# Sie können die Gültigkeit der uidgid-Reservierung überprüfen in
# /usr/share/doc/setup-*/uidgid-Datei
wenn [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; dann
 umask 002
anders
 umask 022
fi

für i in /etc/profile.d/*.sh; mache
 wenn [ -r "$i" ]; dann
  wenn [ "${-#*i}" != "$-" ]; dann
   . "$i"
  anders
   . "$i" >/dev/null 2>&1
  fi
 fi
Erledigt

nicht gesetzt i
unset -f Pfad

Diese Datei liest alle *.sh-Dateien unter /etc/profile.d/ und lädt Variablen durch Klicken auf den Befehl (Quelle). Das heißt, die in /etc/profile und /etc/profile.d/*.sh definierten Variablen sind globale Systemumgebungsvariablen.

$HOME/.bash_profile

Die Startdateien unter $HOME sind alle benutzerspezifische Startdateien, die die Umgebungsvariablen des Benutzers definieren. /etc/profile sind die Umgebungsvariablen des Systems für alle Benutzer.

Die Shell führt die erste gefundene Datei in der folgenden Reihenfolge aus und ignoriert den Rest:

  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

.bashrc wird über .bash_profile aufgerufen.

[root@dev-Shell]# cat ~/.bash_profile 
# .bash_profile

# Holen Sie sich die Aliase und Funktionen
wenn [ -f ~/.bashrc ]; dann
  . ~/.bashrc
fi

# Benutzerspezifische Umgebung und Startprogramme

PATH=$PATH:$HOME/bin

Exportpfad

Zusammenfassen:

Legen Sie die zu setzenden systemglobalen Umgebungsvariablen, wie beispielsweise JAVA_HOME, in das Verzeichnis /etc/profile.d/ und definieren Sie diese in Form von *.sh-Skripten.

Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Konfiguration der LNMP-Entwicklungsumgebung und der Konfigurationsdateiverwaltung in CentOS 7
  • Konfigurationsdatei für die passwortlose SSH-Anmeldung unter CentOS

<<:  Vertieftes Verständnis davon in JavaScript

>>:  MySQL-Inspektionsskript (unbedingt lesen)

Artikel empfehlen

Grundlegendes Tutorial zur Steuerung des mobilen Roboters Turtlebot3 mit ROS

Chinesisch-Tutorial https://www.ncnynl.com/catego...

Designtheorie: Lesbarkeit und Verständlichkeit von Texten

<br />Vor nicht allzu langer Zeit habe ich a...

So stellen Sie MongoDB-Container mit Docker bereit

Inhaltsverzeichnis Was ist Docker einsetzen 1. Zi...

CentOS 7.9 Installations- und Konfigurationsprozess von zabbix5.0.14

Inhaltsverzeichnis 1. Grundlegende Umgebungskonfi...

So zeigen Sie Bilder im TIF-Format im Browser an

Der Browser zeigt Bilder im TIF-Format an Code kop...

Beispiel für einen reinen CSS3-Mindmap-Stil

Mindmap Er sieht wahrscheinlich so aus: Die meist...

22 Vue-Optimierungstipps (Projektpraxis)

Inhaltsverzeichnis Code-Optimierung Verwenden der...

So erstellen Sie eine lnmp-Umgebung im Docker

Erstellen eines Projektverzeichnisses mkdir php E...

So verwenden Sie Docker zum lokalen Verpacken und Bereitstellen von Images

Erste Verwendung von Docker zum lokalen Verpacken...

CSS, um den kleinen scharfen Eckeneffekt von Blasen zu erzielen

Effektbild (die Rahmenfarbe ist zu hell, setzen S...