파일이 어느 장치에 있는지 알 수 있는 방법이 있나요?

파일이 어느 장치에 있는지 알 수 있는 방법이 있나요?

파일이 있는 경우 /abc/def/ghi/jkl해당 파일이 어느 장치에 있는지 알 수 있는 방법이 있습니까? 아니면 파일을 분석하여 /etc/mtab어느 것이 /abc/def/ghi/jkl더 일치하는지 확인해야 합니까?

답변1

df는 장치 이름과 마운트 지점을 알려주고, ls는 장치 번호를 알려줍니다.

paul $ pwd
/home/paul/SandBox/Toys/hSort
paul $ ls -l ReadMe
-rw-r--r-- 1 paul paul 296 Jan  8  2020 ReadMe

paul $ df ReadMe
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda9      103818480 3796556  94725184   4% /home

paul $ ls -l /dev/sda9
brw-rw---- 1 root disk 8, 9 Jul 12 12:10 /dev/sda9

답변2

Linux에서는 다음을 실행할 수 있습니다 findmnt(맨페이지) 파일 경로:

findmnt -T /abc/def/ghi/jkl

출력을 구문 분석할 수 없으므로 열(이 경우 SOURCE)의 결과를 변수로 읽으려면 다음을 수행할 수 있습니다.

source=$(findmnt -rno SOURCE -T /abc/def/ghi/jkl)

( $source이 경로는 항상 네트워크 또는 퓨즈 파일 시스템, tmpfs 등과 같은 블록 장치 파일의 경로가 아닐 수도 있습니다.)

답변3

여러 가지가 있지만 어떤 도구를 사용할 수 있는지에 따라 다릅니다. 당신은 쉘에 있습니까? 스크립트나 프로그램을 작성하고 있습니까? 어떤 언어로?

이것stat()기능지정된 파일의 장치 식별자를 반환합니다.

명령도 마찬가지입니다 stat(1). stat -c %D filename스크립트에서 사용할 수도 있습니다 . 예를 들어:

stat -c %D /mnt/persistent/test

"0821"을 제공합니다. 이는 장치 8, 하위 장치 33("21"은 16진수로 33)을 의미합니다. 이렇게 하면 /dev어떤 장치에 숫자 8, 33이 있는지 확인할 수 있습니다 .

ls -l /dev | grep " 8, *33 "
brw-rw---- 1 root disk      8,  33 Jun 28 19:08 sdc1

그렇지 않으면 예, realpathmtab을 사용하고 일치시킵니다. 같은 예에서:

REALPATH="$( realpath /mnt/persistent/test )"
df | grep ^/ | tr -s " " \
| while read row; do 
    PREFIX=$( echo "$row" | cut -f 6 -d " " )
    if ( echo "$REALPATH" | grep ^$PREFIX > /dev/null ); then
        echo "$row" | cut -f 1 -d " "
    fi
 done | sort | tail -n 1

다음을 출력합니다:

 /dev/sdc1

@Freddy가 지적했듯이 전체 스크립트는 df자체 구문 이후에 매우 제대로 표시되지 않습니다.

df --output=source /mnt/persistent/test | tail -n1

답변4

stat당신의 친구인가요? "장치" 필드는 파일이 어떤 장치에 있는지 알려줍니다. 읽다이것장치 필드를 해석하는 방법에 대한 추가 정보.

관련 정보