chmod recursion -- files only
Is there a way to change the permissions on all the files below a given directory? I thought it was as simple as:
chmod -R 444 /usr/lib/whatever/*.ext but this is changing the permissions on everything below the given driectory, including and directories. TIA |
"find . -type f -print | xargs chmod 444 "shoud work, isn't it ?
If not, find . -print >myfile.sh and vi myfile.sh removing the directories (they should not be soo many), and then 1,$s/^/chmod 444/ and sh myfile.sh. I know, the vi way is not very clever, but it works without thinking more than two seconds, so why not ? |
good call. Thanks for the help!
|
You're welcome
|
The first find should work w/o vi.
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 {} \; |
If your files contain spaces, backslashes, etc., do this instead:
find . -type f -print0 | xargs -0 chmod 444 |
also, if you need to change the permissions on the folder instead of the files, try this
Code:
find . -type d -print0 | xargs -0 chmod 755 |
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 '{}' \; |
Using xargs is usually much quicker as it does not have to execute chmod for every file.
|
I'm not sure if it's available everywhere, but on some versions of find at least you can replace the final semicolon with a plus sign, in which case it will act in a way similar to xargs. That is, it will run only one or a few instances of the command, with all the files from find built into a single argument.
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 '{}' \+ (What the heck? I just noticed that this thread is over 6 years old!) |
Great tip David, learn something new every day. I just tried it on AIX 5.3 and it works, it does not work on AIX 5.1
|
Thank you.
|
Recursive chmod thread
So I went trawling the web for an elegant and simple solution to this and decided to write a little script for this myself.
It basically does the recursive chmod but also provides a bit of flexibility for command line options (sets directory and/or file permissions, or exclude both it automatically resets everything to 755-644). It also checks for a few error scenarios. Check it out: http://bigfloppydonkeydisk.blogspot....-files-or.html Hope it helps! |
missing the boat
yah...ok...lets shoot self in foot here....UH people... Dont let my 15 year old AS degree bite you in the ass here! LEAST PERMISSIVE.
THIS IS LINUX for GODS SAKES! You REALLY want the UNIVERSE to READ, or WORSE your FILES? The fact that some server services REQUIRE ANYTHING other than 0 for the world bit is MIND BLOWING! If the service(is and should be) a part of the GROUP you are assigned to(in any way) then SHURELY the process already HAS the necessary permission to read or exec the files, IE: apache. Yet apache wants at minimal read permissions here? I think something is askew somewhere in someone's logic. Your theory holds. Your implementation of it SUCKS! 640 for files, 750 for folders(must exec or cannot browse them) is the CORRECT permissions. Obviously, with apache, the last bit must be 4 for some reason, even though you are USUALLY a part of the www group when setting it up.And Im also finding that one must own files as root to put them into www folder to begin with.They should only need www as a group set.Neither the world bit nor the files should be owned by root to get apache to work with them.THIS IS NOT the CASE, however. Completely missed the boat.Next cruise sails in 30 minutes... need to edit certain files only? (commmand hell....) try this: find . -name "*php" -exec chmod 644 '{}' \; -print |
Quote:
Did they teach swimming in that degree program? The last boat sailed from here long ago! |
Quote:
As far as apache, or any program goes - the mods you need are the mods you need. Some programs such as apache have the idea that using "nobody/nobody" as user/group of the application make it safe - when, imho, the user/group should be specific to an application - to permit something akin to "data ownership". Ideally, an application would have all it's files as 600 or 400 (aka rw-------, r--------) and access to data is via the application, not via the filesystem. Ok - it is off-topic - but this is by far the most read thread on the LinuxQuestions.org AIX forum. Closer to topic: rather than using octal notation for changing mode - use the ugo (user, group, other) +-= (add, remove, setto) rwx (read, write, eXecute_file/access_search_directory). Using octal modes you may be clearing other bits outside the lower 12-bits aka 0777 range. |
Ah, someone reprimanding you for what permissions you chose. Took 12 years but good to know they'll always show up.
However since it's been raised again ... and current answers covered xargs and find, I'll use parallel to do the same Code:
parallel -0m 'chmod 444 {}' :::: <(find . -type f -print0) Code:
PARALLEL There are many guides out there on how to use correct permissions, use a search engine and look for them |
All times are GMT -5. The time now is 11:40 AM. |