나는 이 파일을 가지고 있습니다 :
$ 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 ~