terça-feira, 28 de dezembro de 2010

Editando múltiplos arquivos com o VIM

Podemos editar múltiplos arquivos com o VIM: Eles podem ser abertos com o comando:]
vim -o arquivo1 aquivo2 arquivo3

Para alternar entre os arquivos abertos, basta pressionar duas vezes a combinação Ctrl + w

quarta-feira, 23 de junho de 2010

Comando wget - opções de download multiplo e recursividade

Com o comando wget, você pode fazer o download de sites inteiros... ou de apenas arquivos com determinadas extenções que você está interessado.
A opção -r é um pouco perigosa, já que o site poder ter links fora dele, mas é útil.
No meu caso, eu precisava fazer o download de vários pdf que compõem um livro gratuito na Internet.


wget -cr -A*.extensão http://site.arquivo.html
A opção -A é para definir as extensões aceitas, embora eu tenha baixado html, também.
A opçaõ c é para continuar o download, caso este tivesse sido interrompido antes, e a opção r é o download recursivo.

domingo, 14 de fevereiro de 2010

Configuração do Samba - Ajustando permissões de acesso e monitoramento instantâneo

Esta é mais uma configuração do SAMBA que eu fiz apenas para incluir um diretório padrão de compartilhamento de músicas e arquivos diversos.
Isto resolve o problema dos usuários não terem acesso aos arquivos multimídia de um outro, desde que os usuários tenham a intenção de colaborar com isso, é claro.

A checagem de permissões é feita tanto pelo SAMBA quanto pelo Sistema. Em um primeiro momento, o SAMBA, ao sabor da configuração do compartilhamento em /etc/samba/smb.conf (bem no Debian Lenny, o arquivo de configuração do SAMBA fica neste diretório), verifica quais os usuários que podem acessar e escrever (ou não) no recurso compartilhado (no caso, o diretório /multimidia), e depois a solicitação é passada para o sistema, que permitirá o acesso mediante a verificação de quem tem permissão sobre os diretórios e arquivos dentro deles.

Não esquecer de digitar #smbpasswd -a para cadastrá-lo no SAMBA também.
Assim, a solução que utilizei foi:

1) Criar o grupo multimidia, incluir usuários e dar o diretório /multimidia ao grupo
2) Configurar, enfim, o SAMBA para disponibilizar o recurso apenas aos usuários do grupo

Vamos agora, aos procedimentos necessários.

Parte 1: Criar o grupo multimidia, incluir usuários e dar o diretório /multimidia ao grupo

- Criação do grupo e inclusão de usuários:
# addgroup multimidia --> cria o grupo "multimidia"
# adduser [usuario] multimidia --> adiciona o "usuário" no grupo multimidia
Ex: # adduser karmarx multimidia

-Dando o diretório multimidia ao grupo multimídia:
#chgrp -R multimidia /multimidia --> instrui o sistema para que o grupo multimidia seja o dono do diretório /multimidia. A opção "-R" implementa as modificações recursivamente.
Alternativamente, poderemos fazer:
# chowm -R :multimidia /multimidia --> Faz a mesma coisa que o comando anterior. A diferença é que, antes de ":multimidia", podemos colocar o usuário que será dono do diretório ou recurso.
-Dando permissão ao grupo e seus usuários para acessar o diretório:
# chmod g+rwx /multimidia --> Dá permissão de leitura e escrita e acesso aos usuários do grupo multimídia. A opção "g" se refere a grupos.
# chmod -R g+rw /multimidia --> Dá permissão de leitura e escrita aos usuários do grupo multimídia.

Parte 2: Configurar, enfim, o SAMBA para disponibilizar o recurso apenas aos usuários do grupo

