estou usando
mount -o bind /some/directory/here /foo/bar
Quero verificar /foo/bar
com um script bash e ver se ele foi montado. Se não, chame o comando de montagem acima, senão faça outra coisa. Como posso fazer isso?
CentOS é o sistema operacional.
Respostas:
Executar o
mount
comando sem argumentos informará as montagens atuais. Em um script de shell, você pode verificar o ponto de montagem comgrep
uma instrução if:No meu exemplo, a instrução if está verificando o código de saída de
grep
, que indica se houve uma correspondência. Como não quero que a saída seja exibida quando houver uma correspondência, estou redirecionando para/dev/null
.fonte
grep
retorna um status de saída diferente de zero se não houver correspondências. Não há necessidade do teste ou do subshell criado por $ ().if command | grep -q 'stuff'; then ...
mount | grep ...
mostrar a você que seu vínculo de montagem ainda está ativo. Se o dispositivo subjacente for desmontado e remontado, o bind de montagem não conectará mais os dois arquivos / diretórios, emboramount
ainda mostre que está conectado. E se você fizerumount ...
isso vai mesmo dizer que não está montado, emboramount
disse que estava. Grande falha no sistema de arquivos do Linux.readlink -f
, que não retorna nada quando o caminho / arquivo não existe. Se o / mount / path / to_file subjacente não estiver lá (por link de leitura), a montagem subjacente está quebrada (remonte a montagem subjacente e a vinculação). Se o arquivo subjacente estiver lá ereadlink -f
disser que a versão de vinculação desse arquivo não está lá, a vinculação foi interrompida, basta remontar a vinculação./mnt/md0xxx
assim, o comando indicará/mnt/md0
como montado enquanto o que não precisa ser ...Você não se preocupou em mencionar um O / S.
Ubuntu Linux 11.10 (e provavelmente as versões mais atualizadas do Linux) têm o
mountpoint
comando.Aqui está um exemplo em um de meus servidores:
Na verdade, no seu caso, você deve ser capaz de usar a
-q
opção, assim:Espero que ajude.
fonte
O manual do
mountpoint
diz que:O manual do
mount
diz que:Portanto, o comando correto a ser utilizado é
findmnt
, ele próprio parte doutil-linux
pacote e, de acordo com o manual:Portanto, ele realmente pesquisa mais coisas do que
mountpoint
. Ele também oferece a opção conveniente:Em resumo, para verificar se um diretório está montado com bash, você pode usar:
Exemplo:
fonte
Eu gosto das respostas que usam
/proc/mounts
, mas não gosto de fazer um grep simples. Isso pode gerar falsos positivos. O que você realmente quer saber é "alguma das linhas tem esta string exata para o campo número 2". Então, faça essa pergunta. (neste caso, estou verificando/opt
)fonte
mountpoint
oufindmnt
existe. Resposta muito simples, muita alegria, como UNIX :)Minha solução:
Exemplo:
Para a resposta de Mark J. Bobak ,
mountpoint
não funciona se montar combind
opção em sistema de arquivos diferente.Para a resposta de Christopher Neylan , não é necessário redirecionar a saída do grep para / dev / null, apenas use
grep -q
.O mais importante, canonize o caminho usando
readlink -f $mypath
:/path/to/dir/
terminar com barra invertida, o caminho de entrada/proc/mounts
oumount
saída é/path/to/dir
/var/run/
é o link simbólico de/run/
, portanto, se você montar o bind for/var/run/mypath
e verificar se ele foi montado, ele será exibido como/run/mypath
em/proc/mounts
.fonte
Outra solução limpa é assim:
Com certeza, 'echo something' pode ser substituído por qualquer coisa que você precise fazer para cada caso.
fonte
As respostas aqui são muito complicadas, basta verificar se a montagem existe usando:
cat /proc/mounts | tail -n 1
Isso gera apenas a última pasta montada, se você quiser ver todas elas, basta remover o comando tail.
fonte
No meu .bashrc, criei o seguinte alias:
fonte