Linux 에서 같은 파일 을 어떻게 찾 습 니까?

5598 단어
--- 위 챗 공식 호 '양 허 Liux' 에서 발췌
컴퓨터 가 사용 되면 서 시스템 에 쓰레기 가 많이 발생 할 것 이다. 가장 전형 적 인 것 은 같은 파일 이 서로 다른 위치 에 저장 되 었 다 는 것 이다. 이런 결 과 는 디스크 공간 이 대량으로 점용 되 고 시스템 운행 이 점점 느 려 지 는 것 이다.
따라서 컴퓨터 공간 이 급 하 다 면 이런 파일 을 삭제 하고 공간 을 풀 어 보 세 요.Linux 에서 우 리 는 파일 을 식별 할 수 있다.  inode  시스템 의 같은 파일 을 찾 을 수 있 는 값 입 니 다.inode  파일 이름과 파일 내용 을 제외 한 모든 정 보 를 기록 한 데이터 구조 입 니 다.두 개 이상 의 파일 이 같은 inode 값 을 가지 고 있다 면 파일 이름 이 다 르 더 라 도 위치 가 다 르 더 라 도 내용, 소유자, 권한 이 같 습 니 다. 같은 파일 로 볼 수 있 습 니 다.
이 유형의 파일 은 이른바 '하 드 링크' 입 니 다.하 드 링크 는 같은 inode 값 을 가지 고 있 지만 파일 이름 은 다 릅 니 다.소프트 링크 는 바로 단축 키 입 니 다. 대상 파일 을 가리 키 지만 자신의 inode 값 을 가지 고 있 습 니 다.
$ ls -l my*
-rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 myfile
lrwxrwxrwx 1 liangxu liangxu 6 Apr 15 11:18 myref -> myfile
-rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 mytwin

같은 디 렉 터 리 아래 에 어떤 파일 이 같은 inode 값 을 가지 고 있 는 지 직접 알 수 는 없 지만 식별 하 는 것 도 어렵 지 않 습 니 다.사실 저 희 는 사용 만 하면 돼 요.  ls -i  명령, inode 값 으로 정렬 하면 이 파일 들 을 직접 찾 을 수 있 습 니 다.
$ ls -i | sort -n | more
...
788000 myfile <==
788000 mytwin <==
801865 Name_Labels.pdf
786692 never leave home angry
920242 NFCU_Docs
800247 nmap-notes

이 결과 의 첫 번 째 열 에 대응 하 는 inode 값 입 니 다.그래서 이 결과 에서 우 리 는 어떤 파일 이 같은 inode 값 을 가지 고 있 는 지 한눈 에 알 수 있다.
만약 당신 이 단지 파일 에 대응 하 는 하 드 링크 파일 을 찾 고 싶다 면, 우 리 는 사용 할 수 있 습 니 다.  find  명령  -samefile  옵션 을 선택 하면 빠르게 찾 을 수 있 습 니 다.
$ find . -samefile myfile
./myfile
./save/mycopy
./mytwin

이 파일 들 은 모두 같은 inode 값 을 가지 고 있 으 며, 믿 지 않 으 면 다시 사용 할 수 있 습 니 다.  ls  더 많은 정 보 를 보 려 면 명령:
$ find . -samefile myfile -ls
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 ./myfile
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 ./save/mycopy
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 ./mytwin

우 리 는 파일 이름 을 제외 하고 이 몇 개의 파일 이름 의 정 보 는 완전히 같다 는 것 을 볼 수 있다.세심 한 친 구 는 2 열 (하 드 연결 수) 이 4 라 는 것 을 알 수 있 습 니 다. 실제로 우리 가 찾 아 낸 파일 은 3 개 에 불과 합 니 다. 이 는 또 하나의 파일 이 그들 과 inode 값 을 공유 하고 있 음 을 설명 합 니 다. 다만 우 리 는 이 명령 을 통 해 찾 지 못 했 을 뿐 입 니 다.
게으름뱅이 로 서 매번 명령 을 두 드 리 는 것 이 얼마나 번 거 로 운 지, 직접 스 크 립 트 에 올 라 가서 디 렉 터 리 아래 의 같은 파일 을 찾 아 라!
#!/bin/bash

# seaches for files sharing inodes

prev=""

# list files by inode
ls -i | sort -n > /tmp/$0

# search through file for duplicate inode #s
while read line
do
inode=`echo $line | awk '{print $1}'`
if [ "$inode" == "$prev" ]; then
grep $inode /tmp/$0
fi
prev=$inode
done < /tmp/$0

# clean up
rm /tmp/$0

실행 결과:
$ ./findHardLinks
788000 myfile
788000 mytwin

물론 find 명령 을 사용 하여 inode 값 에 따라 시스템 에 있 는 모든 같은 파일 을 찾 을 수 있 습 니 다.
$ find / -inum 788000 -ls 2> /dev/null
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 /tmp/mycopy
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 /home/liangxu/myfile
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 /home/liangxu/save/mycopy
788000 4 -rw-r--r-- 4 liangxu liangxu 228 Apr 12 19:37 /home/liangxu/mytwin

이 명령 에서 우 리 는 잘못된 힌트 를 다시 설정 합 니 다.  /dev/null  이 특수 파일 에 서 는 접근 할 수 있 는 권한 이 없 는 경 로 를 검색 할 때 화면 이 가득 차지 않 습 니 다.  permission denied  。

좋은 웹페이지 즐겨찾기