Не удается записать файл с разрешением на запись

У меня есть этот файл:

$ ls -lrta ~/.bash_profile -rwxr-x---. 1 xxx xxx 904 May 23 15:36 /home/xxx/.bash_profile $ 

Я являюсь владельцем файла, и у меня есть разрешение на запись. Когда я пытаюсь отредактировать (например, удалить последнюю строку), у файла возникла ошибка,

 $ sed -i '$ d' .bash_profile sed: cannot rename ./sedxkZezg: Operation not permitted $ 

Добавление текста с помощью cat может успешно записываться в файл.

 $ cat >> .bash_profile writing ^D $ 

Я просмотрел прилагаемый текст,

 $ cat .bash_profile ... <some text> ... writing $ 

Ошибка также возникает, когда я редактирую файл с помощью текстового редактора (vi).

Может ли кто-нибудь объяснить, почему я не могу написать файл, хотя у меня есть разрешение на запись?

Вот некоторая информация о системе, которую я использую:

 $ uname -svr Linux 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 

ОБНОВЛЕНИЕ :

Вот что я пробовал до сих пор:

 $ sed -i '$ d' .bash_profile > file && mv file .bash_profile sed: cannot rename ./sedm89Ym2: Operation not permitted $ lsattr ~/.bash_profile lsattr: Inappropriate ioctl for device While reading flags on /home/xxx/.bash_profile $ getfact ~/.bash_profile getfacl: Removing leading '/' from absolute path names # file: xxx/xxx/.bash_profile # owner: xxx # group: xxx user::rwx group::rx other::--- $ 

  • Корень не может удалить файл на ext4
  • Не удается удалить файл - разрешено разрешение - почему?
  • Есть ли способ увидеть разрешения всех промежуточных каталогов пути.?
  • Что означает GID?
  • Как применить изменения в новых группах пользователей без перезагрузки?
  • Mount cifs Сетевой диск: разрешения на запись и chown
  • Два пользователя с разными разрешениями в одном каталоге
  • Кажется, что chown разрешено не root-пользователю
  • 3 Solutions collect form web for “Не удается записать файл с разрешением на запись”

     sed -i ... file 

    на самом деле что-то вроде:

     sed ... file > some-temp-file && mv some-temp-file file 

    Этот последний mv выполняет rename . Это sed -i не редактирует файл на месте, он заменяет его измененной копией самой.

    Здесь это переименование, которое заблокировано. Он не блокируется из-за проблем с разрешениями (вы получили сообщение об отказе в разрешении, если оно было), но похоже, что есть какое-то административное ограничение, чтобы отменить inode вашего ~ / .bash_profile (например, некоторый тип принудительного доступа SELinux control) или путь к этому файлу (например, MAC-адрес типа AppArmor).

    Вероятно, вы можете найти больше информации где-нибудь в журналах.

     getfattr -dm- ~/.bash_profile 

    будет перечислять все расширенные атрибуты (ACL, контексты безопасности) файла.

     lsattr ~/.bash_profile 

    для потенциально большего количества атрибутов Linux.

    «.» в конце вывода разрешений ls говорится, что имеются расширенные данные. chattr(1) дает список атрибутов для ext? файловые системы, lsattr(1) перечисляет текущие. Также проверьте ACL для файла ( getfacl(1) ). Политика безопасности (например, SELinux) также может запретить некоторые операции над файлом.

    Возможно, у вас нет разрешения на запись родительского каталога (что странно, потому что его дом)

    В любом случае, можете ли вы сделать:

     $ ls -la ~ 
    Linux и Unix - лучшая ОС в мире.