Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Descobrindo em que partição reside um arquivo ou diretório
Colaboração: Juan Carlos Castro y Castro
Data de Publicação: 16 de September de 2008
Esta função para shell script retorna em que dispositivo (partição, compartilhamento remoto etc.) reside um arquivo ou diretório. Útil para determinar se uma operação de "move" de um diretório por outro será "atômica" ou se o SO será obrigado a fazer uma cópia e apagar o original. Também pode ser usada para descobrir se um determinado arquivo está num HD local ou num ponto de montagem remoto.
whichfs () {
if ! LANG=C df -P "$1" >/tmp/whichfs.$$ 2>&1; then
LANG=C df -P "`dirname $1 2>/dev/null`" >/tmp/whichfs.$$ 2>&1
fi
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
tail -n +2 /tmp/whichfs.$$ | cut -d ' ' -f 1
RETVAL=$?
fi
rm -f /tmp/whichfs.$$
return $RETVAL
}
Exemplos de uso:
if [ `whichfs /home` = `whichfs /` ]; then
echo "home em partição separada"
else
echo "home na partição raiz"
fi
if [ `whichfs $ARQ_ORIGEM` = `whichfs $ARQ_DESTINO` ]; then
mv $ARQ_ORIGEM $ARQ_DESTINO
else
echo "PERIGO: sistema está tentando mover '$ARQ_ORIGEM' para um filesystem diferente."
fi
if whichfs "$DIR_DESTINO" | grep ^/dev >/dev/null; then
echo "Este diretório fica nesta máquina"
elif whichfs "$DIR_DESTINO" | grep ^// >/dev/null; then
echo "Este diretório fica num compartilhamento Windows remoto"
elif whichfs "$DIR_DESTINO" | grep '^[^/].*:/' >/dev/null; then
echo "Este diretório fica num compartilhamento NFS remoto"
else
echo "Nao faço a mais vaga idéia de onde esta %@#&* fica."
fi
Estou consciente de que existe uma maneira melhor de fazer isto, usando
funções em C, como o utilitário df sem dúvida deve fazer para exibir
a sua saída. Se algum visitante souber como fazer isso, a informação será
bem-vinda nos comentários.
Tutorial de atualização do OpenBSD
Colaboração: Geison Porfirio
Tutorial sobre atualização de versão do OpenBSD.
Referência: http://www.openbsd-br.org/?q=node/71
Veja a relação completa dos artigos de Juan Carlos Castro y Castro
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
16 Set 2008, 10:30
16 Set 2008, 08:42
whichfs () {
LANG=C df -P "$1" | awk '/%/{print $6}'
return $PIPESTATUS
}
A variável PIPESTATUS contém o código de erro do comando à esquerda do pipe.
16 Set 2008, 07:42
<pre>
scherrer@home:~/ man df
DF(1) User Commands DF(1)
NAME
df - report file system disk space usage
SYNOPSIS
df [OPTION]... [FILE]...
DESCRIPTION
This manual page documents the GNU version of df. df displays the
amount of disk space available on the file system containing each file
name argument.
...
</pre>
Logo:
<pre>
</pre>
scherrer@home:~$ df .bash_history
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 48070504 44058552 1570072 97% /
scherrer@home:~$ df instalacoes
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 46149444 37885828 5919332 87% /mnt/sda2
</pre>
Repare a coluna "Mounted on", o .bash_history está no meu / e o diretório instalacoes está no meu /mnt/sda2. Como é um df, temos também o Filesystem onde o arquivo está, se for um compartilhamento samba vai aparecer a origem também.
Valeu.
13 Set 2008, 23:00
E parabéns!












