GNU/Linux >> Belajar Linux >  >> Linux

Berapa ukuran maksimum nilai variabel lingkungan Linux?

Saya tidak berpikir ada batasan variabel per lingkungan di Linux. Ukuran total semua variabel lingkungan yang digabungkan dibatasi pada execve() waktu. Lihat "Batas ukuran argumen dan lingkungan" di sini untuk informasi selengkapnya.

Suatu proses dapat menggunakan setenv() atau putenv() untuk menumbuhkan lingkungan di luar ruang awal yang dialokasikan oleh exec.

Inilah program cepat dan kotor yang membuat variabel lingkungan 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;
}

Yah, setidaknya 4M di kotak saya. Pada saat itu, saya bosan dan pergi. Semoga keluaran terminal sudah selesai sebelum saya kembali bekerja pada hari Senin :-)

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

Jika Anda khawatir 4M mungkin tidak cukup untuk variabel lingkungan Anda, Anda mungkin ingin memikirkan kembali cara Anda melakukan sesuatu.

Mungkin ide yang lebih baik untuk memasukkan informasi ke dalam file dan kemudian menggunakan variabel lingkungan untuk mereferensikan file itu. Saya telah melihat kasus di mana, jika variabelnya berbentuk @/path/to/any/fspec , ia mendapatkan informasi sebenarnya dari file path/to/any/fspec . Jika tidak mulai dengan @ , ia menggunakan nilai variabel lingkungan itu sendiri.

Cukup menarik, dengan semua variabel yang disetel, setiap perintah mulai mengeluh bahwa daftar argumen terlalu panjang, meskipun memungkinkan Anda menyetelnya, mungkin tidak dapat memulai program setelah Anda melakukannya (karena harus meneruskan lingkungan ke program tersebut).


Linux
  1. Contoh Perintah Ekspor Linux (Cara Mengatur Variabel Lingkungan)

  2. Apa unit ukuran default di linux ls -l perintah

  3. aksesibilitas variabel lingkungan di Linux

  1. Apa perintah ekspor yang seharusnya dilakukan di Linux?

  2. Apa variabel lingkungan XDG_VTNR?

  3. Apa yang membatasi jumlah maksimum koneksi di server Linux?

  1. Linux vs. Unix:Apa bedanya?

  2. Tip/trik navigasi baris perintah Linux 3 - variabel lingkungan CDPATH

  3. Berapa ukuran penulisan atom ke disk di sistem saya?