相关疑难解决方法(0)

什么定义了命令单个参数的最大大小?

我的印象是,单个参数的最大长度在这里不是问题,而是整个参数数组的总大小加上环境的大小(仅限于ARG_MAX. 因此,我认为类似以下的事情会成功:

env_size=$(cat /proc/$$/environ | wc -c)
(( arg_size = $(getconf ARG_MAX) - $env_size - 100 ))
/bin/echo $(tr -dc [:alnum:] </dev/urandom | head -c $arg_size) >/dev/null
Run Code Online (Sandbox Code Playgroud)

- 100足以解释 shell 和echo进程中环境大小之间的差异。相反,我收到了错误:

bash: /bin/echo: Argument list too long
Run Code Online (Sandbox Code Playgroud)

玩了一段时间后,我发现最大值小了一个完整的十六进制数量级:

/bin/echo \
  $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) \
  >/dev/null
Run Code Online (Sandbox Code Playgroud)

当减一被删除时,错误返回。看似单个参数的最大值实际上是放置在参数数组中字符串末尾的空字节ARG_MAX/16-1帐户。

另一个问题是,当参数重复时,参数数组的总大小可以接近ARG_MAX,但仍然不完全:

args=( $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) )
for x in {1..14}; …
Run Code Online (Sandbox Code Playgroud)

kernel echo arguments

66
推荐指数
1
解决办法
6万
查看次数

如何在多台计算机上分发大型下载?

我需要下载一个大文件(1GB)。我也可以访问多台运行 Linux 的计算机,但每台计算机的下载速度都受到管理员策略的限制,下载速度为 50kB/s。

如何在多台计算机上分发下载此文件并在下载所有段后合并它们,以便我可以更快地接收它?

download cluster parallelism

39
推荐指数
1
解决办法
2947
查看次数

标签 统计

arguments ×1

cluster ×1

download ×1

echo ×1

kernel ×1

parallelism ×1