Intereting Posts
Как преобразовать hexdump в текст? Как проверить, загружена ли взломанная версия Linux Mint 17.3 обмен двумя словами с помощью sed Не удается подключить устройство USB к рабочей станции VMware 12.5 Debian jessie установленный pendrive, которому не доверяют apt Существует ли пакет Linux в Ubuntu, который предлагает инструмент sendmail, который может пересылать сообщение с SMTP или резервный файл в файл при сбое SMTP? Добавить путь, если в subdir htaccess Rewrite Rules issu Как определить, когда apt-get update не удается из-за отсутствия сетевого подключения? как вставить обратную косую черту перед символом #? Как можно обеспечить цвет для завершения табуляции в tcsh? Я хочу изменить разрешения для всех папок / файлов, исключая некоторые из них При добавлении пользователя в новую группу, когда права доступа группы пользователей становятся активными, когда пользователь a / nologin? как исправить EXT2-fs (sda1): ошибка: ext2_lookup удален inode, ссылка XXXX OpenVPN поддерживает состояние соединения при повторном подключении туннеля

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

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

$ 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::--- $ 

 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 ~