Mostrando postagens com marcador linux. Mostrar todas as postagens
Mostrando postagens com marcador linux. Mostrar todas as postagens

terça-feira, 20 de dezembro de 2022

Linux / Bash - Copiar apenas a Estrutura de Diretórios

No Linux/bash para copiar uma estrtura de diretório, pode-se usar o comando abaixo. Para tanto, deve-se estar no diretório de origem:

find -type d -links 2 -exec mkdir -p "/path/to/backup/{}" \;


Dica orginal de: http://devblog.drall.com.br/como-copiar-somente-uma-estrutura-de-diretorios-sem-os-arquivos-no-linux

domingo, 15 de dezembro de 2019

Docker - Comandos Úteis

Obter imagem do Docker Hub
Sintaxe: docker pull <image>
Exemplo: docker pull mysql/mysql-server:5.7 

Lista imagens instaladas
Sintaxe: docker image

Cria e executa o container, atribuindo a este um <nome>. Caso necessário efetua o download do Docker Hub. A opção -d indica que o container deverá executar em background.
Sintaxe: docker run --name=<nome> -d <imagem>
Exemplo: docker run --name=mysql1 -d mysql/mysql-server:5.7

Para a execução de um container <nome>.
Sintaxe: docker stop <nome>
Exemplo: docker stop mysql1

Inicia a execução de um container <nome>.
Sintaxe: docker start <nome>

Exemplo: docker start mysql1

Para e inicia a execução de um container <nome>.
Sintaxe: docker restart <nome>


Exemplo: docker restart mysql1

Lista containers. A opção -a indica que devem ser listados TODOS containers, inclusive os que não estão em execução.
Sintaxe: docker ps -a

Log do Container <nome>.
Sintaxe: docker logs <nome>
Exemplo: docker logs mysql1

Executar um comando dentro do Container <nome>.Sintaxe: docker exec -it <nome> <comando>
Exemplos: 
docker exec -it mysql1 mysql -uroot -p
docker exec -it mysql1 bash

Apaga/remove um  Container <nome>Sintaxe: docker rm <nome>
Exemplo: docker rm mysql1

Apaga/remove a Imagem de um  Container <imagem> docker rmi <imagem>

sexta-feira, 17 de agosto de 2018

Bash - Exemplos de Pesquisa de Arquivos - FIND

Para listarmos os arquivos que foram alterados há menos de NN dias, podemos usar o find, conforme abaixo:

find . -type f -ctime -NNN -name '*'  -printf "%p %C+\n"

onde:
-NNN dias (por exemplo - 30 dias, alterados há 30 dias ou menos)
+NNN dias (por exemplo - 30 dias, alterados há 30 dias ou mais)

Exemplo:
find . -type f -ctime -150 -name '*.aspx.cs'  -printf "%p %C+\n"

listar arquivos com extensão *.aspx.cs alterados há 150 dias ou menos

Para listarmos os arquivos que foram alterados desde o dia XX, que atendam uma determinada nomenclatura (exceto uma em particular), podemos usar o find, conforme abaixo:

find . -type f -newermt "DATA" -name "*" -a ! -name "*" -print

onde:
Data é a data (por exemplo Feb 7)

Exemplo:
find . -type f -newermt "Feb 7" -name "GMUD2018*_CONFERENCIA_PROCEDURE*.sql" -a ! -name "GMUD201800000025*" -print


listar todos os arquivos "GMUD2018*_CONFERENCIA_PROCEDURE*.sql", exceto "GMUD201800000025*" alterados desde 7 Fev

quarta-feira, 6 de abril de 2016

Instalação de Pacotes em "R" - CentOs/Fedora

Caso esteja recebendo a seguinte mensagem de erro na instalação de pacotes no "R":

--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) : 
  unsupported URL scheme
Warning: unable to access index for repository https://cran.rstudio.com/src/contrib:

  unsupported URL scheme

Utilizar a sintaxe:

install.packages(<package_name>, dependencies=TRUE, repos='http://cran.rstudio.com/')

Exemplo:

install.packages('ggplot2', dependencies=TRUE, repos='http://cran.rstudio.com/')


quinta-feira, 10 de março de 2016

