42

I've couple of files that I cannot remove using rf -Rf command. I'm the owner of those file and the group assigned to those files is also a group my user is in. What's even weirder is that I can edit their content and I can change the permissions for them, but I can't move or delete them.

ls -al
total 12
dr-xr-xr-x 3 rayell pg1083760 4096 2010-10-10 10:00 .
drwxr-xr-x 3 rayell pg1083760 4096 2011-09-02 04:33 ..
-rwxrwxrwx 1 rayell pg1083760    0 2011-09-02 06:38 default.settings.php
drwxrwxrwx 2 rayell pg1083760 4096 2011-09-02 04:33 files
-rwxrwxrwx 1 rayell pg1083760    0 2011-09-02 06:38 settings.php


rm -Rf *
rm: cannot remove `default.settings.php': Permission denied
rm: cannot remove directory `files': Permission denied
rm: cannot remove `settings.php': Permission denied

Can anyone tell me what is happening?

3
  • 7
    In general, consider using rm -rf DIRECTORY_NAME and not "*". It will save you from that one time when you will think yourself in directory /some/where/safe but are instead in /home Sep 2, 2011 at 15:56
  • Actually I did try that, it was just those 3 files that I couldn't remove so I have simplified to procedure a bit for this post's purpose.
    – RaYell
    Sep 3, 2011 at 6:17
  • Don't forget the lsattr and chattr command...
    – user307335
    Mar 13, 2014 at 5:36

5 Answers 5

79

To remove one file you need write permission on the directory that contains¹ this file.

Here the permissions are dr-xr-xr-x 3 rayell pg1083760 4096 2010-10-10 10:00 . So nobody (other than root) can remove files inside this directory. The owner must use chmod first.


1. There are pretty good reasons for that. By ‘removing’ a file with rm, you are in fact trying to unlink it from the directory (hardlinked copies will not be deleted).

0
2

Another possible question is attribute

lsattr file

This command will show you attribute of the file and a file with 'i' attribute cannot be modified (and be deleted)

so check your file's attribute and remove 'i' attribute if the attribute is been set

chattr -i file
2
  • 2
    The question shows that it's the directory permissions that don't allow writing. No need to look further. Apr 15, 2016 at 19:30
  • Ok, but this was the answer I needed! Thank you so much!
    – Marc
    Dec 22, 2020 at 15:04
1

The reason is that the parent directory has chmod 705 or something like that. You can chmod the parent directory by the following command:

chmod -R 777 directory_name

After this, you can remove that directory and the files it contains.

2
  • 5
    Please don't condone making directories writable by everybody. That's not good advice. Apr 15, 2016 at 19:29
  • +1 - Agree, do not follow this advice, it's amazing, how this is plastered all over the internet... The amount of insecurity, caused by people advocating this is incredible... Jan 12, 2017 at 11:08
1

I had the same problem, and chmod alone didn't do the trick. I first had to change the owner (user and group) of the files I wanted to remove.

sudo chown -hR root:admin dir_to_delete

Explanation:

  • sudo: make sure you have the proper rights
  • chown: Linux command to change owner of a file
  • -hR: change owner of directory and all subdirectories. I found it here.
  • root: name of new user
  • admin: name of new group

I had already changed the modifiers to 777; I don't know if that was necessary or not.

1
  • Permissions of files within directory are irrelevant, only write permission on directory itself matters. Probably before chown you had been neither owner of directory nor member of directory owning group.
    – sgnsajgon
    Jun 6, 2017 at 20:45
0

Just for knowledge sake: I solved it using sudo editing the sudoers file:

Cmnd_Alias MOVE = /bin/mv, /bin/rm
user ALL=(postgres) NOPASSWD:MOVE

In the procedure the user does:sudo -u postgres rm /tmp/test.file

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .