Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.141 ]
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
xamore - um "more" simples em Xdialog
ison - testar conectividade da máquina
Backup MySQL Incremental via RSYNC/FTP
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (11)