inode 번호를 사용하여 Linux에서 파일 제거


15

와 같은 특수 문자를 사용하여 UNIX / Linux에서 파일을 작성하는 경우을 사용하여 파일을 touch \"la*제거 할 수 없습니다 rm "la*. inode 번호를 사용해야합니다 (이름 앞에을 추가하면 가능 \하지만 파일 생성에 사용 된 것으로 추측해야합니다).

맨 페이지에서 rm을 확인했지만 inode 번호에 대한 언급은 없습니다. 이렇게 rm inodenumber하나가 작동하지 않습니다.

이것에 대한 명령은 무엇입니까?

답변:


24

다른 방법으로는 다음이 포함됩니다.

특수 문자를 탈출 :

[~] $ rm \ "la \ *

find 명령을 사용하고 현재 디렉토리 만 검색하십시오. find 명령은 inode 번호를 검색 할 수 있으며 편리한 -delete스위치가 있습니다.

[~] $ ls -i
7404301 "la *

[~] $ find. -최대 깊이 1-타입 f-인치 7404301
./"라*

[~] $ find. -maxdepth 1-타입 f -inum 7404301-삭제
[~] $ ls -i
[~] $

Heh, find를 사용하는 것이 내 제안보다 훨씬 쉬울 것입니다. -inum :)을 보지 못했습니다.

찾기에는 많은 훌륭한 스위치가 있습니다. 정직한 스위스 군용 칼 도구입니다.
John T

t : 아 맞아.
akira

Solaris에는 "-maxdepth"옵션의 "-delete"가 없습니다.
guthrie

-xdev마운트 된 다른 파일 시스템에도 같은 inode 번호를 가진 관련없는 파일이있을 수 있으므로 옵션을 사용 하여 검색을 제한해야합니다 .
조나스 베를린

5

어쩌면 나는 뭔가를 놓치고 있지만 ...

rm '"la*'

어쨌든 파일 이름에는 inode가 없으며 파일에는 없습니다. 파일 이름을 가리키는 모든 파일 이름을 제거하지 않고 파일을 제거하려고하면 파일 시스템이 손상됩니다.


글쎄, 이것은 현재 디렉토리에서만 작동하지만 실제로 우려할만한 원인입니다. 내가 그리워했다 바보. 그래도 파일을 제거하지는 않습니다.
KdgDev

3
당연히 아니지. 파일은 더 이상 파일 이름을 가리 키지 않고 열려있는 프로세스가없는 경우에만 제거됩니다.
Ignacio Vazquez-Abrams가

5

당신이 경우 정말 이 작업을 수행 할 수 - 당신이 전혀 필요 같은 사용 사례 정말 보이지 않는, 당신은 디버깅 툴 파일 시스템을 시도 할 수 있습니다. 모든 것을 잃을 의향이 있다면 바로 그 것입니다.

예를 들어, ext2 / 3 / 4의 경우 debugfs명령에 "kill_file"옵션이있어 inode를 가져 오는 것 같습니다. 다른 응답에서 언급했듯이 존재하지 않는 파일을 가리키는 디렉토리 항목이 있기 때문에 파일 시스템 손상됩니다. fsck나중에 실행하면이 문제를 해결할 수 있습니다. 마운트 된 파일 시스템에서는이 작업을 수행 할 수 없습니다.

그러나 적절한 응답 이스케이프 / 따옴표를 사용 하고 이전 응답에서 언급 한대로 일반 명령으로 해당 파일을 삭제 하고 *와 같은 글러브 문자가 포함 된 파일 이름을 처리 할 때 추가 안전을 위해 사용 하는 것이 좋습니다.rmrm -i


1

"특수 문자 이스케이프"접근 방식을 강력히 권장하지만 clri실제로 수정 가능한 파일 시스템 손상을 원할 때 항상 명령이 있습니다.


2
주목해야한다 clri일반적으로 오라클 시스템 (예 : SunOS의)에만 존재합니다.
can-ned_food


1

내가 겪었던 과제는 대시로 시작하는 파일 이름을 제거하는 것이 었습니다. rm은 항상 파일 이름을 호스트 이름으로 해석하려고합니다. 나는 이것을 사용하여 이것을 해결했다 :

rm ./-g4xxx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.