Linux의 파일 분신

3440 단어 linux파일분신
Linux 시스템의 일부 파일이 여러 위치에 나타날 수 있습니다.본고의 지시에 따라 이런'동란 쌍둥이'를 찾아 식별하면 왜 하드링크가 이렇게 유리한지 알 수 있다.
같은 디스크 공간을 사용하는 파일을 식별하는 것은 파일을 이용하여 같은 inode를 사용한다는 사실에 의존한다.이런 데이터 구조는 파일 이름과 내용을 제외한 모든 정보를 저장한다.만약 두 개 이상의 파일이 서로 다른 이름과 파일 시스템 위치를 가지고 있지만 inode를 공유하면 내용, 소유권, 권한 등을 공유합니다.
이 파일들은 통상적으로'하드 링크'라고 불리는데, 기호 링크 (즉 소프트 링크) 처럼 그것들을 포함하는 이름을 통해서만 다른 파일을 가리키는 것이 아니라, 기호 링크는 파일 목록에서 첫 번째 위치의 l와 인용 파일의 -> 기호를 통해 식별하기 쉽다.

$ ls -l my*
-rw-r--r-- 4 shs shs  228 Apr 12 19:37 myfile
lrwxrwxrwx 1 shs shs   6 Apr 15 11:18 myref -> myfile
-rw-r--r-- 4 shs shs  228 Apr 12 19:37 mytwin
단일 디렉터리의 하드 링크는 뚜렷하지 않지만, 여전히 매우 쉽게 찾을 수 있다.ls-i 명령을 사용하여 파일을 열거하고 inode 번호에 따라 정렬하면 하드 링크를 쉽게 선택할 수 있습니다.이런 종류의 ls 출력에서 첫 번째 열은 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 번호를 찾으면 일치하는 모든 내용을 알려 줍니다.
다른 한편, 특정한 파일이 다른 파일의 하드 링크인지 알고 싶다면, 수백 개의 파일 목록을 훑어보는 것보다 더 간단한 방법이 있다. 즉find 명령의 -samefile 옵션이 작업을 완성하는 데 도움을 줄 것이다.

$ find . -samefile myfile
./myfile
./save/mycopy
./mytwin
find 명령에 제공된 시작 위치는 파일 시스템이 얼마나 스캔해서 일치하는지 결정합니다.위의 예에서 우리는 현재 디렉터리와 하위 디렉터리를 보고 있다.
find의 -ls 옵션을 사용하여 출력에 대한 자세한 정보를 추가하는 것이 더 설득력이 있을 수 있습니다.

$ find . -samefile myfile -ls
 788000  4 -rw-r--r--  4 shs  shs   228 Apr 12 19:37 ./myfile
 788000  4 -rw-r--r--  4 shs  shs   228 Apr 12 19:37 ./save/mycopy
 788000  4 -rw-r--r--  4 shs  shs   228 Apr 12 19:37 ./mytwin
첫 번째 열은 inode 번호를 표시하고 파일 권한, 링크, 소유자, 파일 크기, 날짜 정보, 같은 디스크 내용을 인용한 파일의 이름을 볼 수 있습니다.이 경우 링크 필드는 "3"이 아니라 "4"입니다.이것은 우리에게 같은 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 번호에 따라 파일을 찾을 수 있습니다.그러나 이 검색은 여러 파일 시스템과 관련될 수 있기 때문에 잘못된 결과를 얻을 수 있습니다.같은 inode 번호가 다른 파일 시스템에서 사용될 수 있기 때문에 다른 파일을 대표합니다.이 경우 파일의 다른 세부 정보가 달라집니다.

$ find / -inum 788000 -ls 2> /dev/null
 788000  4 -rw-r--r--  4 shs  shs  228 Apr 12 19:37 /tmp/mycopy
 788000  4 -rw-r--r--  4 shs  shs  228 Apr 12 19:37 /home/shs/myfile
 788000  4 -rw-r--r--  4 shs  shs  228 Apr 12 19:37 /home/shs/save/mycopy
 788000  4 -rw-r--r--  4 shs  shs  228 Apr 12 19:37 /home/shs/mytwin
오류 출력이/dev/null로 리디렉션되었습니다. 그러면 모든 "Permission denied"오류를 볼 필요가 없습니다. 그렇지 않으면 이 오류는 우리가 볼 수 없는 다른 디렉터리에 표시됩니다.
또한 같은 내용을 포함하지만 inode를 공유하지 않는 파일 (즉 간단한 텍스트 복사) 을 스캔하는 데 더 많은 시간과 노력이 걸릴 것이다.
총결산
위에서 말한 것은 여러분에게 소개된 Linux의 파일 분신입니다. 여러분에게 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
만약 당신이 본문이 당신에게 도움이 된다고 생각한다면, 전재를 환영합니다. 출처를 밝혀 주십시오. 감사합니다!

좋은 웹페이지 즐겨찾기