내 목표는 일부 새로운 마운트 지점이 추가되었는지 지속적으로 확인하는 것입니다. df 명령을 통해 이를 확인해야 합니다.
따라서 다음 명령은 실제로 df를 살펴보고 새 마운트 지점이 있으면 변경 사항을 볼 수 있습니다.
watchdf
하지만 df에 새 마운트 지점이 나타나면 "새 마운트 지점 추가"를 인쇄하는 bash 스크립트를 통해 df 정보를 추적할 수 있는지 묻고 있습니다. 가능합니까?
답변1
출력을 보는 것은 df
출력이 안정적으로 처리될 수 없고 마운트된 모든 파일 시스템을 포함하지 않기 때문에 좋지 않은 생각입니다( -a
GNU 또는 busybox 구현 옵션을 사용하지 않는 한).
Linux( util-linux
2.20 이상) 에서는 findmnt -p
마운트 지점의 변경 사항을 폴링하는 데 사용할 수 있습니다.
poll(events=POLLPRI)
이 명령은 파일 설명자에서 읽기 전용 열기 작업을 수행하여 /proc/self/mountinfo
이벤트(마운트, 제거)가 발생하는 즉시 보고되도록 합니다. 그러나 이름이 바뀌는 마운트 지점은 감지하지 못합니다.
현재 마운트된 네임스페이스의 변경 사항만 감지합니다(Watching과 마찬가지로 df
).
답변2
다음과 같은 스크립트를 사용할 수 있습니다.
x=""
while :; do
df="$(awk '{print $1,$2}' /proc/mounts)" # only the first two fields are relevant
if [ "$x" != "$df" ]; then # only diff the contents when something has changed
diff <(echo "$df") <(echo "$x") \ # compare the two values
--unchanged-line-format='' \
--old-line-format='mounted: %L' \
--new-line-format='unmounted: %L'
fi
x="$df"
sleep 1 # can be increased
done
에 있는 정보를 바탕으로/proc/mounts
, 스크립트는 1초마다 반복되어 변경 사항을 확인합니다. diff
이전 값을 새 값과 비교하고 출력 형식을 지정합니다.
예를 들어 스크립트가 실행되면 출력은 다음과 같습니다.
mounted: //srv/share /mountpoint
unmounted: /dev/sdb1 /media