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.
More questions on this objective
- A user starts a new terminal window in a running graphical desktop session, which launches bash as an interactive shell that is NOT a login shell. Which file in the user's home directory does bash read in that case? machine-checked
- In bash, which history expansion re-runs the entire previous command line? machine-checked
- Which bash command prints the literal five characters $USER instead of the current user name? machine-checked
- You want /opt/bin searched for executables, after all the directories already in PATH, in the current bash session and in every command started from it. Which command does that? machine-checked
- There is a passwd manual page in section 1 (the command) and another in section 5 (the /etc/passwd file format). Which command opens the section 5 page? machine-checked
- Select the TWO true statements about shell variables and the environment in bash. machine-checked