폴더에 /var/spool/lp/logs
"requests"라는 파일이 두 개 있는 것 같습니다. 하나는 lp에 속하고 다른 하나는 root에 속합니다.
루트가 소유한 요청 파일을 삭제해야 합니다. 이를 어떻게 참조합니까?
다음은 명령의 출력입니다 ls -l
.
-rw-r--r-- 1 root sys 0 Jan 30 2014 lp
-rw-rw---- 1 root lp 6584 Nov 4 06:10 lpsched
-rw-rw---- 1 lp lp 3365 Dec 14 10:56 requests
-rw-r--r-- 1 root sys 1668416 Dec 14 10:41 requests
drwxr-xr-x 2 root sys 1024 Sep 30 2013 requests.archives
답변1
GNU ls가 있는 경우 다음을 ls -lQ
실행하여 참조된 파일 이름 버전을 볼 수 있습니다.
$ ls -lQ
total 0
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests"
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests "
특정 파일을 삭제하려면 먼저 다음을 사용하여 해당 inode 번호를 찾으십시오 ls -li
.
$ touch 'requests' 'requests '
$ ls -li
total 0
440 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
441 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
여기에는 두 개의 유사한 파일이 있습니다. 하나는 inode 440이고 다른 하나는 inode 441(왼쪽 열)입니다.
귀하의 경우 루트가 소유한 파일을 찾아 해당 inode 번호를 얻으십시오. -xdev
(또는 -mount
) 옵션은 find
현재 디렉터리에 마운트된 파일 시스템이 있는 경우 해당 하위 파일 시스템에서 일치하는 파일을 캡처하지 않도록 동일한 파일 시스템을 유지한다는 의미입니다.
그 다음에:
$ find . -inum 441 -xdev -user root -ls
441 0 -rw-r--r-- 1 user group 0 Dec 14 14:32 ./requests\
공백 문자 는 find
끝에 인용되어 있습니다.
삭제:
$ find . -inum 441 -xdev -user root -delete # GNU find
또는
$ find . -inum 441 -xdev -user root -exec rm {} \; # otherwise
답변2
동일한 폴더에 동일한 이름을 가진 두 개의 파일이 있을 수 없습니다. 보이지 않는 문자(예: 후행 공백)가 있을 수 있습니다.
내 제안은 이름 requests
을 바꾼 requests.real
다음 대화형 삭제를 실행하는 것입니다. 원하지 않는 이름을 삭제하도록 선택한 다음 (필요한 경우) 와일드카드를 사용하여 다른 이름을 올바른 이름으로 바꿀 수 있습니다.
mv requests requests.real # STOP if this fails
mv requests.archives KEEP.archives # Temporary
rm -i req* # Interactive delete: "y" to delete, "n" to skip
mv req* requests # Rename whatever's left that begins "req"
mv KEEP.archives requests.archives # Put this one back again