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 {} ;





quinta-feira, 14 de junho de 2012

Como mudar o /home para uma nova partição

Uma amiga instalou o ubuntu com duas partições, mapeou uma delas pro / e outra pro /home. Até ai tudo bem. O problema é que ela teve que re-instalar tudo preservando o /home, e durante a nova instalação esqueceu de mapear o /home para a antiga partição. O que fazer agora? Como fazer a antiga partição ser o /home novamente?

Mapeando o /home em uma partição

Descobrir a partição que queremos mapear para /home:

Com a partição montada, rode o comando:

$ df -h

Sist. Arq. Tamanho de uso avaliado% Montado em
/dev/sda1 6,5G 4,1G 2,0G 68% /
none 369M 248K 369M 1% /dev
none 374M 292K 374M 1% /dev/shm
none 374M 88K 374M 1% /var/run
none 374M 0 374M 0% /var/lock
/dev/sda6 460M 46M 391M 11% /boot
/dev/sda5 19G 894M 17G 5% /media/839e6642-84b0-4724-b00a-3196a5b83544


Neste caso é a partição /dev/sda5, e aparentemente o UUID é 839e6642-84b0-4724-b00a-3196a5b83544

Descobrir o UUID da partição:

Para isso rode o comando:

$ sudo tune2fs -l /dev/sda5

tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:
Last mounted on: /media/839e6642-84b0-4724-b00a-3196a5b83544
Filesystem UUID: 839e6642-84b0-4724-b00a-3196a5b83544
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super
large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1253376
Block count: 5005824
Reserved block count: 250291
Free blocks: 4698349
Free inodes: 1252867
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 1022
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Sat Apr 30 14:12:18 2011
Last mount time: Tue May 10 11:13:45 2011
Last write time: Tue May 10 11:13:45 2011
Mount count: 14
Maximum mount count: 27
Last checked: Sat Apr 30 14:12:18 2011
Check interval: 15552000 (6 months)
Next check after: Thu Oct 27 14:12:18 2011
Lifetime writes: 1293 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: d3b2919b-1428-4b42-a9d0-a8d42b999b0b
Journal backup: inode blocks


Confirmando, o UUID da partição /dev/sda5 é: 839e6642-84b0-4724-b00a-3196a5b83544.

De posse das informações, vamos ao que interessa:

Edite o arquivo /etc/fstab, com o editor de sua preferência (gedit, vim, etc), como root (ou usando sudo) e acrescente as linhas abaixo:

# /home em /dev/sda5 após a instalação
UUID=839e6642-84b0-4724-b00a-3196a5b83544 /home ext4 defaults 0 2


Atenção: Use o UUID da sua partição e não o do exemplo.

PARTICIONAMENTO DO HD PARA INSTALAÇÃO DO UBUNTU



Depois de observar o crescimento na quantidade de tópicos sobre problemas na instalação do ubuntu, o que evidencia a migração de usuários windows para o GNU/Linux, percebi que muitos dos problemas apontados poderiam ser evitados com o particionamento correto do disco.

Esse procedimento nada mais é que a delimitação do espaço do HD para que abrigue sistemas de arquivos diferentes, o que é essencial para a instalação do Sistema Operacional. Para saber mais é recomendável a leitura das páginas:
http://pt.wikipedia.org/wiki/Disco_r%C3%ADgido
http://pt.wikipedia.org/wiki/Parti%C3%A7%C3%A3o#Geometria_de_disco


Nos Computadores PCs o sistema mais utilizado é o MBR - Master Boot Record (os Computadores Apple usam um sistema diferente, chamado GUID), que consiste na divisão dos discos do HD em setores delimitados pelo raio da circunferência, de fora para dentro, sendo o setor mais externo reservado para a gravação das especificações técnicas do disco e para o gerenciador de arranque do sistema (gerenciadores de boot, como Grub, Lilo, Chameleon, Boot.ini).

Na figura é possível observar um HD desmontado, com o disco, o atuador e o braço do leitor de dados. Com o HD desligado, o braço do leitor fica do lado de fora do disco e durante o desligamento, esse braço é movido do centro para fora (o que explica a necessidade de aguardar o desligamento com segurança...). Como são vários discos sobrepostos, o conjunto de setores dentro do mesmo raio de circunferência nos discos é entendido como um cilindro e pode ser delimitado em até quatro partições, chamadas primárias.

Além desses número é possível transformar uma partição primária em uma partição estendida, que pode ser dividia em partições lógicas, delimitadas por setores mapeados a partir da quantidade de bytes contados de fora para dentro, possibilitando uma divisão de até 255 partições.

E daí?

Como as partições primárias são delimitadas pela circunferência e as lógicas pelos setores de bytes mapeados no disco, a segurança das informações nas partições primárias tende a ser mais confiável que nas partições lógicas, o que significa dizer que as lógicas devem ser evitadas quando possível.

Depois de entender essa diferença é preciso planejar a instalação, considerando a intenção e a necessidade do usuário. Numa sessão live-CD teste o funcionamento do sistema no hardware escolhido e se decidir pela instalação do ubuntu considere:
a) que o sistema sofre atualizações e a cada atualização existe a possibilidade de ter que reinstalar;
b) se precisa ou não manter uma instalação windows no PC
c) se pretende instalar outra distribuição GNU/Linux para teste ou mesmo estudo.

Feitas essas considerações, faça o backup dos dados e informações anteriores e inicie a instalação do sistema, fazendo o particionamento do HD. O aplicativo Gparted presente no Ubuntu é bastante intuitivo:


Na figura observamos um HD de 4GB dividido em uma única partição no sistema de arquivos EXT3. Vale lembrar que desses 4GB, apenas 3,90GB podem ser usados e essa diferença decorre do fato de que arredondamos 1 byte para 10, quando na verdade são 8 bits. Assim, 1MB=1024B (multiplicando a capacidade do HD por 1000 e dividindo por 1024 o resultado é a capacidade real). No canto superior direito da figura vemos a referência do HD /dev/sdb, o que significa que esse é o segundo HD do sistema (se fosse o primeiro seria /dev/sda). Essa referência é especialmente importante quando se tem outros sistemas instalados e é preciso especificar o local onde o gerenciador de boot será instalado.

O Gparted é um aplicativo muito eficiente e prático, que permite analisar, redimensionar, criar e excluir partições do sistema, de forma que as alterações no disco só serão aplicadas no momento em que o usuário clicar no botão apply e confirmar.

Considerando as necessidades do usuário e a questão da limitação de quatro partições primárias é importante ressaltar que:

1) O particionamento deve considerar o hardware da instalação. Se é desktop, a partição swap não é necessária e pode ser deixada com algo como 256MB ou substituída por um arquivo swap criado posteriormente (o que economiza uma partição primária, que pode ser usada se a intenção for instalar outros sistemas). Se é notebook, recomenda-se algo próximo de 2GB, pois o sistema usa o swap no modo hibernação;
2) É uma ótima ideia criar uma partição separada para /home. Isso facilita a atualização futura do sistema de amplia a segurança, no caso de defeito no hardware. Para tanto, deve-se considerar a capacidade do HD. Sistemas operacionais como Windows XP rodam bem em partições com até 20GB, o que para o Seven é pouco. Já o ubuntu, até o 10.04LTS, até roda com menos de 15GB, mas esse valor é pequeno para realizar operações de conversão de vídeo;
3) O Windows XP até o SP2 possui a limitação de permitir que sua instalação seja feita apenas na primeira partição do primeiro HD. A partir do SP3 existe uma flexibilidade para isso, mas para evitar erros futuros é altamente recomendável que numa instalação dual-boot com XP, Vista ou Seven o windows seja instalado na primeira partição do primeiro HD;

O vídeo apresenta um tutorial em português sobre o particionamento do disco, o que ajuda muito na hora de colocar a mão na massa.
1ª parte do vídeo = http://www.youtube.com/watch?v=cweyDqlRsHk
2ª parte do vídeo = http://www.youtube.com/watch?v=PSfqwTOoMtE&feature=endscreen&NR=1

Particularmente, considerando um HD de 500GB (488GB reais) sugiro:

Instalação em notebook só com ubuntu - partições primárias:
/dev/sda1 = 50GB = EXT4 = ponto de montagem /
/dev/sda2 = 2GB = swap
/dev/sda3 = 436GB = EXT4 = ponto de montagem /home

Instalação em notebook com dual-boot com windows - partições primárias
/dev/sda1 = 100GB = NTFS = Windows
/dev/sda2 = 2GB = swap
/dev/sda3 = 50GB = EXT4 = ponto de montagem /
/dev/sda4 = 336GB = EXT4 = ponto de montagem /home

Instalação em notebook com multi-boot - partições primárias
/dev/sda1 = 100GB = NTFS = Windows
/dev/sda2 = 2GB = swap
/dev/sda3 =193GB = EXT4 = Ubuntu - ponto de montagem /
/dev/sda4 = 193GB = EXT4 = Fedora, OpenSUSE, debian - ponto de mongatem /

A área de troca swap pode ser compartilhada por diferentes distribuições GNU/Linux e teoricamente tem uma eficiência maior se estiver localizada na região do meio para a extremidade do disco, pela maior velocidade angular. Por isso, /dev/sda2 é uma boa opção (Em alguns tutoriais o swap é colocado em /dev/sda1, mas para o windows isso poderia se um problema).

Além da área de troca swap, a partição reservada para /home também pode ser compartilhada por diferentes instalações GNU/Linux, desde que se tenha o cuidado de usar nomes de usuário diferentes em cada instalação, pois na pasta de usuário são gravadas as configurações de aplicativos em pastas ocultas e isso traria uma confusão muito grande, já que as configurações apresentam diferenças entre distribuições e até mesmo entre versões da mesma distribuição.

Outra ideia viável, para quem usa a instalação em dual-boot com windows, é particionar a /home com o sistema de arquivos NTFS. Com isso, a pessoa terá uma partição que pode ser acessada pelo windows e usada para backup, enquanto que para o sistema não faz diferença se a /home está formatada como EXT2, EXT3, EXT4 ou NTFS.

Nesse caso, ficaria assim:

Instalação em notebook só com duas distribuições GNU/Linux em mesma /home - partições primárias:
/dev/sda1 = 50GB = EXT4 = ponto de montagem / do ubuntu
/dev/sda2 = 2GB = swap
/dev/sda3 = 50GB = EXT4 = ponto de montagem / do debian
/dev/sda3 =386GB = EXT4 = ponto de montagem /home

Instalação em notebook com dual-boot com windows - partições primárias
/dev/sda1 = 100GB = NTFS = Windows
/dev/sda2 = 2GB = swap
/dev/sda3 = 50GB = EXT4 = ponto de montagem /
/dev/sda4 = 336GB = NTFS = ponto de montagem /home


Lembrando que essa dica é uma orientação básica. Maiores informações sobre a instalação do sistema podem ser obtidas em:
http://ubuntuforum-br.org/index.php/topic,19226.0.html
http://www.hardware.com.br/livros/entendendo-linux/particionando-com-gparted.html
http://ubuntuforum-br.org/index.php?topic=58947.0

Quem é Almir JR