quinta-feira, 10 de outubro de 2013

CONFIGURAR O ARQUIVO SYSCTL.CONF

Essa postagem é pra ajudar a quem queira configurar um firewall limpo. Sendo assim, ativando algumas funções no arquivo sysctl.conf não será necessário colocar no script do firewall. Como por exemplo: HABILITAR O NAT, E HABILITAR A SEGURANÇA CONTRA ATAQUES.


O GNU Linux possui a chamada de sistema sysctl, que é usado para visualizar ou alterar os parâmetros dos arquivos encontrados dentro de /proc/sys/ sem a necessidade de editar o código fonte do Kernel, recompilá-lo e depois reinicializa-lo.

# Se ativo, permite o encaminhamento de pacotes IPV4.
# o parâmetro abaixo deve ser ativado (1) para o mascaramento ser automatico

net.ipv4.ip_forward = 1

# If active, enables source route verification # Se ativo, habilita a verificação da origem da rota.

net.ipv4.conf.all.rp_filter = 1

net.ipv4.conf.default.rp_filter = 1


# If active, enables the magic-sysrq key (alt+sysRq)
kernel.sysrq = 1

# If active, logs 'impossible' source addresses

net.ipv4.conf.all.log_martians = 1

# If active, rewrites outgoing IP packets if address changes

net.ipv4.ip_dynaddr = 0

# If active, ignores ICMP with broadcast destination

net.ipv4.icmp_echo_ignore_broadcasts = 1

# If active, accepts IP packets with source route info

net.ipv4.conf.all.accept_source_route = 0

# If active, ignores all ICMP requests

net.ipv4.icmp_echo_ignore_all = 0

# Mask made of ICMP types for which rates are being limited.

# Default: 6168
# Note: 6168 = 0x1818 = 1<
#       1<
#       dest unreachable (3), source quench (4), time exceeded (11)
#       and parameter problem (12) ICMP packets are rate limited
#       (check values in icmp.h)
# 6169 also limits echo_reply's

net.ipv4.icmp_ratemask = 6169

# ICMP ratelimit, in jiffies
# 1 jiffie = 1/100s in Intel, 1/1024s in Alpha

net.ipv4.icmp_ratelimit = 100

# If active, uses TCP SYN cookies

net.ipv4.tcp_syncookies = 1

# If active, accepts ICMP redirect orders

net.ipv4.conf.all.accept_redirects = 0

# rtc setup (you have to load rtc kernel module in /etc/rc.modules
# for this work properly.)

#dev.rtc.max-user-freq = 1024

sexta-feira, 27 de setembro de 2013

CALCULO DE MÁSCARA DE SUB-REDE

A grande verdade é que as máscara de sub-rede já são pré-definidas.

exemplo com classe C:

255.            255.             255.           0
11111111.11111111.11111111.00000000  =  /24

a) 10000000=128 = 2 redes    | 128 hosts        /25
b) 11000000=192 = 4 redes    | 64 hosts          /26
c) 11100000=224 = 8 redes    | 32 hosts          /27
d) 11110000=240 = 16 redes  | 16 hosts         /28
e) 11111000=248 = 32 redes   | 8 hosts         /29
f) 11111100=252 = 64 redes    | 4 hosts        /30
g) 11111110=254 = 128 redes | 2 hosts        /31

---------------------------------------------------------------------------
a) ex.: 255.255.255.128
b) ex.: 255.255.255.192
.
.
.
----------------------------------------------------------------------------

a) 256/128= 2 redes     | 256-((27)=128) = 128 hosts
b) 256/192= 4 redes     | 256-((26)=192) = 64 hosts
c) 256/224= 8 redes     | 256-((25)=224) = 32 hosts
d) 256/240= 16 redes   | 256-((24)=240) = 16 hosts
e) 256/248= 32 redes   | 256-((2³)=248) = 8 hosts
f) 256/252= 64 redes    | 256-((2²)=252) = 4 hosts
g) 256/254= 128 redes | 256-((2¹)=254) = 2 hosts



terça-feira, 3 de setembro de 2013

LOGIN POR RECONHECIMENTO FACIAL NO UBUNTU

PARA COMEÇAR PRECISAMOS DE DUAS APLICAÇÕES COM SUAS DEPENDÊNCIAS: PAM-FACE-AUTHENTICATION E OPENCV. NO MEU CASO ESTOU INSTALANDO NO UBUNTU 13.04 (Raring Ringtail)

Procedimentos:

1 - Instalar OpenCV e suas dependêcnias:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev

Faça o Download do OPENCV-2.4.6

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz/download
tar -xvf OpenCV-2.4.6.1.tar.bz2

cd OpenCV-2.4.6.1/
# cmake .
# make
# make install


2 - Instalar o PAM-FACE-AUTHENTICATION

segue o Link do download do Projeto:
http://code.google.com/p/pam-face-authentication/downloads/detail?name=pam-face-authentication-0.3.tar.gz

É bem chato, mas é muito empolgante quando o resultado é atingido.



Primeiro Instale as dependências:

sudo apt-get install build-essential cmake qt4-qmake libx11-dev libcv-dev libcvaux-dev libhighgui2.4 libhighgui-dev libqt4-dev libpam0g-dev checkinstall python-opencv

