https://gustavokalau.com.br/
Portal Linux
quinta-feira, 6 de fevereiro de 2025
quarta-feira, 15 de janeiro de 2025
O comando join
O comando join
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 12 de janeiro de 2025
Fonte: https://www.dicas-l.com.br/
O comando join no Linux é uma ferramenta poderosa para combinar linhas de dois arquivos com base em um campo comum. É particularmente útil quando você precisa mesclar dados de diferentes fontes.
A sintaxe básica do comando é:
$ join [OPÇÕES] ARQUIVO1 ARQUIVO2
O join funciona comparando os campos especificados em ambos os arquivos e, quando encontra uma correspondência, combina as linhas dos dois arquivos. Por padrão, ele usa o primeiro campo de cada arquivo como chave de junção.
É importante notar que, para o join funcionar corretamente, os arquivos devem estar ordenados pelo campo de junção. Vamos explorar alguns exemplos práticos para entender melhor como o join funciona.
Imagine que temos dois arquivos: funcionarios.txt e salarios.txt.
O arquivo funcionarios.txt contém:
1 João
2 Maria
3 Pedro
E o arquivo salarios.txt contém:
1 3500
2 4000
3 3800
Para juntar estes arquivos, usamos o comando:
$ join funcionarios.txt salarios.txt
O resultado será:
1 João 3500
2 Maria 4000
3 Pedro 3800
Agora, vamos considerar um cenário onde o campo de junção não é o primeiro. Temos um arquivo departamentos.txt:
RH 1 João
TI 2 Maria
MKT 3 Pedro
Para juntar este arquivo com salarios.txt, usamos:
$ join -1 2 -2 1 departamentos.txt salarios.txt
O resultado será:
1 RH João 3500
2 TI Maria 4000
3 MKT Pedro 3800
O join também permite incluir linhas que não têm correspondência. Imagine que temos um arquivo funcionarios_extra.txt:
1 João
2 Maria
3 Pedro
4 Ana
Para incluir todos os funcionários, mesmo os sem salário, usamos:
$ join -a 1 funcionarios_extra.txt salarios.txt
O resultado será:
1 Joãoo 3500
2 Maria 4000
3 Pedro 3800
4 Ana
Podemos também formatar a saída do join. Por exemplo:
$ join -o 1.2,2.2,1.1 funcionarios.txt salarios.txt
Isso resultará em:
João 3500 1
Maria 4000 2
Pedro 3800 3
O join também pode ignorar diferenças de maiúsculas e minúsculas. Se tivermos um arquivo nomes.txt:
1 JOÃO
2 MARIA
3 PEDRO
Podemos usar:
$ join -i nomes.txt salarios.txt
E o resultado será:
1 JOÃO 3500
2 MARIA 4000
3 PEDRO 3800
Algumas dicas adicionais: se os arquivos não estiverem ordenados, você pode usar o comando sort antes do join.
Por exemplo:
$ join <(sort funcionarios.txt) <(sort salarios.txt)
Para juntar múltiplos arquivos, você pode usar o join em cascata:
$ join funcionarios.txt salarios.txt | join - departamentos.txt
E se seus arquivos usarem um delimitador diferente, como vírgulas em arquivos CSV, você pode especificar isso com a opção -t:
$ join -t, funcionarios.csv salarios.csv
O comando join é uma ferramenta versátil para combinar dados de diferentes arquivos no Linux. Com prática, você pode usá-lo para realizar operações complexas de mesclagem de dados diretamente no terminal. Lembre-se sempre de verificar se os arquivos estão ordenados corretamente pelo campo de junção antes de usar o join, para garantir resultados precisos e evitar problemas comuns.
quinta-feira, 20 de maio de 2021
Redução do tamanho de vídeos para postagem em redes sociais
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 29 de junho de 2020
A maioria das redes sociais impõem limites ao tamanho de vídeos publicados. O Whatsapp, por exemplo, impõe um limite de 64MB aos arquivos enviados.
Como então converter os vídeos para que se adequem às normas das diferentes redes?
A solução é recorrer mais uma vez ao poderoso ffmpeg.
Entender todas as opções deste programa é tarefa para uma vida inteira, mas para reduzir o tamanho de um vídeo, sem perda de qualidade, a sintaxe do ffmpeg é muito simples:
terça-feira, 26 de março de 2019
O "Jamming"
domingo, 3 de fevereiro de 2019
Automatização de tarefas com crontab e cron
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 19 de janeiro de 2018
Sem sombra de dúvida, um complemento fundamental para shell scripts, é a possibilidade de agendamento de tarefas. Com este recurso, propiciado pelos aplicativos cron e crontab, a tarefa de administração de sistemas fica grandemente facilitada. Eu mantenho cinco portais (Dicas-L, Contando Histórias, Aprendendo Inglês, Inglês Instrumental e o portal do Instituto de Desenvolvimento do Potencial Humano). Todas as tarefas de manutenção destes portais são feitas por meio de shell scripts, com execução automatizada por meio do cron. O envio das mensagens, a publicação das páginas, o backup do banco de dados, a cópia de segurança de todo o portal para outro servidor, a verificação da taxa de ocupação de espaço em disco, alertas em caso de uso excessivo de CPU e muito mais. Em suma, automatizei tudo que pude, caso contrário seria impossível cuidar de tantos portais.
A automatização de tarefas em sistemas GNU/Linux é feita por meio de dois programas: crontab e cron. Além destes programas, temos também, para cada usuário, um arquivo chamado crontab, que é o local onde são gravadas as diretivas que serão seguidas pelo cron. O arquivo crontab é editado pelo comando crontab. Os arquivos crontab dos usuários são gravados no diretório /var/spool/cron/crontabs.
O formato do arquivo crontab
Uma linha do arquivo crontab possui o seguinte formato:
0 6 * * * comandoOs cinco primeiros campos determinam a periodicidade de execução do comando. Abaixo segue uma explicação do significado de cada um destes campos:
Campo | Significado | Valores |
---|---|---|
1 | Minutos | 0 a 59 |
2 | Hora | 0 a 23 |
3 | Dia do mês | 1 a 31 |
4 | Mês | 1 a 12 |
5 | Dia da semana | 0 a 7, sendo que os números 0 e 7 indicam o domingo |
6 | Comando a ser executado | qualquer comando válido do sistema |
0 20 * * 1-5 comandoO comando será executado de segunda a sexta (1-5), exatamente às 20h.
10 10 1 * * comandoO comando será executado às 10h10, do dia 1º de todos os meses.
0,10,20,30,40,50, * 31 12 * comando
No dia 31 de dezembro, o comando será executado a cada dez minutos, o dia inteiro. Sempre que um campo for preenchido com o asterisco, significa que aquele campo assumirá todos os valores possíveis.
Podemos abreviar esta notação, em vez de especificar cada um dos minutos, podemos fazer da seguinte forma:
*/10 * 31 12 * comando
Os dias da semana podem também ser indicados por sua abreviação: sun, mon, tue, wed, thu, fri, sat.
Prosseguindo ...
* * * * * comando
Esta linha da crontab fará com que o comando seja executado todos os minutos, de todos os dias, de todos os meses. É apenas um exemplo, não faça isto, a não ser que tenha uma razão muito boa para tal.
Isto é o básico, mas o aplicativo cron oferece mais alguns recursos muito úteis. A tabela abaixo relaciona mais alguns parâmetros que podemos usar na crontab com seu significado:
Parâmetro | Descrição | Equivale a |
---|---|---|
@reboot | ocorre ao iniciar o computador | — |
@yearly | ocorre 1 vez ao ano | 0 0 1 1 * |
@annually | o mesmo que @yearly | 0 0 1 1 * |
@monthly | ocorre 1 vez ao mês | 0 0 1 * * |
@weekly | ocorre 1 vez na semana | 0 0 * * 0 |
@daily | Executa uma vez ao dia | 0 0 * * * |
@midnight | mesmo que @daily | 0 0 * * * |
@hourly | ocorre 1 vez a cada hora | 0 * * * * |
A diretiva @reboot é particularmente útil, pois em cada sistema nós temos tarefas que precisam ser executadas quando da inicialização da máquina e este parâmetro é um atalho muito conveniente para representar estas atividades.
Para utilizar estes parâmetros, bastam dois campos: o parâmetro em si e o nome do comando. Por exemplo, para executar o backup do banco de dados diariamente, acrescente a seguinte linha ao arquivo crontab:
@daily /usr/local/bin/db_backup.sh
O script db_backup.sh deve ser criado pelo administrador com as diretivas apropriadas para o backup do banco de dados.
Importante, se o seu computador não estiver no ar quando do horário da execução do comando, o cron não fará um novo agendamento, esta situação precisa ser tratada manualmente. A única exceção é a diretiva @reboot, que faz com que o comando especificado seja executado quanto a máquina for ligada.
Edição da crontab
$ crontab -e
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Todas as linhas iniciadas por # são comentários, e você pode removê-las quando quiser, sem problema algum.
O arquivo crontab será aberto utilizando o editor de sua preferência. Você pode definir esta preferência através da variável de ambiente EDITOR:export EDITOR=vi
Se você não conhece o vi, pode usar o nano, que é um editor mais amigável, embora com muito menos recursos.
Caso deseje apenas listar o conteúdo do arquivo crontab, digite:
$ crontab -lO usuário root pode editar diretamente a crontab dos usuários do sistema que administra. Para isto basta executar o comando:
# crontab -u [nome do usuário] -e
IMPORTANTE: não é só colocar o comando na crontab e esquecer da vida, precisamos gerar alertas ou verificar a saída gerada pelo arquivo para ver se tudo deu certo.
Por padrão, o cron envia para o usuário um email com o resultado do comando. Através da análise destas mensagens, podemos decidir o que fazer.
Caso queiramos que o email seja enviado para um outro usuário, podemos definir, no arquivo crontab, a variável MAILTO:
MAILTO="admin@mydomain.com"E se eu errar na edição da crontab, corro o risco de perder alguma coisa? Fique tranquilo, sempre que você gravar a crontab, se houver algum erro de sintaxe, o sistema te avisa, não grava as alterações e te pergunta se você quer refazer a edição:
$ crontab -e
crontab: installing new crontab
"/tmp/crontab.KA6PeR/crontab":24: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
Não se esqueça, sempre coloque o caminho completo do comando, visto que a variável PATH da execução do comando via cron é diferente daquela do seu ambiente.
quinta-feira, 2 de agosto de 2018
Correios e Telégrafos - Alguém ainda acredita?
Por Rubens Queiroz de Almeida
Data de Publicação: 20 de Março de 2011
Por alguns anos eu venho tendo uma experiência bastante peculiar com o serviço dos Correios em minha cidade. Neste mês, vejam só o que ocorreu:
Documento | Data de Vencimento | Data de Entrega pelos Correios | |
---|---|---|---|
Telefônica | 14/03/2011 | 18/03/2011 | |
Embratel | 10/03/2011 | 18/03/2011 | |
Submarino | 15/03/2011 | 18/03/2011 | |
Sem Parar | 10/03/2011 | 18/03/2011 | |
Comunicado Bancário | 04/03/2011 | 18/03/2011 | |
Oi Celular | 16/03/2011 | 18/03/2011 |
Isto é o que ocorreu este mês (março de 2011), mas isto ocorre praticamente todos os meses. Paguei muita multa por conta disto. Vejam só, todas as correspondências foram entregues no dia 18 de março. Parece que juntaram tudo para entregar em um único dia. Estão otimizando o processo. Mas já é um progresso, antes nem entregavam. Outro fato interessante, o carteiro enfiava dentro da minha caixa postal a correspondência da rua inteira. Eu então, como bom cidadão que sou, fazia a entrega nas demais casas. Ao que parece, isto não aconteceu só comigo. Um amigo de Brasília relatou o mesmo fato. Reclamei com a ouvidoria dos Correios e felizmente esta prática foi interrompida.
Pode ser que isto seja apenas um problema localizado, talvez apenas comigo, ou apenas na minha rua. Mas uma correspondência que recebi do Submarino no dia 11 de março, me faz suspeitar que este problema seja generalizado:

