ler a linha completa em um loop do for

Quando efetuamos um for em shellscript, por padrão ele considera como delimitador espaços, quebras de linha ou tabulações, isso gera  uma dor de cabeça quando temos que tratar nomes e arquivos ou diretórios com espaços.

Para melhor compreensão, abaixo temos um diretório com três arquivos:

Ao efetuarmos um for, ele vai quebrar o último arquivo nos espaços, retornando 5 registros ao invés de 3.

Para solucionar essa questão, podemos utilizar a variável IFS para definir  qual caractere deve ser usado como delimitador.

 

Rastrear encomendas a aliexpress do tipo LPXXX

Essa vai pra todo viciado em compras na aliexpress.

Recentemente comprei um miiband pelo referido site, no frete estava como “aliexpress standar shipping” com tracking disponível. Porém recebi um código de rastreio com uma numeração que não me era familiar, um código de 16 dígitos que começava com a sigla LP e que não era rastreável no site dos correios.

Acompanhando o tracking direto no aliexpress, começou a acusar movimentação dentro do brasil, encaminhado de curitiba pra porto alegre, do centro de tratamento para o centro de distribuição, etc.

Isso me deixou intrigado, como o aliexpress poderia ter acesso a movimentação dentro dos correios com esse número não padrão?

O que me veio a cabeça foi uma antiga notícia, ao qual representantes do grupo alibaba teriam fechado um acordo com os correios (link), logo pensei que esse pacote deve ter ganho um número de tracking nacional ao chegar no brasil.

Pesquisando muito na internet, descobri que no site da directlink ao colocar o tracking de 16 digitos, ele exibe o número nacional nos resultados!

Resultado do tracking da directlink

A partir daí, foi só cadastrar o número brasileiro no muambator e aguardar sentado a entrega!

Criar um pendrive de instalação do windows a partir do linux

Depois que meu notebook queimou, fui obrigado a voltar a usar o desktop. máquina essa que estava dedicada pra patroa, com windows instalado e talz.

Depois de redimensionar as partições e fazer a instalação do linux, vou testar o boot no windows (afinal , não quero dormir no sofá) e me deparo com essa tela:

Com windows original, o azul é mais azul

Provavelmente o gparted destruiu o setor de boot do windows quando redimensionou a partição.

Até aí tudo bem, é fácil recuperar com um cd de instalação… porém:
– Meu drive de CD não funciona a muito tempo
– Não tenho outra máquina com windows pra gravar a iso num pendrive

Depois de uma bela fuçada na internet descobri um utilitário chamado woeusb que resolveu essa questão.

Pra instalar em sistemas derivados do ubuntu, é só adicionar esse ppa e instalar via APT

Depois de instalado, só abrir o programa, escolher o pendrive e a imagem (não esqueça de formatar o pendrive em ntfs antes)

A instalação demora uns 15 minutos, tem que ser paciente! =)

Mensagem exibida ao concluir o processo:

Depois disso, foi só bootar com o pendrive e seguir com os procedimentos usuais (instalação, recuperação, etc)

 

solução para cannot open display: :0 no ubuntu 17.10

Nesse final de semana, instalei o ubuntu 17.10 em um notebook, fui rodar o gaparted com sudo e eis que me deparo com esse erro:

Essa deu um pouco de trabalho pra solucionar, mas no fim, como habitual, resolvemos isso com um único comando.

Depois disso, todos os comandos estão rodando com sudo sem qualquer dificuldade =)

Trocar editor padrão no ubuntu

Quando o ubuntu é instalado, o editor padrão em linha de comando é o nano, porém um das primeiras coisas que sempre faço é instalar o vim.

Mas mesmo após instalar o vim, o editor padrão continua sendo o nano. Pra resolver isso é só usar o alternatives pra trocar o default.

Exemplo da saída do comando:

Basta escolher o editor pelo número e apertar enter. =)

Controle de cache com PHP