Linux - Permissão de Arquivos

chmod 400 file - Read by owner
chmod 040 file - Read by group
chmod 004 file - Read by world 

chmod 200 file - Write by owner
chmod 020 file - Write by group
chmod 002 file - Write by world

chmod 100 file - execute by owner
chmod 010 file - execute by group
chmod 001 file - execute by world

Comuns:
777 - Liberado para todos para LER, GRAVAR e EXECUTAR
555 - Liberado para todos para LER e EXECUTAR
666 - Liberado para todos para LER e GRAVAR
444 - Liberado para todos para LER
222 - Liberado para todos para GRAVAR
111 - Liberado para todos para EXECUTAR

755 - Acesso completo para o Proprietário (owner) e aos demais permitido ler e executar;
775 - Acesso completo para o Proprietário (owner) e para membros do grupo; aos demais ler e executar;
750 - Acesso completo para o Proprietário (owner); para membros do grupo é permitido ler e executar e proibido acesso aos demais usuários;


quinta-feira, 19 de março de 2015

CentOS - Windows Terminal Server Client

Para conectar em servidor Windows a partir de uma distribuição CentOS pode-se usar os pacotes:

rdesktop -  X client for remote desktop into Windows Terminal Server
tsclient - Client for VNC and Windows Terminal Server



quarta-feira, 28 de janeiro de 2015

SELinux - Desabilitar

SELinux (http://pt.wikipedia.org/wiki/SELinux)

Para desabilitar de maneira definitiva:

Alterar no arquivo  /etc/selinux/config, a linha:

SELINUX=enforcing

para

SELINUX=disabled

Desabilitar apenas na sessão atual (após o próximo boo voltará a ficar ativo):
setenforce 0

Verificar o status do SELinux:
selinuxenabled; echo $?

onde 0 - habilitado

terça-feira, 27 de janeiro de 2015

GNOME 3

As configurações de ambiente e dos aplicativos do GNOME 3 podem ser acessadas e configuradas através do dconf-editor - disponível a partir do yum.

Por exemplo, as configurações do GEdit estarão disponíveis em:

org / gnome / gedit / preferences

sexta-feira, 23 de janeiro de 2015

Montando uma Unidade de rede Windows no Linux

Para mapear uma unidade/pasta de um servidor Windows - na rede - em uma máquina Linux:

mount -t cifs -o username=<usuario>,password=<senha> //<IP>/<unidade>$/<pasta> /<pasta_destino>

Onde:
<usuario> - usuário de acesso ao servidor
<senha> - senha do usuário
<IP> - endereço do servidor
<unidade> - unidade a ser mapeada
<pasta> - pasta/diretório a ser mapeado (opcional)
<pasta_destino> - pasta aonde será montado



quarta-feira, 21 de janeiro de 2015

Ceiling no AWK

Me ajudou muito !!!

function ceiling(x) { return (x == int(x)) ? x : int(x)+1 }

domingo, 23 de novembro de 2014

Nohup + For

Como o comando nohup espera apenas um comando, para usar um nohup com um processamento mais 'complexo', deve-se usar o comando sh/bash (shell) com a opção -c, seguido pelo comando 'complexo'. Veja a sintaxe:

nohup sh/bash -c 'comando1; comando2; comandoN' &

Exemplo:

nohup sh -c 'for i in $(find . -type d); do for j in $(find $i/*.gz -type f); do gzip -dc $j | ./exec_script_001.pl; done; done > log/exec_script_001.pl.log' &

Outra maneira de contornar o problema é transformar sua série de comandos em um script e chamar apenas o script com nohup.

sexta-feira, 21 de março de 2014

Bash - Descompactar arquivos em Subdiretórios

Boa e velha dica para descompactar arquivos em subdiretórios!
Basta usar os comandos FOR + FIND + GZIP

Sintaxe:

for i in $(find -type f -print); do gzip -d $i; done

Exemplo:

for i in $(find 20140* -type f -print); do gzip -d $i; done

sexta-feira, 22 de novembro de 2013

Descompactar Arquivos TAR com GZ

Super dica enviada pelo Jorge :-)