Vejam só a mensagem: se a fatura não chegou, não se preocupe, é só emitir uma outra no site da empresa.
E tem mais, vamos ao mundo real. Alguns meses atrás, tive que ir na agência pegar uma encomenda. A fila estava grande e chegou o fim do expediente às 17h. Ainda havia umas 8 ou dez pessoas aguardando sua vez. Saiu então dos fundos da agência um "solícito" funcionário que começou a perguntar a cada um de nós o que estava aguardando. Eu, que era um dos últimos, só vi as pessoas saindo uma a uma, sem serem atendidas. Na minha vez, o funcionário perguntou o que eu ia fazer. Disse que ia pegar uma encomenda. Ele me perguntou se eu tinha o aviso dos correios. Eu disse que não, pois esperava poder pegar a encomenda fornecendo meu endereço e um documento. Ele me disse então que isto era impossível, que para pegar a encomenda só se eu tivesse o aviso. Fui então, junto com os demais, embora. Voltei no outro dia, com o aviso dos Correios. Ao chegar a minha vez, perguntei ao atendente se era possível pegar a encomenda fornecendo um documento e o meu endereço. A resposta foi: "É claro, com os seus dados pessoais conseguimos localizar perfeitamente qualquer encomenda dentro da agência". É um caso típico de exploração da humildade e desconhecimento da maioria da população para desrespeitar nossos direitos. Todos, inclusive eu, foram para casa sem falar nada.
E tem mais, se você tem uma correspondência importante, que você precisa garantir a entrega ao destinatário, qual a sua opção? Sedex, claro. Neste mes, para enviar um envelope com duas folhas, de Campinas para Brasília, paguei aproximadamente R$ 35,00. Era isto ou conviver com a incerteza quanto ao destino do meu documento. Pelo ocorrido com as correspondências da minha vizinhança, realmente é de dar medo. E no final das contas, acabamos mesmo desembolsando o valor estratosférico do SEDEX para garantir aquilo que deveria ser obrigatório para toda e qualquer correspondência: a certeza de chegar ao destino.
No dia 3 de outubro de 2008, após um total desapontamento com o serviço Claro 3G, eu escrevi o artigo Conexão Banda Larga Claro 3g, em que relatei minhas experiências e também como usei a busca no Google, com algumas palavras mágicas, para fazer uma avaliação da qualidade do serviço. Para o serviço Claro 3g, o total de resultados obtidos foi 121.000. Um outro provedor de serviços notório, a Telefônica, retornou 154.800 resultados. Vamos agora ver como o serviço dos Correios se sai em uma enquete similar:
Argumento de busca
Resultados | ||
---|---|---|
correios merda | 48.700 | |
correios bosta | 164.000 | |
correios porcaria | 25.300 | |
correios lixo | 323.000 | |
TOTAL | 561.000 |
Os Correios ganham de longe, 3,5 mais reclamações do que a Telefônica e 4,6 vezes mais que o serviço Claro 3G.
É claro que, sempre que possível, coloco as minhas contas no débito automático, para evitar o serviço porco dos Correios. Sempre que possível, peço também para que não me enviem correspondência, pois sinto que é dinheiro jogado fora e um desperdício imprimir faturas que não me servem para nada. Mas reconheço que isto não é o correto. Devemos reclamar para termos um serviço que é um direito de todos nós. Se o Facebook, Twitter, etc, estão derrubando as ditaduras do Oriente Médio e da África do Norte, podemos tentar melhorar o serviço de uma empresa tão importante para todos nós, como os Correios. Nasci em 1960 e durante grande parte da minha vida eu sempre ouvi as pessoas se referirem a esta empresa com respeito e admiração. Da mesma forma, havia um respeito pelos funcionários dos Correios e pelos carteiros. É doloroso ver como as coisas mudaram.
Espero que algo seja feito.
sexta-feira, 20 de julho de 2018
Senhas da rede wifi de mais de 130 aeroportos no mundo
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 20 de julho de 2018
Para quem vai viajar, vale a pena verificar o endereço http://bit.ly/airportwifimap
Esta página contém a relação de mais de 130 aeroportos no mundo e instruções sobre como acessar suas redes wifi.
A tela abaixo contém as informações do aeroporto de Guarulhos:

Referências