Para nunca fazer cache de uma página

Para fazer cache de 1 hora (3600 segundos)

 

Usuário de SFTP com chroot/jail

Hoje um usuário me pediu acesso ao “ftp” para algumas manutenções que não seriam possível pelo admin do wordpress, e, como bem sabemos, disponibilizar acesso aos arquivos para clientes pode se tornar um inferno caso não seja pensado primeiramente na segurança.

FTP? Nem pensar! Não vou deixar os dados trafegarem nos meus servidores em texto-plano, e usar FTPS iria gerar mais uma preocupação com certificados, datas de expiração etc.

Que tal SFTP? Protocolo criptografado por padrão, sem muita dor de cabeça, integrado direto no sistema operacional, etc ,etc.
Ok, mas e a segurança? Um usuário padrão conectado via SFP fica logado direto na raiz do SO, gerando mais uma preocupação com segurança. Não quero o usuário fuçando nos arquivos do servidor, afinal.

Uma rápida pesquisa e achei algumas alternativas como rssh e rush, mas fiquei horas e horas tentando configurar e testando sem nenhum sucesso, o máximo que consegui foram erros e mais erros.

bom, voltamos então ao oráculo, e eis que surge uma alternativa alterando o subsistema sftp direto no sshd_config que funcionou que é um relógio!

Pra começar, algumas informações importantes:

  • Utilizei como base o ubuntu server 16.04 LTS
  • Nesse ambiente, o arquivo de configuração fica em /etc/ssh/sshd_config, mas isso pode variar se você estiver utilizando outra distro.
  • Normalmente restartar o ssh não derruba sua sessão aberta, mas é bom ficar preparado caso algo errado aconteça
  • No artigo vamos considerar a seguinte situação:
    • Usuário: braz
    • Homedir: /home/braz
    • Todos os comandos são executados como root

E agora, sem mais delongas, mãos de cobra! Digo… Mãos à obra!

Primeiramente, é obrigatório que o diretório /home/braz esteja com usuário e senha root, pra garantir acesso dos usuário do cliente, vamos usar chmod 755.

O shell do usuário não precisa (e nem deve) ser /bin/bash, assim deixarei como /bin/false

A chave aqui será criar um grupo chamado sftponly, todo o usuário nesse grupo sofrerá chroot

Adicionamos o usuário braz ao grupo

Agora vamos editar o arquivo sshd_config.
Primeiramente, vamos comentar a seguinte linha (só colocar um # no começo)

A configuração-chave deve ser sempre depois da declaração do Pam.
Por via das dúvidas, coloque a config no final do arquivo que não tem erro =)

Se tudo esta certo, só restartar o ssh e partir pro abraço!

Removendo aplicações padrões no windows 10

O windows 10 vem carregado de bloatware, que não são usados pela maioria dos usuários.

Infelizmente não é possível removê-los através interface gráfica, então temos que recorrer ao powershell pra isso.

Nota: É necessário acessar o powershell como administrador, então é só abrir o menu “iniciar” digitar “powershell”, clicar com o botão direito e selecionar “Executar como administrador”

 

Remover 3D Builder:

Get-AppxPackage *3dbuilder* | Remove-AppxPackage

Remover Alarms and Clock:

Get-AppxPackage *windowsalarms* | Remove-AppxPackage

Remover Calculadora:

Get-AppxPackage *windowscalculator* | Remove-AppxPackage

Remover Calendario and Mail:

Get-AppxPackage *windowscommunicationsapps* | Remove-AppxPackage

Remover Camera:

Get-AppxPackage *windowscamera* | Remove-AppxPackage

Remover Contact Support:

Não pode ser removido

Remover Cortana:

Não pode ser removido

Remover Get Office:

Get-AppxPackage *officehub* | Remove-AppxPackage

Remover Get Skype:

Get-AppxPackage *skypeapp* | Remove-AppxPackage

Remover Get Started:

Get-AppxPackage *getstarted* | Remove-AppxPackage

Remover Groove Music:

Get-AppxPackage *zunemusic* | Remove-AppxPackage

Remover Maps:

Get-AppxPackage *windowsmaps* | Remove-AppxPackage

Remover Microsoft Edge:

Não pode ser removido

Remover Microsoft Solitaire Collection:

Get-AppxPackage *solitairecollection* | Remove-AppxPackage

Remover Money:

Get-AppxPackage *bingfinance* | Remove-AppxPackage

Remover Movies & TV:

Get-AppxPackage *zunevideo* | Remove-AppxPackage

Remover News:

Get-AppxPackage *bingnews* | Remove-AppxPackage

Remover OneNote:

Get-AppxPackage *onenote* | Remove-AppxPackage

Remover People:

Get-AppxPackage *people* | Remove-AppxPackage

Remover Phone Companion:

Get-AppxPackage *windowsphone* | Remove-AppxPackage

Remover Photos:

Get-AppxPackage *photos* | Remove-AppxPackage

Remover Store:

Get-AppxPackage *windowsstore* | Remove-AppxPackage

Remover Sports:

Get-AppxPackage *bingsports* | Remove-AppxPackage

Remover Voice Recorder:

Get-AppxPackage *soundrecorder* | Remove-AppxPackage

Remover Weather:

Get-AppxPackage *bingweather* | Remove-AppxPackage

Remover Windows Feedback:

Não pode ser removido

Remover Xbox:

Get-AppxPackage *xboxapp* | Remove-AppxPackage

Rollback:

Pra reinstalar todos os apps:

Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

Variáveis padrão no shell

O shell possui diversas variáveis padrões que podem ser usadas pra facilitar o desenvolvimento.

$SHELL –Retorna  oshell Atual

$HISTSIZE – Retorna o numero de comandos que podem ser alocados no arquivo “history”

$HISTFILE – Obter o local do arquivo History

$USER –Retorna o username

$EUID – Retorna o UserID.

$GROUPS – Retorna informações sobre o GID.

$PWD – Retorna o diretório atual

$HOSTNAME – Retorna o hostname completo da maquina.

$HOME – Retorna o diretório home do usuário atual

$HOSTTYPE ou $MACHTYPE – Para obter a arquitetura da maquina (ex: 32bit ou 64 bit).

$OSTYPE – Detecta o Sistema Operacional (Ex: GNU/Linux, sun, etc.).

$TERM – Retorna o nome de sue terminal (ex: xterm-256color).

$TMOUT – Setar essa variável com um valor numérico para definir auto-desconexão por inatividade no shell

$PATH – Obtém o path do sistema

$PIPESTATUS – Retorna o status de uma saida de pipe

$BASH_VERSION – Obtém a versão do Bash

$PPID – Obtém o ID do processo pai

$PS1, $PS2, $PS3, $PS4 – Variaveis passadas por parâmetrop em um script shell

Dentro de um script:
$RANDOM – Obtém um número aleatório

$LINENO – Obtem o numero da linha que o script esta executando. Útil para debug

$REPLY – REPLY mantém o último valor lido.

$SECONDS – Para obter a quantos segundos o script está rodando

Parâmetros posicionais: $1, $2, $3, $4, $5, $6, $7, $8, $9

$0 –Obtém o nome do script

$* –Todos os parâmetros posicionais

[email protected] Todos os parâmetros posicionais, separados por espaço

$# –Número de parâmetros

$$ –PID atual

$! –ID de uma tarefa em background

$? –Status de saída ou de erro

$_ – Obtém o argumento do comando anterior

Renomear chave de deploy no gitlab

Enquanto não sai o merge request, a atualização do nome da deploy key tem que ser direto no banco.

Numa instalação padrão, conectamos no banco pgsql via linha de comando:

 Depois localizamos o ID da chave (nesse caso eu exibi todas) e fazemos um update pelo id

 Simples, não? =)