I would like to change the permissions of a folder and all its subfolders and files in one step (command) in Linux.
I have already tried the below command but it works only for the mentioned folder:
chmod 775 /opt/lampp/htdocs
Is there a way to set chmod 755
for /opt/lampp/htdocs
and all of its content including subfolders and files?
Also, in the future, if I create a new folder or file inside htdocs
, how can the permissions of that automatically be set to 755
?
I had a look at this link too:
This question is related to
linux
permissions
directory
chmod
To set to all subfolders (recursively) use -R
chmod 755 /folder -R
And use umask to set the default to new folders/files
cd /folder
umask 755
If you want to set permissions on all files to a+r
, and all directories to a+x
, and do that recursively through the complete subdirectory tree, use:
chmod -R a+rX *
The X
(that is capital X
, not small x
!) is ignored for files (unless they are executable for someone already) but is used for directories.
For anyone still struggling with permission issues, navigate up one directory level cd ..
from the root directory of your project, then add yourself (user) to the directory and give permission to edit everything inside (tested on Mac OS).
To do that you would run this command (preferred):
sudo chown -R username: foldername .*
note: for currently unsaved changes, might need to restart the code editor first to be able to save without being asked for a password.
Also, please remember you can press tab
to see the options while typing username and folder to make it easier for yourself.
or simply:
sudo chmod -R 755 foldername
but as mentioned above, need to be careful with the second method.
Here's another way to set directories to 775 and files to 664.
find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)
It may look long, but it's pretty cool for three reasons:
man
pages (see below).Note that I have not confirmed the performance difference (if any) between this solution and that of simply using two find commands (as in Peter Mortensen's solution). However, seeing a similar example in the manual is encouraging.
Example from man find
page:
find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
Traverse the filesystem just once, listing setuid files and direct-
tories into /root/suid.txt and large files into /root/big.txt.
Cheers
For already created files:
find . \( -type f -exec chmod g=r,o=r {} \; \) , \( -type d -exec chmod g=rx,o=rx {} \; \)
For future created files:
sudo nano /etc/profile
And set:
umask 022
Common modes are:
It's very simple.
In Terminal go to file manager. example: sudo nemo
. Go /opt/
then click Properties ? Permission. and then Other. Finally, change to create and delete and file acess to read and write and click on button apply... And work.
There are two answers of finding files and applying chmod
to them. First one is find
the file and apply chmod
as it finds (as suggested by @WombleGoneBad).
find /opt/lampp/htdocs -type d -exec chmod 755 {} \;
Second solution is to generate list of all files with find
command and supply this list to the chmod
command (as suggested by @lamgesh).
chmod 755 $(find /path/to/base/dir -type d)
Both of these versions work nice as long as the number of files returned by the find
command is small. The second solution looks great to eye and more readable than the first one. If there are large number of files, the second solution returns error : Argument list too long.
So my suggestion is
chmod -R 755 /opt/lampp/htdocs
if you want to change permissions of all files and directories at once.find /opt/lampp/htdocs -type d -exec chmod 755 {} \;
if the number of files you are using is very large. The -type x
option searches for specific type of file only, where d is used for finding directory, f for file and l for link.chmod 755 $(find /path/to/base/dir -type d)
otherwisesudo chmod -R a=-x,u=rwX,g=,o= folder
owner rw, others no access, directory with rwx. This will clear existing x on files
symbolic chmod calc is explained here https://chmodcommand.com/chmod-744/
Check the -R option
chmod -R <permissionsettings> <dirname>
In the future, you can save a lot of time by checking the man page first:
man <command name>
So in this case:
man chmod
chmod 755 -R /opt/lampp/htdocs
will recursively set the permissions. There's no way to set the permissions for files automatically in only this directory that are created after you set the permissions, but you could change your system-wide default file permissions with by setting umask 022
.
You want to make sure that appropriate files and directories are chmod-ed/permissions for those are appropriate. For all directories you want
find /opt/lampp/htdocs -type d -exec chmod 711 {} \;
And for all the images, JavaScript, CSS, HTML...well, you shouldn't execute them. So use
chmod 644 img/* js/* html/*
But for all the logic code (for instance PHP code), you should set permissions such that the user can't see that code:
chmod 600 file
For Mac OS X 10.7 (Lion), it is:
chmod -R 755 /directory
And yes, as all other say, be careful when doing this.
You might want to consider this answer given by nik on superuser and use "one chmod" for all files/folders like this:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
You can use -R
with chmod
for recursive traversal of all files and subfolders.
You might need sudo as it depends on LAMP being installed by the current user or another one:
sudo chmod -R 755 /opt/lampp/htdocs
chmod -R 755 directory_name
works, but how would you keep new files to 755 also? The file's permissions becomes the default permission.
You can change permission by using following commands
sudo chmod go=rwx /opt/lampp/htdocs
The correct recursive command is:
sudo chmod -R 755 /opt/lampp/htdocs
-R
: change every sub folder including the current folder
I think Adam was asking how to change umask value for all processes that tying to operate on /opt/lampp/htdocs
directory.
The user file-creation mode mask (umask) is use to determine the file permission for newly created files. It can be used to control the default file permission for new files.
so if you will use some kind of ftp program to upload files into /opt/lampp/htdocs
you need to configure your ftp server to use umask you want.
If files / directories be created for example by php, you need to modify php code
<?php
umask(0022);
// other code
?>
if you will create new files / folders from your bash session, you can set umask value in your shell profile ~/.bashrc
Or you can set up umask in /etc/bashrc
or /etc/profile
file for all users.
add the following to file:
umask 022
Sample umask Values and File Creation Permissions
If umask value set to User permission Group permission Others permission
000 all all all
007 all all none
027 all read / execute none
And to change permissions for already created files you can use find. Hope this helps.
Use:
sudo chmod 755 -R /whatever/your/directory/is
However, be careful with that. It can really hurt you if you change the permissions of the wrong files/folders.
Source: Stackoverflow.com