-O trecho que eu inclui no meu /etc/samba/smb.conf foi este:
[multimidia]
comment = Arquivos multimidia (filmes, musicas, jogos etc) compartilhados pelos usuarios.
path = /multimidia
writable = yes
# Para permitir que apenas os usuários do grupo multimidia possam acessar o compartilhamento
valid users = +multimidia
É importante que os comentários sejam feitos não na mesma linha de alguma palavra-chave que vai ser passada para o SAMBA.
A opção que precisa ser entendida é a "valid users". Nela, podemos incluir, separados por vírgulas, os usuários que podem acessar o recurso, ou então, colocamos um sinal de mais "+" seguido do nome do grupo, e automaticamente, apenas os usuários pertencentes ao grupo conseguirão acessar o recurso. Podemos separar entre vírgulas, os grupos que podem ter acesso ao recurso, bem como misturar grupos e usuários que o acessarão.

Referências:

Samba, parte 2: Configuração avançada do Samba (atualizado) -Carlos E. Morimoto

Manual do chgrp: man chgrp
Manual do chmod: man chmod
Manual do chown: man chown

Comando chroot

O comando chroot permite que você defina algum diretório como sendo a "nova raíz".
Isto é útil para mountar a partição raíz de uma outra instalação de Linux que haja no computador, e executar os programas a partir dela.

Suponhamos que queiramos editar o arquivo /etc/fstab da outra partição, ou dar um grub-install para restaurar o grub a partir daquela partição, porém através dela mesmo, não conseguimos, tendo de recorrer a outra partição funcional (geralmente nem isso é possível, sendo necessário o uso de um disco de recuperação, ou um live-cd com alguma distribuição GNU/Linux.

1) Montamos a partição de teste:

root@localhost: /# mount /dev/sda2 /mnt/teste --> supomos que o diretório /mnt/teste existee esteja vazio antes da montagem da partição.

2) Acesso à partição:

root@localhost: /# cd /mnt/teste

3) Tornando o diretório /mnt/teste como "raíz"

root@localhost: /mnt/teste# chroot /mnt/teste

Resultado:

root@localhost: /#
Aí, se você precisar editar o arquivo /etc/fstab da partição /dev/sda2, não precisará digitar vi /mnt/teste/etc/fstab, mas apenas vi /etc/fstab

Para voltar ao normal, basta digitar:

root@localhost: /# exit

Resultado:
root@localhost: /mnt/teste#

terça-feira, 9 de fevereiro de 2010

Redimensionando partições ext3 - Diminuindo uma partição

Para o redimensionamento de uma partição ext3, deve-se adotar 2 procedimentos básicos, depois de desfragmentá-la, se este for o caso:

1) redimensionar o sistema de arquivo: Para isto, utiliza-se o comando resize2fs.
2) redimensionar a partição fisicamente: Para isto, utiliza-se o comando fdisk.

Quando nós redimensionamos o sistema de arquivos é como dar um aviso ao kernel que os arquivos da partição podem ser encontrados entre o cilindro xxx do disco ao cilindro yyy, e a partição, quando as coisas estão funcionando, vai do cilindro xxx ao cilindro yyy. Entretanto, pode ser que não haja correspondência entre o que informa o sistema de arquivo ao kernel, e o tamanho físico da partição mesmo.

Assim, quando queremos diminuir o tamanho de uma partição, devemos, primeiro, diminuir o tamanho do sistema de arquivo com resize2fs, para depois diminuir seu tamanho físico com fdisk. Desde 2002 que esse software suporta o redimensionamento não só de partições ext2, mas também de ext3, portanto não é necessário tirar o journaling da partição.
No caso de querermos expandir o tamanho de uma partição, precisamos fazer o caminho inverso, desde que haja espaço livre começando quando termina originalmente o a partição que queremos expandir: aumentamos seu tamanho fisico para depois redimensionar o seu sistema de arquivo.

Bem, vamos aos passos:

No caso, eu queria diminuir o tamanho da minha partição /home de 50GB para 10GB.
Se você vai fazer isto com a partição raiz do seu sistema, ou a partição que contém outros executáveis importantes do sistema operacional, é necessário reiniciar o sistema e utilizar um disco/CD/DVD de recuperação, ou uma distribuição live-CD, pois é necessário executar os procedimentos com a partição com a qual queremos trabalhar desmontada.