Recebi alguns pacotes de arquivos compactados (TAR). Dentro deles uma série de arquivos GZ.

Dado o volume, eu não posso simplesmente descompactar tudo para depois aplicar meu filtro. Preciso ir descompactando tudo pra saída padrão e filtrando.

Pra isso:

for i in $(tar -tf ARQ.tar ; do tar -xOf ARQ.tar $i | gzip -dc | ./meufiltro; done | gzip > filtrado.txt.gz


terça-feira, 27 de agosto de 2013

Linux - Acesso remoto a Filesystem - SSHFS

Segundo o Wikipedia: " SSHFS (SSH Filesystem) is a filesystem client to mount and interact with directories and files located on a remote server or workstation. The client interacts with the remote file system via the SSH File Transfer Protocol (SFTP), a network protocol providing file access, file transfer, and file management functionality over any reliable data stream that was designed as an extension of the Secure Shell protocol (SSH) version 2.0." 

Ou seja, para acessar um FileSystem remoto em ambiente Linux, pode-se usar o SSHFS, com a implementação do FUSE (Filesystem in Userspace).

Para habilitar o FUSE, deve-se instalá-lo via YUM (ou outro mecanismo de instalação) ou ainda via download no site (Fuse).

Deve-se também instalar o aplicativo para acesso (SSHFS) que também pode ser inatalado via YUM (ou novamente através de outro mecanismo de instalação) ou também diretamente do site - Fuse/SSHFS.

Exemplo
sudo yum install fuse sshfs

Deve-se então habilitar o FUSE ao Kernel, usando o comando modprobe;

Exemplo
sudo modprobe fuse

A partir deste momento, para acessar o filesystem de outro servidor, basta usar o comando ssfhs conforme abaixo:

sshfs <usuário> @<ip remote>:<path/to/filesystem> <path/to/mount>

onde:
<usuário> - Usuário de acesso ao servidor
<ip remote> - Endereço IP do servidor
<path/to/filesystem> - Caminho (path) do diretório comartilhado
<path/to/mount> - Caminho (path) onde o FileSystem será montado



Linux - Criação de usuários / Grupos - Via Prompt

A criação de usuários e grupos, bem como a alteração de usuários, via prompt, pode ser feita com os seguintes comandos:

Criação de Grupo
groupadd <grupo>

Criação de Usuário em um grupo
useradd -g <grupo> <usuário>

Alteração de senha do usuário
passwd <usuário>

Adicionar usuário a outro grupo
usermod -a -G <grupo> <usuário>




quinta-feira, 8 de agosto de 2013

Linux - Geração de Chaves (keys) para SSH

Para acessar uma máquina (servidor) linux sem precisar informar senha, pode-se criar um 'par' de chaves ssa-ssh para efetuar o acesso. Vamos ao passo-a-passo simples:

1) Na máquina de origem deve ser criado o 'par' de chaves, para tanto usar o comando ssh-keygen (para maiores informações do mesmo, acesse man ssh-keygen)
$ ssh-keygen

As chaves serão geradas no diretório /home/<user>/.ssh (Arquivos id_rsa e id_rsa.pub)

2) Copiar (transferir) o arquivo id_rsa_pub para a máquina de destino (ftp, scp, rsync)

Exemplo:
$ rsync -av /home/usuario/.ssh/id_rsa.pub usuario@meu.servidor:/home/usuario/.ssh/ 

3) Na máquina (servidor) de destino, incluir as informações do arquivo transferio (id_rsa.pub) ao arquivo /home/<user>/.ssh/authorized_keys . Se o arquivo não existir, criar um arquivo com o conteúdo do arquivo transferido. Caso o arquivo já exista, apendar ao mesmo o conteúdo do arquivo.

Exemplo:
$ cp /home/usuario/.ssh/id_rsa.pub /home/usuario/.ssh/authorized_keys

4) Se necessário, ao iniciar a conexão a partir da máquina (servidor) origem, incluir ao programa de conexão (ssh, scp, rsync) a opção -i <caminho_para_o_arquivo_com_a _chave_privada>. Exemplo:

$ scp -i /home/usuario/.ssh/id_rsa teste.txt usuario@meu.servidor:/meu_diretorio/

