thank you so much Mr. Wooledge. i guess that BUG is a strong word for this
case. i fully agree about "his is not a bash bug.  It's a problem with your
approach.", actuality that's my preoccupation.  can you help me to
understand because 10^6 strings pull the trigger of "Argument list too
long" and 10^7(n+1) don't ? i have afraid that a non-root user can
compromise a linux box intentionally. the memory needs be eaten until other
threshold can break it.

Thank you again.

On Mon, Mar 20, 2017 at 1:50 PM, Greg Wooledge <wool...@eeg.ccf.org> wrote:

> On Mon, Mar 20, 2017 at 12:17:39PM -0300, Noilson Caio wrote:
> > 1 - Using mkdir -p {0..9}/{0..9}/{0..9}/{0..9}/{0..9}/ - ( 5 levels ) No
> > problems
>
> 10 to the 5th power (100,000) strings generated.  Sloppy, but viable on
> today's computers.  You're relying on your operating system to allow
> an extraordinary large set of arguments to processes.  I'm guessing
> Linux.
>
> > 2 - Using mkdir -p {0..9}/{0..9}/{0..9}/{0..9}/{0..9}/{0..9}/ - (6
> levels )
> > We have a problem - "Argument list too long".
>
> You have two problems.  The first is that you are generating 10^6
> (1 million) strings in memory, all at once.  The second is that you are
> attempting to pass all of these strings as arguments to a single mkdir
> process.  Apparently even your system won't permit that.
>
> > 3 - Using mkdir -p {0..9}/{0..9}/{0..9}/{0..9}/{0..9}/{0..9}/{0..9}/ -
> (7
> > levels ) - Ops, we don't have more "Argument list too long" now we have
> "Cannot
> > allocate memory".
>
> 10 million strings, all at once.  Each one is ~15 bytes (counting the NUL
> and slashes), so you're looking at something like 150 megabytes.
>
> This is not a bash bug.  It's a problem with your approach.  You wouldn't
> call it a bug in C, if you wrote a C program that tried to allocate 150
> megabytes of variables and got an "out of memory" as a result.  The same
> applies to any other programming language.
>
> What you need to do is actually think about how big a chunk of memory
> (and argument list) you can handle in a single call to mkdir -p, and
> just do that many at once.  Call mkdir multiple times, in order to get
> the full task done.  Don't assume bash will handle that for you.
>



-- 
Noilson Caio Teixeira de Araújo
https://ncaio.wordpress.com
https://br.linkedin.com/in/ncaio
https://twitter.com/noilsoncaio
https://jammer4.wordpress.com/
http://8bit.academy

Reply via email to