Linux - NewbieThis forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place!
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
I have an interesting task in front of me. For reasons not important right now, I had to change the UID from a user from 105 to 700. Now, as expected all files and dirs are showing with 105. I need to replace all dirs/files with the new UID. How can I do that?
I tried using LS and FIND and grep the output file. The idea I had was to then use CHOWN but an easier way gotta be out there. There are thousands of files and dirs...
If you want to do the change to all file then why do you want to use find, grep, ls
Ex:-
chown apache:apache *
this will change user and group as apache within a directory where you are
My problem is that I have other users (including root) with rights. If I do the above, I will be replacing those too... To avoid that, I would have to re-issue the command multiple times.
My problem is that I have other users (including root) with rights. If I do the above, I will be replacing those too... To avoid that, I would have to re-issue the command multiple times.
-Rod
You are not being clear. Do you want to change the permissions of directories only, files only, or both? Do you want to change ownership only of specific files belonging to a particular user?
Here's how to do the second (filter specific user, change ownership of only those files):
Code:
find $path -type f -user "oldusername" | while read filepath
do
chown newuser.newgroup $filepath
done
This will change ownership of files owned by "oldusername" to newuser.newgroup in the specified path and all subdirectories. This has to be run as root, so be careful.
Distribution: UBUNTU 5.10 since Jul-18,2006 on Intel 820 DC
Posts: 233
Thanked: 1
I would go with the find command. In find, by default, the depth parameter is on, ie find traverses all sub directries by default.
find /(start from root) ... -exec
So all you got to do is to:
(1) Test it in a sub directory with about two levels.
(2) Once done, backup the file system and run the single find command.
for file in $(find / -uid 105 -print 2>/dev/null)
do
echo chown 700 $file
done
Test with the echo cmd there, remove echo if you are happy. Needs to run as root.
This fails for paths with whitespace. It also enters places no one should go, like /proc (which will include processes owned by most users), and tries to chown things located there. Newbies need to be warned of the risks in basing a search at '/'.
change the UID from a user from 105 to 700. Now, as expected all files and dirs are showing with 105. I need to replace all dirs/files with the new UID.
Is this mean you need to change username only for all file and directory(within in a specific location)?
Am i correct?
You are not being clear. Do you want to change the permissions of directories only, files only, or both? Do you want to change ownership only of specific files belonging to a particular user?
Here's how to do the second (filter specific user, change ownership of only those files):
Code:
find $path -type f -user "oldusername" | while read filepath
do
chown newuser.newgroup $filepath
done
This will change ownership of files owned by "oldusername" to newuser.newgroup in the specified path and all subdirectories. This has to be run as root, so be careful.
Thank you guys for all the input. I will be testing the different suggestions.
Yes, i need to filter specific user, change the ownership of files AND directories without affecting the other users.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.