If you get an error that read as – command: Argument list too long due to limit for the command line length.
Tutorial details | |
---|---|
Difficulty | Easy (rss) |
Root privileges | No |
Requirements | None |
Time | N/A |
Fig.01: ARG_MAX, maximum length of arguments for a new process
Get maximum length of arguments for a new process
The following command will provide the upper limit for your system under Linux operating systems:
$ getconf ARG_MAX
Sample outputs:
2097152
So I can pass the 2097152 bytes worth args to any shell command. The following bash code will provide you exact number:
echo $(( $(getconf ARG_MAX) - $(env | wc -c) ))
POSIX suggests to subtract 2048 additionally so that the process may savely modify its environment:
expr `getconf ARG_MAX` - `env|wc -c` - `env|wc -l` \* 4 - 2048
Sample outputs:
2092496
Please note that the maximum length of arguments for a new process may differ among unix flavors. I recommend that you go through this web page for detailed information.
🐧 6 comments so far... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
I understand that you subtract 2048 to allow process to modify env variables, I just don’t get it why you subtract byte count from env command, and line count? Could you explain it please? Thanks!
Hi,
Please explain why you are using env| wc …
thanks
echo $(( $(getconf ARG_MAX) – $(env | wc -c) ))
You need to get the effectively usable space. You need to consider the space consumption by both argv[] (arguments) and envp[] (environment). So you’ve to decrease ARG_MAX at least by the results of “env|wc -c” and “env|wc -l * 4”. POSIX suggests to subtract 2048 additionally so that the process may savely modify its environment. See linked article at the bottom of faq for more info.
My guess is that `env | wc -c` gives the size needed to store all environment variables (names and values). Envirnoment variables are not global. Each process has a fulk copy inherited from its parent process.
`env | wc -l ` * 4 gives the number of environment variables multiplied by 4. This is probably the size needed to allocate a table of pointers (or offsets or sizes) to speedup the accesses to the environment variables.
how do i find java for my tablet
2097152 Jelly beans is the max? Why don’t you add the units of measurement. Are we talking about bytes? Character length?