Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.355 ]
Creio que este script sirva mais para curiosidade/estudo do que para ser utilizado cotidianamente, mas, talvez seja útil a alguém.
Basicamente o NTN (nome dado a simples falta de criatividade: Não Tem Nome) grava arquivos utilizando o dd, em conjunto com isso é gerado o que chamo de "header" (que será gravado junto com o arquivo desejado na mídia removível) que identifica o nome e tamanho do arquivo em questão (nos seus primeiros 30 bytes), para quando formos copiar o arquivo de volta para o HD (por exemplo) possamos saber exatamente o ponto em que o arquivo se encontra no pendrive. (afinal, estamos trabalhando na ausência de um FS).
Um ponto interessante de gravar arquivos desta maneira, é que apenas quem estiver de posse do NTN (e souber que o pendrive possua arquivos) poderá extraí-los de lá, afinal, nenhum S.O. irá conseguir montar a unidade.
O script em si permite a gravação de apenas um único arquivo, mas comprimindo podemos colocar a quantidade que bem entendermos.
O código em si é simples de entender, mas fico a disposição para eventuais dúvidas que possam ter.
* Peço desculpas a eventuais erros e POGs no script, afinal, esse é o meu primeiro (de muitos) Shell Script.
#!/bin/bash
clear
echo "------------------------------------------------"
echo " NTN v1.1, by Davidson "
echo "------------------------------------------------"
echo "################################################"
echo "# Nao utilize o disco rigido como destino #"
echo "# para armazenamento e ao utilizar pendrives #"
echo "# certifique-se de realizar backup. #"
echo "# #"
echo "# Um metodo alternativo seria criar um arquivo #"
echo "# como destino para o armazenamento. #"
echo "################################################"
echo ""
function gravar()
{
echo ""
echo "Digite o nome do arquivo:"
read arq2
while [ ${#arq2} -gt 17 ]
do
echo "Nome muito grande, por favor renomeie para um menor!"
read arq2
done
echo "Digite o caminho do dispositivo destino:"
read destino
echo ""
echo "Criando header..."
echo $(du -b $arq2 | cut -f1 -s) > .htmp
tamanho=$(wc -m .htmp | cut -d' ' -f1)
tamanho=$((10-$tamanho));
#Obtencao/criacao do campo tamanho
rm .h 2&>/dev/null
while [ $tamanho -gt 0 ]
do
echo -n "0" >> .h
tamanho=$(($tamanho-1));
done
cat .htmp >> .h
rm .htmp
#Obtencao/criacao do campo nome arquivo
echo "" >> .h
tamanho=$((17-${#arq2}));
while [ $tamanho -gt 0 ]
do
echo -en "0" >> .h
tamanho=$(($tamanho-1));
done
echo -en "\t" >> .h
echo $arq2 >> .h
#Gravacao no dispositivo
echo ""
echo "------------------------"
echo "Gravando header..."
dd status=noxfer conv=notrunc if=./.h of=$destino 2>/dev/null
echo ""
echo "Gravando arquivo..."
dd status=noxfer conv=notrunc if=./$arq2 of=$destino bs=1 obs=1 seek=30 2>/dev/null
echo "------------------------"
rm .h
}
function ler()
{
echo ""
echo "Digite o caminho do dispositivo:"
read origem
echo ""
echo "------------------------"
echo "Lendo header..."
dd status=noxfer if=$origem of=.h bs=1 count=30 2>/dev/null
echo ""
echo "Gravando arquivo..."
dd status=noxfer if=$origem of=$(tail -n1 .h | cut -f2 -s) bs=1 ibs=1 skip=30 count=$(head -n1 .h) 2>/dev/null
echo "------------------------"
rm .h
}
function criar_arquivo()
{
echo ""
echo "Qual do arquivo a ser gerado? i.e: 1K/2K... 1M/10M..."
read opt
echo ""
echo "Gerando arquivo..."
dd status=noxfer if=/dev/zero of=arq.bin bs=$opt count=1 2>/dev/null
}
echo "Deseja criar um arquivo para armazenamento(S/N) ?"
read opt
if [ $opt == 'S' ]
then
criar_arquivo
fi
echo ""
echo "Deseja ler(1) ou escrever(2)?"
read opt
if [ $opt -eq 1 ]
then
ler
else
if [ $opt -eq 2 ]
then
gravar
fi
fi
del_user - cuida dos 4 passos para remover um usuário do sistema
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)
PIP3 - erro ao instalar módulo do mariadb para o Python (9)









