Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.128 ]
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
Criando uma lixeira p/ o usuário
dep-info - verificar se o programa está instalado no sistema
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Instalação Uefi com o instalador clássico do Mageia [RESOLVIDO] (2)
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)