쓰기 권한이 있는 파일에 쓸 수 없습니다.

쓰기 권한이 있는 파일에 쓸 수 없습니다.

나는 이 파일을 가지고 있습니다 :

$ 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::r-x
other::---
$

답변1

이것'. ' 권한 출력 끝에는 ls일종의 확장 데이터가 있음을 나타냅니다. chattr(1)ext?에 대한 속성 목록을 제공합니까? 파일 시스템에는 lsattr(1)현재 파일 시스템이 나열됩니다. 또한 파일의 ACL( getfacl(1))을 확인하세요. 보안 정책(예: SELinux)은 파일에 대한 특정 작업을 금지할 수도 있습니다.

답변2

sed -i ... file

실제로 다음과 같은 작업을 수행합니다.

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

마지막 mv파일이 실행됩니다 rename. 즉, sed -i파일이 그 자리에서 편집되지 않고 수정된 복사본으로 대체됩니다.

차단된 이름 바꾸기입니다. 권한 문제로 인해 차단되지는 않습니다.허가가 거부되었습니다오류 메시지(그렇다면), ~/.bash_profile의 inode 연결을 해제하거나(일부 SELinux 유형의 필수 액세스 제어와 같은) 파일에 대한 경로 연결을 해제하는(일부 AppArmor 유형과 같은) 관리 제한 사항이 있는 것 같습니다. ).

로그 어딘가에서 더 많은 단서를 찾을 수 있습니다.

getfattr -dm- ~/.bash_profile

파일의 모든 확장 속성(ACL, 보안 컨텍스트)이 나열됩니다.

lsattr ~/.bash_profile

잠재적인 Linux 속성에 대해 자세히 알아보세요.

답변3

아마도 상위 디렉토리에 대한 쓰기 권한이 없을 수도 있습니다(집이기 때문에 이상합니다).

어쨌든, 당신은 그것을 할 수 있습니까?

$ ls -la ~

관련 정보