Check if directory mounted with bash
You didn't bother to mention an O/S.
Ubuntu Linux 11.10 (and probably most up-to-date flavors of Linux) have the mountpoint
command.
Here's an example on one of my servers:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Actually, in your case, you should be able to use the -q
option, like this:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Hope that helps.
The manual of mountpoint
says that it:
checks whether the given directory or file is mentioned in the /proc/self/mountinfo file.
The manual of mount
says that:
The listing mode is maintained for backward compatibility only. For more robust and customizable output use findmnt(8), especially in your scripts.
So the correct command to use is findmnt
, which is itself part of the util-linux
package and, according to the manual:
is able to search in /etc/fstab, /etc/mtab or /proc/self/mountinfo
So it actually searches more things than mountpoint
. It also provides the convenient option:
-M, --mountpoint path
Explicitly define the mountpoint file or directory. See also --target.
In summary, to check whether a directory is mounted with bash, you can use:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Example:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
My solution:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Example:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
For Mark J. Bobak's answer, mountpoint
not work if mount with bind
option in different filesystem.
For Christopher Neylan's answer, it's not need to redirect grep's output to /dev/null, just use grep -q
instead.
The most important, canonicalize the path by using readlink -f $mypath
:
- If you check path such as
/path/to/dir/
end with backslash, the path in/proc/mounts
ormount
output is/path/to/dir
- In most linux release,
/var/run/
is the symlink of/run/
, so if you mount bind for/var/run/mypath
and check if it mounted, it will display as/run/mypath
in/proc/mounts
.
Running the mount
command without arguments will tell you the current mounts. From a shell script, you can check for the mount point with grep
and an if-statement:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
In my example, the if-statement is checking the exit code of grep
, which indicates if there was a match. Since I don't want the output to be displayed when there is a match, I'm redirecting it to /dev/null
.