Descompacte o arquivo:
tar -xzf pam-face-authentication.tar.gz

Entre no diretório onde descompactou a pasta:
cd pam-face-authentication-0.3

Copie o arquivo "OpenCVConfig.cmake" para dentro "pam-face-authentication-0.3/cmake/modules/FindOpenCV.cmake


Edite o arquivo: gedit ./cmake/modules/FindOpenCV.cmake

Localize os textos abaixo e substitua para os que estão em negrito:

SET(OpenCV_INCLUDE_DIRS "${OpenCV_INSTALL_PATH}/include/opencv;${OpenCV_INSTALL_PATH}/include")

SET(OpenCV_INCLUDE_DIRS "/usr/include/opencv;/usr/include")

Salve o arquivo e entre novamente em outro arquivo:

gedit ./CMakeLists.txt Faça a mesma coisa substituindo os valores para os que estão em negrito:

INCLUDE_DIRECTORIES(${OPENCV_INCLUDE_DIR})

INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})

TARGET_LINK_LIBRARIES( pam_face_authentication ${PAM_LIBRARIES} ${OPENCV_LIBRARIES})

TARGET_LINK_LIBRARIES( pam_face_authentication ${PAM_LIBRARIES} ${OpenCV_LIBS})

TARGET_LINK_LIBRARIES( qt-facetrainer ${QT_LIBRARIES} ${OPENCV_LIBRARIES})

TARGET_LINK_LIBRARIES( qt-facetrainer ${QT_LIBRARIES} ${OpenCV_LIBS})

Salve o arquivo e saia dele;

Crie o diretório build:
mkdir build

Entre no diretório build:
cd build

Execute o comando:
cmake -D CMAKE_INSTALL_PREFIX=/usr ..

Execute o comando:
make

Execute o comando:
sudo make install

---------------------------------------------------------------------------------
O ainda deu um probleminha, e realizei mais este procedimento:

cat << EOF | sudo tee /usr/share/pam-configs/face_authentication /dev/null

**Name:** face_authentication profile  
**Default:** yes  
**Priority:** 900   
**Auth-Type:** Primary  
**Auth:** [success=end default=ignore] pam_face_authentication.so enableX 
EOF

 sudo pam-auth-update --package face_authentication

Depois executei o o programa cadastrei meu rosto (5 vezes).

Execute o programa:
qt-facetrainer

Para a autenticação funcionar no login, tem que ir em "/etc/pam.d/common-auth".

auth    sufficient      pam_face_authentication.so enableX

Para a autenticação via sudo, tem que ir no "/etc/pam.d/sudo"

auth    sufficient      pam_face_authentication.so enableX

Reiniciar a máquina, pelo menos no meu a tela ficou piscando, só parou quando reiniciei.

terça-feira, 27 de agosto de 2013

Estava eu estudando Shell Script e senti a necessidade de aprender mais sobre REDIRECIONAMENTO (STDIN, STDOUT, STDERR, PIPE) e descobri que esse assunto é tão o mais importante do que qualquer outro no mundo UNIX. Então resolvi pegar um pouco de cada blog que explicava bem alguns tópicos. Então vamos lá:


No Linux é possível trabalhar redirecionando pra onde vai o resultado de um comando, quando um processo precisa acessar um arquivo, ele faz isso através do descritor do arquivo (um número inteiro positivo, que o processo usa para referenciar a um determinado arquivo aberto). Assim, todo processo em um sistema UNIX mantém uma tabela de referências aos descritores de arquivos usados pelo mesmo. Os descritores propriamente dito são mantidos pelo kernel. O tamanho dessa tabela varia de sistema para sistema. Nos linux atuais, o tamanho padrão é 256. Cada processo UNIX dispõe de 20 descritores de arquivo, ordenados de 0 a 19.
Quando um programa é executado, 3 arquivos são automaticamente abertos e associados à esse processo. Abaixo, temos a listagem desses três arquivos:
stdin - 0 - entrada padrão - teclado
stdout - 1 - saída padrão - tela
stderr - 2 - erro padrão - tela
Obs: Os outros 17 descritores estão disponíveis para arquivos.
O arquivo stderr ( descritor 2) é usado pelos programas para imprimir as mensagens de erro(geralmente na tela). Podemos redirecionar a saída de um descritor de arquivo para um arquivo com a seguinte sintaxe:
Sintaxe:


numero-descritor> nome_do_arquivo

Exemplos (assumindo que o arquivo teste.txt não existe no diretório corrente):
$ rm teste.txt


rm: imposível remover

