제가 작업 중인 스크립트에서는 UUID 변수를 사용하여 장치가 연결된 현재 마운트 지점을 가져와야 합니다. 제가 생각해낸 해결책은 이렇습니다.
UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)
명령을 실행한 후 MNTPNT 변수는 현재 마운트 지점을 예상대로 저장합니다.. 하지만 이는 매우 광범위한 명령이므로 동일한 목표를 달성하려면 더 효율적인 방법이 있어야 한다고 생각하지 않을 수 없습니다.
더 나은 해결책을 생각해내는 것이 가능합니까? 이는 주로 최적화 문제입니다. 어떤 통찰력이라도 미리 감사드립니다.
답변1
findmnt -noTARGET "/dev/disk/by-uuid/$UUID"
grep "$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" /proc/self/mountinfo
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev{print$5}' /proc/self/mountinfo
바인딩 설치를 다듬으려면 다음을 수행하십시오.
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo
장비는 여러 위치에 설치될 수 있다는 점을 명심하십시오.
메이저, 마이너 숫자를 인쇄할 수 없어서 안타깝습니다 $(stat ... | xargs printf)
.stat(1)
소수. 구문 분석 전용 출력이 ls -Hl
더 좋고 이식성이 더 좋을 수 있습니다.
답변2
df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'
이는 마운트 하위 디렉터리에 바인드 마운트가 있는 경우에도 작동하며, 이로 인해 다른 잠재적인 솔루션이 혼동될 수 있습니다.
(편집:)
마운트 지점에 공백을 허용합니다.
(편집 2:)
마운트 지점에는 "%"가 포함될 수도 있습니다.