파일이 있는 경우 /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
그렇지 않으면 예, realpath
mtab을 사용하고 일치시킵니다. 같은 예에서:
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
당신의 친구인가요? "장치" 필드는 파일이 어떤 장치에 있는지 알려줍니다. 읽다이것장치 필드를 해석하는 방법에 대한 추가 정보.