GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie groß darf der Wert einer Linux-Umgebungsvariablen maximal sein?

Ich glaube nicht, dass es unter Linux eine Variablenbegrenzung pro Umgebung gibt. Die Gesamtgröße aller Umgebungsvariablen zusammengenommen ist auf execve() begrenzt Zeit. Weitere Informationen finden Sie hier unter "Grenzwerte von Argumenten und Umgebung".

Ein Prozess kann setenv() verwenden oder putenv() um die Umgebung über den anfänglich von exec zugewiesenen Speicherplatz hinaus zu erweitern.

Hier ist ein Quick-and-Dirty-Programm, das eine 256-MB-Umgebungsvariable erstellt.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
  size_t size = 1 << 28; /* 256 MB */
  char *var;

  var = malloc(size);
  if (var == NULL) {
  perror("malloc");
  return 1;
}

  memset(var, 'X', size);
  var[size - 1] = '\0';
  var[0] = 'A';
  var[1] = '=';

  if (putenv(var) != 0) {
  perror("putenv");
  return 1;
}

  /*  Demonstrate E2BIG failure explained by paxdiablo */
  execl("/bin/true", "true", (char *)NULL);
  perror("execl");


  printf("A=%s\n", getenv("A"));

  return 0;
}

Nun, es sind mindestens 4 Millionen auf meiner Box. An diesem Punkt langweilte ich mich und wanderte weg. Hoffentlich ist die Terminalausgabe fertig, bevor ich am Montag wieder zur Arbeit gehe :-)

export b1=A
export b2=$b1$b1
export b4=$b2$b2
export b8=$b4$b4
export b16=$b8$b8
export b32=$b16$b16
export b64=$b32$b32
export b128=$b64$b64
export b256=$b128$b128
export b512=$b256$b256
export b1k=$b512$b512
export b2k=$b1k$b1k
export b4k=$b2k$b2k
export b8k=$b4k$b4k
export b16k=$b8k$b8k
export b32k=$b16k$b16k
export b64k=$b32k$b32k
export b128k=$b64k$b64k
export b256k=$b128k$b128k
export b512k=$b256k$b256k
export b1m=$b512k$b512k
export b2m=$b1m$b1m
export b4m=$b2m$b2m
echo $b4m
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
:    :    :    :    :    :    :    :    :    :    :    :
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Wenn Sie befürchten, dass 4 MB für Ihre Umgebungsvariable nicht ausreichen, sollten Sie Ihre Vorgehensweise überdenken.

Vielleicht wäre es eine bessere Idee, die Informationen in eine Datei zu schreiben und dann eine Umgebungsvariable zu verwenden, um auf diese Datei zu verweisen. Ich habe Fälle gesehen, in denen die Variable die Form @/path/to/any/fspec hat , erhält es die eigentlichen Informationen aus der Datei path/to/any/fspec . Wenn es nicht ist Beginnen Sie mit @ verwendet es den Wert der Umgebungsvariable selbst.

Interessanterweise beginnt sich bei all diesen gesetzten Variablen jeder einzelne Befehl darüber zu beschweren, dass die Argumentliste zu lang ist, sodass er, obwohl Sie sie setzen können, möglicherweise nicht in der Lage ist, Programme zu starten, nachdem Sie dies getan haben (da dies der Fall sein muss übergeben Sie die Umgebung an diese Programme).


Linux
  1. Linux vs. Unix:Was ist der Unterschied?

  2. Tipps/Tricks zur Linux-Kommandozeilennavigation 3 - die CDPATH-Umgebungsvariable

  3. Der maximale Wert der Prozess-ID?

  4. Linux – Wie setzt man die Umgebungsvariable „http_proxy“ in Python zurück?

  5. Beispiele für Linux-Exportbefehle (Festlegen von Umgebungsvariablen)

Was ist die Shell unter Linux?

Was ist Subshell in Linux?

Was ist der Kill-Befehl in Linux?

Was ist die Umgebungsvariable XDG_VTNR?

Was ist die empfohlene Größe für eine Linux /boot-Partition?

Wie groß ist ein atomarer Schreibvorgang auf der Festplatte meines Systems?