Primeira parte: Checando informações sobre o disco e a partição, e redimensionando o Sistema de arquivos

- Checando informações:
fdisk -l /dev/sda --> Este comando dá informações sobre todas as partições do disco, tais como o cilindro inicial e final da partição, e número de blocos que ocupa. Lembrando que /dev/sda é apenas o exemplo utilizado, e o dispositivo que será utilizado dependo de como está configurado o seu HD, e de qual tecnologia ele utiliza (para HDs IDE, utilizamos /dev/hd(letra), e para primeiro hd, a letra a. Para HDs SCSI ou SATA, utilizamos /dev/sd(letra), e para o segundo hd, utilizamos a letra b. Utilizariamos também a letra a, no caso de ser o primeiro hd, que é o caso do exemplo.
A informação primordial, neste caso, é a posição inicial da partição. Isto, porque na parte 2, teremos de apagá-la, e para que não haja perda de dados, devemos nos certificar de que a "nova" partição deve começar no mesmo cilindro da "velha".
No meu caso, eu queria informações da partição /dev/sda2, que no meu caso, normalmente é montada em /home. LEMBRE-SE QUE TODOS OS PROCEDIMENTOS DEVEM SER FEITOS COM A PARTIÇÃO DESMONTADA.

- Talvez seja necessário checar a partição com:
e2fsck -f /dev/sda2 -->substitua /dev/sda2 pela partição que desejar/precisar checar.
-Redimensionando o sistema de arquivos, finalmente:
resize2fs /dev/sda2 10G
O comando resize2fs possui a seguinte sintaxe: resize2fs [partição] [tamamho] --> onde tamanho pode ser dado em S (setores de 512 bytes), K, M e G, em que as três últimas maiúsculas representam, respectivamente, kilobytes, megabytes e gigabytes.
Ele, depois, vai retornar o número de blocos que a nova partição deverá ocupar. Mas atenção, ele informa isso para o Kernel, mas não fez nenhuma modificação física, como, aliás, discutimos acima. É importante mencionar que o número de blocos informado pode estar ligeiramente errado, devido a um bug conhecido e mencionado no próprio manual do comando (man resize2fs). O que fazer em relação a isso, veremos na segunda parte.

Segunda Parte: Redimensionando a partição

Para redimensionar a partição, o procedimento é tão simples quanto perigoso: Devemos apagar a partição que queremos redimensionar e criá-la de novo! :-D
Se o procedimento for feito corretamente, não haverá nenhuma perda de dados. Entretando, devido ao risco, é extremamente aconselhável fazer um backup dos dados mais importantes da partição, senão de toda ela. Eu estava muito "com o cú na mão", então fiz 2 backups!
fdisk /dev/sda --> Para iniciar operações de particionamento do disco.
Resposta do comando:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
-Devemos, agora apagar a partição dois:
Command (m for help): d
Partition number (1-5): 2
Como eu cometi o erro de ter criado esta partição como primária, outrora (Poderia ter criado apenas uma partição primária, que devem ser no máximo 4, e deixado a partição em questão como estendida), devo recriá-la como primária (na verdade, tive medo de fazer diferente, mas como eu também posso criar partições Linux principais como partição extendida, eu não me importei).
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 2
Agora, ele perguntará em que cilindro que começa a partição. mantenha a resposta padrão, que deve ser identica à obtida com fdisk -l /dev/sda . Se não for, digite o dado obtido anteriormente, caso contrário, haverá perda de dados.

Agora que informamos o fdisk onde que a nossa partição começa, não sabemos onde ela termina. Felizmente, podemos dizer o tamanho da nossa partição, em MB. Porém, dizer que ela terá 10240MB (10GB) acarretará em erros mais para frente, porque, como mencionado anteriormente, o resize2fs tem um bug no cálculo do número de blocos (que são de 4KB), e dar imediatamente o tamanho que nós queremos, fará com que o sistema de arquivos e o tamanho físico continuem diferentes, podendo haver perda de dados (O e2fsck não conseguirá avaliar a partição por causa disso, e você pode ter problemas até para reiniciar o sistema).
A solução para este problema é o seguinte: Pegar o número de blocos retornado pelo resize2fs, multiplicar por 4k (como a resposta do comando já é em blocos de 4k, basta multiplicar por 4, mesmo), e depois multiplicar por 1.05, para dar uma margem de uns 5% para aquele número, pois é prudente que o tamanho físico seja maior que o tamanho do sistema de arquivos, e não o contrário. É quando acontece o contrário que a partição começa a dar problemas.

-O número resultante do cálculo deve ser colocado como +[númeroK] quando o fdisk solicitar:
Last cylinder or +size or +sizeM or +sizeK (xxx-yyy, default yyy ): +númeroK --> onde xxx-yyy é o intervalo, em cilindros, do número do cilindro que termina a partição. yyy, é o limite final do disco. + é a opção para declarar o tamanho da partição, em vez do cilindro final, e deixar a tarefa de descobrí-lo para o fdisk, número, é o tamanho em KiloBytes da Partição, e K é a opção especificando que o tamanho será mesmo dado em Kilobytes.
-Agora, devemos gravar na tabela de partições.
Command (m for help): w
The partition table has been altered!
-Resposta do comando:
Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

É preciso, agora, reiniciar o sistema (ou não).

Com a partição redimencionada desmontada, vamos à terceira e última parte:

3) Checagem do sitesma, e re-redimensionamento:

Com o sistema reiniciado para que a nova tabela de partições seja reconhecida, digite:

e2fsck -f /dev/sda2 --> (com a partição desmontada e ,novamente, substitua a partição utilizada no exemplo pela que você quer redimensionar efetivamente)

E depois o comando:

resize2fs /dev/sda2

Agora, não tem mais o tamanho da partição, porque, com a nossa preucaução, o tamanho informado pelo sistema de arquivos é menor do que o tamanho físico da partição, e queremos apenas que o sistema de arquivos seja redimensionado para o tamanho máximo da partição física.

Referências:

http://usefulfor.com/nothing/2007/12/14/howto-resize-an-ext3-partition-without-losing-data/

http://www.howtoforge.com/linux_resizing_ext3_partitions

Manual do resize2fs (man resize2fs)

terça-feira, 26 de janeiro de 2010

VIM - Modo Visual

Para entrar no modo visual do VIM, há 3 maneiras, quando não estamos no modo de edição. Podemos digitar:

v : Entra no modo de seleção de caracteres.
V : Entra no modo de selecão de linhas
Ctrl +v : Entra no modo de seleção de blocos.


E aqui, uma tabela de comandos úteis quando o texto já está selecionado:

Comando | Ação no texto selecionado
d | Apaga
y | Copia
p | Cola
c | Troca por outro texto
r | Troca cada letra por um caractere
J | Junta todas as linhas em uma só
U | Converte para maiúsculas
u | Converte para minúsculas ~ Inverte maiúsculas e minúsculas
gq | Reformata as linhas para a largura desejada
! | Manda as linhas para um comando externo (!sort)
: | Aplica um comando 'ex' nas linhas (:s/isso/aquilo/)

Para sair do modo visual, basta apertar v, de novo.
Extraído de http://aurelio.net/vim/selecao-vi-sual.html

quarta-feira, 13 de janeiro de 2010

Compactando arquivos com o zip a partir de uma lista deles criada com o comando find

Para isso, podemos utilizar a opção -@ do comando zip, e os pipes para direcionar a saída na entrada do comando zip.
Fica assim:

find [caminho] -name "[nomes pesquisados]"|zip -@ [nome do arquivo.zip]