segunda-feira, 22 de julho de 2013

Linux - Tratamento de Exit Status / Return Code

O bash guarda a informação a respeito da execução de um programa na variável de ambiente $? logo após a execução da mesma. Avaliando o conteúdo da mesma é possível verificar se uma determinada execução terminou com sucesso ou não.

Exemplo:

somecommand  argument1 argument2
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success
[ $RETVAL -ne 0 ] && echo Failure

Linux - Listar Arquivos de um Diretório

Alguns exemplos para listar nomes de arquivos, com e sem path

$ ls workspace/*.c
workspace/teste_ponteiro_array.c  workspace/teste_ponteiro.c
$ ls -1 workspace/*.c
workspace/teste_ponteiro_array.c
workspace/teste_ponteiro.c
$ find workspace/*.c -type f -printf '%f\n'
teste_ponteiro_array.c
teste_ponteiro.c

quarta-feira, 26 de junho de 2013

Validar Quantidade de Campos(Colunas) em Arquivo Delimitado

Script AWK para verificar se um determinado arquivo possui a quantidade de colunas esperada

cat <arquivo> | awk 'BEGIN{FS="<separador>"};NF!=<nro_colunas> {print NF , $0}' 

onde:
<arquivo> - Arquivo que deverá ser validado
<separador> - Separador (delimitador) de campos (colunas) do <arquivo>
<nro_colunas> - Número de campos (colunas) esperado no arquivo

Exemplo;

cat teste.csv |  awk 'BEGIN{FS=";"};NF!=10 {print "linha", NR, "colunas", NF , $0}' 

No exemplo acima, será (ão) direcionadas a saída padrão (tela)  a(s) linha(s) que não tiver(em) 10 colunas, informando a quantidade de colunas encontrada.

Para arquivos posicionais (sem delimitadores), a sintaxe fica:

cat <arquivo> | awk 'BEGIN{FS=""};NF!=<tam_reg> {print NF , $0}' 

onde:
<arquivo> - Arquivo que deverá ser validado
<tam_reg> - Tamanho da Linha

terça-feira, 25 de junho de 2013

Executar Processos em Paralelo com termino Sincrono

Situação 1
Para executar vários processos em paralelo e ao final de todos executar um processo final, pode-se utilizar a instrução bash wait

Sintaxe
wait

Exemplo:
#!/bin/sh
./pgm1 &
echo "Pgm1 em execucao"
./pgm2 &
echo "Pgm2 em execucao"
wait
echo "Termino de ambos os processos"



Situação 2
Executar em paralelo vários processos, com base em um diretório de entrada e ao final de todos os processos, executar um novo processo. Para esta situação, pode-se recorrer a utilização de um pequeno script awk, além de um artifício de criar um arquivo ao final de todos os processos com a instrução bash wait.

Exemplo de script:

#!/bin/sh
DIR_ENTRADA=${1}
rm -fr "processo.ok"
ARQ_LOG_PROGRAMA="${PWD}/script.log"
DATA_EXEC=$(date "+%x-%X")
echo " " > ${ARQ_LOG_PROGRAMA}
echo "1) ${DATA_EXEC} -> Inicio da execucao" >> ${ARQ_LOG_PROGRAMA}

ls ${DIR_ENTRADA} | awk -v e=${DIR_ENTRADA} -v l=${ARQ_LOG_PROGRAMA} '{print ".programa " e "/" $0 ".txt >> " l " & "} END { print "wait;echo ok > processo.ok"}' | bash

while [ ! -f "processo.ok" ]; do
echo "Processando..." >> ${ARQ_LOG_PROGRAMA}
sleep 10
done

DATA_EXEC=$(date "+%x-%X")
echo "2) ${DATA_EXEC} -> Processamento em paralelo encerrado. Início do processo consolidador." >> ${ARQ_LOG_PROGRAMA}
./consolidador.sh

DATA_EXEC=$(date "+%x-%X")
echo "3) ${DATA_EXEC} -> Termino do Processamento" >> ${ARQ_LOG_PROGRAMA}

Agradecimentos a: Jorge Amorim e Leonardo Rombesso !