`teste.txt’: Arquivo ou diretório inexistente
Por isso no Linux é comum usar o conceito “entrada padrão” e “saída padrão”. A princípio dá pra se imaginar que, numa interface de console, a entrada padrão é o teclado e saída padrão a tela. Na verdade isso é redirecionado pra um socket, um arquivo em /dev. Chamado de stdout e stdin.
-stdin
Entrada padrão de dados para o programa
-stdout
Saída padrão de dados do programa
 -stderr
Saída padrão de erro


Redirecionamentos
É possível tratar a entrada padrão e a saída padrão usando apenas alguns caracteres especiais. São eles:
> – Redireciona a saída padrão para um arquivo
>> – Redireciona a saída padrão pra um arquivo sem apagar o conteúdo do arquivo
< – Redireciona a entrada padrão usando um arquivo
2> – Redireciona a saída de erro para arquivo
2>> – Redireciona a saída de erro anexando o conteúdo em um arquivo
>&2 – Redireciona a saída padrão para saída de erro
2>&1- Redireciona saída de erro para saída padrão
– Conecta a saída padrão na entrada padrão de outro arquivo

Todos esse redirecionamentos são muito usados. Apesar de parecer complicado não é tanto assim. Usando exemplos práticos fica simples:
echo TESTE > arquivo.txt
escreve TESTE em um arquivo chamado arquivo.txt porém o arquivo é apagado caso já exista
ls foobar 2>> error.log
caso a arquivo foobar não exista (ls falhou) a mensagem de erro é anexada em error.log
cat ls -l | grep evandro
Lista na sáida o no Evandro dentro de um diretório, caso exista.
Por isso é possível criar scripts e arquivos executando varáveis e comandos com textos usando um tipo especial de redirecionamento de saída usando quotes chamado (here document) que permite que você inicie com << PALAVRA e termine com PALAVRA que geralmento é usado <EOF (End Of File – Final de Arquivo). Caractere << é usado para indicar que o texto seja usado para leitura a partir de uma palavra < com marcação e encerrado depois que encontra PALAVRA, como exemplo abaixo:
2
3
1
2
3


----------------------------------------------------------

Descritores de arquivo e ponteiros para os arquivos

Foi visto que o nó de indexação de um arquivo é a estrutura de identificação do arquivo dentro de um sistema. Quando um processo quiser manipular um arquivo, ele vai simplesmente utilizar um inteiro chamado descritor de arquivo. A associação desse descritor ao nó de indexação deste arquivo se faz durante a chamada da primitiva open() (ver 1.5.4), com o descritor tornando-se então o nome local de acesso desse arquivo no processo. Cada processo UNIX dispõe de 20 descritores de arquivo, numerados de 0 a 19. Por convenção, os três primeiros são sempre abertos no início da vida de um processo:
  • O descritor de arquivo 0 é a entrada padrão (geralmente o teclado);
  • O descritor de arquivo 1 é associado a saída padrão (normalmente a tela);
  • O descritor de arquivo 2 é a saída de erro padrão (normalmente a tela).
Os outros 17 descritores estão disponíveis para os arquivos. Esta noção de descritor de arquivo é usada para a interface de Entrada/Saída de baixo nível, especialmente com as primitivas open()write(), etc. Por outro lado, quando as primitivas da biblioteca padrão de entrada/saída são usadas, os arquivos são encontrados através dos ponteiros para os objetos do tipo FILE (tipo definido dentro da ).
Existem três ponteiros definidos neste caso:
  • stdin que aponta para o buffer da saída padrão (geralmente o teclado);
  • stdout que aponta para o buffer da saída padrão (normalmente a tela);
  • stderr que aponta para o buffer da saída de erro padrão (normalmente a tela).


terça-feira, 30 de julho de 2013

VISUALIZAR O TIPO DE MEMÓRIA NO UBUNTU

Para saber o tipo de memória (DIM, DDR, DDR2, DDR3, ETC) instalada na sua máquina linux, digite o seguinte comando:

como root:
# dmidecode -t memory

-t ou --type

Como saber qual o tipo de memória instalada no meu Ubuntu

segunda-feira, 22 de julho de 2013

INSTALAR MODULO WIRELESS BROADCOM BCM4311 NO UBUNTU








Driver Broadcom BCM4311 para Linux Ubuntu e Slackware

Acredito que esta dica sirva não apenas para o Ubuntu como também para Slackware, e outras distribuições Linux que não configure esta placa de rede automaticamente.


Para iniciarmos é necessário que você tenha acesso ao sistema como usuário " root ", e que esteja conectado a internet por modem USB ou cabo lan, para fazer os downloads, ou baixe os arquivos em um Pc ou outro notebook e transfira os arquivos que vamos usar utilizando um Pendrive.




Siga os passos a baixo :

1 - É necessário que você efetue login no sistema com o usuário “ root ”.
Vamos compilando o b43-fwcutter ", Este utilitário será usado para extrair os firmwares da placa de rede broadcom para que a mesma funcione corretamente no Linux.

2 - Abra o terminal, para digitar as linhas de instrução

3 - Faça o download b43-fwcutter-011.tar.bz2

Download b43-fwcutter-011.tar.bz2




 4 - Agora vamos descompactar e compilar

root@Ubuntu: ~# tar xvjf b43-fwcutter-011.tar.bz2 -C /usr/src/
root@Ubuntu: ~# cd /usr/src/b43-fwcutter-011
root@Ubuntu: /usr/src/b43-fwcutter-011# make
root@Ubuntu: /usr/src/b43-fwcutter-011# cd ~

5 - Extraindo os Firmwares da placa de rede

Efetue o download do driver


broadcom-wl-4.150.10.5.tar.bz2

Broadcom-wl-4.150.10.5


Agora vamos “Extrair e Instalar” os firmwares, vá até a pasta onde vc fez op download utilizando o terminal e digite os comando a baixo.

root@Ubuntu: ~# tar xvjf broadcom-wl-4.150.10.5.tar.bz2 -C /usr/src/
root@Ubuntu: ~# export FIRMWARE_INSTALL_DIR=”/lib/firmware”
root@Ubuntu: ~# cd /usr/src/broadcom-wl-4.150.10.5/driver
root@Ubuntu: /usr/src/broadcom-wl-4.150.10.5/driver# /usr/src/b43-fwcutter-011/b43-fwcutter -w “$FIRMWARE_INSTALL_DIR” wl_apsta_mimo.o


várias linhas serão exibidas neste passo.
6 - Agora vamos ativar o módulo da placa de rede, digite os comando a baixo

root@Ubuntu: /usr/src/broadcom-wl-4.150.10.5/driver# rmmod b43
root@Ubuntu: /usr/src/broadcom-wl-4.150.10.5/driver# modprobe b43

7 - Protinho. Neste ponto sua Wireless já deverá estar funcionando. Para efetuar um teste execute o comando abaixo:

root@Ubuntu: /usr/src/broadcom-wl-4.150.10.5/driver# iwlist wlan0 scan

Deverão ser exibidas informações de sua rede Wireless.

8 - Alguns problemas que eventualmente poderão ocorrer

1) Em outras versões do Slackware com kernel 2.6.24 ou mais antigas, talvez os firmwares precisem da versão mais antiga, então faça o download destes firmwares:


b43-fwcutter-009.tar.bz2 b43-fwcutter-012.tar.bz2

b43-fwcutter-014.tar.bz2 b43-fwcutter-016.tar.bz2

, o processo é o mesmo para a extração do firmware.

2) Em versões mais antigas do , o driver da era o “bcm43xx”, logo pode ser que o Kernel insista em inicializar ele no lugar do “b43″. Logo recomendo que remova este módulo ou então coloque-o numa blacklist ou ainda se preferir no seu rc.local, coloque os comandos:

rmmod bcm43xx
modprobe b43


O problema de conexão de meu notebook resolvi assim, espero ter ajudados a você que tem uma placa igual a minha .

referência:
http://www.tutorialgratis.com.br/linux/650-drive-wireless-broadcom-bcm4311-para-ubuntu-e-outras-distribuicoes-linux






segunda-feira, 8 de julho de 2013

EMBARALHAR CONTEÚDO DE UM ARQUIVO - COMANDO SHRED

Remover arquivos faz parte da rotina diária de qualquer usuário de um sistema operacional, não é mesmo? Provavelmente você deve fazer isso algumas dezenas de vezes ao longo de um dia de trabalho em frente ao computador. Caso um arquivo qualquer (como uma ISO de um sistema operacional, por exemplo) esteja sendo apagado simplesmente para liberar espaço em seus meios de armazenamento, que mal há utilizar o bom e velho “rm”? Por outro lado, tenho a impressão de que você não gostaria de saber que aquele script que contém todas as suas regras de firewall, por exemplo, ou qualquer outro arquivo com alguma informação sensível pode cair em mãos erradas se você confiar no apenas no “rm”.
Bem, primeiramente, permita que eu me desculpe por ‘descortinar’ essa verdade caso você ainda achasse, até o parágrafo anterior, que um “rm -f” era um comando forte e com tanta ‘personalidade’ ao ponto de mandar pro espaço qualquer arquivo ou diretório. O fato é que ao remover um arquivo com esse comando o sistema operacional, em poucas palavras, simplesmente retira os “ponteiros” para os blocos de dados que formavam o arquivo. Por outro lado, esses blocos estão lá em seu HD e podem, com a ajuda de algumas ferramentas, ser recuperados. Provavelmente esses blocos irão ser sobrescritos apenas quando novos arquivos forem utilizando aqueles mesmos espaços e isso pode demorar um tempo bastante considerável principalmente se o computador em questão não tiver operações um fluxo de gravação de arquivos muito intenso.
E, antes que você se pergunte, mas quem pode ter acesso ao meu HD? Bem, fácil. Seu computador pode ser invadido através da Internet, você pode perdê-lo, você pode ser roubado, você pode vendê-lo ou você pode mandá-lo para uma assistência técnica para consertar um problema, por exemplo. Enfim, são muitas as possibilidade, não é verdade? Pior ainda quando se está falando dos pequenos e portáteis pen drives que carregamos conosco o tempo todo para todo lugar. Quando é possível, pode-se utilizar os sistemas de arquivos criptografados. Entretanto, em situações onde não é possível utilizar essas soluções, é preciso tomar cuidado para garantir que arquivos sensíveis foram, de fato, removidos.
A notícia boa é que existe um “irmão” do rm que pode ser utilizado para fazer a remoção de arquivos cujo conteúdo você deseja manter longe das mãos dos curiosos. Trata-se do shred. E sabe o qué melhor? Provavelmente ele já encontra-se instalado em seu sistema GNU/Linux mesmo que você nunca o tenha utilizado. Vamos, então, dar uma olhada nesse comando?
Suponnha que você tenha um arquivo com algum dado sensível:
$ echo "Esse arquivo possui dados secretos." > /tmp/segredo.txt 
$ cat /tmp/segredo.txt 
Esse arquivo possui dados secretos.
Em seguida, utilize o comando shred simplesmente indicando o arquivo recém-criado:
$ shred /tmp/segredo.txt
E agora, tente dar uma olhada no conteúdo do arquivo utilizando o comando cat:
$ cat /tmp/segredo.txt
E aí, surpreso com o que você viu?
Caso você deseje que o shred remova o arquivo após “bagunçar” seus dados você pode utilizar a opção “-u”. E ainda, se quiser acompanhar de perto o que o shred está fazendo durante seu período de execução basta acrescentar, como em muitos outros comandos dos sistemas Unix, o parâmetro “-v”. Então, experimente executar o shred com a seguinte sintaxe:
$ shred -u -v /tmp/segredo.txt
shred: /tmp/segredo.txt: pass 1/3 (random)...
shred: /tmp/segredo.txt: pass 2/3 (random)...
shred: /tmp/segredo.txt: pass 3/3 (random)...
shred: /tmp/segredo.txt: removing
shred: /tmp/segredo.txt: renamed to /tmp/00000000000
shred: /tmp/00000000000: renamed to /tmp/0000000000
shred: /tmp/0000000000: renamed to /tmp/000000000
shred: /tmp/000000000: renamed to /tmp/00000000
shred: /tmp/00000000: renamed to /tmp/0000000
shred: /tmp/0000000: renamed to /tmp/000000
shred: /tmp/000000: renamed to /tmp/00000
shred: /tmp/00000: renamed to /tmp/0000
shred: /tmp/0000: renamed to /tmp/000
shred: /tmp/000: renamed to /tmp/00
shred: /tmp/00: renamed to /tmp/0
shred: /tmp/segredo.txt: removed
É interessante notar que durante sua execução, o shred preencheu o conteúdo do arquivo três vezes com dados aleatórios e depois, antes de removê-lo, o comando renomeou o arquivo 11 vezes.
Para promover um processo um pouco mais seguro, você pode ainda selecionar o número de interações que o shred irá fazer substituindo o conteúdo do arquivo utilizando o parâmetro “-n ”. Por exemplo:
$ shred -n 25 -u -v /tmp/segredo.txt
Observe que, nesse caso, alternou o processo de substituição do conteúdo com alguns padrões fixos e dados aleatórios. Outra opção interessante até para “esconder” a ação do shred é solicitar que depois de todas as interações, ele substitua os dados do arquivo com zeros. Isso pode ser feito por meio da adição do parâmetro “-z”:
$ shred -n 25 -u -v -z /tmp/segredo.txt
Como “tudo” em sistemas GNU/Linux (Unix, na verdade) é representado por meio de arquivos, você pode utilizar o shred como uma ferramenta para apagar HDs ou outros dispositivos de armazenamento inteiros. Isso pode ser útil quando você vai repassar esse equipamento para outra pessoa. Para isso, basta passar como argumento o arquivo que representa o seu dispositivo de armazenamento. Por exemplo:
# shred -n 30 -v -z /dev/sda
Duas observações importantes aqui: primeiro, essa operação, salvo alguma configuração prévia, requer privilégios de root (observe o prompt como “#” no exemplo anterior). Segundo, tome muito cuidado para não passar o dispositivo errado e apagar coisas erradas! Ou seja, esse comando não é recomendado se você não estiver em paz e bem tranquilo!
Sim, é certo que com algum investimento em tecnologias mais avançadas de hardware e software, é possível recuperar dados mesmo que eles tenham sido sobrescritos diversas vezes.

quarta-feira, 12 de junho de 2013

/etc/default/useradd TRADUZIDO

#Os valores padrão para useradd
#
#A variável SHELL especifica o shell de login padrão em seu
#sistema.
#Semelhante ao DHSELL em adduser. No entanto, usamos "sh" aqui porque
#useradd é um utilitário de baixo nível e deve ser o mais geral
#possível
SHELL=/bin/sh
#
#O grupo padrão para usuá¡rios
#100 = usuários em sistemas Debian
#Mesmo que USERS_GID em adduser
#Esse argumento é usado quando a opção-n é especificado.
#O comportamento padrão (quando-n e-g não são especificadas) é a criação de um
#grupo principal utilizador com o mesmo nome que o utilizador a ser adicionada ao
#sistema.
# GROUP=100
#
#O diretório padrão. Mesmo que DHOME para adduser
#HOME=/home
#
#O número de dias após a senha expirar até que a conta
#está permanentemente desativado
# INACTIVE=-1
#
#O padrão data de expirar
# EXPIRE=
#
#A variável SKEL especifica o diretório contendo usuá¡rio "esquelético"
#arquivos; em outras palavras, os arquivos tais como um exemplo de perfil, que será
#copiados para o diretório home do novo usuário quando ele é criado.
# SKEL=/etc/skel
#
#Define se o spool de email deve ser criado enquanto
#a criação da conta
# CREATE_MAIL_SPOOL=yes

quinta-feira, 23 de maio de 2013

CERTIFICAÇÃO LPI - COMANDO FIND - LOCALIZAR ARQUIVOS

Estava eu estudando para prova de certificação LPI-101, e percebi que o comando find é um dos comandos que mais possui paramêtros, então resolvi dedicar uma boa parte dos meus estudos para esse enorme comando.

O find procura por arquivos em um diretório (recursivamente) com determinadas caracteristicas. É um comando bastante flexível e repleto de opções.

Principais paramêtros:


■-atime +n | -n | n — Procura por arquivos que foram acessados há menos do que n (-n), mais do que n(+n) ou exatamente n (n) dias.

■-ctime +n | -n | n — Procura por arquivos que foram alterados há menos tempo do que n (-n), mais do que n (+n), ou há exatamente n (n) dias.

■-exec comando {} \; — Executa “comando” para cada arquivo achado pelo find.

■-name padrão — Especifica um nome de arquivo ou padrão a ser procurado. Suporta alguns caracteres curinga, que devem ser especificados entre aspas simples para não serem expandidos pelo shell.

■-iname padrão — Faz o mesmo que o parametro “-name”, porém ignora a diferença entre letras maisculas e minúsculas.

■-perm — Permissão (modo) do arquivo, especificado em octal.

■-type — Especifica um tipo de arquivo, podendo ser f para arquivo regular, d para diretório e l para link simbólico.

■-user usuario — Faz buscas por documentos os quais o “usuário” seja dono.



Vejamos alguns exemplo agora:




find /home -name documento.txt


Faz a procura na árvore de diretórios, a partir de /home, arquivos com o nome de documento.txt




find . -name '*.txt'


Faz a procura, partindo do diretório corrente en diante(note o ponto antes do paramêtro -name), todos os arquivos com a extensão txt. É importante observar aqui que o ponto é opcional(caso o ponto seja suprimido, estará subentendido que a busca partirá do diretório atual onde o usuário se localiza, varrendo os sub-diretórios e arquivos desse diretório).




find /tmp -type d -iname '*[0-9]'


Procura no diretório /tmp, por nomes de diretórios (paramero -type d especificando o diretório e iname especificando procura por nomes, não diferenciando maiúsculas de minúsculas), que iniciem por qualquer caractere (asterisco), mas que sejam finalizados por algum número(indicados entre os colchetes, de 0 a 9).




find / -name '*.rpm' -type f -perm 644 -user vitor


Faz a procura iniciando pelo diretório raiz, por nomes de arquivos regulares(-type f) que possuam a extensão .rpm, com permissão 644(leitura e escrita para o dono, leitura para o grupo e para outros) e que pertençam ao usuário vitor.




find /usr -atime -2 -exec ls -l {} \;
find -name "arquivo.doc" -exec rm -fv {} \;         ("find ." ou "find " indica que é no diretório corrente) 


Procura por arquivos, a partir do diretório /usr, que tenham sido acessados nos últimos dois dias, e à medida em que forem encontrados, lista-os mostrando seus atributos.


find /tmp -type f -atime +2 -delete


Limpa a pasta tmp de arquivos de dois dias.

O comando abaixo exibe arquivos modificados a mais de 7 dias (somente o nome e data)


find ~/ -mtime +7 -printf "%f %AD\n"


melhorando o desempenho do seu Desktop


A pasta ~/.thumbnails guarda miniatura de imagens para agilizar a visualização

mas quando tem muito thumbnail o que era solução passa a ser um problema, para resolver

find ~/.thumbnails -type f -atime +7
xargs rm -f‍busca arquivos no path

find ${PATH//:/ } -iname "*admin*" -executable -type f

find ${PATH//:/ } -executable -type f -printf "%f\n" #exibe só o nome‍Editar o arquivo mais recentemente criado

vim `find -type f -cmin -10
head -n1`‍doc ou odt?

find ~/ -iregex ".*\(doc\
odt\)"‍mais sobre expressões regulares com o find

find . -regextype posix-egrep -iregex '.*/.*teeworlds' -print0
xargs -0 rm -rf Para buscar por vários tipos de imagens

find -regextype posix-extended -regex '.*\.(jpg
png)'‍localizando arquivos de hoje

find . -type f -ctime -1Uma variação possível - Mostrando de forma detalhada

find . -type f -ctime -1 -ls‍localizando arquivos modificados em um intervalo de tempo

find ./ -mtime +6 -mtime -8 -print‍localizando arquivos em um intervalo de tempo

•fonte: command-line-fu

find . -type f -newermt "3 years ago" ! -newermt "2 years ago"‍combinando o find com o xargs

find . -type f -maxdepth 1 -name '*.ext' -print0
\

xargs -0 comando‍copiando estrutura de pastas (somente pastas)

(cd /home/user/source/; find -type d -print0)
xargs -0 mkdir -p‍Atribuindo propriedade

isto tem que ser feito como root

find ~ ! -user fulano -print0
xargs -0 chown fulano:fulanoOutra opção seria

chown -R fulano.fulano

‍melhorar desempenho do firefox

find ~ -name '*.sqlite' -exec sqlite3 '{}' 'VACUUM;' \;‍deletar diretórios vazios

find . -type d -empty -delete



find -depth -type d -empty -exec rmdir -v {} \;

‍adicionando extensão a arquivos

Eu tinha um monte de arquivos sem extensão e queria colocar

no final txt, segue a solução.

find ./ -maxdepth 1 -type f -print0
xargs -0 -i mv ./{} ./{}.txt

‍Procurando por um padrão no $PATH



find ${PATH//:/ } -iname "*pattern*"

‍Apagando somente arquivos de um tipo

find ./clipart -type f -iregex '.*\.[^svg]$'
xargs rm -fSe a intenção é apagar apenas

find . -name '*' -print0
xargs -0 rm‍localizando arquivos duplicados usando md5sum

find -type f -exec md5sum '{}' ';'
sort
uniq --all-repeated=separate -w 33
cut -c 35-outra opção

find "$@" -type f -print0
xargs -0 -n1 md5sum
sort --key=1,32
uniq -w 32 -d --all-repeated=separate



1) Find all files.

2) Pipe the filenames to xargs.

3) Which will run md5sum on each filename and pipe the output to sort.

4) Which will sort the output based on the first 32 characters (the checksum) and pipe the output to uniq.

5) Which will find the unique checksums by only looking at the first 32 characters. The options to the uniq command cause it to print each duplicate (and only duplicates) on a separate line.‍usando alternativas

find -iname *.doc -o -iname *.odt

find -atime +5 \( -name "*.o" -o -name "*.tmp" \)

‍find + tar

find /home/zago/guiaz -mtime -1 -type f -print
tar jcvf meusarq.tar.bz2 -T -

‍Localizando arquivos maiores que 3G



find . -type f -size +3G
xargs -I% du -sh %

‍find + rsync

rsync -avz -e ssh --files-from=<(find -mtime +30 -mtime -60) origem destino

find . -name "whatever.*" -print0
rsync -av --files-from=- --from0 ./ .

‍copiar arquivos

find /originalPath/ -iname \*.mp3 -print0
xargs -0 -i cp ./{} /destinationPath/



# ou



find . -name '*.mp3' -print0
xargs -i -0 cp {}


outro exemplo
find . -name "*.pdf" -print0
xargs -0 cp -ft downloads/Observe também a opção -u do comando cp que faz com que o cp

copie apenas se o arquivo copiado for mais novo, ou seja, se
no destino houver o mesmo arquivo que está sendo copiado, a cópia
só será efetivada se o arquivo de origem for mais novo.


Arquivos criados a menos de dez minutos e "-and -a" com extensão txt

find ~/ -cmin -10 -a -iname *.txt

find ~/ -size +500M

find ~ -size +10000 -a -iname *.pdf

arquivos com exatamente 1000 caracteres

find . -size 1000c

Arquivos entre 599 e 701 caracteres

find . -size +599c -and -size -701c



Buscando em dois diretórios htdocs e cfi-bin

find htdocs cgi-bin -name "*.cgi" -type f -exec chmod 755 {} ;



Contar quantos txt há em minha pasta pessoal "~/" (combinando com o comando wc)



find ~/ -iname *.txt
wc -l



Mostra todos os arquivos pdf que não sejam maiores que 2000 bytes

tudo que estiver após a exclamação será negado.

find ~/ -iname *.pdf ! -size +2000



Invertendo a lógica do comando acima no primeiro caso tirando a exclamação, no segundo invertendo o sinal de + para menos, veja:

find ~/ -iname *.pdf -size +2000

ou

find ~/ -iname *.pdf ! -size -2000



Procura pdf's de tamanho maiores que 2000 bytes e mostra somente o nome sem o caminho "basename"

find ~/ -iname *.pdf -a -size +2000 -exec basename {} ;



Procurar por arquivos de um usuário especifico



find / -user sergio

find . -user root



Busca com opções. No caso arquivos html ou htm

find ~/ ( -name *.htm -o -name *.html ) -atime +5

find ~/ -iregex '.*html?' -atime +5



**Observações importantes** mudar permissão somente em diretórios "-d"

find . -type d -exec chmod 755 {} ;

Note: chmod -R 755 ./* também aplica a modificação mas também pega arquivos



!!Usando o find com o xargs

Usando o parâmetro -exec ele executa cada vez que acha o arquivo, repassando via pipe "
" para o comando xargs o find faz primeiro as buscas tornando-se mais rápido.

find ~/ -type f -print
xargs rm -rf



find /originalPath/ -iname *.mp3 -print0
xargs -0 -i cp ./{} /destinationPath/



Procure no diretório atual "." arquivos "f" imprima a lista "-print" filtre com o egrep ignorando maiúsculas e minúsculas "i" a "expressao".

find . -type f -print
xargs egrep -i "expressao"



Procurando todos os mp3 e exibindo o espaço ocupado por eles

find . -name \*.mp3 -print0
xargs -0 du -ch



Encontrando arquivos que não contenham extensão .c ou .o

find ~/docs -type f
egrep -v '.[oc]'



Qual a diferenca entre os comandos abaixo?



% find . -user queiroz -exec ls {} ;

% find . -user queiroz -print
xargs ls


A diferenca e que no primeiro find o comando ls e executado uma vez para cada arquivo encontrado. Se forem encontrados 1000 arquivos o comando ls sera executado 1000 vezes.



Ja no segundo exemplo, com a saida do find redirecionada para o comando xargs, o comando ls sera executado sobre um grupo de arquivos de cada vez e nao uma vez para cada arquivo. O que ira determinar o numero de vezes que o comando xargs executara o comando ls e justamente o tamanho da linha de comandos. O comando xargs ira dividir a saida gerada pelo comando find em blocos compativeis com a capacidade do sistema de maneira a que nao ocorra um erro quando da execucao, em nosso caso, do comando ls.



Em outras palavras, suponhamos que o comando find descubra 2000 arquivos sobre os quais o comando xargs devera executar o comando ls. O limite maximo de arquivo sobre os quais o comando ls pode atuare de 500. O comando xargs automaticamente realizara a divisao desta entrada em quatro blocos de 500 arquivos.



Concluindo, o comando xargs e bem mais eficiente do que a diretiva -exec do comando find, por exigir menos recursos computacionais para executar a mesma tarefa. uma vez sobre todos os arquivos encontrados.



Veja o comando abaixo (ainda não testado) procure em /tmp arquivos com tempo de acesso superior a sete dias "-atime +7" e "and" usuário corrente $USER, redirecione através do xargs para o comando de remoção "rm", sem fazer perguntas -f

find /tmp -atime +7 -type f -a -user $USER
xargs rm -rf

find /tmp -atime +7 -type f
xargs rm -f



Procura todos os arquivos suid e setgid executables:

find / ( -perm -4000 -o -perm -2000 ) -type f -exec ls -ldb {} ;



!!Redirecionando o erro padrão "2>/dev/null" para desviar as mensagens

de erro por acesso não root

find / -type f -name dummy 2>/dev/null



!!Parâmetros

-ctime

-mtime

-atime

-cmin

-amin

-mmin

-user

-nouser

-uid

-gruop

-gid

-and ou -a

-or ou -o

-size

-name

-iname



!!Usando ''printf''

O argumento -printf pode receber vários parâmetros

find ~/ -iname *.txt -printf %f\n "\n faz quebra de linha"

These are used the most:

%p imprime o nome do arquivo com o caminho

%m permissions of file, displayed in octal.

%f imprime o nome do arquivo sem o caminho

%g name of the group the file belongs to.

%G gid

%U uid

%h display name of directory file is in, filename isn't included.

%u username of the owner of the file

%c imrprime -ctime

%a tempo de acesso

%m imprime modo de permissão (formato octal)



%A(caractere) - devolve o "atime" (tempo de acesso)

%AD imprime a data tipo dia/mes/ano (data de acesso)

%AH imprime a hora

%AT /hh/mm/ss

%A+ data e tempo separados pro "+"

%Ax mm/dd/aaaa



find ~/ -iname *.txt -printf "%f %Ax %AT \n"



O comando acima exibe arquivos assim:



nome data hora

serii.txt 04-01-2007 12:42:07



%C(caractere) "ctime"

%T(caractere) "mtime"







Um último exemplo

find . -iname *.txt -printf "%p %m %AA %Ad de %AB de %AY %AX\n" isto retorna algo como:

/caminho/leia-me.txt 644 sexta 23 de junho de 2006 10:30:53





Para imprimir o nome do arquivo com o modo de permissão octal use

find ~ -iname *.txt -printf "%p %m\n"

acrescentando o parâmetro %a retorna o ultimo acesso de acordo com "-ctime"

find ~ -iname *.txt -printf "%p %a %m\n"

printf com os parâmetros "%p %m %Ax\n" retorna algo como

/caminho/leia-me.txt 644 23/06/06

printf com os parâmetros "%p %m %g %u %Ax\n" retorna algo como

/caminho/leia-me.txt usuario grupo 644 23/06/06



-printf "%f %u %g %m %Ax %AX\n" veja detalhes abaixo

%f nome sem o caminho

%u usuário

%g grupo

%m modo de permissão

%Ax dada de acesso no modo dd/mm/aa

%AX hora de acesso do tipo 18:15:23

\n quebra de linha



!!Usando Expressões regulares

$ find . -regex './ch0[1-2]_0[1-3].*'

./ch01_01.html

./ch01_02.html

./ch02_01.html

./ch02_02.html

./ch02_03.html



How do I search for files, then do something with the result?



* Find all .conf files, then search through them to see if they contain any IP addresses, then print the filename, line number and the line containing the address



find /etc -name *.conf -exec grep -Hn '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} ;



!Fazendo um backup

tar -zcvf ultimamod.tar.gz `find . -mtime -1 -type f -print`



!Outros exemplos

Localizar todos os arquivos do tipo txt gerados nos últimos 20 minutos, menos os cookies do navegador, que são cosntantemente gerados e não devem ser buscados



find ~/ -iname *.txt -cmin -20
grep -v "cookies"



Usando expressões regulares

find . -regex './ch0[1-2]_0[1-3].*'

./ch01_01.html

./ch01_02.html

./ch02_01.html

./ch02_02.html

./ch02_03.html


Limpando miniaturas de imagens no nautilus



find ~/.thumbnails -type f -atime +7 -exec rm {} ;





Quem é Almir JR