동일한 inode 번호를 가진 모든 파일을 나열하시겠습니까?

동일한 inode 번호를 가진 모든 파일을 나열하시겠습니까?

ls -li디렉토리 내부에서 작업을 수행하면 다음과 같은 결과가 나온다고 가정해 보겠습니다 .

12353538 -rw-r--r-- 6 me me 1650 2013-01-10 16:33 fun.txt

출력에 표시된 대로 파일은fun.txt가지다6하드 링크; 아이 노드 번호는 다음과 같습니다12353538.

파일, 즉 동일한 inode 번호를 가진 파일에 대한 모든 하드 링크를 어떻게 찾나요?

답변1

기본 전제는 다음을 사용하는 것입니다.

find /mount/point -mount -samefile /mount/point/your/file

시스템에서는 findmnt다음과 같이 마운트 지점을 파생할 수 있습니다.

file=/path/to/your/file
find "$(findmnt -o TARGET -cenT "$file")" -mount -samefile "$file"

/대상 파일이 해당 파일 시스템에 있지 않는 한 검색하지 않는 것이 중요합니다. 왜냐하면 inode 번호는 마운트된 각 파일 시스템에서 재사용되기 때문입니다.

답변2

이미 inode 번호가 있는 경우 find 옵션을 사용할 수 있습니다 -inum.

find /mount/point -xdev -inum 12353538

(일부 구현에서는 only is 표준 과 동등한 기능 find도 지원합니다 ).-mount-xdev-xdev

답변3

ffind~에서탐정 키트삭제된 파일 이름을 포함하여 inode의 모든 파일 이름을 찾을 수 있습니다.

예를 들어:

sudo ffind -a /dev/sda3 $(stat --format=%i ~/just_a_test)

수확량

* /home/me/empty_1
* /home/me/hard_link_to_empty1
/home/me/just_a_test
/home/me/hard_link_to_just_a_test

앞에 별표가 있는 항목은 더 이상 존재하지 않는 이전 파일 이름입니다(파일 이름이 바뀌거나 삭제되었기 때문에).


나는 $(stat --format=%i ~/just_a_test)파일의 inode를 얻는 데 사용합니다.

프로그래밍 방식으로 파일 이름의 파티션을 얻으려면( /dev/sda3이전 예에서) 다음을 사용할 수 있습니다.df:

file=~/just_a_test; sudo ffind -a $(df -P "$file" | awk 'END{print $1}') $(stat --format=%i "$file")

답변4

이전 답변에 감사드립니다.

바이너리 stat는 inode뿐만 아니라 해당 장치의 마운트 지점도 제공할 수 있습니다. 아래 스니펫은 이를 사용하여 '일반적인' 사용 사례를 해결합니다.

fn_hardlinks() {
  declare target; target="$1" && shift
  [ ! -e "$target" ] && \
    { echo "[error] invalid target: '$target'" 1>&2; exit 1; }
  stat '/' 2>/dev/null 1>&2 || \
    { echo "[error] no functioning 'stat' binary found'" 1>&2; exit 1; }
  declare mount; mount="$(stat -c '%m' "$target")"
  declare inode; inode="$(stat -c '%i' "$target")"
  [ "x${mount[-1]}" != "x/" ] && mount+="/"
  find "$mount" -xdev -inum "$inode" 2>/dev/null
}

alias hardlinks=fn_hardlinks

실행 중:

> hardlinks ./resources/sphinx/gitinfo.py
/home/user/build/z-documentation/resources/sphinx/gitinfo.py
/home/user/build/sphinx-gitinfo/git/sphinx-gitinfo/gitinfo.py

추신: 이것을 어떻게 사용하느냐에 따라 exitvs를 조심하세요 !return

관련 정보