Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.029 ]
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
Backup automatico em dois computadores via local e NFS
BKP Completo Sem compactação (com exclusao)
Screenshot automático em Shell Script
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Não consigo acessar os modos de desempenho (2)
Ubuntu — tentando iniciar o windows? (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba