GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el tamaño máximo de un valor de variable de entorno de Linux?

No creo que haya un límite variable por entorno en Linux. El tamaño total de todas las variables de entorno juntas está limitado a execve() tiempo. Consulte "Límites en el tamaño de los argumentos y el entorno" aquí para obtener más información.

Un proceso puede usar setenv() o putenv() hacer crecer el entorno más allá del espacio inicial asignado por exec.

Aquí hay un programa rápido y sucio que crea una variable de entorno de 256 MB.

#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;
}

Bueno, son al menos 4 millones en mi caja. En ese momento, me aburrí y me alejé. Con suerte, la salida de la terminal estará terminada antes de que regrese al trabajo el lunes :-)

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

Si le preocupa que 4M no sea suficiente para su variable de entorno, es posible que desee reconsiderar cómo está haciendo las cosas.

Quizás sería una mejor idea poner la información en un archivo y luego usar una variable de entorno para hacer referencia a ese archivo. He visto casos en los que, si la variable tiene la forma @/path/to/any/fspec , obtiene la información real del archivo path/to/any/fspec . Si no comienza con @ , utiliza el valor de la propia variable de entorno.

Curiosamente, con todas esas variables configuradas, cada comando comienza a quejarse de que la lista de argumentos es demasiado larga, por lo que, aunque le permite configurarlos, es posible que no pueda iniciar programas después de que lo haya hecho (ya que tiene que pasar el entorno a esos programas).


Linux
  1. Ejemplos de comandos de exportación de Linux (cómo establecer variables de entorno)

  2. PID máximo en Linux

  3. Configuración de variables de entorno de Linux

  4. Accesibilidad de variables de entorno en Linux.

  5. ¿Qué es la variable de entorno XDG_VTNR?

¿Qué es el Shell en Linux?

¿Qué es Subshell en Linux?

¿Qué es el comando matar en Linux?

¿Cuál es la unidad de tamaño predeterminada en el comando linux ls -l?

¿Qué se supone que debe hacer el comando de exportación en Linux?

¿Cuál es el tamaño recomendado para una partición Linux /boot?