Reputation: 45320
I am using
mount -o bind /some/directory/here /foo/bar
I want to check /foo/bar
though with a bash script, and see if its been mounted? If not, then call the above mount command, else do something else. How can I do this?
CentOS is the operating system.
Upvotes: 120
Views: 190701
Reputation: 14385
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
Upvotes: 212
Reputation: 4264
The answers here are too complicated just check if the mount exists using:
cat /proc/mounts | tail -n 1
This only outputs the last mounted folder, if you want to see all of them just remove the tail command.
Upvotes: 1
Reputation: 70319
I like the answers that use /proc/mounts
, but I don't like doing a simple grep. That can give you false positives. What you really want to know is "do any of the rows have this exact string for field number 2". So, ask that question. (in this case I'm checking /opt
)
awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts
# and you can use it in and if like so:
if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then
echo "yes"
else
echo "no"
fi
Upvotes: 5
Reputation: 5106
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
:
/path/to/dir/
end with backslash, the path in /proc/mounts
or mount
output is /path/to/dir
/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
.Upvotes: 2
Reputation: 7933
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"
Upvotes: 70
Reputation: 19
In my .bashrc, I made the following alias:
alias disk-list="sudo fdisk -l"
Upvotes: -6
Reputation: 164
Another clean solution is like that:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
For sure, 'echo something' can be substituted by whatever you need to do for each case.
Upvotes: 0
Reputation: 8272
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
.
Upvotes: 82