A tree under /var/www contains roughly 200,000 files whose mode must be set to 644. You want find to do it while starting as few chmod processes as possible. Which command meets that requirement?

LPIC-1 Exam 101-500, objective 103. GNU and Unix commands hard

Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.

Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.

How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.

The options

Correct find /var/www -type f -exec chmod 644 {} +

Correct. The + terminator makes find append as many file names as fit on one command line before running chmod, so the whole tree is handled in a handful of processes.

Not correct find /var/www -type f -exec chmod 644 {} \;

Wrong for the requirement, though it works. The semicolon terminator runs one chmod per file, which here means about 200,000 fork-and-exec cycles.

Not correct find /var/www -type f -ok chmod 644 {} +

Wrong. -ok is -exec with a confirmation prompt for every invocation, so it is both slower and interactive. It is defined only with the ; terminator.

Not correct find /var/www -type f -exec chmod 644 {} \; | xargs chmod 644

Wrong. The chmod has already run once per file before the pipe, and find prints nothing when -exec is its only action, so xargs is handed an empty stream — on which GNU xargs still runs chmod once, with no file operands, and chmod reports a missing operand.

Why

-exec accepts two terminators. With \; the command runs once per result and {} may appear anywhere in it; with + the results are batched onto as few command lines as possible and {} must be the last argument. The + form is find's built-in equivalent of piping into xargs, and it handles names containing spaces or newlines safely because no shell parses them.

Where this comes from

Cited
manual page find(1)

Practise this

Reading one question is not practice. The trainer will draw a short set from objective 103 and space the ones you get wrong.

Practise LPIC-1 Exam 101-500

More questions on this objective

All questions on GNU and Unix commands

Practise LPIC-1 Exam 101-500