GNU/Linux >> Linux の 問題 >  >> Linux

Linux 環境変数値の最大サイズは?

Linux には環境ごとの変数の制限があるとは思いません。すべての環境変数を合わせた合計サイズは execve() に制限されています 時間。詳細については、こちらの「引数と環境のサイズの制限」を参照してください。

プロセスは setenv() を使用する場合があります または putenv() exec によって割り当てられた初期スペースを超えて環境を拡張します。

これは、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;
}

まあ、それは私の箱で少なくとも4Mです。その時点で、私は退屈してさまよいました。うまくいけば、月曜日に仕事に戻る前にターミナル出力が終了するでしょう :-)

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

環境変数に 4M では不十分かもしれないと心配している場合は、自分のやり方を再考することをお勧めします。

おそらく、情報をファイルに入れ、環境変数を使用してそのファイルを参照する方が良いでしょう。変数が @/path/to/any/fspec の形式の場合、 、ファイル path/to/any/fspec から実際の情報を取得します .そうでない場合 @ で始まる 、環境変数自体の値を使用します。

興味深いことに、これらすべての変数を設定すると、すべてのコマンドが引数リストが長すぎると不平を言い始めます。そのため、それらを設定できても、実行後にプログラムを起動できない場合があります (これらのプログラムに環境を渡します)。


Linux
  1. Linux エクスポート コマンドの例 (環境変数の設定方法)

  2. Linux の最大 PID

  3. Linux 環境変数の設定

  1. Linux での環境変数のアクセシビリティ

  2. Linux での export コマンドの役割は何ですか?

  3. .bashrc で環境変数を設定する最良の方法は何ですか?

  1. LinuxとUnix:違いは何ですか?

  2. Linuxコマンドラインナビゲーションのヒント/コツ3-CDPATH環境変数

  3. Linux /boot パーティションの推奨サイズは?