Instalação do linux.. 1

Guia básico do linux.. 6

Comandos básicos do linux.. 9

Primeiros passos do linux.. 10

CDs e disquetes no linux.. 12

Kernel, parte1.. 13

Kernel, parte2.. 25

Modos de permissão no linux.. 28

Gerênciamento de processos, parte 1.. 32

Gerênciamento de processos, parte 2.. 35

Programação shell 49

Segurança no linux.. 53

Segurança em programas do linux.. 58

Password root no linux.. 65

Lynx.. 67

Pine.. 71

Elm... 77

Dns. 84

Monkey linux.. 87

Linux + Windows NT.. 90

Uso básico do linux para net. 91

Iniciando a conexão do linux, parte 1.. 95

Iniciando a conexão do linux, parte 2.. 98

Conexão do linux com a rede.. 104

Ftp e linux.. 112

Proxy e linux.. 116

 

 

Instalação do linux

 

 

 

 

RECRIANDO AS PARTIÇÕES DO MS-DOS P/ INSTALAR LINUX

1º Parte - Recriando as partições do MS-DOS para poder instalar o Linux. 

OBS: Esse tutorial está levando em conta que você pretende instalar o seu novo sistema Linux em um HD que esteja rodando atualmente outro sistema operacional, como o Windows por exemplo. Primeiro você deverá reparticionar o HD, para isso, caso você esteja no Windows, reinicie o computador em "Reiniciar o computador em MODO MS-DOS" e use o pragrama FDISK (que ja esta na sua máquina) para apagar a partição primária do DOS que está sendo usado pelo Windows 95/98 e que está ocupando 100% do HD. 

OBS:
      1- Certifique-se de que você poderá apagar todo conteúdo do HD.
      2- Essa operação irá apagar tudo e será necessário reinstalar o Windows. 

Digite fdisk no prompt do DOS para entrar no FDISK. Se o programa perguntar se você deseja ativar suporte a unidade grande, diga sim ou não. Se você quiser dar suporte ao FAT 32 diga sim (S) e para FAT 16 diga não (N). Escolha a opção 3 - Excluir partição do DOS ou unidade lógica do DOS.

OBS: Se você possui + de um HD na sua máquina, irá aparecer a opção 5, verifique em qual HD você vai estar trabalhando.

Agora escolha a opção 1 - Excluir partição primária do DOS.

Você está prestes a apagar tudo do HD, verifique se está tudo OK e pressione ENTER, em "Nome do volume" você deixa em branco. Agora e só confirmar! Pressione ESC e vá para a tela principal para criar uma partição primária do DOS só que sem usar todo o espaço do HD para deixar um espaço livre para o Linux. 

Escolha a opção 1 - Criar partição do DOS ou unidade lógica do DOS.

Novamente a opção 1 - Criar partição primária do DOS.

Agora ele irá te perguntar se você deseja utilizar o tamanho máximo disponível para uma partição primária do DOS, você fala que não. Pronto, ele irá te dar o tamanho total do seu HD em MB (Megabytes), é só digitar quanto de espaço você vai deixar para a partição do Windows. Lembre-se de deixar no mínimo 300 MB para que o Linux possa ser instalado sem nenhum problema posteriormente. OK, a partição foi criada, agora você pode sair do FDISK e reiniciar seu computador. OBS: Quando você cria uma nova partição do DOS, é necessário reiniciar o computador e depois formatar a partição criada para que a mesma seja reconhecida.

Lembre-se que não vai ter nada no seu HD, mas agora você pode reinstalar o Windows e logo em seguida o Linux. Após ter reinstalado o Windows na sua nova partição, vamos para o Linux. Depois de criado os discos de boot, vc estará pronto para entrar na instalação do sistema e criar as devidas partiçoes do sistema Linux,

CRIANDO AS PARTIÇÕES DO LINUX

Para criar partições para o Linux, você vai usar o programa FDISK do Linux. Depois que logar como root, rode o comando: 

     # fdisk drive 

Onde drive é o nome do drive que você vai criar as partições Linux. Os device names dos HDs são: 

  • /dev/hda Primeiro drive IDE 
  • /dev/hdb Segundo drive IDE 
  • /dev/sda Primeiro drive SCSI 
  • /dev/sdb Segundo drive SCSI 

Por exemplo, para criar partições Linux no primeiro drive SCSI no seu sistema, use o comando: 

     # fdisk /dev/sda 

Se você digitar fdisk sem argumento algum, ele vai assumir /dev/hda que é o padrão utilizado pela maioria das pessoas que vão instalar o Linux pela primeira vez. A não ser que seu HD seja SCSI ou você queira instalar no segundo HD... mas não é o nosso caso neste exemplo. Para criar partições Linux no segundo drive no seu sistema, simplesmente especifique /dev/hdb (para drives IDE) ou /dev/sdb (para drives SCSI) quando for rodar o fdisk. Suas partições Linux não precisam estar no mesmo drive. Você pode criar uma partição de sistema de arquivos de raiz em /dev/hda e sua partição swap* em /dev/hdb, por exemplo. Para isto apenas rode o FDISK para escolher o drive. 

* swap: Partição necessária para que o Linux reconheça como um adcional de memória. Evitando assim posteriores erros na instalação por falta de memória RAM por exemplo. 

O uso do fdisk é simples. O comando "p" mostra uma tabela com as partições correntes. "n" cria uma nova partição, e "d" deleta uma partição. No Linux, partições ganham um nome no drive onde as quais iniciam. Por exemplo, a primeira partição no drive /dev/hda é /dev/hda1, a segunda é /dev/hda2, e assim vai. Se você tem uma ou mais partições lógicas, elas são numeradas iniciando com /dev/hda5, /dev/hda6 e vai subindo. 

NOTA: Você não pode criar ou deletar partições de outros sistemas operacionais a não ser do Linux, com o FDISK do Linux. É isto, não crie ou delete partições MS-DOS com o FDISK do Linux. Use o FDISK do MS-DOS para isto. Se você tentar criar partições MS-DOS com o FDISK do Linux, serão maiores as chances do MS-DOS recognizar a partição e não dar o boot corretamente. 

Este é um exemplo do uso do fdisk. Aqui, nos temos uma simples partição MS-DOS usando 61693 blocks no drive, e o resto do drive está livre para o Linux. (No Linux, um block é 1024 bytes. Então, 61693 blocks são 61 megas.) Nos vamos criar duas partições Linux: uma para swap e outra para o sistema de arquivos de raiz, também chamada de Linux Native. Primeiro, vamos usar o comando "p" para mostrar a tabela das partições correntes. Assim você pode ver, /dev/hda1 (a primeira partição em /dev/hda) é uma partição MS-DOS de 61693 blocks. 

  ______________________________________________________________________
  Command (m for help): p
  Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
  Units = cylinders of 608 * 512 bytes
 
       Device  Boot  Begin   Start     End  Blocks   Id  System
    /dev/hda1    *       1       1     203   61693    6  DOS 16-bit >=32M
 
  Command (m for help):
______________________________________________________________________

Depois, usamos o comando "n" para criar uma nova partição. A partição Linux Native terá 80 megas em tamanho nesse exemplo. 
______________________________________________________________________
Command (m for help): n
Command action
    e extended
    p primary partition (1-4)
p
______________________________________________________________________ 

Aqui fomos perguntados se queremos que crie uma partição extendida ou primária. Na maioria dos casos você pode usar partições primárias, exceto se você precisar mais de 4 partições no drive. 
______________________________________________________________________
Partition number (1-4): 2
First cylinder (204-683): 204
Last cylinder or +size or +sizeM or +sizeK (204-683): +80M
______________________________________________________________________ 

O primeiro cilindro da nova partição deve ser o cilindro que vem depois do cilindro na qual a primeira partição termina. Neste caso, /dev/hda1 termina no cilindro 203, então iniciaremos a nova partição no cilindro 204. Como você pode ver, se usarmos a notação "+80M", isto especifica uma partição de 80 megas em tamanho. Também, a notação "+80K" vai especificar uma partição de 80 kilobytes, e "+80" vai especificar uma partição de apenas 80 bytes. Agora, vamos criar uma particao swap de 10 megas, /dev/hda3. 
______________________________________________________________________
Command (m for help): n
Command action
    e extended
    p primary partition (1-4)

Partition number (1-4): 3
First cylinder (474-683): 474
Last cylinder or +size or +sizeM or +sizeK (474-683): +10M
______________________________________________________________________ 

Novamente, vemos a tabela de partições. Esteja certo de anotar as informaçoes exibidas na tabela de partiçoes, especialmente o tamanho de cada partição em blocks. Você vai precisar desta informação depois. 
______________________________________________________________________
Command (m for help): p
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
Units = cylinders of 608 * 512 bytes

       Device    Boot   Begin   Start     End    Blocks     Id    System
    /dev/hda1       *       1       1     203     61693      6    DOS 16-bit >=32M
    /dev/hda2             204     204     473     82080     83    Linux native
    /dev/hda3             474     474     507     10336     83    Linux native
______________________________________________________________________

Note que a partição Linux swap (aqui, /dev/hda3) está com o nome de "Linux native". Nós precisamos mudar o tipo da partição swap para "Linux swap" para que o programa de instalação possa detecta-la. Então você vai usar o comando "t" do FDISK para fazer essa alteração. 
______________________________________________________________________
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 82
______________________________________________________________________ 

Se você usar o comando "L" para listar os codigos para cada tipo de partição você vai ver que o codigo 82 corresponde a Linux swap. Para sair do fdisk e salvar as alterações para a tabela de partiçoes, use o comando "w". Para sair do fdisk sem salvar as alteraçoes, use o comando "q". Depois que sair do fdisk, o sistema vai pedir para dar um reboot na máquina para que as alterações tenham efeito. Geralmente não há razão para dar um reboot depois que usar o fdisk --- a versão do fdisk nas distribuicões mais novas já fazem o update das partições sem precisar reinicializar.

PARTICIONANDO O HD SEM PERDER OS DADOS

Fips é um programa designado para reparticionar uma partição MS-DOS sem apagar os dados nele contidos. Muitas vezes os usuários possuem dados que não podem ser apagados de maneira alguma e não tem como fazer o Backup dos dados, impossibilitando assim a criação de uma outra partição e conseguentemente não podendo instalar o Linux. O FIPS pode ser facilmente encontrado nos sites de distribuição do linux (geralmente no diretório dosutils). Ai vão algumas URLs onde você poderá encontrá-lo: 

ftp://ftp.ano2001.sti.com.br/pub/utils/
ftp://ftp.crhl.com.br/pub/conectiva/marumbi/dosutils/
ftp://ftp.debian.org/linux/distributions/debian/tools/

OBS: Para discos que usam FAT32, você deve pegar a versâo 2 do programa. 

Vamos começar:

Você precisará de um programa de desfragmentação para mover todos os dados para o inicio do HD. FIPS irá fazer a repartição somente se você tiver o espaço livre necessário no fim do HD. Pode-se usar o desfragmentador de disco do Windows mesmo. Eu aconselho o Norton Speed Disk que vem junto com o Norton Utilities. OBS: Se você usa algum gerenciador de disco como o Staker/SuperStor/Doublespace ou Drivespace você deve ler o texto special.doc que vem junto com o FIPS antes de continuar. 

  • 1º passo: Descompacte o arquivo e copie os arquivos FIPS.exe, Restorrb.exe e o Errors.txt para um disco de boot. Um disco de boot é facilmente feito digitando: "sys a:" no prompt do MS-DOS, ou no Windows formatando um disquete com o tipo de formatação "copiar apenas os arquivos do sistema". 
  • 2º passo: Rode agora o desfragmentador de disco ou o Speed Disk (mas antes configure para deixar o espaço livre no fim do HD). 
  • 3º passo: Coloque o disquete no drive e reinicie o computador, depois basta digitar fips no prompt. O fips apresentará um aviso, pressione qualquer tecla e ele apresentará uma tabela do seu HD e perguntará em qual das partições existente em seu sistema você deseja reparticionar, normalmente você só terá uma ou duas partiçôes e a partiçâo desejada no nosso caso será a primeira, então vá em frente, e digite: "1". 
  • 4º passo: Depois de confirmada a opção, ele irá perguntar se você deseja fazer copia de segurançaa de sua tabela do sistema, eu aconselho fazer, por via das dúvidas fazer backup é um ato sadio. ;-) 
  • 5º passo: O Fips irá lhe perguntar o tamanho para a nova partição, use as setas esquerda e direita para escolher. Para continuar pressione a tecla ENTER e se a nova tabela do HD coincidir com o que você quer, pressione a tecla "C", caso contrário redefina a tabela pressionando "R". 
  • 6º passo: O fips fará todo o seu processo automaticamente e ao final você pode sair dele, dar o reboot no sistema e certificar-se que o seu sistema esteja rodando corretamente. Caso contrário pode recuperar usando aquele disquete de boot que você criou e os backups e rode o "restorrb.exe".

 

 

 

Guia básico do linux

 

 

 

 

  1. Para entrar no sistema (Login)
  2. Para alterar passwords
  3. Para sair do sistema (Logout)
  4. Para corrigir erros de digitação
  5. Conceitos e Comandos Básicos
    • Formato de comandos Unix
    • Filesystem
    • Pathname
    • Diretórios
    • Arquivos
    • Proteção
    • Help Interativo

Para LOGIN (entrar no sistema)
login: seu loginname (somente minúsculas)
password: sua senha (não é mostrada quando digitada)

Para alterar password
# passwd

Para LOGOUT (sair do sistema)
# logout
# exit
# bye

Para corrigir erros de digitação
Use a tecla Del (delete), ou backspace.

Formato de comandos UNIX
command [options] pathname/nome do arquivo
Nota: se o pathname for omitido, o arquivo nome do arquivo será buscado no diretório corrente..

Filesystem
Coleção hierárquica de diretórios e arquivos

Pathname
É a posição de um diretório na hierarquia do filesystem.
Exemplo: /home/quindim/loginname
Quando o pathname é omitido, o Unix assume o diretório corrente.
HOME directory: é o seu diretório default de login

Diretórios

  • Especificando um diretório relativo:
    • O diretório root /
    • O diretório corrente .
    • O diretório acima do corrente ..
    • Um diretório abaixo do corrente nome do diretório
    • Seu diretório HOME ~
    • Diretório HOME de outro usuário ~userloginname
  • Especificando um diretório absoluto:
    dir1/dir2/dir3...
    onde o primeiro / indica o diretório root e o restante é um pathname explícito a partir deste.
  • Mostrar o diretório corrente
    #pwd
  • Criar diretório
    #mkdir nome do diretório
  • Remover diretório
    #rmdir nome do diretório
    Nota: você só poderá remover um diretório vazio, isto é, antes você terá que remover todos os arquivos abaixo dele.
  • Mudar de diretório

- para qualquer diretório

# cd pathname/nome do diretório

- para um diretório abaixo do corrente

# cd nome do diretório

- para o seu diretório HOME

# cd

Arquivos

  • Criar um arquivo
    Pode ser feito de várias formas:
    1. Usando um editor de texto, como o pico. (ver Pico Quick Guide)
    2. Usando o comando cat:
      # cat > nome do arquivo
      Unix moverá o cursor para a linha seguinte.
      Escreva o texto, terminando cada linha com um Return (ou Enter).
      Você só poderá fazer correções na linha com a tecla Delete.
      Para finalizar, tecle Return (ou Enter).
      Pressione CTRL-d (^d)
    3. Direcionando a saída de um comando para um arquivo:
      # command > nome do arquivo
      Exemplo:
      #dir >diretorio
  • Listar os arquivos

- os arquivos visíveis

#ls (abreviação de list)

- todos os arquivos

#ls -a (abreviação de lista all)

- mostrando o tipo (type) dos arquivos

#ls -F

- os arquivos com a informação completa

ls -l (abreviação de list long)
protections  #links  owner    #bytes  date    time  nome do arquivo
-rwxr-xr-x   1       ownerid  1228    Jan 31  02:50 nome do arquivo

Nota: no primeiro campo, "-" denota um arquivo e "d" um diretório.

  • Remover um arquivo
    #rm nome do arquivo
  • Copiar "arquivo1" para "arquivo2"
    #cp arquivo1 arquivo2
  • Mover (ou Renomear) "arquivo1" para "arquivo2"
    #mv arquivo1 arquivo2
    O mesmo comando serve para mover um arquivo para um diretório, como no exemplo:
    #mv arquivo1 diretorio
    Nota: nome do arquivo1 é removido.
  • Mostrar o conteúdo do arquivo no terminal

- Mostrar página-a-página (tela-a-tela)

# more nome do arquivo
Para ver a página seguinte, pressione a Spacebar
Para ver a próxima linha, pressione a tecla Return
Para interromper, tecle q ou CTRL-C

- Mostrar as primeiras n linhas de um arquivo

# head -n nome do arquivo (default n=10)

- Mostrar as últimas n linhas de um arquivo

# tail -n nome do arquivo (default n=10)

Proteção

Todo arquivo/diretório tem um owner, um group e um conjunto de permissões associado, que define as operações que cada usuário pode realizar com relação ao arquivo/diretório.

Default:

  rwx   r-x  r-x
  ----  ---  ----
   |      |     others: read, execute
   |   group: read, execute
 owner: read, write, execute

onde,
r: permissão para ler
w: permissão para escrever
x: permissão para executar

  • Para alterar as permissões de um arquivo

# chmod <who> <signal protection> <nome do arquivo>
onde,
who: u (owner), g (group), o (others), a (all)
signal: + (dar permissão), - (remover permissão)
protection: r (read), w (write), x (execute)
Exemplo: chmod u+wx arquivo1
atribui ao dono do arquivo as permissoes para escrever e gravar

Help Interativo

Quando você sabe qual o comando
#man command

Quando você sabe o que quer fazer, mas desconhece o comando apropriado
# man -k keyword
ou
# apropos keyword

Nota: keyword pode ser qualquer verbo ou nome que possa descrever o que você está tentando fazer. Quanto mais abrangente a keyword, maiores as chances de encontrar o que procura.

Help de suporte

Para tirar dúvidas sobre o sistema, envie mensagem para apoio@cr-df.rnp.br

Lendo e enviando mensagens

Ver Uso básico do Elm 

 

 

Comandos básicos do linux

 

 

 

 

Esta é uma pequena lista de comandos Linux, mas apesar de simples e pequena e uma mina de ouro para novos e inexperientes usuários que precisam saber um básico para mexer num sistema Linux.
 

Comando

Descrição

Exemplo

ls

Lista os arquivos, mesmo que dir do DOS. Atributos comuns: 
-a = mostra arquivos ocultos 
-l = mostra bytes, permissoes, diretorio, etc. 

(nenhum)

rm

Remove arquivos, no formato: rm (arquivo1) (arquivo2) (arquivo3) ...

rm eu.doc / rm leiame.txt manual.html win95.w95

cp

Copia arquivos, no formato: cp (arquivo1) (diretorio)

cp manual.txt /home/manual

mv

Mover e/ou renomear arquivos Linha: mv origem_do_arquivo destino_do_arquivo ou mv arquivo arquivo1

(nenhum)

cat

Mostra o conteúdo do arquivo, mesmo que o 'type' no DOS

(nenhum)

more

Exibe o conteudo de um arquivo página a página, mesmo que no DOS.

ls|more

pwd

Exibe o diretorio atual (o que vc esta)

(nenhum)

rmdir

Apaga diretório

rmdir /diretorio se o diretório estiver cheio, use o rm com o atributo -r

mkdir

Cria diretório

mkdir /diretorio

clear

Limpa a tela, mesmo que 'cls' no DOS

(nenhum)

who

Mostra quem está na máquina no momento

(nenhum)

whoami

Mostra quem voce eh - util quando vc esquece com que login entrou.

(nenhum)

finger

Mostra o usuario associado a certa chave

(nenhum)

df

Mostra o espaco usado, livre e a capacidade das particoes do HD

(nenhum)

free

Exibe a memoria livre, a usada, e o buffers da memoria RAM

(nenhum)

exit e logout

Sai da sessao atual

(nenhum)

shutdown

"Reseta" a maquina

shutdown -r now

 

 

 

Primeiros passos do linux

 

 

 

 

Drives e partições do Linux
 
Muitas distribuições requerem que você crie as partições do Linux manualmente usando o programa fdisk. Outras podem criar automaticamente as particões pra você. Em ambas as maneiras, você deve conhecer as seguintes informações sobre as partições do Linux e nome dos dispositivos. Aos drives e partições do Linux são dados nomes diferentes aos seus correspondentes em outros sistemas operacionais. No MS-DOS, os drives de disquetes são referidos como A: e B:, ao passo que as partições do disco rigido são denominadas C: e D:, etc. No Linux a convenção da nomenclatura é um pouco diferente. Os drives do dispositivo, encontrados no diretório /dev, são usados para a comunicação com os dispositivos em seu sistema (como: disco rígidos, mouses, etc.). Por exemplo: se você tiver um mouse em seu sistema, irá acessa-lo atravès do drive /dev/mouse
 

Dispositivo

Nome do drive no Linux

Primeiro disquete (A:)

/dev/fd0

Segundo disquete (B:)

/dev/fd1

Primeiro disco rigido (todo o drive)

/dev/hda

Primeiro disco rigido, particao primaria 1

/dev/hda1

Primeiro disco rigido, particao primaria 2

/dev/hda2

Primeiro disco rigido, particao primaria 3

/dev/hda3

Primeiro disco rigido, particao primaria 4

/dev/hda4

Primeiro disco rigido, particao logica 1

/dev/hda5

Primeiro disco rigido, particao logica 2

/dev/hda6

Etc.

 

Segundo disco rigido (todo o drive)

/dev/hdb

Segundo disco rigido, particao primaria 1

/dev/hdb1

Etc.

 

Primeiro disco rigido SCSI (todo o drive)

/dev/sda

Etc.

 

Primeiro disco rigido SCSI, particao primaria 1

/dev/sda1

Etc.

 

Segundo disco rigido SCSI (todo o drive)

/dev/sdb

Segundo disco rigido SCSI, particao primaria 1

/dev/sdb1

Etc.

 

Como criar sistemas de arquivos

Antes de poder usar suas particoes do Linux para armazenar os arquivos, voce tera que criar sistemas de arquivos nelas. Criar um sistema de arquivos e parecido com a formacao de uma particao no MS-DOS ou em outros sistemas operacionais. 

Existem diversos tipos de sistemas de arquivos disponiveis para o Linux. Cada tipo de sistemas de arquivos tem seu proprio formato e conjunto de caracteristicas (como o comprimento do nome de arquivo, o tamanho maximo do arquivo, etc.). O Linux suporta tambem diversos tipos de sistemas de arquivos de "terceiros", como o sistema de arquivos do MS-DOS. 

O tipo de sistemas de arquivos mais usado eh o Second Extended Filesystem (Segundo sistema de arquivos extendidos) ou ext2fs. O ext2fs eh um dos sistemas de arquivos mais eficientes e flexiveis; ele permite os nomes de arquivos com ate 256 caracteres e tamanhos de sistemas de arquivos de ate 4 terabytes. 

Para criar um sistema de arquivos ext2fs, use o comando: 

mke2fs -c tamanho da particao

onde particao eh o nome da particao e tamanho eh o tamanho da particao em blocos. Por exemplo: para criar um sistema de arquivos com 82080 blocos no /dev/hda2, use o comando: 

# mke2fs -c /dev/hda2 82080

Se voce estiver usando diversos sistemas de arquivos para o Linux, precisara usar o devido comando mke2fs para cada sistema de arquivos.

Como criar uma conta do usuário

Para comecar a usar o seu sistema, voce precisara criar uma conta do usuario para si mesmo. Finalmente, se voce pretende ter outros usuarios em seu sistema, ira criar as contas do usuario para eles tambem. Mas antes de comecar a explorar, voce precisara de pelo menos uma conta. Por que isto? Todo sistema Linux tem diversas contas pre-instaladas, como a conta root. Porem, esta conta destina-se exclusivamente a finalidades administrativas. Como root voce tera todos os tipos de previlegios a podera acessar todos os arquivos em seu sistema. Entretando, usar a conta root, pode ser perigoso, sobretudo se voce for um iniciante no Linux. Como nao existem restricoes sobre o que a conta root pode fazer, sera muito facil digitar incorretamente um comando e apagar sem querer arquivos, danificar seu sistema de arquivos, etc. Voce devera conectar-se como root apenas quando precisar executar as tarefas de administracao do sistema, como: consertar os arquivos de configuracao, instalar um novo software, etc. 

Para um uso normal, voce devera criar uma conta do usuario padrao. Os sistemas UNIX tem uma seguranca predefinida que impedem que os usuarios apaguem os arquivos dos outros usuarios, danificando recursos importantes como os arquivos de configuracao do sistema e assim por diante. Isto acontece principalmente com os usuarios sem experiencia em administracao do sistema UNIX. Muitas distribuicoes Linux fornecem ferramentas para criar novas contas. Estes programas sao chamados geralmente de useradd ou adduser. Como root, chamando um desses comandos voce devera ver o resumo do uso do comando e criar uma nova conta devera ser bastante simples. Outrs distribuicoes como o Yggdrasil LGX CD-ROM, fornecem uma ferramenta de administracao do sistema geral para varias tarefas, dentre elas a criacao de uma nova conta do usuario. O comando control-panel (painel de controle) no LGX ira finalizar essa ferramenta. Se tudo mais falhar, voce podera criar uma conta manualmente. Geralmente, tudo o que eh necessario para criar uma conta eh: 

  • Editar o arquivo /etc/passwd para acrescentar o novo usuario. 
  • Editar, opcionalmente,o arquivo /etc/shadow para especificar os atributos da "senha correspondente" para o novo usuario. 
  • Criar o diretorio pessoal do usuario. 
  • Copiar os arquivos de configuracao da estrutura (como o .baschrc) para o diretorio pessoal do novo usuario. Eles podem ser encontrados, algumas vezes, no diretorio /etc/skel. 

Lembre-se de que para definir ou alterar a senha na conta do usuario, voce usara o comando passwd. Por exemplo: para alterar a senha de um usuario com o nome duck, envie o seguinte comando: 

# passwd duck

Isso ira definar ou alterar a senha duck. Se voce executar o comando passwd como root, nao sera solicitado a senha original. Assim, se voce esqueceu sua antiga senha, podera se conectar como root, para redefini-la.

Reconheça o seu teclado no Linux.

Para isso, siga os seguintes passos:

Faça o download dos arquivos necessários em site sobre o unix. 

Copie os arquivos .map para o diretorio:
/usr/lib/kbd/keytables 

Inclua a linha no /etc/profile:
LC_CTYPE=ISO-8859-1
export LC_CTYPE 

Execute os comandos com parametros:
setfont latin1u-16.psf
loadkeys nome_do_mapa_desejado   # arquivo .map 

Para setar o fontes no startup inclua alinha abaixo no
/etc/rc.d/rc.local
setfont lat1u-16.psf 

 

 

 

CDs e disquetes no linux

 

 

 

 

Montando um drive ou partição na inicialização

Para mountar um drive ou uma partição na inicialização do seu Linux, você precisa editar o arquivo fstab, que se localiza no diretorio /etc. O conteudo do arquivo é o seguinte: 

/dev/hdb2         swap        swap         defaults   1   1
/dev/hdb1         /              ext2           defaults   1   1
none                /proc        proc          defaults   1   1

- Para montar o seu drive A: (disco flexível) é so adicionar a seguinte linha: 

/dev/fd0          /mnt/a:     msdos        defaults   1   1

OBS: Nao esqueça de que o diretório /mnt/a: tem que ser criado previamente. 

- Para mountar sua partição do Windows 95 no Linux, adicione a seguinte linha: 

/dev/hda1         /mnt/win95  vfat         defaults   1   1

OBS: Como eu ja disse, o diretório /win95 dentro do /mnt deve ser criado antes de adicionar essa linha no arquivo. Eu estou me baseando que o seu Windows 95 esteja na /dev/hda1, mude dependendo da localização do seu. O vfat serve para que o Linux posso enxergar os diretórios do Windows sem mostrar os caracteres truncados, caso o seu kernel não suporte o vfat, você pode trocar pela opção msdos

Montando seu CD-ROM no Linux

Agora vamos montar o CD-ROM. Se o seu CD for somente de audio, não é preciso montar o drive, se for de dados, vamos usar o comando mount com o exemplo do driver sbpcd. Veja abaixo: 

ross# mount -t iso9660 -r /dev/cdrom /mnt/cdrom 

O CD-ROM vai ser montado no diretório /cdrom. Você pode montar seu CD automaticamente no boot através do arquivo /etc/fstab. 

Agora para desmontar o CD-ROM, utilize: 

ross# umount /mnt/cdrom

 

 

Kernel, parte1

 

 

 

 

Kernel é a principal parte do Linux. Ele é a parte do sistema que sabe como é o seu computador, se ele tem, e qual o tipo, de rede, modem, drives, etc, e faz a gerência destes recursos entre os programas dos usuários.  Após você ter instalado o Linux, o sistema estará rodando com um kernel pré compilado pelos fornecedores da sua instalação (no caso Slackware). Como eles não sabem como é a sua maquina, o kernel é compilado de modo a ser o mais genérico possível e tenta englobar o maior número possível de configurações. Com isso, o kernel fornecido tem uma perda de performance, maior do que deveria e pode não aceitar todos os dispositivos que a sua máquina tenha.  Além deste motivo, você terá que compilar um novo kernel cada vez que você pegar uma nova versão (ftp://sunsite.unc.edu/pub/Linux/kernel é um bom lugar para se procurar ), seja por corrigir bugs, ou aceitar novas características. 

Dica: Ao pegar uma nova versão de kernel, verifique a sua numeração. Ela pode ser 2.0.xx ou 2.1.xx, onde xx é a revisão. A diferença entre 2.0.xx e 2.1.xx é que a versão 2.0.xx é considerada estável, enquanto que as versões 2.1.xx são consideradas versões de desenvolvimento, o que significa que há grandes possibilidades de alguma instabilidade. Prefira as versões 2.0.xx a não ser que você já seja muito experiente (mas ai você não estaria lendo este texto).  Obs.: Para se poder compilar um kernel, você deve ter instalado o compilador C (GCC) , as bibliotecas C (libC), ter um espaço em disco suficiente ( eu diria que uns 50Mb são mais que suficientes) e estar logado como root. 

 Adiante, será considerado que você já tenha lido os capítulos anteriores. 

1) Descompactando os fontes. 

Normalmente ao se instalar o Linux, teremos a seguinte configuração no diretório /usr/src que é o diretório onde por convenção são colocados os fontes de qualquer programa que você venha a compilar. 

# cd /usr/src 
# ls -l 
total 1 
lrwxrwxrwx   1 root     root           13 Mar  6 04:52 linux -> linux-2.0.30/ 
drwxr-xr-x  15 1046     1046         1024 Mar  6 05:04 linux-2.0.30 

Caso a versão do kernel que você vai compilar é a própria que já esta instalada (no caso 2.0.30), pule para o próximo item, se não ... 

Delete o link simbólico com a seguinte instrução : 

 # rm linux 

Descompacte a nova versão usando o comando tar (considerando-se que a nova versão seja a 2.0.33 e que ela estaja no diretório /root/tgz ): 

 # tar xzvf /root/tgz/linux-2.0.33.tgz

Renomeie o kernel, que foi descompactado dentro de um diretório chamado linux para algo mais informativo : 

 # mv linux linux-2.0.33 

Crie um link simbólico para ele com o nome linux : 

 # ln -s linux-2.0.33 linux 

Opcionalmente,delete a versão antiga do kernel para liberar espaço : 

 # rm -rf linux-2.0.30 

2) Configuração do kernel 

Há três maneiras de se configurar o kernel, ‘make config’, ‘make menuconfig’ e ‘make xconfig’.Eu irei seguir a primeira, que é uma interface de modo texto e a mais usada. As outras duas são interfaces mais user-friendly (facilitadas)  para a configuração do kernel, a 1a em modo texto e a segunda usando o X. 
  Digite: 

  # make config 

A seguir será dada uma breve explicação sobre as perguntas feitas durante a configuração. 
 Haverão diferenças entre as perguntas aqui descritas e as que voce irá responder, devido a diferentes versões do Kernel e diferentes configurações de hardware. (muitas vezes, ao se responder sim em uma opção, aparecerão outras mais detalhadas sobre o assunto. Neste caso, tecle “?” na pergunta , que lhe será dado uma breve explicação sobre a pergunta). 

Code maturity level options'
 Prompt for development and/or incomplete code/drivers 
Se disser sim, você estará habilitando o suporte a dispositivos em desenvolvimento ou experimentais, podendo o seu kernel ficar instável. Responda Não a menos que você precise de algum suporte específico. 

Loadable module support
 Enable loadable module support
 Diga sim se você quiser compilar parte do seu Kernel como módulos separados que podem ser carregados posteriormente ao boot da máquina. É util quando se tem uma maquina que mude muito de comfiguração. Normalmente, diga Não. 

General setup 
 Kernel math emulation 
Se você tiver um 386 ou um 486SX sem co-processador, diga sim, senão, Diga Não. 

 Networking support 
 Suporte à redes. Diga Sim, pois senão quase nada funciona. 

 Limit memory to low 16MB 
 Diga Não, a menos que você tenha uma motherboard antiga, incapaz de reconhecer a memória acima de 16Mb. 

 PCI bios support 
 Diga Sim se o seu micro tiver placas PCI. 

 System V IPC 
 IPC é um protocolo de comunicação entre processos, usado por alguns programas, como por exemplo o DOSEMU (emulador de DOS) e, a não ser que você esteja montando um kernel com alta restrição de tamanho, diga Sim. 

 Kernel support for a.out binaries 
 A.OUT é o formato de arquivo executável usado em versões antigas do Linux, portanto, é recomendável dizer Sim, a menos que você tenha certeza absoluta de que não tem nenhum programa compilado em a.out. 

 Kernel support for ELF binaries 
 ELF é o novo formato de executáveis no Linux, portanto diga Sim, caso contrário você não conseguirá rodar quase nada no seu micro (isso se ele chegar a dar boot). 

 Compile kernel as ELF - if your GCC is ELF-GCC' 
 Diga Sim. Já que existe um formato novo e mais versátil, vamos usá-lo. 

 Processor type 
 Escolha o tipo de processador da sua máquina. Se voce quiser um kernel genérico, porém não otimizado, escolha 386. 

Floppy, IDE, and other block devices 
 Normal floppy disk support 
 Diga Sim para ter suporte a disquetes. 

 Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support 
 Diga Sim para habilitar o suporte a dispositivos IDE. 

 Use old disk-only driver on primary interface 
 Diga Nao, a menos que você use um disco rígido antigo MFM ou RLL. 

 Include IDE/ATAPI CDROM support 
 Diga Sim se você tiver CDROM e ele for IDE (ATAPI) 

 Include IDE/ATAPI TAPE support 
 Diga Sim se voce tiver uma unidade de fita IDE 

 Include IDE/ATAPI FLOPPY support (new) 
 Diga Sim se você tiver um Floppy IDE (Sinceramente, nunca vi um destes) 

 SCSI emulation support 
 Diga Não, a menos que você tenha algum dispositivo IDE que deva ter suporte SCSI, como por exemplo gravadores de CD. 

 Support removable IDE interfaces (PCMCIA) 
 A nao ser que você esteja instalando o Linux em um notebook, diga Não. 

 CMD640 chipset bugfix/support 
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza. 

 RZ1000 chipset bugfix/support 
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza. 

 Intel 82371 PIIX (Triton I/II) DMA support 
 Diga Sim se voce tiver uma placa com este chipset ou não tiver certeza. 

 Other IDE chipset support 
 Se voce disser Sim, lhe serão dadas outras opções de chips controladores de IDE. 

dditional Block Devices 
 Loopback device support 
 Loopback é usado para se poder montar um arquivo como se fosse um filesystem completo. Diga não, a menos que você tenha algum uso para isso. 

 Multiple devices driver support 
 Possibilita montar mais de um dispositivo físico (por exemplo, 2 HDs) como um único filesystem. Diga não a menos que voce vá usar isso. 

 RAM disk support 
 Possibilita a criação de um disco em RAM. Normalmente usado quando você cria um kernel para ser colocar em disquete. Normalmente, diga Não. 

 XT harddisk support 
 Diga Não, a menos que você tenha um HD antigo MFM ou RLL com placa controladora não IDE. 

Networking options 
 Network firewalls 
 Diga não a menos que você esteja montando uma máquina firewall, e não um máquina uso normal. 

 Network aliasing 
 Diga Sim apenas se você precisar designar com nomes (numeros) diferentes uma mesma interface de rede. Usado por exemplo se você for rodar um servidor de HTTP. 

 TCP/IP networking 
 Diga Sim, pois mesmo que você não esteja em ree, vários programas, como por exemplo o Xserver usam o protocolo TCP/IP para comunicação entre processsos. 

  IP: forwarding/gatewaying 
 Diga não a menos que você esteja compilando o kernel para um roteador. 

  IP: multicasting 
 Diga não ! 

  IP: syn cookies 
 Diga Sim. Isso evita um tipo de ataque chamado de Syn Flood. 

  IP: accounting 
 Diga Não, a menos que você precise das estatisticas geradas sobre o acesso à rede. 

  IP: optimize as router not host 
 Diga não a menos que você esteja compilando o kernel para um roteador. 

  IP: tunneling 
 Diga não, a menos que você saiba o que é tunneling e como usar. 

  IP: PC/TCP compatibility mode 
  IP: Reverse ARP 
  IP: Disable Path MTU Discovery (normally enabled) 
  IP: Drop source routed frames 
  IP: Allow large windows (not recommended if <16Mb of memory) 
 Mantenha a resposta padrão para as cinco perguntas anteriores, como recomendado pelo próprio programa de configuração, a menos que você saiba o que está fazendo. 

 The IPX protocol 
 Diga Não, a menos que você queira rotear pacotes IPX (Novell) 

 Appletalk DDP 
 Diga Não, a menos que você queira rotear pacotes Appletalk 

 Amateur Radio AX.25 Level 2 
 Diga Não, a menos que você queira rotear pacotes AX.25 

 Kernel/User network link driver 
 Diga Não, a menos que você conheça a fundo o funcionamento do Kernel. 

SCSI support 
 SCSI support 
 Diga Sim se você algum dispositivo SCSI (ou um ZIP drive) 

  SCSI disk support 
 Diga Sim se você tem algum HD SCSI. 

  SCSI tape support 
 Diga Sim se você tem algum dispositivo de FITA SCSI. 

  SCSI CD-ROM support 
 Diga Sim se você tem algum CDROM SCSI. 

  SCSI generic support 
 Diga Sim se você tem algum outro tipo de dispositivo SCSI, como por exemplo um Gravador de CDs. 

  Probe all LUNs on each SCSI device 
 Diga Sim apenas se você tiver algum dispositivo SCSI que responda por mais de um endereço, como por exemplo JukeBox de CDs. 

  Verbose SCSI error reporting (kernel size +=12K) 
 Se voce disser Sim, o seu kernel ficará 12K maior, porém, os erros da SCSI serão reportados em palavras, e não numericamente. Normalmente se diz Não. 

   7000FASST SCSI support 
   Adaptec AHA152X/2825 support 
   Adaptec AHA1542 support 
nbsp;  Adaptec AHA1740 support 
   Adaptec AIC7xxx support 
   AdvanSys SCSI support 
   Always IN2000 SCSI support 
   AM53/79C974 PCI SCSI support 
   BusLogic SCSI support 
   DTC3180/3280 SCSI support 
   EATA-DMA (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support 
   EATA-PIO (old DPT PM2001, PM2012A) support 
   EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support 
   Future Domain 16xx SCSI support 
   Generic NCR5380/53c400 SCSI support 
   NCR53c406a SCSI support 
   NCR53c7,8xx SCSI support 
   NCR53C8XX SCSI support 
   IOMEGA Parallel Port ZIP drive SCSI support 
   PAS16 SCSI support 
   Qlogic FAS SCSI support 
   Qlogic ISP SCSI support 
   Seagate ST-02 and Future Domain TMC-8xx SCSI support 
   Tekram DC-390(T) SCSI support 
   Trantor T128/T128F/T228 SCSI support 
   UltraStor 14F/34F support 
   UltraStor SCSI support 
   GDT SCSI Disk Array Controller support 
 Diga Sim para a o(s) modelo(s) de placa(s) que voce tiver no seu computador. A placa mais comum do nosso mercado é a ADAPTEC 2940, que deve ser escolhida como Adaptec AIC7xxx. 

etwork device support 
 Network device support 
 Diga sim, a menos que você não vá conectar sua máquina a nenhuma outra, seja via rede ou modem. 

  Dummy net driver support 
 Diga Sim se for usar SLIP. 

  EQL (serial line load balancing) support 
 Diga não, a menos que você tenha mais de uma linha serial interligando dois pontos e queira usá-las em conjunto. 

nbsp; PLIP (parallel port) support 
 Diga Não, a menos que você que conectar dois computadores em rede pela porta paralela. 

  PPP (point-to-point) support 
 Diga sim se você for usar o protocolo PPP. 

  SLIP (serial line) support 
 Diga Sim se você for usa o protocolo SLIP (Se o seu provedor aceitar SLIP e PPP, prefira PPP). 

  Radio network interfaces 
 Diga Sim se você tem alguma placa de comunicação via radio amador. 

  Ethernet (10 or 100Mbit) 
 Diga Sim se tiver placa de rede. 
   3COM cards 
   AMD LANCE and PCnet (AT1500 and NE2100) support 
   Western Digital/SMC cards 
   Other ISA cards 
    Cabletron E21xx support 
    DEPCA, DE10x, DE200, DE201, DE202, DE422 support 
    EtherWORKS 3 (DE203, DE204, DE205) support 
    EtherExpress 16 support 
    HP PCLAN+ (27247B and 27252A) support 
    HP PCLAN (27245 and other 27xxx series) support 
    HP 10/100VG PCLAN (ISA, EISA, PCI) support 
    NE2000/NE1000 support 
    SK_G16 support 
    EISA, VLB, PCI and on board controllers 
    Apricot Xen-II on board ethernet 
    Intel EtherExpress/Pro 100B support 
    DE425, DE434, DE435, DE450, DE500 support 
    DECchip Tulip (dc21x4x) PCI support 
    Digi Intl. RightSwitch SE-X support 
    Pocket and portable adaptors 
    Token Ring driver support 
    FDDI driver support 
    ARCnet support 
 Escolha a(s) sua(s) placa(s) de rede. As placas mais comum são cobertas pelo driver NE2000/NE1000 support. 

ISDN subsystem 
 Diga Não, a menos que você tenha uma linha IDSN (RDSI). 

CD-ROM drivers (not for SCSI or IDE/ATAPI drives) 
 Support non-SCSI/IDE/ATAPI CDROM drives 
 Diga Sim se o seu CDROM não for IDE ou SCSI. 

 Aztech/Orchid/Okano/Wearnes/TXC/CyDROM  CDROM support 
 Goldstar R420 CDROM support 
 Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support 
 Mitsumi (standard) [no XA/Multisession] CDROM support 
 Mitsumi [XA/MultiSession] CDROM support 
 Optics Storage DOLPHIN 8000AT CDROM support 
 Philips/LMS CM206 CDROM support 
 Sanyo CDR-H94A CDROM support 
 Soft configurable cdrom interface card support 
 Sony CDU31A/CDU33A CDROM support 
 Sony CDU535 CDROM support 
 Escolha o tipo do seu CDROM entre as ascolhas acima. O caso mais comum, é o CDROM conectado nas placas de som, neste caso, escolha Matsushita... 

Filesystems 
 Quota support 
 Diga Sim, se você for usar um sistema multi-usuário e queira definir cotas de espaço em diso e utilização de CPU para cada usuário. 

 Minix fs support 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

 Extended fs support 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem (que é o antigo filesystem do Linux). 

 Second extended fs support 
 Diga Sim, pois este é o filesystem do Linux

 xiafs filesystem support 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

 DOS FAT fs support 
 Diga Sim para poder acessar uma partição DOS. 

 MSDOS fs support 
 Diga Sim para poder acessar uma partição DOS. 

 umsdos: Unix like fs on top of std MSDOS FAT fs 
 Diga Não, a menos que você esteja rodando o Linux em uma partição DOS. 

ISO9660 cdrom filesystem support 
 Diga Sim se você tem CDROM. 

 VFAT (Windows-95) fs support 
 Diga Sim para ter o suporte a nomes longos do WIN95. 

 /proc filesystem support 
 Diga Sim para ter o filesystem virtual que é montado no diretório /proc, sem o qual vários programas não rodam. 

 NFS filesystem support 
 Diga Sim se você quiser montar arquivos via NFS (filesystem em rede) que, apesar de muito comodo, é muito inseguro. 

 SMB filesystem support (to mount WfW shares etc..) 
 Diga sim se você quer exportar/importar drives e impressoras para/de uma máquina Win95. 

 SMB Win95 bug work-around 
 Diga Sim sempre. 

 NCP filesystem support (to mount NetWare volumes) 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

 OS/2 HPFS filesystem support (read only) 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

 System V and Coherent filesystem support 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

 UFS filesystem support (read only) 
 Diga Não, a menos que tenha que dar suporte a este tipo de filesystem. 

Character devices 
 Standard/generic serial support 
 Diga Sim se quiser suporte às suas seriais. 

 Digiboard PC/Xx Support 
 Diga Sim se tiver uma placa Digiboard. 

 Cyclades async mux support 
 Diga Sim se tiver um multiserial Cyclades. 

 Stallion multiport serial support 
 Diga Sim se tiver uma multiserial Stallion. 

 SDL RISCom/8 card support 
 Diga Sim se tiver uma multiserial SDL. 

 Parallel printer support 
 Diga Sim se for conectar uma impressora à sua máquina. 

 Specialix IO8+ card support 
 Diga Sim se tiver uma placa destas. 

 Mouse Support (not serial mice) 
 Diga Sim se tiver um mouse não serial. 

 Support for user misc device modules 
 Diga Sim se você tiver algo como por exemplo mesas digitalizadoras ou pens. 

 QIC-02 tape support 
 Diga sim se tiver um Tape Backup destes. 

 Ftape (QIC-80/Travan) support 
 Diga sim se tiver um Tape Backup destes. 

 Advanced Power Management BIOS support 
 Diga Sim se quiser suporte às caracteristicas green de sua máquina. Normalmente só diga Sim em notebooks. 

 Watchdog Timer Support 
 Diga Sim ser quiser suporte para Watchdog via Software ou Hardware. 

Enhanced Real Time Clock Support 
 Diga sim se quiser suporte ao RTC do seu micro. Necessário no caso de multiprocessamento. 

Sound 
Sound card support 
 Diga Sim se quiser suporte à placas de som. 

 ProAudioSpectrum 16 support 
 Sound Blaster (SB, SBPro, SB16, clones) support 
 Generic OPL2/OPL3 FM synthesizer support 
 Gravis Ultrasound support 
 MPU-401 support (NOT for SB16) 
 6850 UART Midi support 
 PSS (ECHO-ADI2111) support 
 16 bit sampling option of GUS (_NOT_ GUS MAX) 
 GUS MAX support 
 Microsoft Sound System support 
 Ensoniq SoundScape support 
 MediaTrix AudioTrix Pro support 
 Support for MAD16 and/or Mozart based cards 
 Support for Crystal CS4232 based (PnP) cards 
 Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers 
 Escolha a sua placa de som. De acordo com a placa escolhida, lhe serão feitas perguntas sobre ela, como por exemplo em qual I/O e IRQ ela está instalada. 

 /dev/dsp and /dev/audio support 
 Diga Sim, pois quase todos os programas acessam a placa de som através destes arquivos. 

MIDI interface support 
 Diga Sim se tiver uma saida MIDI na sua placa de som. 

 FM synthesizer (YM3812/OPL-3) support 
 Quase trodas as placas de som tem este sintetizador de som, logo diga Sim. 

udio DMA buffer size 4096, 16384, 32768 or 65536 
 Não mude, a não ser que esteja com problemas estranhos no som. 

 Additional low level drivers 
Diga sim se quiser ver outros drivers disponíveis. 

Kernel hacking 
 Kernel profiling support 
 Diga Não a menos que você seja um expert em Linux. 
 

3) Compilando o kernel 

Após configurar o kernel, você deve rodar: 

 # make dep 

para que sejam criadas as dependências entre os varios fontes do kernel,depois digite: 

 # make clean 

para que seja feita uma limpeza da casa, garantindo que o kernel seja compilado por completo, sem que sejam usados trechos pré compilados anteriormente. 
 Finalmente, digite: 

 # make zImage 

Sente na cadeira e espere (uns 7 minutos em um P200) enquanto o kernel compila e se compacta. 
Há outros parametros de compilação para o make, como por exempolo para se compilar o kernel e não compilá-lo, porém este é o mais usado. 

Atualizando o kernel do Linux

4) Instalando o kernel 

Se o kernel compilou com sucesso (*), voce terá no diretório arch/i386/boot o arquivo zImage, que é o kernel compilado e comprimido. 
 Copie-o para a raiz: 

 # cp arch/i386/boot/zImage /zImage.2.0.33 

  Mesmo não usando módulos, é interessante digitar também os seguintes comandos, para que as referências antas aos módulos, se ouverem, sejam refeitas. 

  # make modules 
  # make modules-install 

Edite o arquivo lilo.conf no diretório /etc 

 # vi /etc/lilo.conf 

que deve aparentar algo assim: 

boot=/dev/hda 
map=/boot/map 
install=/boot/boot.b 
prompt 
timeout=50 

image=/vmlinuz 
 label=linux 
 root=/dev/hda3 
 read-only 

other=/dev/hda1 
 label=dos 
 table=/dev/hda 

Onde há Linux e DOS instalados, e altere-o para ficar assim: 

boot=/dev/hda 
map=/boot/map 
install=/boot/boot.b 
prompt 
timeout=50 

image=/zImage.2.0.33  \ linhas adicionadas 
 label=linux          | 
 root=/dev/hda3       | 
 read-only            / 

image=/vmlinuz 
 label=linuxold  -> Linha alterada 
 root=/dev/hda3 
 read-only 

other=/dev/hda1 
 label=dos 
 table=/dev/hda 

Obs.: o primeiro bloco ‘image’ ou ‘other’ do arquivo será aquele selecionado no boot se não houver selecão 

  Reconfigure o LILO: 

  # lilo 

  Finalmente, reinicie o computador e teste a nova versão. 
  Caso tenha algum problema, quando aparecer, 

  LILO boot: 

  digite: 

  linuxold 

  e o sistema irá carregar o kernel antigo, te dando a chance de resolver o problema e tentar novamente. 

(*) Se você tiver erros na compilação do kernel, verifique estes erros mais comuns: 

Talvez você tenha habilitado muitas opções na configuração e o kernel esteja ficando grande demais. Se você estiver tendo erros (normalmente tipo 11), principalmente se estes forem em lugares diferentes a cada compilação você pode estar na presença de uma máquina com problemas de memória (compilar um kernel com sucesso é reconhecido como o melhor teste para memórias que existe) Tente usar o comando ‘make mrproper’ que faz uma limpeza mais profunda na configuração, inclusive deletando a sua configuração anterior. 

 

 

 

Kernel, parte2

 

 

 

 

ESTILO DE CODIFICAÇÃO DO KERNEL NO LINUX

Este é um pequeno documento descrevendo o estilo de codificação ideal para o kernel do Linux. O estilo de codificação é muito pessoal, e eu não irei forçar meu estilo para ninguém, mas este é o modo para qualquer coisa que eu tenha que manter, e eu preferiria por vários outros motivos também. Por favor pelo menos considere os pontos expostos aqui. Primeiramente, eu sugiro imprimir uma cópia dos padrões de codificação do GNU e NÃO os ler. Queime-os, é um grande ato simbólico. 

De qualquer maneira, aqui vai: 

Capítulo 1: Indentação

Tabulações são 8 caracteres, e portanto as indentações também são de 8 caracteres. Há movimentos hereges que tentam fazer a indentação com 4 (ou mesmo 2!) caracteres, e isto ‚ quase o mesmo que tentar definir o valor de PI para ser 3. Razão: a idéia por trás da indentação é definir claramente aonde um bloco de controle começa e termina. Especialmente quando você está olhando para a sua tela por 20 horas seguidas, você irá achar muito mais fácil ver como a indentação funciona se você usa indentações largas. Agora, algumas pessoas irão dizer que ter uma indentação de 8 caracteres faz com que o código se mova muito longe para a direita, e torna difícil a leitura em um terminal com 80 colunas. A resposta para isso é que se você precisa mais que 3 níveis de indentação, você está enrolado, e deve consertar o seu programa. Resumindo, indentações com 8 caracteres fazem as coisas mais fáceis de serem lidas, e têm o benefício de avisar a você quando está aninhando muito as suas funções. Preste atenção neste aviso. 

Capítulo 2: Colocando chaves 

A outra questão que sempre surge na programação em C é a colocação de chaves. Ao contrário do tamanho da indentação, há poucas razões técnicas para a escolha de uma estratégia de colocação sobre outra, mas a maneira preferida, como mostrado para nós pelos profetas Kernighan e Ritchie, e colocar a chave que abre por último na linha, e colocar a chave que fecha primeiro, deste modo: 

        if (x eh verdadeiro) {
                faz y
        }

Entretanto, há um caso especial, chamado funções: elas têm a chave que abre no começo da próxima linha, assim: 

        int funcao(int x)
        {
                corpo da funcao
        }

Pessoas heréticas em todo o mundo tem reclamado que esta inconsistência é... bem... inconsistente, mas todas as pessoas que pensam corretamente sabem que (a) K&R estão certos e (b) K&R estão certos. Além disso, as funções são especiais de qualquer modo (você não pode aninha-las em C). Note que a chave que fecha é o único componente da sua linha, exceto nos casos onde é seguido por uma continuação da mesma declaração, ou seja, um "while" em uma declaração "do" ou um "else" em uma declaração "if", como esta: 

        do {
                corpo do laco do
        } while (condicao);
                
e
 
        if (x == y) {
                ..
        } else if (x > y) {
                ...
        } else {
                ....
        }

Razão: K&R. 

Note que esta colocação das chaves também minimiza o número de linhas vazias (ou quase vazias), sem perda de entendimento. Assim, como a quantidade de linhas em sua tela não é um recurso renovável (pense em terminais com 25 linhas), você tem mais linhas vazias para colocar os comentários. 

Capítulo 3: Nomenclatura

C ‚ uma linguagem Espartana, e também deve ser a sua nomenclatura. Ao contrário de programadores de Modula-2 e Pascal, programadores de C não usam nomes bonitos como EstaVariavelEUmContadorTemporario. Um programador de C chamaria esta variável de "tmp", que ‚ muito mais fácil de escrever, e nem por isso mais difícil de entender. ENTRETANTO, enquanto o uso de nomes com caixa-alta e caixa-baixa é duvidoso, nomes descritivos para variáveis globais é necessário. Chamar uma variável global de "foo" é uma ofensa. Variáveis GLOBAIS (para serem usadas somente se você realmente precisa delas) precisam ter nomes descritivos, assim como funções globais. Se você tem uma função que conta o número de usuários ativos, você deve chama-la de "conta_usuarios_ativos()" ou similar, você não deve chama-la de "cntusr()". 

Codificar o tipo de uma função no seu nome (chamado de Notação Húngara) é prejudicial ao cérebro - de qualquer maneira o compilador sabe os tipos e pode verificá-los, e isto somente confunde o programador. Não é de se admirar por que a Microsoft faz programas com erros. Os nomes de variáveis LOCAIS devem ser curtos, e diretos ao assunto. Se você tem algum contador inteiro aleatório de laço, deve ser provavelmente chamado de "i". Chama-lo de "contador_laco" não é produtivo, e ainda existe alguma chance de ser mal interpretado. Similarmente, "tmp" pode ser qualquer tipo de variável que é usado para conter um valor temporário. Se você está com medo de misturar os nomes de suas variáveis locais, você tem um outro problema, que é chamado de síndrome do descontrole do hormônio de crescimento de função. Veja o próximo capítulo. 

Capítulo 4: Funções

As funções devem ser pequenas e práticas, e fazer somente uma coisa. Elas devem preencher uma ou duas telas completas de texto (o tamanho de tela ISO/ANSI é 80x24, como todos nós sabemos), e fazer somente uma coisa e fazer isto bem. O tamanho máximo de uma função é inversamente proporcional à complexidade e ao nível de indentação desta função. Então, se você tem uma simples função que é somente uma comprida (mas simples) cláusula case, onde você tem que fazer várias coisas pequenas para muitos diferentes cases, está correto ter uma função longa. Entretanto, se você tem uma função complexa e suspeita que um aluno da escola primária não muito brilhante pode nem mesmo entender do que a função se trata, você deve aderir aos limites máximos mais atenciosamente. Use funções de ajuda com nomes descritivos (você pode pedir ao compilador para coloca-las em inline se a performe é um ponto crítico, e ele provavelmente irá fazer um melhor trabalho do que você teria feito). 

Outra avaliação da função é o número de variáveis locais. Elas não devem exceder 5 a 10, ou você está fazendo alguma coisa errada. Repense a função, e divida-a em pedaços menores. Um cérebro humano geralmente pode manter atenção em aproximadamente 7 coisas diferentes, qualquer coisa a mais ele fica confuso. Você sabe que você é brilhante, mas talvez gostaria de entender o que você fez a 2 semanas atrás agora. 

Capítulo 5: Comentários

Comentários são bons, mas há também o perigo de super-documentar. NUNCA tente explicar COMO o seu código funciona em um comentário: é muito melhor escrever o código para que o modo como funciona seja óbvio, e é uma perda de tempo tentar explicar um código mal escrito. Geralmente, você quer que os seus comentários digam o QUE o seu código faz, não COMO. Tente evitar colocar comentários dentro do corpo de uma função: se a função é tão complexa que você precise comentar partes separadas da mesma, deveria voltar ao capítulo 4. Você pode fazer pequenos comentários para notificar ou avisar sobre algo particularmente interessante (ou feio), mas tente evitar excessos. Ao contrário, ponha os comentários no cabeçalho da função, avisando às pessoas o que ela faz, e possivelmente POR QUE ela faz isso. 

Capítulo 6: Você fez uma bagunça

Tudo bem, todos nós fazemos. Você provavelmente foi avisado pelo seu ajudante usuário de linux por muito tempo que o "GNU emacs" formata o código fonte C automaticamente para você, e você notou que sim, ele faz isso, mas os defaults que ele usa são menos que desejáveis (de fato, eles são piores que uma digitação aleatória - um número infinito de macacos digitando no GNU emacs nunca iriam fazer um bom programa). Então, você tanto pode se livrar do GNU emacs como muda-lo para que use valores mais sanos. Para fazer o último, você pode adicionar o seguinte no seu arquivo .emacs: 

(defun linux-c-mode ()
  "Modo C com defaults ajustados para uso com o kernel do Linux."
  (interactive)
  (c-mode)
  (setq c-indent-level 8)
  (setq c-brace-imaginary-offset 0)
  (setq c-brace-offset -8)
  (setq c-argdecl-indent 8)
  (setq c-label-offset -8)
  (setq c-continued-statement-offset 8)
  (setq indent-tabs-mode nil)
  (setq tab-width 8))

Isto irá definir o comando M-x linux-c-mode. Quando hackear um módulo, se você colocar a string -*- linux-c -*- em algum lugar nas primeiras duas linhas, este modo será automaticamente ativado. Você também pode querer adicionar 

(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode)
                       auto-mode-alist))

no seu arquivo .emacs se você quiser ter linux-c-mode ativado automagicamente quando você editar arquivos fonte dentro do /usr/src/linux. 

Mas mesmo que você falhe em fazer o emacs fazer uma formatação lógica, nem tudo está perdido: use "indent". Agora, novamente, o GNU indent tem as mesmas configurações confusas que o GNU emacs, e é por isso que você tem que dar a ele algumas opções de linha de comando. Entretanto, isto não é tão ruim assim, porque mesmo os autores do GNU indent reconheceram a autoridade do K&R (as pessoas do GNU não são más, estão somente severamente desencaminhadas neste sentido), então você somente tem que dar ao indent as opções "-kr -i8" (significa "K&R, 8 caracteres de indentação"). "indent" tem várias opções, e especialmente quando se trata de reformatação você deve dar uma olhada na página do manual. Mas lembre-se: "indent" não é uma solução para uma má programação.

 

 

 

Modos de permissão no linux

 

 

 

 

Quem ja usou o TELNET ou o FTP para ter acesso a computadores remotos, já percebeu que as listagens dos comandos "dir" ou "ls -l" são compostas de várias colunas de informações. É fácil identificar nessas listagens o nome, tamanho, data e dono dos arquivos. Mas o que são estes 10 caracteres do inicio das linhas? Para que servem? 
   -----
     |
     v
  -rw-r--r--   1 lna  ftp-adm  181830 May 16 11:26 AAResources
  -rw-r--r--   1 lna  ftp-adm   53104 May 16 11:26 FAQ
  drwxr-xr-x   2 lna  ftp-adm     512 Oct 18  1995 Info
  drwxr-xr-x   2 lna  ftp-adm    1024 Oct 18  1995 Software
  -rw-r--r--   1 lna  ftp-adm   61905 Apr 15 05:37 Welcome

É possível altera-los a vontade? Procuraremos responder a estas perguntas ao longo deste texto. 

Geralmente os usuários conectados a Internet tem conta em uma máquina executando Unix ou Linux, mas os sistemas de janelas, amplamente utilizados atualmente, muitas vezes impedem que estes caracteres sejam vistos. 

Verificando quem pode ter acesso aos arquivos

Três classes de usuários podem ter acesso aos arquivos: o dono (a pessoa que criou o arquivo), o grupo (usuários que são agrupados pelo administrador do sistema) e os outros (todos os usuários conectados a rede). Os 10 primeiros caracteres das linhas listadas pelo "ls -l" ou "dir" definem precisamente o que os usuários de cada classe podem fazer com seus arquivos. Esses caracteres são chamados de modos de permissão dos arquivos. Para entender o que esses caracteres significam, separe-os em 4 grupos com 1, 3, 3 e 3 caracteres: 

             [ ]       [ ][ ][ ]         [ ][ ][ ]         [ ][ ][ ]
              |            |                 |                 |
             tipo        dono              grupo             outros

O primeiro caractere define o tipo de arquivo: se for um "-" então é um arquivo normal. Se for um "d", é o nome de um diretório. Se for um "l" entao é um 'link' simbólico. Outras possibilidades raramente utilizadas são "b", "c", "p" ou "s". 

Os outros 9 caracteres devem ser separados em 3 grupos de 3 caracteres: o primeiro grupo define as permissões do dono do arquivo, o segundo grupo as permissões do grupo de usuários e o terceiro define as permissões de todos os outros usuários. 

Em cada grupo, as permissões sempre aparecem na ordem leitura-escrita-execução. A permissão de leitura é sempre indicada com um "r", a permissão de escrita com um "w" é a permissão de execução com um "x". Permissão negada é indicada com um "-". 

Exemplo: Entre as linhas que aparecem na listagem de diretório que apresentamos no inicio deste texto, temos as duas linhas seguintes: 

-rw-r--r--   1 lna ftp-adm   53104 May 16 11:26 FAQ
drwxr-xr-x   2 lna ftp-adm   512 Oct 18 1995 Info 

Correspondendo ao nome "FAQ" temos as permissões -rw-r--r-- , que podem ser separadas da seguinte forma: 

-        rw-        r--        r--
tipo     dono       grupo      outros

O primeiro "-" significa que FAQ é um arquivo comum. As permissões do dono de FAQ são "rw-", o que significa que o dono pode ler e escrever no arquivo. As permissões do grupo ou dos outros usuários é "r--" o que significa que eles podem apenas ler (ou copiar) o arquivo. 

Correspondendo ao nome "Info" temos as permissões drwxr-xr-x. O tipo do arquivo é "d", ou seja, é um diretório. As permissões do dono são "rwx", isto é, o dono pode ler, escrever e executar o diretório. "Executar o diretório" significa poder "entrar" nele e eventualmente utilizar seus arquivos. As permissões do grupo e de todos os outros usuários é "r-x", isto é, eles podem ler e executar mas não podem escrever nada no diretório. 

Exemplo: Todas as mensagens que chegam para determinado usuário, via correio eletrônico, são guardadas em um único arquivo com nome igual ao nome de 'login' no subdiretório /var/spool/mail (ou nome de caminho parecido). No meu caso, a listagem deste arquivo com o comando "ls -l" mostra a seguinte linha: 

-rw-rw----   1 ccendm03   mail   18750 Jul 2 13:59 ccendm03 

Isto significa que o dono (rw-) tem permissão de leitura e escrita neste arquivo, o grupo "mail" também tem as mesmas permissões (rw-). Os outros usuários (---) não podem ter acesso a ele. Resta saber quem são os usuários do grupo "mail" definidos pelo admistrador do sistema. 

Alterando as permissões de acesso a um arquivo

Use o comando 'chmod' para alterar as permissões de um arquivo seu. Este comando pode ser usado de duas maneiras: 

(1) chmod atribuição arquivo 

onde "atribuição" é uma sequência de caracteres formada por: 

- pelo menos um dos caracteres "u" (dono), "g" (grupo) ou "o" (outros), indicando a(s) classe(s) que tera(ão) permissão alterada; 

- os sinais "+", "-" ou "=" indicando se a permissão será adicionada (+), retirada (-) ou definida (=); 

- pelo menos um dos caracteres "r" (leitura), "w" (escrita) ou "x" (execução) indicando as permissões. 

Exemplo:

     # chmod ugo=rw texto.doc 

Este comando determina que o dono, o grupo e todos os outros usuários tenham permissão de leitura e escrita no arquivo texto.doc. Desse modo, o comando "ls -l" mostrara algo parecido com: 

-rw-rw-rw-   1 ccendm03   users   1200 Jul 5 20:09 teste.doc 

     # chmod go-w texto.doc 

Neste comando, são retiradas as permissões de escrita no arquivo texto.doc para os usuários do grupo e também para todos os outros usuários: 

-rw-r--r--   1 ccendm03   users   1200 Jul 5 20:09 teste.doc 

     # chmod g+w texto.doc 

Agora, o grupo de usuários também terá permissão de escrita no arquivo texto.doc: 

-rw-rw-r--   1 ccendm03   users   1200 Jul 5 20:09 teste.doc 

(2) Outra forma de usar o 'chmod': 

     # chmod número arquivo 

onde "número" é um número octal (base 8) formado por 3 algarismos, todos no intervalo de 0 a 7, de tal forma que a representação binaria com 9 digitos deste número esteja relacionada aos modos de permissão da seguinte forma: 0 corresponda a permissão negada, 1 corresponda a permissão concedida. 

Exemplo: chmod 644 Teste 

644 em octal corresponde na representação binaria a 110100100. Logo as permissões de Teste ficarão sendo rw-r--r--. O comando chmod não altera o tipo: arquivo continua sendo arquivo e diretório continua sendo diretório. Por exemplo, se Teste fosse um arquivo antes da aplicação do chmod, então suas permissões depois do uso do comando ficariam sendo -rw-r--r--. 

Essa conversão octal <---> permissões é feita facilmente se você observar a seguinte tabela: 

Número

binario equiv.

permissões

0

000

---

1

001

--x

2

010

-w-

3

011

-wx

4

100

r--

5

101

r-x

6

110

rw-

7

111

rwx

Exemplo: chmod 625 teste.txt 

Observando a tabela, o 6 corresponde a "rw-", o 2 corresponde a "-w-" e o 5 corresponde ao "r-x". Portanto, se texte.txt for um arquivo (tipo "-") as permissões após o chmod serão -rw--w-r-x. 

Exemplos diversos
 
=====================================================================
Permissões     Comando               Descrição
---------------------------------------------------------------------
-r--------     chmod 400 arquivo     Somente o dono pode ler o arqui-
                                     vo, ninguem pode escrever.
---------------------------------------------------------------------
-r--r--r--     chmod 444 arquivo     Todos podem ler o  arquivo, nin-
                                     guem pode escrever.
---------------------------------------------------------------------
-rw-rw-rw-     chmod 666 arquivo     Todos podem  ler  e  escrever no
                                     arquivo.
---------------------------------------------------------------------
drwxrwxrwx     chmod 777 diretorio   Todos podem ler, escrever, criar
                                     ou apagar arquivos do diretorio.
---------------------------------------------------------------------
drwx------     chmod 700 diretorio   Somente o dono pode  ler, escre-
                                     ver, criar ou  apagar  arquivos.
                                     Ninguem mais pode  ter  acesso a
                                     este diretorio.
---------------------------------------------------------------------
drwx-wx-wx     chmod 733 diretorio   O dono pode ler ou  escrever  no
                                     diretorio. Todos os  outros usu-
                                     arios podem apenas escrever.
=====================================================================

 

 

Gerênciamento de processos, parte 1

 

 

 

 

Considerações Iniciais 

Para explicarmos como o Linux gerência processos, faremos considerações iniciais sobre o código fonte do kernel do Linux (onde encontramos a implementação da Gerência de Processos) e a inicialização "boot" do sistema. Neste tópico tentaremos explicar, de uma maneira ordenada o código fonte do Linux, tentando conseguir um bom entendimento sobre como o código fonte está situado e como as características mais relevantes do UNIX foram implementadas. O objetivo é ajuda-lo a se familiarizar com o projeto geral do Linux. Então, vamos começar por onde o Linux começa: seu sistema de boot. Um bom entendimento da linguagem C é necessário para entender este material, assim como familiaridade com conceitos de UNIX e arquitetura dos PCs. Porém, nenhum código C aparecerá neste material, mas referencias de onde podem ser encontrados. 

Qualquer referencia "pathname" à arquivos tem como ponto de partida a arvore principal de fontes, usualmente /usr/src/linux. A maioria das informações reportadas aqui tem como referencia o código fonte do Linux versão 1.0. Referencias a versões posteriores conterão o símbolo novo. Caso o símbolo não estiver presente, significa que não houveram modificações após as versões 1.0.9-1.1.76. mais Ocasionalmente um parágrafo como este ocorrerá no texto. Indicando onde poderam ser obtidas mais informações sobre o assunto corrente (geralmente o código fonte). 

Inicialização ("boot" do sistema)

Quando o PC é ligado, o processador 80x86 encontra-se em modo real e executa o código contido no endereço 0xFFFF0, que corresponde a um endereço ROM-BIOS. O BIOS do PC realiza alguns testes no sistema e inicializa o vetor de interrupções no endereço físico 0. Depois disto ele carrega o primeiro setor do device bootavel em 0x7C00, e passa a execução para este endereço. O device é, usualmente, o disquete ou o disco rígido. A descrição anterior é um tanto simplificada, mas é tudo que se necessita para entender o trabalho inicial do kernel. 

A primeiríssima parte do kernel Linux está escrito em linguagem assembly 8086 (boot/bootsect.S). Quando é executado, ele se move para o endereço absoluto 0x90000, carrega os próximos 2 kBytes de código do device de boot até o endereço 0x90200, e o resto do kernel para o endereço 0x10000. A mensagem "Loading..." é apresentada durante o carregamento do sistema. O controle é, então passado para o código contido em boot/Setup.S, outro código assembly de modo real. 

A parte de "setup" identifica algumas características do sistema (hardware) e o tipo da placa VGA. Se requerido, pede ao usuário para escolher o modo do vídeo da console. E, então, move todo o sistema do endereço 0x10000 para o endereço 0x1000, passa para o modo protegido e passa o controle para o resto do sistema (endereço 0x1000). O próximo passo é a descompressão do kernel. O código em 0x1000 vem de zBoot/head.S que inicializa os registradores e invoca decompress_kernel(), o qual é composto por zBoot/inflate.c, zBoot/unzip.c e zBoot/misc.c. O dado "descompresso" vai para o endereço 0x100000 (1 Mega), e esta é a principal razão do por que o Linux não pode rodar com menos de 2 Megas de RAM. 

O encapsulamento do kernel em um arquivo gzip é realizado por Makefile e utilitários no diretório zBoot. São arquivos interessantes para se dar uma olhada. A versão 1.1.75 moveu os diretórios boot e zBoot para arch/i386/boot. Esta modificação pretendeu possibilitar a construção de "kernel verdadeiro" para diferentes arquiteturas. O código "descompresso" é executado a partir do endereço 0x1010000 , onde todo o setup 32-bit esta lotado: IDT, GDT e LDT são carregados, o processador e o co-processador são identificados, a rotina start_kernel é invocada. Os arquivos fonte das operações acima estão em boot/head.S. Este, talvez, seja o código mais difícil em todo o kernel do Linux. 

Note que se algum erro ocorrer durante alguns dos passos precedentes, o computador irá travar. O sistema operacional não pode manipular erros enquanto não estiver totalmente operante. start_kernel() reside em init/main.c. Tode de agora em diante esta codificado em linguagem C, exceto gerência de interrupções e chamadas de sistemas (Bem, a maior parte das macros possuem códigos assembly embutidos, também). Depois dos procedimentos com todas as questões iniciais, start_kernel() inicializa todas as partes do kernel, especificamente: 

· Inicializa a memória e chama paging_init().
· Inicializa os traps, canais IRQ e scheduling.
· Se requerido, aloja um profiling buffer.
· Inicializa todos device drives e buffers de discos, bem como outras partes menores.
· Regula o delay loop (calcula o numero "BogoMips").
· Checa se a interrupção 16 está trabalhando com o co-processador. 

Finalmente, o kernel está pronto para move_to_user_mode(), em seguida fork (bifurca) o processo de inicialização, cujos códigos estão no mesmo arquivo fonte. E o processo número 0, também chamado idle task (tarefa preguiçosa), se mantém rodando em um loop infinito. O processo de inicialização tenta executar /etc/init, ou /bin/init, ou /sbin/init. Se nenhum deles tem sucesso, o código se desvia para "/bin/sh /etc/rc" e cria um root shell no primeiro terminal (console). Este código é remanescente do Linux 0.01, quando o S.O. era feito para um kernel stand-alone, e não havia processo de login. 

Depois de exec() o programa de inicialização de um dos lugares padrão (deve haver um deles), o kernel não tem controle direto sobre o fluxo do programa. Sua função, de agora em diante, é prover processos através de chamadas ao sistema (system calls), assim como prover eventos para serviços assíncronos (como uma interrupção do hardware). A multitarefa está inicializada, e inicializará o gerenciamento de acesso a multiusuários, através do fork() e processos de login. Estando o kernel carregado e provendo serviço, vamos prosseguir dando uma olhada nesses serviços ("system calls"). 

Gerência de processo pelo kernel 

Do ponto de vista do kernel, um processo é uma entrada na tabela de processos. Nada mais. A tabela de processos, então, é uma das mais importantes estruturas de dados no sistema, conjuntamente com a tabela de gerenciamento de memória e o buffer cache. O item individual na tabela de processos é a estrutura task_struct, definida em include/linux/sched.h. Com a task_struct, tanto informações de baixo quanto de alto nível, são mantidas - variando da cópia de alguns registradores de hardware até o inode do diretório de trabalho para o processo. 

A tabela de processos é tanto um array quanto uma lista duplamente ligada, como uma árvore. A implementação física é um array estático de ponteiros, cujo tamanho é NR_TASKS, uma constante definida em include/linux/tasks.h, e cada estrutura reside em uma pagina de memória reservada. A estrutura da lista está entre os ponteiros next_task e prev_task, a estrutura em arvore é um tanto complexa, e não será descrita aqui. Voce pode desejar mudar NR_TASKS do seu valor default (que é 128), mas esteja certo de que há dependências, e será necessário recompilar todos os arquivos fonte envolvidos. 

Depois do boot, o kernel está sempre trabalhando em um dos processos, e a variável global "current", um ponteiro para um item da task_struct, é usado para guardar o processo que está rodando. A variável "current" só é mudada pelo scheduler, em kernel/sched.c. Quando, porém, todos os processos necessitarem estar looked, a macro for_each_task é usada. Isto é consideravelmente mais rápido que uma procura seqüencial no array. 

Um processo está sempre rodando em ou em "modo usuário" ou em "modo kernel". O corpo principal de um programa de usuário é executado em modo usuário e chamadas a sistema são executados em modo kernel. A pilha usada pelos processos netes dois modos de execução são diferentes - um seguimento de pilha convencional é usado para o modo usuário, enquanto uma pilha de tamanho fixo (uma página, cujo processo é dono) é usada no modo kernel. A página de pilha para o modo kernel nunca é swapped out, porque ela pode estar disponível sempre que um system call é introduzido. 

Chamadas a sistema (System calls), no kernel do Linux, são como funções da linguagem C, seu nome "oficial" esta prefixado por "sys_". Uma chamada a sistema de nome, por exemplo, burnout invoca a função de kernel sys_burnout(). O mecanismo de chamadas a sistema (System calls) está descrito no capítulo 3 do Linux Kernel Hackers' Guide (http://www.redhat.com:8080/HyperNews/get/khg.html). Uma olhada em for_each_task e SET_LINKS, em include/linux/sched.h pode ajudar a entender a lista e a estrutura de árvore da tabela de processos. 

Criando e destruindo processos

Um sistema UNIX cria um processo através da chamada a sistema fork(), e o seu término é executado por exit(). A implementação do Linux para eles reside em kernel/fork.c e kernel/exit.c. Executar o "Forking" é fácil, fork.c é curto e de fácil leitura. Sua principal tarefa é suprir a estrutura de dados para o novo processo. Passos relevantes nesse processo são: 

· Criar uma página livre para dar suporte à task_struct
· Encontrar um process slot livre (find_empty_process())
· Criar uma outra página livre para o kernel_stack_page
· Copiar a LTD do processo pai para o processo filho
· Duplicar o mmap (Memory map - memoria virtual) do processo pai 

sys_fork() também gerencia descritores de arquivos e inodes. 

novo - A versão 1.0 do kernel possui algum vestígio de suporte ao "threading" (trabalho ou processo em paralelo), e a chamada a sistema fork() apresenta algumas alusões à ele. A morte de um processo é difícil, porque o processo pai necessita ser notificado sobre qualquer filhos que existam (ou deixem de existir). Além disso, um processo pode ser morto (kill()) por outro processo (isto é um aspecto do UNIX). O arquivo exit.c é, portanto, a casa do sys_kill() e de variados aspectos de sys_wait(), em acréscimo à sys_exit(). O código pertencente à exit.c não é descrito aqui - ele não é tão interessante. Ele trabalha com uma quantidade de detalhes para manter o sistema em um estado consistente. O POSIX "standard", por conseguinte, é dependente de sinais (flags), e tinha que trabalhar com eles. 

Executando Processos

Depois de executar o fork(), duas copias do mesmo programa estão rodando. Uma delas usualmente executa - exec() - outro programa. A chamada a sistema exec() deve localizar a imagem binária do arquivo executável, carrega-lo e executa-lo. "Carrega-lo" não significa, necessáriamente, copiar na memória a imagem binária do arquivo, para que, assim, o Linux possa atender a demanda de programas a serem executados. A implementação Linux do exec() suporta formatos binários diferentes. Isto é dotado através da estrutura linux_binfmt, a qual embute dois ponteiros para funções - um para carregar o executável e o outro para carregar a "library" associada, cada formato binário deve conter, portanto, o executável e sua "library". 

O sistema UNIX prove, ao programador, seis formas para a função exec(). Quase todos podem ser implementados como uma "library" de funções, e o kernel do Linux implementa sys_execve() independentemente das providas pelo UNIX. Ele executa uma única tarefa: carregar o cabeçalho do executável, e tenta executa-lo. Se os dois primeiros bytes são "#!", então a primeira linha é ignorada e um interpretador é invocado, caso contrário o formato binário, registrado, é executado seqüencialmente. 

O formato nativo do Linux é suportado diretamente por fs/exec.c, e as funções relevantes são load_aout_binary e load_aout_library. Assim como para os binários a função de carregamento "a.out" é invocada, e a função mmap() (memory map - memória virtual ) aloca espaço em disco (no caso da memória real estar cheia) para o processo, ou invoca read_exec(), caso haja espaço em memória. "The former way uses the Linux demand loading mechanism to fault-in program pages when they're accessed, while the latter way is used when memory mapping is not supported by the host filesystem (for example the "msdos" filesystem)". 

novo - A partir da versão 1.1 do kernel, o Linux embutiu um sistema de arquivos (filesystem) revisado do msdos, que suporta mmap() (memory map - memória virtual). Além disso a estrutura linux_binfmt é uma "lista ligada" e não um array, para permitir carregar um novo formato binário como um módulo do kernel. Finalmente a estrutura, por si mesma, foi estendida para acessar rotinas com o formato relativo à core-dump. 

 

 

 

 

 

 

 

Gerênciamento de processos, parte 2

 

 

 

 

A execução do LMM (Linux Memory Manager) exige uma estratégia de paginação com uma copy-on-write confiando nas 386 páginas auxiliares. Um processo alcança suas tabelas de páginas de seu parent (durante um fork ) com as entradas marcadas como read-only ou trocado. Então, se o processo tenta escrever para este espaço de memória e a página é uma copy on write page, isto é copiado e a página marcada read-write. Um exec ( ) resulta na leitura de uma página ou mais do executável. O processo então erra em qualquer outra página que precisar. 

Cada processo tem uma tabela de página que significa que pode acessar 1 Kb de tabela de página indicando para 1 Kb de 4 Kb, páginas que é 4 Gb de mémoria. Um diretório de página do processo é iniciado durante um Fork por copy-page-tables. O processo inativo tem seu diretório de página inicializado durante a sequência de inicialização. Cada processo usuário tem uma tabela descritória local que contém um código de segmento e um segmento de dados. Estes segmentos usuários extendem de 0 para 3 Gb (0 X c 0000000). Nos espaços usuários, endereços lineares e endereços lógicos são idênticos. 

No 80386, endereços lineares vão de 0 Gb para 4 Gb. Um endereço linear indica uma posição particular de memória dentro deste espaço. Um endereço linear não é um endereço físico --- isto é um endereço virtual. Um endereço lógico consiste de um seletor e um offset. O seletor indica para um segmento e o offset diz que distância na seção o endereço é localizado. O código Kernel e o segmento de dados são seções privilegiados definidos na tabela descritora global e extende de 3Gb para 4Gb. O Swapper - page - dir é organizado para que estes endereços lógicos e físicos sejam idênticos no espaço Kernel. 

O espaço 3Gb acima aparece no process page directory como indicadores para tabelas de páginas Kernel. Este espaço é invisível para o processo no user mode, mas o modo privilegiado é acionado, por exemplo, para sustentar um sistema de ligação. O modo surpevisor é inserido dentro do contexto do processo atual então a tradução do endereço ocorre com respeito ao diretório de página do processo, mas usando segmentos Kernel. Isto é idêntico no mapeamento produzido com o uso de swapper - pg - dir e segmentos Kernel como ambos diretórios de páginas usa a mesma tabela de página neste espaço. Apenas task [0] (A tarefa inativa, ás vezes chamada de "tarefa trocadora" por razões históricas, mesmo assim isto não tem relação com trocas nos implementos Linux) usa o swapper - pg - dir diretamente. 

  • O segmento base do processo usuário = o X 00, page - dir particular, para o processo. 
  • O processo usuário faz um sistema de ligação : segment base = 0 X c 0000000 page - dir = mesmo usuário page dir. 
  • swapper - pg - dir contém um mapeamento para todas as páginas físicas de 0 X 0000000 para 0 X c 0000000 + and_mem, então as primeiras 768 entradas em swapper - pg - dir são 0's, e então há 4 ou mais que indicam na tabela de páginas Kernel. 
  • O user page directories têm as mesmas entradas como swapper - pg - dir dos 768 acima. As primeiras 768 entradas mapeam o espaço usuário. 

A vantagem é que sempre que o endereço linear é acima de 0 X c 0000000 tudo usa a mesma tabela de páginas Kernel (Kernel page Tables). O monte usuário permanece no topo do segmento de dados do usuário e desce. O Kernel Stack não é uma bonita estrutura ou segmento de dados que eu possa apontar com um "aqui é um Kernel Stack". Um Kernel Stack_frame (uma página) é associada com cada novo processo criado e é usado sempre que o Kernel opera dentro do contexto deste processo. Coisas ruins aconteceriam se Kernel Stack descesse abaixo de seu corrente stack frame. [ Onde o Kernel Stack é guardado? Eu sei que há um para cada processo, mas onde isto é armazenado quando isto não está sendo usado? ] 

Páginas usuários podem ser roubados ou trocados - Um user page é um que é mapeado abaixo de 3 Gb em uma tabela de páginas usuários. Esta região não contém page directories ou page tables. Apenas páginas sujas são trocadas. Menores alterações são necessárias em alguns lugares ( testes para limites de memória vem para a mente) para prover suporte para definidos segmentos programados. [ Há agora uma modificação - |c| + O sistema de ligação usado por dosane, Wine, Twin, and Wabi para criar segmentos arbitrários. ] 

Memória Física

Aqui está um mapa de memória física antes que qualquer processo de usuário for executado. A coluna da esquerda mostra o endereço de partida do item e os números em negrito são aproximados. A coluna do meio mostra os nomes dos itens. A grande coluna da direita mostra a rotina relevante ou o nome variável ou explicações para ingresso. 

* Projeto - Inits que adquirem memória são (principais.c) profil - buffer, com, init, psaux, init, rd, , init, scsi.dev - init. 

Note que toda memória não marcada como livre é reservada (mem-init). Páginas reservadas pertencem ao Kernel e nunca estão livres ou trocadas. 

Uma visão de memória do user process. 

O código de segmento e dados do segmento extendem todo o caminho de 0 X 00 para 3 Gb. Correntemente o page fault handler do wp_page confere para assegurar que um processo não escreve para seu código de espaço. De qualquer modo, pegando o sinal segu, é possível escrever para o code space, causando ocorrência de um copy - on - write. O Handler do_no_page assegura que qualquer página nova que o processo adquira pertença ao executável, uma biblioteca dividida, ao stack, ou dentro do valor do brK. Um usuário de processo pode reordenar seu valor brK chamando sbrK ( ). Isto é o que malloc ( ) faz quando precisa. O texto e a porção de dados são distribuídos em páginas separadas ao menos que alguém escolha o N opção composta. A biblioteca dividida carrega endereços são correntemente tornadas da imagem dividida por ele mesmo. O endereço é entre 1.5 Gb e 3 Gb, exceto em casos especiais. 

Distribuição da memória do processo usuário

O Stack, shlibs e os dados são muito afastados um do outro para serem spanned por uma tabela de página. Todas KPT são divididas por todos processo e deste modo eles não estão na lista. Apenas páginas sujas são trocadas. Páginas limpas são roubadas e deste modo o processo pode tê-los de volta para o executável se for desejado. A maioria das vezes apenas as páginas limpas são divididas. Uma página suja termina dividida sobre um fork até que parent ou child escolham para escrever isto de novo. 

Administração dos dados da memória na tabela do processo. 

Aqui está um sumário de algum dos dados mantidos na tabela do processo que é usado para administração da memória. 

Limites do processo da memória. 

Ulong - start_code - and_code - and_data - brk, atart - stock 

Erro de contagem de página. 

Tabela do descritor local.

Sturct desc - sturct ldt {32} é a mesa descritora local para tarefa.

Números de páginas residentes.

Swappable - trocáveis

Se então as páginas do processo não serão trocados.

Kernel Stack page

Indicador para a página distribuída no fork.

Saved - Kernel - Stack

V86 modo material (stuff)

stract tss

pilha de segmentos (stack segments)

indicador da pilha Kernel

Kernel stack pointer

segmento da pilha Kernel

Kernel stack segment (0X10)

ssi = esp 2 = ss2 = 0

Níveis de previlégio não usados. 

Segmentos seletores. Ds=es=fs=gs=ss=ok17,cs- 

Todos indicam para segmentos no corrente 1 dt [ ]
c r 3 : indicam para o page directory para este processo
1 dt - LDT (n) seletores para tarefas correntes do LDT 

Inicialização da memória

No Start Kernel (main.c) há 3 variáveis relatadas para inicialização da memória: 

memory_start - começa a 1 Mb atualizado pelo projeto de inicialização.
memory_end - término da memória física: 8 Mb, 16 Mb, ou qualquer outro.
Low memory_start - término do código Kernel e dados que é carregado inicialmente 

Cada projeto init tipicamente torna memory_start e retorna um valor atualizado, se distribui espaços no memory_start (simplesmente pegando-a). Paging init ( ) inicializa a page-tables no { \ tt swapper - pg - dir} ( começando a 0 X 0000000) para cobrir toda a memória física do memory_start para memory_end. Na verdade o primeiro 4 Mb é feito no startup_32 (heads).memory_start é incrementado se quaisquer nova page-tables são adicionados. 

A primeira página é zerada para bloquear os indicadores das referências do alçapão nulo no Kernel. 

No sched_init ( ) o 1 dt e tss descritores para tarefa [0] são postos no GDT, e carregado para dentro do TR e LDTR (a única vez que isto é feito explicitamente). Um trap gate (0X80) é ordenado para system-call.( ). 

A bandeira tarefa aninhada é desligada na preparação para entrada do modo usuário: O cronômetro é ligado. O task-struct para task [0] aparece por inteiro em < linux / sched.h > mem_map é então construído por mem_init ( ) para refletir o corrente uso das páginas físicas. Este é o estado refletido no mapa da memória física da seção anterior. Então Dinux move para dentro do modo usuário com um iret após empurrar o corrente ss, esp, etc. Claro que o segmento usuário para task [0] são mapeados bem sobre os segmentos Kernel e deste modo a execução continua exatamente onde isto termina. 

Task [0]: 

pg_dir = swapper - pg - dir que sigmifica apenas endereços mapeados estão no alcance 3 Gb para 3 Gb + High memory. 

LTD [1] = código usuário, base = 0 x 0000000, tamanho = 640 K
LDT [2] = dados usuários, base = 0 x 0000000, tamanho = 640 k 

O primeiro exec ( ) põe a LTD entrada para task [1] para os valores usuários da base = 0x0, limite = task_size = 0 x c 0000000. Depois disso, nenhum processo vê os segmentos Kernel enquanto no modo usuário. 

Processos e a Administração da Memória. 

Memória relacionada trabalho feito por fork ( ): 

  • distribuição de memória 
  • 1 página para o Task-struct 
  • 1 página para o Kernel Stack 
  • 1 para o pg_dir e algumas para pg_tables (cópias - páginas - tabelas) 
  • Outras mudanças 
  • sso põe para o segmento Kernel stack (0x10) para ter certeza? 
  • espo põe para o topo da nova distribuição Kernel - stack - page. 
  • c r 3 põe por copy - page - tables ( ) para indicar para nova página de diretório distribuída 
  • 1 dt = LDT (task_nr) cria novo 1 dt descritor 
  • descritores põe no gdt para novo tss e 1 dt [ ] 
  • Os registros restantes são herdados do parent. 

Os processos resultam dividindo seus códigos e segmentos de dados (embora eles tenham tabelas descritoras locais separados, as entradas indicam para os mesmos segmentos). O stack e páginas de dados serão copiados quando o parent ou child escreve para eles ( copy-on-write). 

Memória relacionada trabalho feito por exec ( ): 

  • distribuição de memória 
  • 1 página para exec header para omagic 
  • 1 página ou mais para stack (max_arg_pages) 
  • clear-página-tables ( ) usado para remover páginas velhas. 
  • change 1 dt ( ) põe os descritores no novo 1 dt [ ] 
  • 1 dt [1] = código base = 0 x 00, limite = task - size 
  • 1 dt [2] = data base = 0 x 00, limite = task - size
         Estes segmentos são dpl = 3, p=1, s=1, g=1. Tipo = a (código or 2 dados) 
  • Eleva para MAX_ARG_PAGES páginas sujas de arqu e enup são distribuídos e guardado ao topo do segmento de dados para o novo usuário pilha criado. 
  • Ponha os indicadores de instrução do caller cip = ex.a_cutry 
  • Ponha o stack indicador do caller para o stack criado (esp=stack indicador). Este serão eliminados do Stack quando o caller resume. 

Limites de Memória Atualizados 

  • cud_code = ex.a_text 
  • cud_data = cud_code + &x.d_data 
  • brK = end_data + ex.ª_bss 

Interrupções e traps são sustentadas dentro do contexto da corrente tarefa. Em particular, o diretório de páginas do corrente processo é usado na tradução de endereços. Os segmentos, de qualquer modo, são segmentos Kernel para que todos os endereços lineares apontem para dentro da memória Kernel quer acessar uma variável no endereço 0 x 01. O endereço linear é 0 x 00000001 (usando segmentos Kernel) e o endereço físico é 0 x 01. O último é porque a página do processo diretório mapea esta extensão exatamente como page_pg_dir. 

O espaço Kernel (0 x c 0000000 + high - memory) e mapeado pela tabela de páginas Kernel que são eles mesmos parte da memória reservada. Eles são consequentemente divididas por todos processos. Durante um fork copy-page-tables ( ) trata tabela de páginas reservadas diferentemente. Isto põe indicadores no diretório de páginas de processo para indicar para tabelas de página Kernel e na verdade não distribui novas tabelas de páginas como isto faz normalmente. Como um exemplo o Kernel - Stack - page ( que ocupa algum lugar no espaço Kernel ) não precisa de um associado page - table distribuídos no pg-dir do processo para mapeá-lo. 

O interruptor de instruções põe o indicador stack e o segmento stack do privilégio valor salvo no Tss do corrente task. Note que o Kernel stack é um objeto realmente fragmentado - Isto não é um objeto único, mas sim um grupo de stack frames. Cada um distribuído quando um processo é criado e deixado quando ele sai. O Kernel stack não deveria crescer tão rapidamente dentro de um contexto de um processo que extende abaixo da corrente frame. 

Adquirindo e liberando memórias

Quando qualquer rotina Kernel precisa de memória isto acaba chamando get-free-page ( ). Este está num nível mais baixo do que Kmallor ( ) (de fato Kmalloc ( ) get-free-page ( ) quando isto precisa mais memória). Get-free-page ( ) toma um parâmetro, a prioridade. Possíveis valores são gfp_buffer_gfp, Kernel, gfp,nfs e gfp atomic. Isto tira uma página do the free-page-list, atualizados mem_map, zeram a página e retorna o endereço físico da página (note que Kmalloc) retorna um endereço físico. A lógica do mm depende do mapa da identidade entre o endereço lógico e físico. 

Isto é por ele mesmo bastante simples. O problema é claro, é que o free-page-list pode estar vazio. Se você não requisitar uma operação atômica, nesta etapa, você entra dentro do domínio de uma page stealing e que nós discutiremos em um momento. Como um último recurso ( e para requisitos atômicos) uma página é separada do secundary-page-list (como você pode ter achado, quando páginas são libertadas, o secundary-page-list enche primeiro a manipulação atual da page-list e mem-map ocorre neste misterioso macro chamado remove-from-mem-queve ( ) que você provavelmente nunca quer investigar. O suficiente para dizer que interrupções são incapacitados. [Eu penso que isto deveria ser explicado aqui. Isto não é tão difícil...] 

Agora de volta ao "Roubando páginas" get-free-page ( ) chame try-to-fre-page ( ) que chame repetidamente shrink_buffers ( ) e swap-out ( ) nesta ordem até conseguir liberar uma página. A prioridade é aumentada em cada iteration sucessiva para que estas duas rotinas processem suas page-sterling-loops mais frequentemente. Aqui está um exemplo do processo swap-out: 

  • Faça a tabela do processo e adquira uma swappable task, por exemplo, Q. 
  • Ache um user page-table (não reservado) no espaço de Q. 
  • Para cada página na tabela try-to-swap-out (page) 
  • Termina quando a página é liberada. 

Note que swap-out ( ) (chamada try-to-free-page ( )) mantém variáveis estatísticas e deste modo isto pode resumir a procura onde terminar a chamada anterior try-to-swap-out ( ) examine os page-tables de todos usar process e obrigue o sterling policy: 

1) Não brincar com as páginas (reserved) reservadas
2) Envelheçar a página se ela é marcada acessada (1 bit)
3) Não mexa com página adquirida recentemente (last-free-pages ( ))
4) Deixe páginas sujas com map-counts > 1 intocadas
5) Diminua o map-count das páginas limpas
6) Librere páginas limpas se elas não são mapeadas
7) Troque páginas sujas com um map-count de 1 

De todas essas ações, 6 e 7 vão parar o processo poruqe eles resultam na liberação atual de uma página física. A quinta ação resulta uma dos processos perdendo uma página limpa não dividida que não foi acessada recentemente (diminuindo Q à rss) que não é tão ruim, mas os efeitos cumulativos de algumas iterations pode atrasar o processo muito. No presente, há 6 iterations, deste modo uma página dividida por 6 processos pode ser roubada se está limpa. Page table então são atualizados e o TLB invalidado. O trabalho atual de liberar uma página é feito por free-page ( ), a complementação de get-free-page ( ). Isto ignora páginas reservadas, atualiza mem-map, e libera a página e atualiza o page-list (s) se não é mapeada. Para troca (em 6 em cima), write-swap-page ( ) é chamada e não faz nada notável da perspectiva da administração da memória. Os detalhes de shink-buffers ( ) nos levaria muito longe. Essencialmente isto procura free "buffers" (buffers são uma parte da memória que segura informação temporariamente quando dados transferem de um lugar para outro) em seguida escreve buffers sujos, e depois começa com buffers ocupados e chama free-page ( ) quando pode liberar todos os buffers numa página. 

Note que page directories, page-table, e reserved pages não são trocadas, roubadas ou envelhecidas. Eles são mapeadas no process page directories com reserved page tables. Eles são liberados somente na saída do processo. 

The page Fault Handles 

Quando um processo é criado por fork, ele começa com um page directoru e uma página ou mais do executável. Deste modo the page fault handles é a forte da maioria da memória do processo. The page fault handles do page-fault ( ) recupera o endereço faltando no registro c r 2. O código do erro ( recobrado no sys-call.s) diferencia o acesso do user / supervisior e a região para o fault-write proteção de uma página faltando. O anterior é sustentado pelo do-wp-page ( ) e o posterior pelo do-no-page ( ). Se o endereço falatando é maior do que Task-Size, o processo recebe um SIGKILL [ Por que este controle? Isto pode acontecer somente em Kernel mode por causa da proteção do nível do segmento. Estas rotinas tem algumas sutilezas como elas podem ser chamadas num interrompimento. Você não ode supor que é a tarefa corrente que está executando de-no-page ( ) sustenta três situações possíveis: 

1) A página é trocada
2) A página pertence a biblioteca executável ou dividida.
3) A página está faltando - uma página de dados não foi distribuída 

Em todas as causas get-empty-pgtable ( ) é chamada primeiro para assegurar a existência de uma page table que cobre o endereço falatando. No terceiro para providenciar uma página no endereço requerido e no caso de uma página trocada, swap-in ( ) é chamado. No segundo caso, o handles calls share-page ( ) para ver se a página pode ser dividida com algum outro processo. Se isto falhar leia a página do executável ou biblioteca (Isto repete a chamada para Share-page ( ) se um outro processo fez o mesmo enquanto isso). Qualquer porção da página fora do valor brK é zerada. 

A página lida do disco é contada como um erro maior. Isto acontece com um swap-in ( ) ou quando é lida da executável ou uma biblioteca. Outras casos são consideradas erros menores (mim-flt). Quando uma página divisível é achada ela é corite-protected. Um processo que escreve para uma página dividida vai precisar passar por um do-wp-page ( ) que faz o copy-on-write. Do-wp-page ( ) faça o seguinte: 

  • Mande SIGSEGV se qualquer usar process o está escrevendo para o corrente code-space. 
  • Se a página velha não é dividida, então simplesmente não proteja-o. Senão get-free-page ( ) and copy-page ( ). A página adquirire a bandeira suja da página velha. Diminua a conta do mapa da página velha. 

Paginando (Paging)

Paginando é a troca numa base da página melhor do que os processos inteiros. Nós vamos usar trocando aqui para referir à "paginando" , uma vez que apenas Linux página, e não trocar, e pessoas são mais acostumadas à palavra "Swap" / "trocar" do que "page" / "paginar". Kernel pages nunca são trocadas páginas limpas também não são escritas para trocar. Elas são liberadas e recarregadas quando é requerida. O trocador mantém um único bit de informação de envelhecimento nas Páginas acessadas bit da page table cutries - [ O que são os detalhes de manutenção? Como isto é usado?] 

Linux suporta múltiplos swap files ou projetos que podem ser ligados ou desligados pelas ligações de swapoff system. Cada swap file ou projeto é descrito por uma strut-swap-info. O campo das bandeiras (SWP-USED ou SWP-WRITE ok) é usado para controlar acesso para o swap files. Quando SWP- WRITE ok é desligado, o espaço não vai ser distribuído neste arquivo. Isto é usado por Swapoff quando isto tenta de não usar um arquivo. Quando swapoff adiciona um arquivo de troca nova isto aplica SWP-USED. Um variável imóvel no Swap files armazena o número dos arquivos ativos correntemente ativos. Os campos lowest - bit e hihgest - bit limitam a região livre na pasta de troca e são usadas para adiantar a procura por espaço de troca livre. 

O programa do usuário m | < swap inicializa um swap device ou file. A primeira página contém uma assinatura (swap-space) nos últimos 10 bytes, e contém um mapa de bit. Inicialmente 1's no bitmap significam páginas ruins A'1' no bitmap significa que a página correspondente é livre. Esta página nunca é distribuída deste modo a inicialização precisa ser feita somente uma vez. The Syscall Swapor ( ) é chamado pelo user program swapon tipicamente de / etc / rc. Algumas páginas da memória são distribuídas por swap-map e swap-lockmap, swap-map contém um byte para cada página no swapfile. Isto é inicializado do bitmap para conter 0 para páginas disponíveis e 128 para páginas que não pode ser usadas. Isto é para manter uma conta das petições da troca em cada página no swap file. Swap-lockmap contém um bit para cada página que é usada para assegurar exclusão mútua quando lendo ou escrevendo swap-files. 

Quando uma página da memória está para ser trocada, um índice para posição da troca é obtido com uma chamada para get-swap-page ( ). Este índice é deste modo guardado em bits 1-31 da page table entry para que a página trocada possa ser localizada pela page fault handles, do-no-page ( ) quando necessário. 

Os 7 bits mais altos do índice dão o swap file ( ou projeto) e os 24 bits mais baixos dão o número da página neste projeto. Isto faz até 128 swap files, cada um com espaço para mais ou menos 64 Gb, mas o espaço em cima devido o swap map seria grande. Ao invés o tamanho do swap file é limitado para 16 Mb, porque o swap map então toma 1 página. A função swap-duplicate ( ) é usado por copy-page-tables ( ) para deixar o processo da child herdar páginas trocadas durante um fork. Isto somente incrementa a conta mantendo no Swap-map para aquela página. Cada processo vai trocar numa cópia da página separa quando acessá-la. Swap-free diminui a conta mantendo no swap-map. Quando a conta abaixa para 0 a página pode ser redistribuída por get-swap-page ( ). Isto é chamado cada vez que uma página trocada é lida na memória ( swap-inc ) ou quando uma página está para ser descartada ( free-one-table ( ), etc ). 

- Gerenciamento de Memória Cache

1 - Arquitetura de Memória Cache do Linux (Linux Flush Architecture)

O TBL é mais uma entidade virtual do que um modelo estrito quanto a Linux flush architecture e concernida. As característica única são isto mantem em ordem o mapeamento do processo kernel de algum modo, queira softivare ou hardware. Código específico de arquitetura pode precisar ser modificado quando o kernel tiver mudado um processo/mapeamento kernel. O shell (um lugar seguro p/ guardar dinheiro ou coisas) esta entidade é essencialmente "memory state"/"estado da memoria" como o flush architecture o vê. Em geral isto tem as propiedades seguintes: 

  • Isto sempre vai segurar cópias de dados que podem ser visto como atualizado pelo processo local. 
  • O funcionamento próprio pode ser relacionado ao TLB e o mapeamento do processo/Kernel page de algum jeito, isto é para dizer que eles podem depender um do outro. 
  • Isto pode, numa configuração cached virtual, causar problemas "aliasing" se uma página fisica é mapeada no mesmo tempo da que duas páginas virtuais e por causa dos bits de um endereço usado para catalogar a linha cache, a mesma porção do dedo pode acabar residindo no cache duas vezes, deixando resultados incompativéis. 
  • Projetos e DMA podem ou não ter capacidade para ver a cópia de um dedo mais atualizado que resida no cache do processo local. 
  • Corretamente, é suposto que a coerência num ambiente multiprocessador é mantida pelo subsistema cache/memória. Isto que dizer que, quando um processador requerer um dado no memory bus de maneira e um outro processador tem uma cópia mais atualizada, de qualquer jeito o requesitor vai obter uma cópia atualizada que pertença um outro processador. 

(NOTA: SMP arquiteturas sem hardware cache conferece mechanísms são realmente possíveis, o arquitetura current flush não sustenta isto corretamente, se em algum ponto o Zinux apontar em algum sistema onda isto é uma questão debatida, eu vou adicionar os ganchos necessários mas não vai ser bonito) Sobre o que o Fluch Architecture se importa: sempre, a visão da administração de memória hardware de um conjunto de mapeamento do processo Kernel serão consistentes com aqueles do Kernel page tables. Se o memory managemat kernel code faz uma modificação para a user process page modificando o dado via kernel space alias da página física subjacente, o fio controle de usuário vai ser o dado correto antes que é permitido continuar a execução, indiferente da cache architecture e/ou a semântica. 

Em geral, quando o estado do espaço de endereço é mudado somente (em código genérico da administração da memória kernelnome de generic kernel management cade) o fluch architecture hook apropriado vai ser chamado descrevendo que o estado muda totalmente. Sobre o que o flush architecture não importa: que o mapeamento do DMA "DMA/driver coerência. Isto inclui DMA mappings (no sentido do MMU mappings) e o cache/DMA dado consistência. Estes tipos des assuntos não devem esta no flush architecture, veja embaixo como eles devem ser manuseados. Split Instrution/data cache consistência com respeitro as modificações feito para processo de instrução de espaço realizado pelo código de sinal de despacho signal dispatch cade. De novo, veja embaixo como isto devem ser manuseado de um outro jeito. As interfaces para a flushachitesture e como executá-los em geral todas as rotinas descritos embaixo vão ser chamados na sequência seguinte: 

Fluch-cache-foo(...); 

modify-address-space (); 

clush - tlb-foo (...) 

a lógica aqui é: Isto pode ser ilegal num arquitetura dada por um pedaço de dado cache para ensitir quando o mapeamento por aquele dado não existe, portanto o flush deve ocorrer antes que a mudança é feita. É possivél para uma arquitertura de MMU/TLB dada realizar um andamento da tabela hardware hardware table wolk dos kernel page tables, portanto o TLV flush é feito depois que os page tables terem sido mudados para que depois o hardware só pode carregar a cópia nova da informação de page table para o TLB 

void flush - cache - all (void); void flush - tlb - all (void); 

Essas rotinas são para notificar o architecture specific cade que mapeamento do espaço do endereço kernel uma mudança foi feita ao kernel address space mappings, que significa que os mapeamentos de todos processos foram efetivamente mudados. 

Implementação da Memória Cache 

Uma implementação deve: 

  • Eliminar todos os entradas do cache que são válidas neste momento quando flush-cache-all é invocado isto refere-se ao virtual cache architecture, se a cache is write-back, essa rotina vai submeter o dado da cache para memoria antes do que invalidar cada ingresso. Para caches físicos, não é necessário realizar uma ação já que mapeamento físico não tem ponto de apoio no address space translations. 
  • Para flush-tlb-all todos TLB mappings para o kernel address space devem ser feito consitente com os OS page tables de qualquer maneira. Norte que com um arquitetura que possua a nação 
  • Para flush-tlb-mm, o tlb/mmu hardware é para estar localizado num estado onde isto vai ver (agora corrente) kernal page table entradas para o espaço de endereço pelo mm-strust. 
     

 

flush_cache_range(struct mm_struct *mm, unsigned long start, unsigned long end);
flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end);
uma chance para uma particular range do user address no adelrass space descrito pelo mm-struct passada esta ocorrendo. As duas notas acima para 

FLUSH - mm( ) relecianando a mm-struct passada aplicam-se aqui também. 

  • Para Flush-cache-range num virtualmente cached system, todas entradess cache que são nolidas pena a range partem para o fim no address space descrito pelo mm-struect são para ser invalidadas. 
  • Para Flush-tlb-range, qualquer ação necessária para causar o MMUITLB hardware não conter traduções estragados são para ser realizados. Isso significa que quaiquer traduções estão no Kernel page tables no range start para acabar no address space descrito pelo mm-struet são para que a administração da memoria hardware sera deste ponto avançado, por qualquer significado. 
     

 

void flush_cache_page(struct vm_area_struct *vma, unsigned long address);
void flush_tlb_page(struct vm_area_struct *vma, unsigned long address); 

Uma chance para uma única página no address dentro do usar space para o address space descrito pelo um area-struet passado esta ocorrendo. Uma efetivação, se necessária, pode obter na mm-struet associado para este address space via uma um - Flags. Este caminho em uma efetivação onde a instrução e dara space não são unificados, alguem pode conferir para ver se um-exee esta posto no uma-sum-flags para possivelmente avistar flushing o instruction space, por exemplos: As duas notas acima para flush-*-mm( ) concermindo o mm-struct (passado indiretamente via uma -um-mm) aplica aqui também. 

A implemetação deve também : 

  • Para flush-cache-range, num virtualmente cache systam, todas entradas cacha que são validas para a página no addrees no address space descrito pelo uma são para ser invalidados. 
  • Para flush-tlb-range, qualquer ação necessária para causar o MMU/TLB hardware para não conter traduções estragadas são para ser efetuadas. Isto significa que quaisquer traduções estão nos kernel page tables para a página no address space descrito pelo uma passado são para que a administração de memória hardware, serão vistas deste ponto avançado de qualquer maneira. 

Carregando o Flush-PAGE para a RAM (Unsigned Long Page);

Este é o patinho feio. Mas sera semântica é necessário em muitas arquiteturas que precisei para adicionar isto apra a arquitetura flush para linux. Brevemente, quando (como um exemplo) serve um kernel um enode cow, isto usa o "suposto" mapeamento de todas memorias fisicas no espaço kernal para efetuar a cópia da página em questão para uma nova página. Este apresenta um problema para caches virtualmente catalogados que são write-back escritos de volta na natureza. Neste caso, o Kernel toca duas páginas fisicas no espaço Kernel. A sequencia do código sendo descrito aqui essencialmente 

parece como: 

do_wp_page()
{
        [ ... ]
                copy_cow_page(old_page,new_page);
                flush_page_to_ram(old_page);
                flush_page_to_ram(new_page);
                flush_cache_page(vma, address);
                modify_address_space();
                free_page(old_page);
                flush_tlb_page(vma, address);
        [ ... ]
}

Alguns dos códigos atuais tem sido simplificados para propositos espesificos. 

Considere um cache virtualmente catalogados que é escrito de volta write-back. Neste momento que a cópia da página acontece para o supisto espaço kernel, é possivel para usar space a visão da página original para estar no caches (no endereço do usuário, por exemplo, onde o erro esta ocorrendo). A cópia da página pode trazer este dado (para a página velha) dentro do caches. Será também colocado o dado (no novo suporte kernel mapeado da página) sendo copiado para dentro da cache, e para write-back escrever de volta chachas este dado vai ser sujo ou modificado no cache. 

Em tal caso a memoria principal não será a cópia mais recente do dado. Os caches são estúpidos, então para a nova página que estamos dando ao usuário, sem forçar o dado cached no suposto kernel para a memória principal o processo será o conteúdo velho da página. (Por exemplo qualquer lixo que estarem lá antes da cópia ter sido feita pelo processamento COW acima). 

Exemplo concreto de flush-page

Considere um processo que divide uma página, lê somente READ-ONLY com maior uma tarefa (ou varias) no endereço virtual Ox2000, no usar space. E para propósito espesíficos deixe nos dizer que este endereço virtual mapeia para a página física 0x14000. Se a tarefa 2 tenha escrever para a página lê apenas no endereço 0x2000 nós alteremos um esso e (eventual fragmento do código) mente resultado no code fragment mostrando acima no do-WP-PAGE ( ). O Kernel vai obter uma nova página para tarefa 2, deixe-nos dizer que esta e uma página física 0x2600, e deixe-nos tambem dizer que os mapeamentos do suposto Kernel para páginas físicas 0x14000 e 0x26000 podem residir em dias únicos linhas cache ao mesmo tempo buscando no esquema da linha catalogada deste cache. 

O conteúdo da página e copiado do mapeamento Kernel para página física 0x14000 para uns para página física 0x26000. Neste momento, numa arquitetura cache virtualmente catalogada write - back nos temos uma inconsistência potencial. O novo dado copiado dentro da página física 0x26000 não e necessário na memória principal neste momento, de fato isto poderá estar toda no cache apenas no suposto kernel do endereço físico. Também, o (não modificando, por exemplo, limpo) dado para a (velha) página original esta no cache do suposto kernel para página física 0x14000, isto pode produzir uma inconsistência mais tarde, então para proteger isto e melhor eliminar as cópias cached deste dado também. 

Deixe-nos dizer não escrevemos os dados de volta para a página no 0x256000 e nos apenas deixamos isto lá. Nos retornariamos para a tarefa 2 (Quem teve esta nova página agora mapeada no endereço virtual 0x2000) ele completaria sua escrita, então ele leria algumas outras porções de dados nesta nova página (por exemplo, esperando o conteúdo que existe lá antes). Neste momento seo dado e deixado no cache no suposto kernel para nova página física, o usuário obterá o que que estava na memória principal antes da cópia para sua leitura. Isto pode levar a resultados dasastrosos. 

Conteúdo de uma arquitetura virtual

Numa arquitetura cache virtualmente catalogada, fica o que foi necessário para fazer a memória principal consistente com a cópia cached da página passada do espaço kernel. Nota: Isto é na verdade necessário para esta rotina invalidar linhos em um cache virtual que não escrito de volta é write - back na natureza. Para ver porque isto e realmente necessário, refaça o exemplo acima com a tarefa 1 e 2, mas agora fork ( ) ainda outra tarefa 3 antes dos erros do cow ocorreram, considere o conteúdo do caches no kernel e user space se a sequencia seguinte ocorre na exata sucessão: 

1. Tarefa 1 lê uma parte da página no 0x2000
2. Tarefa 2 COW erra a página no 0x2000
3. Tarefa 2 efetiva suas escritas para a nova página no 0x2000
4. Tarefa 3 COW erra a página 0x2000 

Mesmo em um cache não escrito devolta virtualmente catalogado, a tarefa 3 pode ver o dado incossistente depois do erro COW se FLUSH-PAGE-TO-RAM não invalida a página física do suposto kernel do cache. 

VOID-UP-DATE 

Embora não estritamente parte da arquitetura flush, em certas arquiteturas algumas operações e controles precisam ser eferuados aqui parea as coisas darem certo proporcionalmente e para o sistema manter-se consistente. Em particular, para caches virtualmente catalogados esta rotina deve conferir para ver que o novo mapeamento que vem sendo adicionado pelo conente erro de página não adiciona um bad alias "para o user space". Um "Bad Alias" e definido como dois ou mais mapeamentos (pelo menos um dos quais e escrevivel) para duas ou mais o páginas que traduzem para a exata página física, e devido ao algarismo catalogado do cache pode também residir na única e mutualmente exclusiva linhas cache. 

Se um BAD ALIAS é detectado, uma implementação precisa resolver esta inconsistência de alguma maneira, uma solução e andar através de todo os mapeamentos e mudar as page-tables para fazer estas páginas como não concreáveis se o hardaware permite tal coisa. As conferências para isto são muito simples, tudo que uma implementação precisa fazer é: Se ((uma -Um - Flags 6 (Um - Write/Um - Shared)) confere sua potência mau supostas, então para o caso comum (mapeamento escrevíveis devidos são extremamente raros) apenas uma comparação é necessitada para sistemas COW CAHCES virtualmente catalogados. 

Implicações Referentes a Arquitetura

1- Arquitetura baseada no Modelo SMP

Dependendo da arquitetura certos consertos podem ser necessários para permitir a arquitetura FLUSH para trabalhar num sistema SMP. O principal assunto e se uma das operações FLUSH acima fazem que o sistema inteiro veja o FLUSH globalmente, ou o FLUSH e apenas garantido para ser visto pelo processador local. Em um último caso um CROSS CALLING MECHANISM é necessário. Os dois correntes sistemas SMP suportados no LiNUX (intel e space) usam inter-processor interrupts para "transmitir" a operação FLUSH e faz isto correr localmente em todo processador se necessário como um exemplo, no sistema SUNHM Space todos precessadores no sistema precisam executar o pedido FLUSH para garantir a consistência através do sistema inteiro. De qualquer modo, nas máquinas SUNHD Space, TLB FLUSHES efetivamente no processador local são transmitidos sobre o BUS-SYSTEM pelo hardware e desta forma uma ligação cruzada não e necessária 

2- Implicações para arquitetura baseados no contexto MMU/CACHE.

A idéia inteira por trás do conceito de MMU e facilidades do contexto cache é para permitir muitos ADDRESS SPACES para dividir os recursos CACHE/MMU no CPU. Para levar total vantagem de tal facilidade, e ainda manter a coerência descrita acima, requer-se algumas considerações extras do implementador. As questões envolvidas variam muito de uma implementação para outro, pelo menos esta tem sido a experiência do autor. Mas em particular algumas destas questões são provavelmente para ser: A relação do mapeamento do espaço Kernel para os USER-SPACE, num contexto são convertidas, alguns mapeamentos do sistema kernel tem um atributo global, naquele o hardware não concerde ele mesmo com o contexto da informação quando uma tradução é feita, que tem seu atributo. Desta forma um FLUSH (em qualquer contexto) de um mapeamento de um Kernel CACHE/MMU poderia ser suficiente. De qualquer maneira e possível um outros implementações para o Kernel para dividir o contexto chave associado com um ADDRESS SPACE particular. Pode ser necessário em tal caso andar por todos contextos que são contentemente válidos e efetuam o Flush completo em cada um para um Kernall Address Space Flush. O custo por contexto Flush podem tornar uma questão chave, especialmente com respeito ao TLB. Por exemplo, se um Tlb Flush e necessário, em um grande Range de endereços (ou um inteiro Address Space) pode ser mais prudente distribuir e assumir um nova contexto MMU/para este processo por causa da eficiência 

Como tratar o que a arquitetura flush não executa com exemplos

A arquitetura Flush descrita não faz emendas para coerência de projetos DMA com dados Cached. Isto também não tem provisões para nenhuma estratégia de mapeamento necessários pelo DMA e projetos se forem necessários em um certa máquina Linux é Portad To. Nenhuma destas questões são para a arquitetura Flush. 

Tais questões são negociadas mais claramente no nível do Driver do projeto. O autor está mais convencido disto depois de sua experiência com um conjunto comum de sparc device drivers que precisaram de toda função corretamente em mais do que uma hand full de cache/mmu e bus architetures no mesmo kernel. De fato esta implementação é mais eficiente porque o motorista sabe exatamente quando o DMA precisa ver o dado consistente ou quando o DMA está indo criar uma inconsistência que deve ser resolvida. Nenhuma tentativa para atingir este nivel de eficiencia via cochetes soma ao codigo de administracao generica da memoria kernel seria complexo e muito obscura como um exemplo, considere no sparc como os DMA buffers são manuscrito. Quando um device driver deve efetuar o DMA para/de um único buffer, ou uma dispersa lista de muitos buffers, ele usa um conjunto de rotinas abstratas. 

Char * (*mmu_get_scsi_one)(char de char *, unsigned linux_sbus longo de struct *sbus);
sem (*mmu_sglist (*mmu_get_scsi_sgl)(struct de efeito *, int, linux_sbus de struct *sbus);
sem (*mmu_release_scsi_one)(char de efeito *, unsigned linux_sbus longo de struct *sbus);
sem (*mmu_sglist (*mmu_release_scsi_sgl)(struct de efeito *, int, linux_sbus de struct *sbus);
sem (*mmu_map_dma_area)(unsigned de efeito addr longo, len de int); 

Essencialmente o mmu_get_* rotinas são passadas por um indicador ou um conjunto de indicadores e especificações de tamanho para áres no espaço kernel para que o DMA ocorra, eles retornam para o endereço capaz do DMA (por exemplo um que pode ser carregado do controlador do DMA para o transferidor). Quando o driver é feiro como DMA e o transferidor tiver completado com o(s) endereço(s) DMA para que recursos possam ser liberados (se necessario) e cache flushes possam ser efetivados (se necessario). A rotina ter um bloqueio de memoria de DMA por um longo periodo de tempo, por exemplo, um motorista de networking usaria isto para uma transmissao de pesquisa ou receber buffers. O argumento final é uma entidade especifica Sparc que permite o codigo do nivel da maquina efetuar o mapeamento se o mapeamento do DMA são ordenados em uma base por-bus. 

Questões abertas na Arquitetura Cache

Há pareceres para muita estupidas arquiteturas cache lá fora que queira causar problemas quando um alias está situado dentro do cache (mesmo um protegido onde nenhuma das entradas do cache suposto são escreviveis!). Da nota está o mipsr4000 que dará uma exceção quando tal situação ocorre, elas podem ocorrer quando o processamento cow está acontecendo na corrente implementação. No mais chips que fazem algo estupido como isto, um exception handler pode flush as entradas no cache que está sendo reclamado e tudo está em ordem. O autor esta mais concernido sobre o custo dessas exceções durante o processamento cow e seus efeitos que ocorrerão na performance cow, que essencialmente está para flush um user space page e se não o fazendo então causaria os problemas acima descritos. Tem sido tardiamente aquecida a conversa sobre muito inteligentes networking hardware. Pode ser necessario estender a arquitetura flush para prover as interfaces e facilidades necessarias para estas mudanças para o codigo networking. É claro que, a arquitetura flush é sempre sujeita a aperfeiçoamentos e mudanças para buscar novas questões ou novos hardwares que apresentam um problema que estava até este ponto desconhecido.

 

 

 

Programação shell

 

 

 

 

1.0 - APRESENTAÇÃO

Bem, como ja sabemos para se desenvolver programas-scripts, precisaremos de um editor de texto. Particurlamente uso o vi ou joe, mas use um de seu agrado. E sabido que o Shell (interpretador), tem duas funcoes basicas: interpretar comandos ,e quando ha necessidade,o shell atua como linguagem de programacao. 

Para criar um arquivo-script, simplesmente coloque a permissao de execucao para ele. 

chmod 777 <nome_do_arquivo> 

Agora, para realizar operacoes deve-se definir uma variavel: $nomedavariavel. 

Exemplo: echo $nome. 

Para executar o script é só chamar mostra_data() 

2.0 DEFININDO VARIAVEIS

As aspas "duplas" são utilizadas para ter o shell não interpretando o significado de algum caractere especial. 

Exemplo: 

$ var = "nononononon" $ 

echo $var nononononononon 

$ echo 'Esta é a sua página de Linux' 

$ Esta é a sua página de Linux 

3.0 OPERADORES

Estes operadores são usados em conjunto com os controles de fluxo, decisão e outros... 
 

-gt 

maior 

-o

ou 

-lt 

menor 

!= 

diferente 

-eq 

igual 

Shell C ( qualquer semelhanca não é mera coincidência!!! ;D) 
 

Atribuição 

= =

Igualdade 

!

Negação Boolena

&&

e booleano

!!

ou booleano

>

maior que

>

menor que

>=

maior igual

<=

menor igual

Manipulacao de bits
 

>> 

Shift para direita 

<< 

Shift prar esquerda 

Complemento 

negação logica 

ou exclusivo 

ou exclusivo 

Variáveis Inteiras 
 

adição 

subtração 

multiplicação 

divisão 

++ 

incrementa 

-- 

decrementa 

modulo 

4.0 OPERADORES DE TESTE

Esses operadores servem para testar as características reais de um arquivo e/ou diretório 

-d 

TRUE se o arquivo for diretorio 

-e 

TRUE se o arquivo existir 

-f 

TRUE se o arquivo ter texto 

-o 

TRUE se o user for dono 

-r 

TRUE se pode ser lido pelo usuario corrente 

-w 

TRUE se o aqruivo pode ser alterado 

-x 

TRUE se o user pode executar o arquivo 

-z 

TRUE se o arquivo for vazio 

5.0 CONTROLE DE FLUXO

- IF..FI Para controle de fluxo no arquivo-script. 

Exemplo: 

if [ $gina -gt 0] 

then comandos.. 

else comandos... 

fi 

- CASE..ESAC

Espera o usuário escolher a opção que está estabelecida no case. Para entender melhor veja o exemplo:

case "$escolha" in 

1) echo 'Abacaxi' 

2) echo 'Limao' . . 

esac 
 
 

- GOTO

Esse comando desvia o fluxo de execução do script para um (label) que é um ponto específico em qualquer parte do corpo do script. 

if [ $nome -gt 0] 

then 

comandos 

goto_label1 

else 

comandos 

fi 

label1: echo " Execução desviada para label 1" 

exit 
 
 

- ONINTR

Redireciona o fluxo de execução de um script após um interrupção. 

# Teste ONINTR 

for contador in 1 2 3 4 5 6 

do 

echo $contador 

onintr final 

done 

#Desvio para erro final: 

echo " Abortado.." 

exit 
 
 

- SHIFT

Altera a posição dos elementos de uma mesma variável. O uso desse comando decrementa o número de elementos de uma variável de 1, ignorando o elemento inicial. 

set hei = ( linux power ) 

echo " Observe a alteração" 

while ($#hei >0 ) 

echo "$hei[1]" 

shift y 

end 

echo " Movido com "$#hei" 

exit 

 

 

Segurança no linux

 

 

 

 

Planejamento:

  1. Identifique o que você precisa protejer.
  2. Escolha as prioridades para segurança.
  3. Especifique normas para emergências.
  4. Eduque seus usuários. 

Usuários/Senhas

  1. Certifique-se que cada usuário tenha uma conta individual.
  2. Confirme se cada usuário possui senha.
  3. Verifique se sua instalação pode rejeitar senhas com menos de 6 caracteres.
  4. Consiga e rode programas que tentam achar senhas frágeis. (Crack, Cracklib).
  5. Considere a possibilidade de usar programas que geram senhas.
  6. Nunca transmita senhas por telefone ou e-mail.
  7. Certifique-se que o arquivo de senhas só pode ser lido pelo "root".
  8. Considere a possibilidade de trocar as senhas em intervalos regulares. 

Root

  1. Iniba a entrada do "root" de qualquer terminal (deixe, no máximo, a console).
  2. Entre com sua conta comum e então use "su" para tornar-se "root". 

Sistema de Arquivos

  1. Procure por programas que tenham SUID/SGID ligados.
  2. Procure por arquivos com permissão para gravação, que são disparados por alguma ferramenta específica (.exrc, .profile, .pinerc, .kshrc, .login, /etc/sendmail.cf, /etc/profile, etc). 

Contas de Usuários

  1. Remova contas inativas.
  2. Use rksh ou rsh quando necessário.
  3. Certifique-se que todas as contas tem senha.
  4. Evite criar contas pra rodar um único programa.
  5. Jamais crie outras contas com id 0 (mesmo do root). 

Dados

  1. Faça cópias de segurança regularmente.
  2. Certifique-se que as cópias poderão ser recuperadas numa emergência.
  3. Use mecanismos de veficação de integridade de programas e arquivos. (por exemplo checksum md4/5 ou pdf)
  4. Certifique-se que os sistemas de arquivos tem as permissões corretas.
  5. Não habilite SUID/SGID em scripts (shell ou perl).
  6. Elimine as permissões de gravação nos "devices" dos terminais, "pseudo terminais" principalmente.
  7. Certifique-se que os arquivos começados com "." não tem permissão pra gravação por ninguém.
  8. Remova todos os shells (csh, zsh, ash, etcsh) que não estiver usando.
  9. Considere rodar regularmente programas que identificam falhas de segurança no Unix, tais como COPS, Tiger, Medusa, etc.
  10. Guarde uma listagem dos programas que tem SUID/SGID e compare-a com cada nova verificação.
  11. Remova TODOS os utilitários que não forem necessários na máquina, tais como: cc, perl, awk, etc. 

Arquivos de Logs

  1. Rode o comando "last" e "who /var/adm/wtmp" regularmente.
  2. Verifique os arquivos de auditoria regularmente.
  3. Verifique o arquivo sulog.
  4. Verifique os arquivo gerados pelos Daemos com: xferlog (ftpd) syslog (syslogd) messages (syslogd) access_log (httpd) OBS: o /etc/syslog.conf permite uma grande varideade de possibilidades de log, e de arquivos para contê-los. 

Ameaças

  1. Nunca instale software desconhecido, sem os fontes para exame.
  2. Evite usar scripts com SUID/SGID, examine data e permissões.
  3. Jamais coloque "." na variável de ambiente PATH do "root".
  4. Vefique periodicamente os arquivos de rc e data de modificação de programas.
  5. Examine a variável de ambiente PATH de todos os scripts que for executar.
  6. Garanta que nenhum programa com SUID/SGID permita saída para o shell.
  7. Examine os programas que permitem passar o usuário com parâmetro. 

Ameaças via Rede

  1. Examine o /etc/hosts.equiv e todos os .rhosts, caso você deseje usar os comandos "r" (rlogin, remsh (rsh), rexec, rcp, retc :-). NOTA: este recurso é altamente condenado, no aspecto segurança.
  2. Desabilite TODOS os recursos de rede que NâO estiver usando.
  3. Substitua (se quiser manter habilitado) o fingerd, por uma versão segura.
  4. Verifique (e instale) a versão mais recente do Sendmail.
  5. Desabilite, se possível, o serviço de TFTP. (Candidato a serviço mais inseguro).
  6. Certifique-se que a versão do FTP anonymous é segura.
  7. Jamais coloque o mesmo arquivo /etc/passwd no diretório do ftp anonymous.
  8. Jamais crie diretórios cujo dono seja o usuário "ftp" (serviço FTP).
  9. Desabilite o serviço de NFS para máquinas remotas.
  10. Use um POPD que tenha arquivo de senhas próprio, ou ao menos permita desconexào após n (poucas) tentativas.
  11. Remova o programa phf do diretório .../httpd/cgi-bin. (serviço http).
  12. Remova também os programas test-cgi e nph-test-cgi diretório .../httpd/cgi-bin. (serviço http).
  13. Jamais coloque algum interpretador (perl, csh, ksh, etc) no diretório .../httpd/cgi-bin (serviço http).   14. Não crie links que usem o perl ou shell para disparar programas. 

Segurança em Roteadores

  1. Troque ou cadastre uma senha no roteador antes de ligado definitivamente à Internet, seguindo as mesmas regras para senhas de usuário.
  2. Desabilite, se possível, o acesso remoto ao 'login' do roteador.
  3. Desabilite os serviços internos (chargen, echo, etc).
  4. No caso de roteadores Cyclades, troque não só a senha de fábrica como também o nome do superusuário.
  5. Desabilite todos os protocolos desnecessários (RIP, BGP, etc). 

Dicas de Segurança
 

Limite o número de programas que necessitem SUID root no seu sistema.

Programas SUID root são programas que quando rodam, rodam no nível de root (Deus no mundo do UNIX). Algumas vezes é preciso mas muitas vezes não. Os programas SUID root podem fazer qualquer coisa que o root pode tendo um alto nível de responsabilidade a nível de segurança. As vezes eles fazem, as vezes não e quando não fazem, usuários podem as vezes pegar o root para fazer coisas que nem pode imaginar. Aqui é onde entram os exploits. Um exploit é um programa ou script que vai pegar o SUID root para fazer muita coisa ruim. (Dar shells de root, pegar arquivos de senhas, ler mails de outras pessoas, deletar arquivos, etc). 

Rodando programas com previlegio mínimo no acesso.

Como foi dito antes, alguns programas não precisam de root para roda-los, mas precisam de um alto acesso para o usuário normal. Aqui é onde começa a idéia do privilégio mínimo de acesso. Por exemplo, a LP (linha de impressora) possui comandos que precisam de alto acesso para o usuário normal (para acessar a impressora), mas não precisa roda-los como root. Então, uma pequena coisa a fazer é criar um usuário (/bin/true como shell) e um grupo chamado lp e fazer com que qualquer usuário possa rodar qualquer dos comandos de LP e fazer tudo com os comandos LP que tiverem como owner e grupo o lp. Isto fará com que o lp possa fazer seu trabalho (administre as impressoras). Então se o usuário lp estiver compromissado, o invasor realmente não vai dar um passo de root no seu sistema. Agora para alguns programas que são SUID root, crie um usuário e um grupo para o programa. Entretanto, algumas pessoas se enrrolam quando botam a maioria desses programas SUID no mesmo usuário e grupo. Isto é ruim! Realmente ruim!. O que você precisa fazer é botar todo o programa que inicie como root para usuário de privilegio mínimo. 

Desabilitando serviços que você não precisa ou não usa.

Se você não usa rpc.mountd, rpc.nfsd ou outros daemons parecidos, não rode-os. Simplesmente kill -9 nele e vá nos scripts em /etc/rc.d e comente-os. Isto aumentará a memória, CPU e é um meio de se prevenir de invasores que tentam obter informações sobre seu sistema e, claro, pegar root nele. 

Tenha sempre os mais recentes /lib's.

Os arquivos em /lib's são codigos share, quando um programa precisa de uma certa peça do codigo, ele simplesmente vai e pega este codigo (assumindo que este não está compilado no codigo). A vantagem não seria outra; Programas são compilados menores, se uma peça do codigo lib está desaparecida, você pode simplesmente fazer um upgrade. Desvantagens; o codigo desaparecido em /lib vai afetar alguns programas e se um invasor por suas mãos no lib's, você realmente estará com dificuldades. 

A melhor coisa a fazer, é atualizar corretamente os upgrades para as lib's e checar o tamanho e data frequentemente nas alterações. 

Encriptando conexões. 

O pacote Sniffing é simplesmente o melhor meio para pegar passwords. O sniffer se acomoda em uma máquina, em uma subrede não encriptada e o rendimento será centenas de passwords. Não somente dos computadores locais, mas também de outras redes de computadores. Agora você pode dizer para você mesmo, "Mas eu tenho Firewall na minha rede, entâo estou seguro". "Besteira". Um estudo recente mostrou que uma parte dos sniffers atacam por trás dos firewalls. (O "bom lado"). Veja alguns programas seguros da lista de pacotes de encriptação fora daqui. 

Instale wrappers para /bin/login e outros programas. 

Wrappers são programas pequenos mas muito eficientes que filtram o que está sendo enviado para o programa. O login wrapper "remove todas as instâncias de várias variáveis do ambiente" e o wrapper do sendmail faz mais ou menos o mesmo. 

Mantenha seu Kernel na última versão estável.

Esta dica realmente é aplicada as pessoas que possuem usuários no seu sistema. Kernels antigos possuem seus bugs conhecidos por qualquer pessoa e as vezes são muito instáveis. Veja o ldt-exploit.c. Kernels 2.0.X tendem a serem mais rapidos que os 1.2.X e, é claro, mais estáveis. 

Quando estiver configurando seu kernel somente compile no codigo o que você precisar. Quatro razões vem em mente: O Kernel vai ficar mais rápido (menos codigos para rodar), você vai ter mais memória, ficará mais estável e partes não necesárias poderão ser usadas por um invasor para obter acesso em outras máquinas. 

Deixe o pessoal do lado de fora saber o mínimo possível sobre seu sistema.

Um simples finger para o sistema da vítima pode revelar muitas coisas sobre seu sistema; Quantas usuários, quando o admin está dentro, ver o que ele está fazendo, quem ele é, quem usa o sistema e informações pessoais que podem ajudar um invasor a conseguir senhas de usuários. Você pode usar um potente finger daemon e limitar quem pode conectar ao seu sistema e exibir o mínimo possível sobre seu sistema. 

Escolha boas senhas.

Simplesmente ponha, senhas ruins é a chave para penetrar em seu sistema. Se você instalar o shadow em uma Box, você pode escolher para filtrar senhas ruins, tipo login: kewl, password: kewl, esta senha já não seria aceita, e isto é uma boa ideia. Sempre que você tiver uma pequena quantidade de pessoas no seu sistema, e eles sâo amigos, algum usuário não convidado pode obter root e fazer um `rm -rf /'. 

Se voce puder, limite quem pode conectar ao seu Linux.

Se possível, bloqueie o acesso telnet de fora da subrede. Certamente que seja mais seguro e você vai ter a sorte de não ter seu sistema danificado por estranhos. 

De olho no Netstat, Systat e no Finger
 
 

OBS: Apenas utilize as informações aqui contidas de acordo com as suas necessidades.

Para aumentar ainda mais a segurança do seu sistema Linux fique de olho no que pode fazer esses, aparentemente, inofensivos serviços: 

Netstat (tcp/15) - Informa a você todas as informações sobre sua conexão atual. (endereços, dns, portas, etc) 

Systat (tcp/11) - Mostra qualquer/todos os processos que estão sendo rodados em sua máquina, quando acessado telnet na porta 11 de sua máquina, qualquer pessoa pode ver esses processos, e com isso, saber o que você está fazendo no exato momento em que você faz! 

Finger (tcp/79) - Apresenta informações completas de usuários logados/não-logados em seu sistema (shells, diretórios, logins, etc). Existe alguns Bugs (falhas na seguranºa) que podem ser "furados" remotamente. 

Para se livrar disso, e deixar seu sistema mais seguro, edite o arquivo /etc/inetd.conf e comente (#) as seguintes linhas: 

#finger stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.fingerd -w
#systat stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
#netstat        stream  tcp     nowait  root    /usr/sbin/tcpd /bin/netstat -a

Com isso, os 3 serviços estarão desabilitados, e ninguem poderá acessar além do root, claro. Para rodar os comandos, tente o que está no final da linha, como: 

/bin/ps -auwwx
/bin/netstat -a 

OBS: Para as mudanças no inetd.conf serem efetuadas, é necessário reiniciar o inetd (signal HUP ou kilando e executando novamente). 

 

 

Segurança em programas do linux

 

 

 

 

Protegendo seu X-Windows 

Esse eh um esquema chamado "Magic-Cookie", e tem como objetivo proteger usuarios de Linux/X-Windows de programas tipo "xkey", que capturam os caracteres digitados no XWin. Se voce estiver rodando o xdm naum precisa fazer nada, mas se vc estiver rodando o XWin "single user" vc precisa fazer o esquema, pois o xdm naum estara sendo usado. Eh bem facil de fazer, e naum deve dar nenhum problema se vc fizer tudo certo. Bom, vamos la. Em primeiro lugar, rode o xauth como root. Com isso, sera criado o Magic Cookie. Ao rodar o xauth pela primeira vez, aparecerah na tela alguma coisa do tipo: 

xauth: creating new authority file /home/locutus/.Xauthority Using authority file /root/.Xauthority xauth> 

Agora vc tera que pensar em um numero hexadecimal de 100 digitos. Pode colocar qualquer um, vc naum vai ter que lembrar dele depois ;) (mas naum coloque numeros muito faceis de se adivinhar, como 1111111...) 

No prompt do xauth digite: 

xauth> add :O MIT-MAGIC-COOKIE-1 

Digite "exit" e saia do xauth. Com isso, as informacoes serao gravadas no .Xauthority no dir /root. Copie esse arquivo para o /home so usuario que tem acesso ao X-Win, e para /etc/X11/Xauthority. Certifique-se de que /etc/X11/Xauthority esta com a permissao 600 e que seu proprietario seja root. Alem disso, faca com que a copia que esta no /home do usuario esteja com a permissao +r para este usuario. Quase pronto. Agora que vc criou o Magic-Cookie, deve editar o arquivo /usr/X11/bin/startx. Ache a linha serverargs="" e coloque no lugar: 

serverargs="-auth /etc/X11/Xauthority" 

Com isso o Xwin ira chamar o Magic-Cookie. Reinicie o XWin e esta pronto. 

Esquema Shadow

Aqui estao alguns exemplos de demonstracao, se você quer deixa o seu sistema um pouco mais restrito: 

1. modifique o /etc/hosts.deny para negar o acesso para sua máquina. 

Exemplo: voce quer filtrar o acesso do telnet e rlogin a seu sistema, assim, insira essas linhas em: 

/etc/hosts.deny: 

in.telnetd:ALL in.rlogind:ALL

E então voce modifica o arquivo /etc/hosts.allow. Permitindo assim que alguns hosts possam conectar, como: 

in.telnetd:localhost,.polymtl.ca in.rlogind:localhost,.polymtl.ca

Assim só as maquinas localhost e polymtl.ca podem conectar. Muito freqüentemente, os sistema não estaria debaixo de ataques se os administradores tivessem editado estes arquivos :-) 

2. Instalando password Shadowing.

Em um sistema Linux sem a secao Shadow instalada, as informacoes dos usuarios (inclusive a senha) serao armazenadas no arquivo /etc/passwd. A senha eh armazenada em um formato codificado. Se voce pergunta para um perito de criptografia, ele ou ela lhe falara que a senha esta bastante codificada porque esta em crypt(3), o texto eh fixado num valor nulo e a senha é a chave. Assim alguém pode hackear suas contas em seu sistema, desde que todo o mundo possa ver a senha codificada, mas com a secao Shadow a senha será armazenada no arquivo /etc/shadow que so com o root para ver. Aqui esta a secao Shadow, e voce tera que recompilar algumas coisas como: adduser, login, su, sudo, passwd, ftpd, Post Office Protocol 3, xdm, xlock e talvez mais. Confira o Shadow-Password-HOWTO se você quer saber mais. 

ipfwadm - Firewall no Linux.

1. BACKGROUND

Quando você usa ipfwadm para construir um firewall, você precisa definir antes de mais nada qual será a regra default para o IP Account Rules a ser tratado. IP Account Rules são categorias básicas de tratamento de dados e conjunto de regras do ipfwadm. Se dividem em Output, Input, Forward e Masquerading. Vou tratar apenas de Output e Input (que resolvem seu caso). 

IP Input Firewall Rules: da conta da filtragem na ENTRADA de pacotes. Especifica o que/quem pode entrar. 

IP Output Firewall Rules: da conta da filtragem na SAIDA de pacotes. Especifica o que/quem pode sair. 

Essas 2 categorias podem assumir como regra default:

     - Accept: todos os pacotes são aceitos independente do IP/porta de origem e independente do IP/Porta de destino. 
     - Deny: todos os pacotes são negados independente do IP/Porta de origem e independente do IP/Porta de destino. 

Uma vez definida a Police default, parte-se para a construção das regras que darão conta de entrada/saída de pacotes baseados em origem/destinos específicos. 

2. ANALISE DAS REGRAS DE SEU FIREWALL

A partir do background anterior, podemos concluir algumas coisas das regras que você especificou: 

2.1. Você deve estar usando "accept" como Police default para a categoria Output (-O). Se não fosse assim, você não teria conseguido sequer mandar esse email para a lista, já que a categoria Output da conta dos pacotes que SAEM de sua maquina. (isso pode ser desmentido se houver alguma regra para a categoria forwarding que de tratamento para a saída de email). 

2.2. Se, como já foi mencionado, a categoria Output da conta dos pacotes que saem, e a categoria Input da conta dos pacotes que entram, então, o tipo de firewall que você esta tentando implementar deve se basear na categoria Input, já que você quer filtrar os pacotes PROVENIENTES das maquinas 192.168.10.*. 

2.3. De qualquer modo, e de tudo o que já foi comentado, o conjunto de regras definidas por você não possuem ação nenhuma na filtragem de dados. 

Obs.: é possível construir um firewall com a Categoria Output que "bloqueie" conexões de fora, filtrando os pacotes de saída. No entanto não vou entrar nessa discussão pois creio não ser o seu caso. 

3. EXEMPLOS

Exemplo 1 - Firewall construído em cima da categoria Input e com Police default "deny" 

Este modelo de firewall é construído inteiramente na categoria Input assumindo deny como Police Default. A estratégia aqui é bloquear o acesso a tudo e, em seguida, liberar apenas aquilo que for conveniente. 

Este modelo permite:

     - trafego normal a nível de localhost, 
     - trafego normal a nível de conexões provenientes de maquinas 192.169.10.*, 
     - trafego normal a nível de conexões de nossa maquina para outras, 
     - e trafego normal de qualquer maquina na Inet para nosso servidor de ftp e http 

A-) Vamos limpar todas as regras de Input.
/sbin/ipfwadm -I -f 

B-) Vamos definir deny como regra default. Ninguém acessa nossa maquina.
/sbin/ipfwadm -I -p deny 

C-) Liberamos o trafego local (apenas loopback!)
/sbin/ipfwadm -I -a accept -V localhost 

D-) Adicionamos tratamento para o nosso trafego particular. 

  • Pacotes TCP:


Obs.: aceitamos todos os pacotes destinados a portas efêmeras e desde que o bit-flag ACK esteja setado:
/sbin/ipfwadm -I -a accept -P tcp -S any/0 -D 0.0/0 1024:65535 -k 

  • Pacotes TCP (tratamento especial para ftp):


Obs.: para ftp é necessário habilitar a entrada de pacotes na porta de controle 20. Alem disso, o flag ACK não pode estar setado.
/sbin/ipfwadm -I -a accept -P tcp -S any/0 20 -D 0.0/0 1024:65535 

  • Pacotes UDP:


/sbin/ipfwadm -I -a accept -P udp -S any/0 domain sunrpc imap2 -D 0.0/0 1024:65535 

E-) Adicionamos tratamento para o trafego proveniente de 192.168.10.* 

  • Pacotes TCP:


/sbin/ipfwadm -I -a accept -P tcp -S 192.168.10.0/24 1024:65535 -D 0.0/0 20 ftp telnet smtp www pop-3 sunrpc 

  • Pacotes UDP:


/sbin/ipfwadm -I -a accept -P udp -S 192.168.10.0/24 1024:65535 -D 0.0/0 domain 

F-) Adicionamos tratamento para conexões externas aos nossos serviços (ftp e www). 

  • FTP:


/sbin/ipfwadm -I -a accept -P tcp -S any/0 1024:65535 -D 0.0/0 20 ftp 

  • WWW:


/sbin/ipfwadm -I -a accept -P tcp -S any/0 1024:65535 -D 0.0/0 80

Exemplo 2 - Firewall construído em cima da categoria Input e com police default "accept" 

Este modelo de firewall é construído em cima da categoria Input assumindo "accept" como Police default. A estratégia desse modelo é permitir a entrada de todos os pacotes e, a partir dai, ir filtrando aquilo que não for conveniente. Este modelo permite tudo aquilo já observado no 1. exemplo. 

A-) Vamos limpar todas as regras de Input.
/sbin/ipfwadm -I -f 

B-) Vamos definir accept como regra default. Todos acessam nossa maquina.
/sbin/ipfwadm -I -p accept 

C-) Liberamos o trafego local (apenas loopback!)
/sbin/ipfwadm -I -a accept -V localhost 

D-) Vamos liberar o acesso a telnet proveniente de maquinas 192.168.10.* e em seguida bloquear o acesso a qualquer outra maquina.
Obs.: O ipfwadm considera as regras na mesma ordem em que foram adicionadas.
/sbin/ipfwadm -I -p accept -P tcp -S 192.168.10.0/24 1024:65535 -D 0.0/0 telnet
/sbin/ipfwadm -I -p deny -P tcp -S any/0 -D 0.0/0 telnet 

E-) As demais regras seguem, em linhas gerais, o conjunto D. 

4. CONCLUSÕES

Os exemplos mostrados acima são bastante simples e dão conta de um numero de casos muito específicos. O Ipfwadm apresenta uma serie de outras opções e para um firewall real toda uma serie de fatores precisam ser levados em conta. Isso, naturalmente, depende de uma boa analise das reais necessidades a nível de filtragem alem de uma boa dose de compreensão de todos os protocolos envolvidos e do funcionamento geral da Internet. Como dica final, deixo mais um exemplo que pode ser extremamente útil na hora de resolver alguns problemas na filtragem dos dados. Esse exemplo faz uso de uma opção do Ipfwadm que é a geração de log para todos aqueles pacotes que satisfaçam uma ou mais condições determinadas. É para ser utilizado com o primeiro modelo apresentado (exemplo: Police default=deny), mas pode ser adaptado para operar com o segundo modelo. 

Obs.: Deve ser executado após a entrada de todas as regras convencionais. 

A-) Loga todos os pacotes TCP que não se encaixaram em nenhuma regra anterior.
/sbin/ipfwadm -I -a deny -P tcp -S any/0 -D 0.0/0 0:65535 -o 

B-) Loga todos os pacotes UDP que não se encaixaram em nenhuma regra anterior.
/sbin/ipfwadm -I -a deny -P udp -S any/0 -D 0.0/0 0:65535 -o 

Monitorando logs

Uma coisa muito importante e voce monitorar os logs. Adicione as seguintes linhas para o arquivo /etc/syslog.conf

*.=info;*.=notice

                 /usr/adm/admin.security

*.warn

                 /usr/adm/admin.security

*.err

                 /usr/adm/admin.security

Essas linhas mandaram para o arquivo /usr/adm/admin.security algumas informações. Caso queira obter mais informações, digite man syslogd.conf. Um programa muito bom é o iplogger-ident-1.1.tar.gz que pode ser conseguido em ftp.pucsp.br/pub/unix/linux/netadmin/iplogger-ident-1.1.tar.gz Descompacte-o, vá no diretório criado, digite make e agora como root make install

Adicione no /etc/rc.d/rc.local:
/usr/sbin/tcplogd
/usr/sbin/icmplogd 

Agora certifique-se de que os dois estão rodando. 

No gráfico digite:
xconsole -geometry 656x167+359+581 -daemon -notify -verbose -fn fixed -exitOnFail -bg black -fg SeaGreen -name laido -file /usr/adm/admin.security 

Caso esse comando depois de 30min nao mostre nada é porque deu erro, comigo nunca aconteceu mas com um amigo meu já, então se esse falhar, digite num xterm: 

tail -f /usr/adm/admin.security 

Agora como root digite: 

chmod 640 /usr/adm/admin.security

chown root.root /usr/adm/admin.security 


 

 

Se não for o root que irá ficar monitorando os logs mude o chown root.root para chown nome_do_administrador.root Pronto agora você terá um pouco mais de informações sobre o que esta acontecendo no seu sistema :-) 

Limitando acesso

Se você fez o procedimento do texto anterior (Monitorando logs) e deu certo você verá que toda vez que alguém conectar ao seu computador você verá o host dele ou o ip, mas se ainda você quer limitar o acesso ao seu computador faca o seguinte, no arquivo /etc/hosts.deny coloque ALL:ALL E se você quer dar acesso p/ alguém em especial faça o seguinte, no arquivo /etc/hosts.allow coloque ALL: ip_da_maquina ALL: host_da_maquina 

Ex.:
ALL: 200.18.52.
ALL: .ano2001.ml.org

Isso significa que todos os ips que começarem com 200.18.52. como 200.18.52.1 ou 200.18.52.192 poderao acessar tudo na sua maquina ou todos os hosts que tiverem .ano2001.ml.org como host6.ano2001.ml.org ou host20.ano2001.ml.org tamém poderão acessar tudo. Agora se você quiser que o host ou o ip acesse apenas o processo como o telnet coloque assim: 

in.telnetd: nome_do_host_ou_ip 

É normal que coloque wu.ftpd:ALL para que o ftp fique para todos. e não esqueçaa de colocar ALL: 127.0.0. para que sua máquina possa acessar também :-) 

Segurança no PPPD

O PPPD armazena informações de uma conexão com um provedor totalmente, inclusive qual seu username e o seu password. Sendo armazenados no arquivo: 

     /var/adm/debug 

Esse arquivo vem com a permissão READ TO ALL. E isso não é bom para a saúde da máquina... Tire essa permissão com o seguinte comando: 

     # chmod go-rwx /var/adm/debug 

Há também outros arquivos que por motivos semelhantes de segurança executar o mesmo comando, é o caso do messages e syslog, portanto: 

     #chmod go-rwx /var/adm/messages
     #chmod go-rwx /var/adm/syslog 

Segurança no httpd 

Algumas dicas para o seu servidor httpd rodar seguramente. 

  1. Apache: Rodar o serviço como "nobody"? Configure seus Apache para rodar todos os scripts cgi como "nobody", nunca utilize permissão "root" para eles, pois os scripts terão liberadade para fazerem o que quizerem. 
     

 

A única maneira de se "hackear" o apache com o serviço como "nobody" é: 

- Falhas no daemons do servidor
- Defeitos nas aplicações disponibilizados via interface como o CGI. 

  1. Permissões de arquivos: O recomendável e nunca usar permissões "+s" em seus scripts, pense que sempre há outra solução para o seu problema. 
  2. Vigilância: É bom sempre dar uma olhada nos arquivos de acesso de seu apache. 
     

 

Exemplo do arquivo access.conf (seguro) 

# Diretório com arquivos páginas .html
<Directory /httpd/htdocs>
Options Indexes FollowSymLinks
Options SymLinksIfOwnerMatch
AllowOverride None
order allow,deny
allow from all
</Directory> 

# Diretório com arquivos scripts cgi
<Directory /httpd/cgi-bin>
AllowOverride None
Options None
</Directory> 

# Diretorio com arquivos .shtml 

<Directory /httpd/parsed>
AllowOverride None
Options Includes
</Directory> 

Exemplo de um arquivo: srm.conf (seguro) 

ScriptAlias /cgi-bin/ /httpd/cgi-bin/
AddType text/html .shtml
AddHandler server-parsed .shtml 

 

 

 

Password root no linux

 

 

 

 

Perdi a senha do root

Quando aparecer LILO boot: digite: "linux single" que você irá cair no bash, o shell originalmente usada pelo root, e vai fazer o seguinte: 

#bash: passwd
Type New Unix Passwd:
Retype New Unix Password: 

Neste caso você deverá digitar o seu novo passwd, e confirma-lo logo em seguida. 

Root passwd locked

Quando aparecer LILO boot: digite: "linux single". 

#Bash: cd /etc
#Bash: pico passwd (ou shadow se estiver shadowed) 

Abriu o arquivo /etc/passwd no pico, aqui eu editei uma parte do meu arquivo /etc/passwd: 

root:*pUnKAnT1nAz1:0:0:root,,,,:/root:/bin/bash
ash:haNAja898:500:500:Linux User,,,,:/home/ash:/bin/bash 

Nota-se que a senha criptografada do meu root esta com *, e nos arquivos shadow do linux (/etc/shadow) ela vem com *, então antes que me venha com perguntas, a senha esta com Shadow? R: Não, ela está locked (trancada), ou seja, impossível de se logar. Nota-se também que a minha senha particular (ash) não está travada, somente criptografada. Normalmente, nos arquivos de senhas com Shadow vem assim: 

root:*:0:0:root,,,,:/root:/bin/bash (Aqui sim está com Shadow.) 

Mas voltando... 

root:*pUnKAnT1nAz1:0:0:root,,,,:/root:/bin/bash 

Com o arquivo do /etc/passwd aberto você deve apenas tirar o *, dar um logout e entrar com o root e a sua senha normal. 

Estrutura do passwd

Bem, isto não quer dizer como é a estrutura do passwd, mas sim, a estrutura da linha do /etc/passwd ou shadow, que varia pelos sistemas. 

root:pUnKAnT1nAz1:0:0:root,,,,:/root:/bin/bash
user:senhaencriptada:uid:gid:comentarios:homedouser:shell 

Onde: 

user: O seu usuário.
senhaencriptada: Senha encriptada pelo pacote do shadow(opcional).
uid: User ID, identificação do usuário. 
gid: Group ID, identificação do grupo do usuário. 
comentarios: Comentários/Referências sobre o usuário.
homedouser: Diretório inicial do user. 
shell: Shell escolhida pelo user, eu prefiro a bash, apesar de usar o nick de uma outra shell(ash).

Ativando shadow passwd no sistema

Como opção de segurança, para evitar que intrusos roube suas senhas, é recomendavel que você use o programa pwconv, simplesmente digite pwconv, se não der certo, tente pwconv5, depois de um chmod XXX nos seus arkivos shadow (/etc/shadow e /etc/passwd) para que ninguem possa R(ler), W(gravar), X(executar) e etc. 

Tabela dos endereços dos arquivos Shadow em sistemas *nix
 

Sistema *nix

Path do Shadow Passwd

Símbolo Usado

AIX 3

/etc/security/paswd

!

A/UX 3.0s

/tcb/files/auth/?/

*

BSD 4.3-Reno

/etc/master.paswd

*

ConvexOS 10

/etc/shadow

*

ConvexOS 11

/etc/shadow

*

DG/UX

/etc/tcb/aa/user/

*

EP/IX

/etc/shadow

x

HP-UX

/.secure/etc/passwd

*

IRIX 5

/etc/shadow

x

Linux

/etc/shadow

*

 

/etc/passwd-

*

OSF/1

/etc/passwd[.dir | .pag]

*

SCO Unix #.2.x

/tcb/auth/files/

/

SunOS 4.1+c2

/etc/security/passwd.adjunct

##username

SunOS 5.0

/etc/shadow

 

System V Release 4.0

/etc/shadow

x

System V Release 4.2

/etc/security/*

database

Ultrix 4

/etc/auth[.dir | .pag]

*

UNICOS

/etc/udb

 

 

 

 

Lynx

 

 

 

 

LYNX e' um programa de dominio publico para visualizacao de informacoes disponiveis na Internet em servidores World Wide Web (WWW), para interface "não-gráfica", ou seja orientada a caracter. Uma caracteristica importante do lynx e' que ele permite tambem acesso a arquivos disponiveis em sistemas rodando Gopher, HTTP (Hyper Text Tranfer Protocol), FTP, WAIS e servidores NNTP. O lynx exibe arquivos em formato de hipertexto - HTML (Hypertext Markup Language). 


 
2. Para iniciar o programa Lynx
 

Digite lynx no prompt do Unix: 

% lynx 

Ao ser inicializado o lynx vai exibir a "homepage", ou página de entrada do servidor WWW do Centro Regional de Brasilia (CR/DF). 

   RNP - Centro Regional de Brasilia
 
   MCT/CNPq/RNP - Centro Regional/DF
________________________________________________________________________
 
   Logo RNP
                    BEM-VINDO AO CENTRO REGIONAL/DF DA RNP!
 
   Em construcao! Welcome to our CR/DF Web server.
   Since it is under construction all the information available thus far
   is only in Portuguese.
________________________________________________________________________
 
Para obter informações sobre o CR/DF clique aqui!
 
        -- pressione ESPACO para avancar a pagina --
SETAS: CIMA e BAIXO movimentam no texto; '->'novo texto; '<-'texto anterior
 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

Observe no rodapé da tela os principais comandos para utilização do lynx. 

Os itens que aparecem em destaque (normalmente "highlighted"), funcionam como "links" para outros documentos. Ou seja, ao serem selecionados, exibem uma nova tela de informação. 


3. Para percorrer uma página
 

  • Avançar tela a tela barra de espaco 
  • Voltar para a tela anterior b 
  • Próximo item em destaque seta para baixo 
  • Item anterior seta para cima 
  • Acesso ao link / nova página enter ou seta para a direita 
  • Voltar para a página anterior seta para a esquerda 


4. Para iniciar o lynx conectando-se a um servidor específico
 

URL (Uniform Resource Locator) 

URL é a notação padrão de arquivos na internet. A URL contém todas as informações necessárias para se localizar qualquer recurso na rede. Escreve-se dessa forma: 

protocol://host/path/filename 

protocol = identifica o protocolo de comunicação usado pelo servidor onde está o arquivo desejado.. 

host = endereço internet da máquina em que se encontra o serviço desejado 

path and filename = O diretório e o nome do arquivo desejado. 


 

 

Conectando-se a uma URL específica

O Lynx ( como diversos clientes www) pode interagir com grande variedade de servidores (gopher, wais, ftp, etc). 

% lynx URL (Uniform Resource Locator) 

Exemplos de URL's: 

HTTP (Hypertext Transfer           FTP (File Transfer Protocol)           
Protocol)                          ftp://ftp2.cc.ukans.edu/pub/lynx/READM 
http://www.hq.rnp.br/docs/index.ht E                                      
ml                                                                        
                                   WAIS (Wide Area Information Service    
Gopher                             protocol)                              
gopher://gopher.micro.umn.edu/11/  wais://cnidr.org/directory-of-servers  

 
5.Para abrir novas conexões com outros servidores 
 

Para acesso a outras url's quando estiver utilizando o lynx, digite 'G' .O lynx vai abrir então uma linha de comando onde deve ser digitada a url desejada. 

URL to open: ftp://ftp.ncl.uk

'->' novo texto; '<-' texto anterior H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search... 

 
6. Para salvar e enviar telas por correio eletrônico
 

Para salvar ou imprimir qualquer tela, digite 'P". Você vai obter a seguinte tela: 

Lynx Printing Options
 
                    PRINTING OPTIONS
 
   There are 50 lines, or approximately 0 page, to print.       
   You have the following print choices
   please select one:
 
         Save to a local file
        Mail the file to yourself
        Print to the screen

Save to a local file o lynx pergunta o nome desejado para o arquivo, que será gravado em sua área de trabalho ( ~username). 

Mail the file to yourself solicita um endereço eletrônico válido para o qual a página será enviada por correio eletrônico. 

Print to the screen exibe a página em tela.

Para imprimir uma página ou documento, utilize a opção de salvar e em seguida proceda como normalmente para impressão de arquivos (ver unix quick guide). 


 
7. Para guardar seus achados - bookmark

 

O bookmark é seu caderno de anotações eletrônico, onde é possivel armazenar quaisquer URL's de interesse. Uma vez feitas as anotações no bookmark, este pode ser consultado todas as vezes que utilizar o lynx. 

  • Adicionar item ao bookmark a 
  • Remover item do bookmark r 
  • Ver bookmark v 


 
8. Para fazer buscas usando lynx

Busca na Internet

Para acessar alguns meta-índices de recursos internet, digite"i" .Através destes meta-índices é possível realizar buscas nos diversos serviços e recursos da net, informando palavras ou expressões chaves. 

Estes meta-índices oferecem opções de busca para sofwares, endereços eletrônicos, documentos, publicações, etc. 


Busca na página corrente

O comando "/ " abre uma linha de comando para a palavra de busca. Em seguida posiciona o cursor na ocorrência mais proxima da palavra informada. 


Enter a search string: Brasil 
 
9. Para ver o 'fonte' de uma página
 

Visualizar o fonte de um página / 

O mesmo comando é usado para retornar ao modo original de visualização. 


 
10. Help on line
 

Digite ? ou H para obter as seguintes opções de help. 

            Help! - Press the Left arrow key to exit help
 
                            LYNX HELP FILES                     
 
Choose a subject
     * Key-stroke commands
     * About Lynx
     * Lynx users guide version 2.3
     * Help on version 2.3
     * Help on HTML
     * HTML Quick Reference
     * Help on URL's

 
11. Outros comandos
 

  • Informações técnicas sobre tópico corrente: = 
  • Rearrumar tela (refresh): W 
  • Comandos da sessão (history page): del 
  • Cancela transferência: z 
  • Edita arquivos locais: e 


 

 

Sair do lynx

Digite 'Q' na linha de comando, o lynx vai pedir então confirmação e em seguida encerrar a seção. 

Voce deseja realmente terminar? [Y]   

 

 

 

Pine

 

 

 

 

PINE e' um sistema interativo de correio eletrônico de domínio público. O sistema tem um mini-menu que facilita o envio, o recebimento e o arquivamento de mensagens eletrônicas, mesmo para novos usuários. O Pine funciona também como leitor das conferências "Usenet News". Apesar de ter sido originalmente orientado para novos usuários, o Pine desenvolveu vários recursos avançados. Entre em contato com o administrador do seu sistema local para orientar a configuração do seu Pine. 

2.Para iniciar o programa Pine 

Digite pine no prompt do Unix: 

% pine 

Imediatamente entra-se no menu principal do Pine (Main Menu) com um elenco de opções. Para selecionar uma opção, digite a letra à sua esquerda. 

Apartir do Main Menu, é possível ler o Online-Help, escrever e enviar mensagens, ver a listagem das mensagens recebidas (Inbox Folder), abrir outros folders, ler grupos de News, atualizar sua agenda de endereços, configurar e sair do Pine. 

 PINE 3.91   MAIN MENU            <Mail/[]> (CLOSED)  0  Msgs   
 
 ? HELP                         Get help using Pine
 C COMPOSE MESSAGE              Compose and send/post a message
 I FOLDER INDEX                 View messages in current folder
 L FOLDER LIST                  Select a folder OR news group..
 A ADDRESS BOOK                 Update address book
 S SETUP                        Configure or update Pine
 Q QUIT                         Exit the Pine program
 
   Copyright 1989-1994.  PINE is a trademark of the University of Washington.
                              [No folder opened]
 
                ?  Help     P PrevCmd R  RelNotes
        O OTHER CMDS L [ListFldrs] N NextCmd K KBLock

 
3.Para enviar uma mensagem

Digite C (Compose) para entrar na tela de composição da mensagem. 

PINE 3.91   COMPOSE MESSAGE       lt;Mail/[]> (CLOSED)  0   Msgs
 
To      :  (digite o endereço eletrônico do destinatário)
Cc      :  (digite endereço opcional para envio de cópias da mensagem)
Attchmnt: (recurso opcional para envio de documentos anexos)
Subject : (escreva um título-descritivo da mensagem)
----- Message Text -----
 
(escreva o texto da mensagem neste campo)
 
^G Get Help    ^X Send    ^R Read File  ^Y Prev Pg ^K Cut Text..
^C Cancel      ^J Justify ^_  Alt Edit  ^V Next Pg ^U UnCut Text..

Preencha os campos To: , Cc:, Subject:, usando as setas ou a tecla <enter> para mover-se entre eles. 

Digite o texto no campo Message Text. Observe as opções de edição listadas abaixo da tela. Neste caso o Pine está utilizando o editor Pico, para maiores informações sobre esse editor, veja o Pico Quick-Guide. Após concluir a edição do texto da mensagem, digite Ctrl-X para enviá-la. Será feita então uma pergunta de confirmação, digite Y (Yes) ou <Enter> para enviá-la; ou N (No) para retornar a sua edição. 

Algumas dicas: 

* Para inserir um arquivo no "corpo" da mensagem, use o comando Ctrl-R. 

* Para adiar o envio ou edição da mensagem já começada, utilize o comando Ctrl-O (Postpone) para guardá-la. Ao próximo comando C (Compose Message) o Pine perguntará se continua-se ou não a mensagem adiada, confirme ou não segundo o desejado. 

* Para cancelar o processo de envio, digite Ctrl-C; e confirme o cancelamento. 

4.Para ver a lista de mensagens recebidas (INBOX Folder) 

A partir do Main Menu, digite I (Folder Index). 

   PINE 3.91   FOLDER INDEX     Folder: INBOX  Message 1 of  3 NEW
 
+ D 1 Mar  7 Pilar de Almeida  (31,323) Latin America Online (fwd)
+ N 2 Mar  6 Fabiola Greco     (3,178) Lista de Usuarios do CR-DF!(fwd)
+ A 3 Mar  8 Paloma de Almeida (1,369) Bem-vindo!
 
? Help      M Main Menu    P PrevMsg PrevPage     D Delete R Reply
O OTHER CMDS V [ViewMsg]   N NextMsg Spc NextPage U Undelete...

Será exibida então a tela de index (tela que lista as mensagens) do Folder INBOX, folder que contém as mensagens recebidas. 

A primeira coluna à esquerda da tela do Folder INDEX do Pine pode estar em branco, ou pode conter: 

"N" se a mensagem for nova (nao lida) 

"+" se a mensagem foi enviada diretamente a você (não é cópia, ou de uma lista) 

"A" se a mensagem já foi respondida (através do comando Reply) 

"D" se a mensagem estiver marcada para ser deletada 

As outras colunas descrevem respectivamente o número, a data de envio, o remetente, o tamanho (por caracter) e o subject da mensagem.. 

Para ler a mensagem: 

1. Use as setas para iluminar a mensagem a ser selecionada. 

2. Digite V ou <Return> para visualizá-la. 

A maioria dos comandos necessários para gerenciar as mensagens recebidas encontram-se listados na parte à baixo da tela. Digite O (Other Commands) para visualizar outros comandos adicionais. 

5.Para responder a uma mensagem 

A partir do Folder Index, selecione a mensagem iluminando-a com as setas e digite R (Reply). Ou, digite R a partir da tela do próprio texto da mensagem. Se a mensagem original foi enviada para mais de uma pessoa, o Pine perguntará ainda se você deseja enviar a resposta para todas essas pessoas, novamente confirme ou não segundo o desejado. A partir de então será aberta a tela de composição da mensagem-resposta (COMPOSE MESSAGE) e o processo de edição e envio será o mesmo de uma mensagem normal. 

6.Para reenviar uma mensagem recebida a outra pessoa 

Algumas vezes você pode querer enviar uma mensagem recebida para alguma outra pessoa, isto é, no jargão de redes, dar um forward de uma mensagem. Para reenviar uma mensagem, ilumine a mensagem a partir do Folder Index e digite F (Foward). Ou, digite F a partir da tela do texto da mensagem. A tela de composição de mensagem será aberta já com o texto da mensagem original. Preencha o campo To: com o endereço eletrônico do novo destinatário e envie a mensagem. Vale lembrar que é possível modificar o texto da mensagem reenviada, conforme o interesse. 

7.Folders 

É sempre recomendável dar um destino às mensagens recebidas no seu INBOX Folder, para que elas não se acumulem e sobrecarreguem essa área. Os Folders permitem o armazenamento de mensagens de forma organizada. É possível classificar as mensagens por assunto, origem, data, etc. 

O Pine cria automaticamente três folders: 

* O INBOX Folder; folder que contém as mensagens recebidas. 

* O Saved-messages folder; folder criado para se guardar cópias de mensagens que sejam de interesse. 

* O Sent-mail folder; folder onde todas as mensagens enviadas são automaticamente guardadas. 

8.Para salvar uma mensagem em Folder 

A partir da tela do Folder INDEX, use as setas para selecionar a mensagem de interesse e digite S (Save). Ou, a partir da tela do texto da mensagem, digite S (Save) 

O Pine sugerirá o nome de um folder default para salvar a mensagem; este nome é configurável. Ele pode ser o "saved-messages-folder" ou, o nome do usuário que lhe enviou a mensagem. 

Save to folder [ saved-messages]:       

Após digitar o nome do folder, ou aceitar o folder sugerido (saved-messages), pressione <Return>. 

Se o nome do folder for novo, o Pine perguntará: 

Folder "....." doesn't exist. Create? 

Digite Y (yes) ou N (no) conforme o interesse e a mensagem será salva no folder recém-criado. Uma vez criado o folder, sempre que você digitar o seu nome para salvar uma mensagem, o Pine apresentará a seguinte mensagem de confirmação: 

Message "#" copied to folder "..." and marked deleted

Ao salvar uma mensagem, ela é marcada como deleted (D) no Folder INBOX, isto é, ela é movida de seu mailbox para o folder. 

9.Para trocar de Folders 

Existem duas maneiras para acessar um folder e abrir suas mensagens: 

1. Digite L (Folder List), a partir do Main Menu ou a partir da tela INDEX (do seu Inbox Folder) 

  PINE 3.91   FOLDER LIST            Folder: INBOX  3  Messages
-------------------------------------------------------------
Folder-collection
-------------------------------------------------------------
INBOX
Recados              Documentos/RNP  sent-messages
Endereços     Internet        saved-messages
-------------------------------------------------------------
News-collection <News>
 (Local)
-------------------------------------------------------------
alt.0d                       alt.1d
alt.2600                     alt.266
alt.3d                       alt.abortion.inequity
 
               [Now in collection <Mail/[]>]
 
? Help       M Main Menu   P PrevFldr -PrevPage    D Delete..
O OTHER CMDS V [ViewFldr]  N NextFldr Spc NextPage A Add...

Na primeira seção encontram-se o Folder INBOX (que contém as mensagens recebidas) e os demais folders criados pelo usuário. A segunda seção da tela lista a coleção de NewsGroups recebida pelo usuário. 

A partir dessa tela "Folder List" é possível entrar em qualquer folder do seu Pine. Para isso, ilumine o folder desejado usando as setas e tecle enter no campo selecionado. 

2. Segunda opção: 

Digite G (Goto Fldr) a partir da tela de index do seu INBOX Folder . O Pine perguntará para qual folder você deseja ir, digite então o nome do folder desejado.  Caso você não se lembre do nome do folder, digite Ctrl-T. Todos os folders serão então listados. Selecione o desejado usando os comandos abaixo da tela. 

Abaixo, a tela após digitar G: 

 PINE 3.91   FOLDER INDEX                   Folder: INBOX  Message 2 of 3
 
  D 1   Mar  7 Pilar de Almeida (31,323) Latin America Online (fwd)
+ N 2   Mar  6 Fabiola Greco  (3,178)  Lista de Usuarios do CR-DF! (fwd)
+ A 3   Mar  8 Paloma de Almeida (1,369)  Bem-vindo!
 
GOTO folder :
^G Help      ^T ToFldrs   ^P Prev Collection    TAB Complete
^C Cancel   Ret Accept    ^N Next Collection

 
10.Agenda de Endereços Eletrônicos do Pine

Através da Agenda Eletrônica do Pine é possível relacionar endereços eletrônicos para os quais você frequentemente envia mensagens, atribuindo a cada um (ou a cada grupo) um nome fácil de lembrar, assim como um apelido. 

* Para agendar um endereço individual: 

(Existem mais de uma maneira de criar endereços individuais na sua Agenda Eletrônica. Neste Quick-Guide veremos apenas uma.) 

1. Digite A (Address Book), a partir do Main Menu 

2. Digite A (Add) 

3. Siga as instruções seguintes, digitando "nome", "apelido", "e-mail" da pessoa. 

* Para agendar uma lista (grupo) de endereços: 

1. Digite A (Address Book), a partir do Main Menu 

2. Digite S (Create List) 

3. Siga as instruções seguinte, digitando "nome do grupo", "apelido", "e-mails" do grupo 

 PINE 3.91   ADDRESS BOOK    dd Folder: INBOX  Message 3 of  3
 
chefa           Goncalves, Maria       mariag@leme.cpd.unis.br
joao            Oliveira, Joao         joao@cr-df.rnp.br
 
pesquisa        Grupo de pesquisa      DISTRIBUTION LIST:
 
                                        edgar@cr-df.rnp.br
                                        fabiola@cr-df.rnp.br
                                        sandra@cr-df.rnp.br
 
? Help    M MainMenu   P PrevEntry  -PrevPage    D Delete S CreateList
O OTHER CMDS  E [Edit] N NextEntry  Spc NextPage A Add    Z AddToList

A tela acima apresenta a lista de endereços agendados. Os dois primeiros são endereços individuais e o terceiro é um grupo de endereços. Aprimeira coluna à esquerda mostra os "apelidos" a serem digitados no campo To: na hora do envio de uma mensagem. A segunda coluna mostra os nomes das pessoas ou do grupo. E, por fim, a terceira coluna mostra os endereços respectivos. 

A partir da sua Agenda eletrônica, quando você enviar uma mensagem eletrônica para um endereço agendado, ao invés de digitar o endereço eletrônico, digite apenas o "apelido" no campo To: ou Cc: da mensagem.  Por exemplo, no caso da Agenda acima, ao invés de digitar todos os endereços do Grupo de Pesquisa, digite apenas "pesquisa" e a mensagem será automaticamente enviada para todos os endereços listados. 

11.Para salvar uma mensagem em arquivo 

A partir da tela Index (do seu INBOX Folder ou de qualquer outro folder), ilumine a mensagem desejada usando as setas e digite E (Export) para arquivar a mensagem na sua área de trabalho. 

O Pine fará então a seguinte pergunta: 

 EXPORT: (copy message) to file in home directory:       

Digite então o nome do arquivo desejado. 

12.Para imprimir uma mensagem 

(O Pine oferece três opções de impressão. Para configurar a opção compatível com o seu sistema, entre em contato com o técnico local responsável.)  Digite Y (Print), a partir do Index Screen ou da tela de texto da mensagem desejada. 

13.Para sair do programa Pine 

A partir de quase qualquer tela do Pine, digite Q (Quit). 

O Pine perguntará: "Really quit pine?" Digite Y (yes) e pressione <Return>. 

Caso voce tenha marcado quaisquer mensagens para deletar, ele perguntará ainda se você realmente deseja excluí-las ("Expunge Messages?"), digite Y (yes) ou N (no) para concluir a saída do programa.

 

 

 

Elm

 

 

 

 

ELM é um programa de correio eletrônico de domínio público, utilizado para composição e envio de mensagens eletrônicas. Existe sempre um editor de textos associado ao ELM, para a edição das mensagens. Usualmente o ELM é configurado para usar o editor Pico, mas este parâmetro e outros podem ser alterados. Este guia rápido fala do ELM 2.4ME+ PL32 (25), utilizado em sistemas operacionais Unix

2. Para iniciar o programa ELM

Digite elm no prompt do Unix: 

 

elm

São exibidos um índice com os cabeçalhos das mensagens de sua caixa de correio (mailbox -incoming messages) e um mini-menu de opções, como no exemplo abaixo. 
 

 

Mailbox is '/usr/spool/mail/curso1' with 135 messages [ELM 2.4 PL21]

 

N

1

 Aug 23 Rossana Maria de C

(43)

bibliografia

 

2

 Aug 23 L Zeredo

(35)

Re:Questionario 

M

3

 Aug 23 Luciana O. Goes

(30)

Material do treinamento

N

 Aug 23 Cam Simpson E'vill

(38)

Scanning &importing

D

 Aug 23 Mr. Jackie Godfrey

(59)

Tables in the Daily

O

 Aug 23 Jack Schofield

(33)

Re:Chicago-Internet? 

 

7

 Aug 23 Rolf Clausen

(35)

Staff titles

NU

8

 Aug 23 cnd-us@cnd.org

(586)

CND-US, August 18, 1994 

O

9

 Aug 22 Carolyn Garrett Cl

(37)

Re:searching long texts

O

10 

 Aug 22 chris simpson

(143)

German police fear plutonium

   You can use any of the following commands by pressing the first character;
d)elete or u)ndelete mail,  m)ail a message,  r)eply or f)orward mail,  q)uit
   To read a message, press <return>.  j = move down, k = move up, ? = help

Command: 

 

  • A linha no alto da tela indica de quem é a caixa de correio, o diretório de recebimento das mensagens eletrônicas, total de mensagens existentes e a versão do ELM que está sendo utilizada.
  • Na primeira coluna da tela, aparece um caracter que indica o status da mensagem (lida, nova, marcada para deleção, respondida, urgente, formato mime, etc).
  • O número que aparece na segunda coluna é sequencial, indicando o número total de mensagens.
  • Na terceira coluna aparecem a data de envio da mensagem e o nome de quem a enviou.
  • A terceira coluna indica o número de caracteres de cada mensagem, entre parênteses.
  • E a última contém o texto de subject (assunto) da mensagem, indicado pelo emissor.
  • Logo abaixo aparece um menu de opções que será comentado posteriormente
  • A última linha apresenta o prompt de digitação de comandos.

3. Para ler uma mensagem

Para ler o conteúdo da mensagem, há 2 opções: 

  1. Posicionar a barra de seleção sobre a mensagem (use as teclas de setas up-down), e tecle <enter>.
  2. Digite o número da mensagem (aquele que aparece na segunda coluna) e tecle <enter>.

4. Para enviar uma mensagem

Utilize o comando m (mail a message) no ELM. O programa mostra então na tela o cabeçalho da mensagem, linha a linha para ser completado: 

 

To: escreva o endereço eletrônico do destinatário
Subject: escreva o assunto da mensagem
Copies to: escreva outros endereços eletrônicos ou tecle <enter>

  • Após a entrada do cabeçalho, aparece a tela de edição para que a mensagem seja escrita. A aparência e opções desta tela dependem do editor associado ao ELM em sua conta.
  • Se estiver utilizando o editor PICO , ao concluir a edição, pressione simultaneamente as teclas CTRL e X para sair do editor de texto.
  • Após a saída do editor, o mini-menu apresentará as opções:

 

And now: s

e)dit message, h)eaders, c)opy, !)shell, s)end, or f)orget
a)ttachments, D)SN, p)gp

A primeira letra de cada opção deverá ser digitada para utilizá-la. Assim: 

  • Para voltar à tela de edição digite e - e)dit message
  • Para enviar a mensagem digite s - s)end
  • Para cancelar o envio digite f - f)orget

Para conhecer outras opções, consulte o help do ELM

5. Para responder a uma mensagem

Ao entrar no ELM, lhe é apresentado um índice das mensagens que estão na sua mailbox e um mini-menu. Para responder uma mensagem, posicione a barra de seleção sobre a mensagem e tecle r (reply to message). 

É então solicitada confirmação com a seguinte mensagem: 

 

Copy message? (y/n)

Se você responder y (yes), a mensagem original será inserida na sua resposta. 

Em seguida, é possível editar o campo subject (assunto) da mensagem a ser respondida. 

 

Subject: Re: o subject original

Para entrar um novo subject use CTRL-W ou CTRL-U) e digite o novo texto. Para manter o subject original bastar apertar a tecla <enter>

Finalmente o ELM ativa o editor de textos a ele associado para a edição da mensagem A partir daí proceda da mesma forma recomendada para o envio de uma nova mensagem. 

6. Para reenviar uma mensagem recebida a outra pessoa

Qualquer mensagem recebida pode ser re-enviada a outra pessoa, que não o rementente original, utilizando do recurso de forward. Para reenviar uma mensagem, posicione a barra de seleção sobre a mensagem, e tecle f (forward). 

O ELM mostra as seguintes perguntas: 

 

Command: Forward Edit outgoing message? (y/n)

Ao escolher n (no), a mensagem é reenviada exatamente como foi recebida. 
Selecionando y (yes) é possível alterar o conteúdo da mensagem original, antes de reenviá-la. 

Em seguida será preciso informar o endereço eletrônico do novo destinatário, assim como confirmar os campos de subject e eventuais cópias e realizar a edição da mensagem exatamente como no procedimento para envio de novas mensagens.
 7. Criando  Folders
Para armazenar mensagens de forma organizada, por exemplo, classificadas por assunto, origem, data, ou outros, o ELM oferece a opção da criação de folders. Folders são arquivos, onde as mensagens são copiadas em sequência. O ELM exibe estes arquivos como listagens de mensagens (tal como o inbox folder, ou folder de entrada, aquele que é sempre exibido quando se inicializa o ELM

Para salvar uma mensagem para um arquivo (folder), posicione a barra de seleção sobre a mensagem e tecle s (save). 

 

Command: Save to folder
Save message to: =edunews 

Ao pressionar o  comando s (save) é sugerido um nome para o folder onde esta mensagem será armazenada. O nome sugerido normalmente coincide com o do emissor da mensagem. Para alterá-lo, pressione a tecla de back ( <- ) e digite o novo nome, sempre precedido do sinal =. Caso não deseje alterar o nome do folder, simplesmente pressione a tecla <enter>. Quando uma mensagem for salva em um folder, ela será marcada como deleted (D), isto é, será movida de sua mailbox para o folder escolhido. 

É ainda possível copiar uma mensagem para um folder, preservando-a na mailbox principal. Para isso, digite C (copy) ao invés de s (save). Aparecerá a mensagem: 

 

Command: Copy to folder
Save message to: =edunews 

Aqui novamente é possível salvar (ou copiar) a mensagem para um arquivo com outro nome. Pode ser escolhido um novo folder ou um já existente. 

 

8. Acesso a folders

Para exibir um folder diferente e ter acesso às mensagens nele armazenadas, digite c (chance folder) e em seguida informe o nome do folder desejado, sempre precedido do sinal de igual (=). No exemplo abaixo, o folder solicitado chama-se "edunews". 

 

Command: Change folder
Change to which folder: =edunews 


É possível verificar uma lista dos folders que já tenham sido criados digitando c (change folder) e em seguida =* .  Da mesma forma, para ver a lista de folders que comecem com a letra m, por exemplo, basta digitar c (change folder) e em seguida solicitar =m*

9. Para utilizar o recurso "Alias"

O ELM oferece a opção de se criar um arquivo onde podem ser relacionados endereços eletrônicos para os quais  frequentemente envia-se mensagens, atribuindo a cada um (ou a cada grupo), um alias (um nome fácil de lembrar, assim como um apelido). 

O alias funciona como uma agenda de endereços eletrônicos. Um alias poderá ser atribuído a um endereço único ou a um conjunto de endereços eletrônicos. Quando uma mensagem é enviada para um alias que contenha vários endereços eletrônicos, a mensagem será então remetida a todos os endereços associados àquele alias. 

Para acesso aos menus e comandos relacionados a aliases, digite, a partir da tela de apresentação do ELM, a (alias)  Ao selecionar esta opção, o ELM apresenta uma tela semelhante ao exemplo abaixo (no exemplo já foram criados 8 aliases): 

 

Alias mode: 8 aliases [ELM 2.4 PL21]

 

1

Ruy Cesar

Person

rc 

 

2

Elbert Macau

Person

el

 

3

Joao Gualberto

Person

joao

 

4

Luciana Gomes

Person

lu

 

5

Contas curso

Group

curso

 

6

Edgar Santos

Person

edgar

 

7

GT eventos

Group

ev

 

8

treinamento

Group

tnt

 

 

 

 

 

 

Alias commands: ?=help, <n>=set current to n, /=search pattern
a)lias current message, c)hange, d)elete, e)dit aliases.text, f)ully expand,
l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it

Alias:

 

A tela apresenta uma lista dos aliases existentes e um linha de comandos na parte inferior. 

A primeira coluna tem um número sequencial para ordenar os aliases. 

Na segunda coluna aparece a identificacao de cada alias. 

Na terceira aparecerá sempre Person ou Group, para indicar se o alias contem um endereço apenas, ou um conjunto de endereços respectivamente. 

Para criar um alias, digite n (new alias). Em sequência será preciso informar, o nome do novo alias, o último nome associado ao alias (um sobrenome por exemplo), o primeiro nome, um comentário (opcional) e o(s) endereço (s) eletrônico(s) referentes ao alias que está sendo criado. Ao final, o programa solicita confirmação da criação do alias e informa, no alto da tela, o total de aliases disponíveis e a nescessidade de acionar o comando de sincronização para que o alias recém criando seja incluído no rol exibido em tela. 

No exemplo, está sendo criado um alias chamado verdureiro que se refere a José das Couves, dono da "loja da esquina", que tem o endereço eletrônico couves@esquina.com.br. Desta forma, todas as vezes que se quiser enviar uma mensagem para o Sr. José das Couves, ao invés de escrever seu endereço eletrônico completo, bastará digitar "verdureiro" no campo de to: na composição de mensagem. 

Abaixo está a sequência de entrada de informações para a criação deste novo alias: 

Passo1:

Alias: n
(comando n para criar um novo alias)

Passo 2:

Alias: Add a new alias to database... 
Enter alias name: verdureiro

Passo 3: 

Alias: Add a new alias to database... 
Enter last name for verdureiro: Couves

Passo 4: 

Alias: Add a new alias to database... 
Enter first name for verdureiro: João

 

Passo 5:

Alias:Add a new alias to database... 
Enter optional comment for teste: loja da esquina

Passo 6: 

Alias: Add a new alias to database... 
Enter address for teste: couves@esquina.com.br

 Passo 7:

Alias: Add a new alias to database...              Accept new alias? (y/n) y 
New alias: verdureiro is 'João Couves, loja da esquina'. 
Messages addressed as: couves@esquina.com.br (João Couves)

 Passo 8: 

 Alias mode: 21 aliases (modified, resync needed) [ELM 2.4ME+ PL32 (25)]

 O comando de resync é ativado pressionando-se a tecla $

Para criar um alias com vários endereços, no passo 5, basta digitá-los sequencialmente separados por vírgulas.  O conjunto de todos os aliases fica gravado em um arquivo chamado aliases.txt, localizado sob o diretório .elm.  Para retornar à tela principal do ELM, digite r(return). 

10. Para sair do programa ELM

É possível sair do ELM de duas maneiras: 

A primeira é a saída rápida, solicitada clicando-se Q (maiúsculo) ou x (minúsculo). Note que desta forma, não será feita nenhuma alteração no seu folder principal (inbox). Desta maneira, se houverem mensagens selecionadas para serem apagadas, isso não ocorrerá. Portanto, esse não é o método mais recomendado. 

Recomenda-se sair do ELM digitando q (quit). 

Caso existam mensagens marcadas para deleção, o ELM solicita confirmação: 

 

 Command: Quit                                     ;   Delete messages? (y/n) n

Selecione y(yes). Depois o ELM pede confirmação para que mensagens lidas sejam removidas para um folder denominado received

 

Command: Quit               Move read messages to "received" folder? (y/n) n

Este é um folder padrão criado para armazenar mensagens no ELM. Ao selecionar y (yes), todas as mensagens lidas serão movidas para este folder. Isso significa que, da próxima vez que o ELM for acionado, as mensagens não aparecerão na tela de entrada, mas poderão ser vistas mudando-se para o folder received (com o c de change folder, e o nome =received. 

Se preferir que as mensagens permaneçam no folder inbox, escolha n (no). O próximo passo é definir se as mensagens que ainda não foram lidas permanecem no inbox ou não. 

 

Command: Quit              Keep unread messages in incoming mailbox? (y/n) y

Escolhendo y (yes), mas mensagens permanecem no inbox, e escolhendo n (no), elas serão movidas para o folder received

É recomendável não manter um número excessivo (mais de duzentas) de mensagens no seu 
folder principal. 
 

11. Menu de comandos

Este guia rápido não apresenta uma descrição detalhada de todas as opções do ELM, justamente por isso é um guia rápido. De toda forma, segue abaixo um breve comentário sobre os menus de comandos. 

11.1. Menu da tela de entrada 

O menu de opções que aparece na tela de entrada do ELM pode ter três apresentações diferentes. Normalmente, será exibido o menu para usuários iniciantes.  Existem ainda menus de nível intermediário e avançado. Para alterar o menu é preciso digitar o (options) e em seguida U (user level). Escolhe-se o menu desejado apertando a barra de espaço e <enter> e digita-se em sequência > (para salvar a opção selecionada) e i para voltar à tela inicial do ELM

Segue abaixo comentário do menu para iniciantes (User level: Beginning User): 

 

 You can use any of the following commands by pressing the first character; 
d)elete or u)ndelete mail,  m)ail a message,  r)eply or f)orward mail,  q)uit
   To read a message, press <return>.  j = move down, k = move up, ? = help

Todos os comandos são selecionados através da primeira letra: 

d)elete = marca uma mensagem para ser deletada ao sair do ELM
u)delete mail = retira a marcação de deleção 
m)mail a mensage = envio de uma nova mensagem 
r)reply = resposta a uma mensagem 
f)orward mail = re-envio de uma mensagem 
<return> ou <enter> = leitura de uma mensagem 
j = desce uma mensagem na tela 
k = sobe uma mensagem na tela 
? = exibe arquivos de help (socorro) 

O menu para usuários experientes (User level: Expert User) é o que segue abaixo: 

 

|=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
 a)lias, C)opy, c)hange folder, d)elete, e)dit, f)orward, g)roup reply, m)ail
   n)ext, o)ptions, p)rint, q)uit, r)eply, s)ave, t)ag, u)ndelete, or e(x)it

|=pipe e !=shell = execução de comandos do unix 
?=help = abrir documentos de help (socorro) 
<n>=set current to n = digitando o número sequencial de uma mensagem, passa-se diretamente para a mesma 
/=search pattern = permite que se informe uma palavra para busca na tela (nome do destinatário ou subject das mensagens) 
a)lias = alterar para menu de edição de aliases 
C)opy = copiar mensagem em um folder ou arquivo 
c)hange folder = alternar o folder exibido 
d)elete = marcar uma mensagem para deleção 
e)dit = alterar algo no folder de mensagens em edição 
f)orward = re-enviar mensagem para terceiro(s) destinatário(s) 
g)roup reply = responder para todos os endereços do cabeçalho da mensagem 
m)ail = edição de mensagem nova 
n)ext = exibir a próxima mensagem 
o)ptions = abrir tela de configuração 
p)rint = imprimir mensagem (na impressora conectada à máquina onde está a conta) 
q)uit = sair do ELM
r)eply = responder mensagem 
s)ave = salvar mensagem em arquivo ou folder 
t)ag = marcar mensagem (marcando várias mensagens um comando indicado uma única vez será aplicado a todas) 
u)ndelete = retirar marcação para deleção 
e(x)it = saída rápida do ELM

11.2. Menu da tela de edição de aliases 

O menu da tela de aliases é sempre igual, independente de se ter selecionado o nível do usuário para beginner, intermediate ou expert: 

 

Alias commands:  ?=help, <n>=set current to n, /=search pattern
  a)lias current message, c)hange, d)elete, e)dit aliases.text, f)ully expand
l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it

?=help = exibir telas de help (socorro) sobre edição de aliases. 
<n>=set current to n = selecionar alias por seu número sequencial 
/=search pattern = busca por termo na tela 
a)lias current message = adicionar um alias à mensagem atual 
c)hange = editar um alias existente 
d)elete = marcar alias para ser apagado 
e)dit aliases.text = editar diretamente o arquivo texto que contém todos os aliases 
f)ully expand = mostrar endereço(s) que compõe(m) o alias 
l)imit display = alterar aparência da tela que lista os aliases 
m)ail = enviar mensagem para o alias que estiver iluminado (selecionado com o cursor) 
n)ew alias = inserir novo alias 
r)eturn = voltar à tela principal do ELM
t)ag = marcar alias 
u)ndelete = retirar marcação para que o alias seja apagado 
or e(x)it = sair do ELM

 

 

 

Dns

 

 

 

 

O que vem a ser DNS?

DNS é o Domain Name Server, ele simplesmente converte nome de maquinas para numeros IP, no qual cada maquina conectada a internet possui um. Basicamente DNS se resume a isso, caso haja interesse de conhecer mais profundamente como que funciona o DNS Server. Este documento irá mostrar como montar um DNS server somente para cache, ou seja, um DNS server que após resolver dominios na internet ele guarde em um cache e esse cache irá ser consultado sempre antes de tentar resolver dominios na internet, o que tornará mais rapido o a resolucao do dominio para clientes dial-up. 

1 - Configurando o DNS Server:

Primeiro, edite o arquivo /etc/named options (man named.conf para mais informações) 

#Inicio do /etc/named.conf
 
  options {
          directory "/var/named";
  };
  zone "." {
          type hint;
          file "root.hints";
  };
  zone "0.0.127.in-addr.arpa" {
          type master;
          file "pz/127.0.0";
  };
 
#Fim do /etc/named.conf

A linha contendo "directory" diz aonde estarão os arquivos do named. pz será um diretorio criado dentro do /var/named e /var/named é o local certo para rodar o named de acordo com o "Linux File system Standard". Você também precisará editar o arquivo /var/named/root.hints, que contém as informações dos locais que deverão ser consultados caso o dominio não esteja localizado no cache. 

#Inicio do /var/named/root.hints
 
   .                      6D IN NS        G.ROOT-SERVERS.NET.
   .                      6D IN NS        J.ROOT-SERVERS.NET.
   .                      6D IN NS        K.ROOT-SERVERS.NET.
   .                      6D IN NS        L.ROOT-SERVERS.NET.
   .                      6D IN NS        M.ROOT-SERVERS.NET.
   .                      6D IN NS        A.ROOT-SERVERS.NET.
   .                      6D IN NS        H.ROOT-SERVERS.NET.
   .                      6D IN NS        B.ROOT-SERVERS.NET.
   .                      6D IN NS        C.ROOT-SERVERS.NET.
   .                      6D IN NS        D.ROOT-SERVERS.NET.
   .                      6D IN NS        E.ROOT-SERVERS.NET.
   .                      6D IN NS        I.ROOT-SERVERS.NET.
   .                      6D IN NS        F.ROOT-SERVERS.NET.
 
  G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
  J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
  K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
  L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
  M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
  A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
  H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
  B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
  C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
  D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
  E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
  I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
  F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241
 
# Fim do /var/named/root.hints

IMPORTANTE: ao voce der um "copy/paste" deste texto, todos os espaços em branco antes do PRIMEIRO caractere que nao seja espaço deverão ser retirados!

Esses dominios são os dominios officiais a serem consultados para resolver um dominio, como quem está fazendo um DNS Cache não tem interesse em resolver esses dominios, pois provavelmente ficará um pouco lerdo, você pode colocar o DNS server de seu provedor para ser consultado, assim ficaria mais rapido. no meu caso está assim: 

#Inicio do MEU /var/named/root.hints
..                        5d16h10m55s IN NS  home.tecsat.com.br
..                        5d16h10m55s IN NS  nv01.netvale.com.br
home.tecsat.com.br       5w6d16h IN A    200.210.110.2
nv01.netvale.com.br      5w6d16h IN A    200.246.191.2
 
#Fim do MEU /var/named/root.hints

Ao meu ponto de vista mais do que dois DNS servers nao sao necessarios, caso você deseje colocar mais servidores, está a sua escolha. Agora você necessita editar o arquivo chamado /var/named/pz/127.0.0 (caso o diretorio pz não exista, crie ele.) 

#Inicio do arquivo /var/named/pz/127.0.0
 
  @               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                                  1       ; Serial
                                  8H      ; Refresh
                                  2H      ; Retry
                                  1W      ; Expire
                                  1D)     ; Minimum TTL
                          NS      ns.linux.bogus.
  1                       PTR     localhost.
 
#Fim do arquivo /var/named/pz/127.0.0

Eu pretendo fazer um documento explicativo sobre DNS, assim daria para se entender melhor o que estão fazendo, mas por enquanto colocando esses valores já está seguro. 
Agora é preciso editar o arquivo /etc/resolv.conf

#Inicio do arquivo /etc/resolv.conf
search subdominio.seu-dominio.br seu-dominio.br
nameserver 127.0.0.1
#Fim do arquivo /etc/resolv.conf 

A linha search diz qual dominio deve ser procurado antes de voce conectar a um host. A linha nameserver especifica qual DNS server você deve consultar ao resolver um dominio, como você esta rodando DNS server local para cache, 127.0.0.1 é usado (loopback). Para ilustrar melhor o que a linha search faz, vamos a um exemplo: Se algum cliente tenta resolver o dominio teste, entao teste.subdominio.seu-dominio.br é consultado primeiramente, depois teste.seu-dominio.br e depois que tenta por teste. É estranho mas é assim que funciona... :) Agora dependendo da sua versão de libc você precisa arrumar o /etc/nsswitch.conf OU o /etc/host.conf

Caso voce tenha o arquivo /etc/nsswitch.conf coloque a seguinte linha dentro do arquivo: 

hosts:     files dns >

Caso você tenha o /etc/host.conf

order hosts,bind 

Pronto. A configuração já está feita! Venho a lhe lembrar que primeiramente este documento tem a função de "receita de bolo". Pretendemos colocar informações mais detalhadas futuramente. 

2 - Iniciando o named

Considerando que você é um cliente dial-up , digite 'ndc start' e o named deverá iniciar, caso nao exista o comando ndc tente o path inteiro: '/usr/sbin/ndc start', caso ainda não funcione, verifique as configurações e se o named está instalado em sua maquina. Agora é so testar a resolução de algum dominio, por exemplo: 

nslookup sunsite.unc.edu 

 

 

 

Monkey linux

 

 

 

 

O que é Monkey?
  • Uma distribuição mínima do Linux ELF em 7.5MB (5 disquetes) 
  • Monkey é pequeno, mas não é apenas um brinquedo 
  • Possui X Window 
  • Suporte completo para rede com TCP/IP e IPX/SPX 
  • Ultimo Kernel com modulos 
  • Alguns pavotes ponto para instalar com programas interessantes. 
  • Normalmente distribuições do Linux precisam reparticionar o HD. Com o Monkey Linux você pode simplismente extrair todos os arquivos para um diretório. Linux irá usar o MSDOS FAT (também FAT32). Isto permite experimentar o Linux em todos os lugares. Você não precisa saber nada sobre fdisk, ext2, bootdisk, rootdisk, etc. 
  • Você pode instalar qualquer outra aplicação do Linux 
  • Macaco não é nenhuma distribuição realmente completa - como Slackware, RedHat, etc. Mas para você iniciante, Monkey será um grande primairo passo. 

Compatibilidade

Exigências mínimas de hardware

  • 386SX 
  • 4MB RAM 
  • 20MB num HD IDE (+ 10MB para SWAP) 
  • VGA for X Window 

Hardware suportado

  • Microprocessador 386SX ou melhor (486, Pentium, AMD, Cyrix, IBM, ...) 
  • IDE HDD 
  • ATAPI e Mitsumi CD-ROM 
  • VGA, SVGA para o X Window (Cirrus, Trident, Oak, ...) 
  • Placas de rede (Ethernet) (3C5x9, 3c59x, 3c90x, NE2000/NE1000, WD80x3) 
  • Cooprocessador matemático (ou emulador) 
  • ISA, VLB, PCI bus 
  • APM (Advanced Power Managment) 
  • floppy disk 3.5' and 5.25' 
  • Impressora, serial e PS/2 mouse 
  • Portas paralelas e serial 

Pacotes para hardware pre-instalados

  • SVGA com aceleradora S3 chipset 
  • SVGA com aceleradora Mach 64 chipset 

Você pode usar qualquer hardware suportado pelo kernel do Linux, compilando-o com o GCC 

Aplicativos no Monkey

  • X Window Xfree 3.2 (Servidor SVGA para Trident, Cirrus, Realtek, ...) 
  • Fvwm95, xterm 
  • editores: vi, joe (editor Wordstar compativel) 
  • telnet, ssh, ftp, traceroute, nslookup, Lynx. 
  • bootpd, bootpgw, cron 
  • muitas utilidades para processador de texto (awk, sed, perl, ...) 
  • utilidades para trabalhar com IPX/SPX 
  • suporte para muitos filesystems. (umsdos, dos, vfat, iso9660, ext2, minix, NFS, ncpfs, smbfs.) 

Pacotes pronto para instalar

Monkey Linux usa seu próprio formato de pacotes. Não use qualquer outra coisa para instalar por esse método. Os pacotes de Monkey estão localizados no diretório 'packages'. Para instalar qualquer um deles, simplesmente crie o diretório C:\LINUX\INSTALL e ponha algum pacote lá. Depois é só dar o boot no Monkey. 

Pacote

Descrição

Nome do arquivo

 Apache

 Servidor WWW

 apache.tgz

 DosEmu

 Emulador de DOS

 dosemu.tgz

 GCC

 para compilação do kernel

 gccall.tgz

 Kernel 2.0.30

 código fonte do kernel 2.0.30

 kern2030.tgz

 Manpages

 Man pages

 manpages.tgz

 Netscape 3.01

 browser WWW

 netscape.tgz

 Sendmail

 Agente de transferência de correio + Pine

 sendmail.tgz

 Mach 64

 servidor de X acelerado

 x32ma64.tgz

 S3

 servidor de X acelerado

 x32s3.tgz

Descrições dos pacotes pronto para instalar

Apache 1.1.3
Apache requer configuração própria para sua rede (IP, DNS, etc.). Se você vai usar o apache apenas com loopback, provavelmente você terá de fixar o nome de seu servidor em /var/lib/httpd/conf/httpd.conf, e uma linha própria com o nome do servidor. Depois tente: httpd; lynx http://localhost/ e voila ; -) A raiz do seu novo site WEB está no diretório /var/lib/httpd/htdocs 
 
DosEmu 0.64.4
 
xdos não está disponível ainda.
tenha certeza que você sabe o que está fazendo. 

Instalação: 

·  Faça um disco de boot no DOS com o SYS.COM e o FDISK.EXE 

·  Instale este pacote (DosEmu 0.64.4) 

·  De um login como root 

·  Verifique o /etc/dosemu.conf (apenas se o seu floppy disk (A:) não for de 3.5') 

·  Coloque o disquete de sistema no drive e digite: dos -A 

·  Depois do DOS aparecer, digite: (isto não afeta seu HDD, só /lib/dosemu/hdimage)    FDISK /MBR
   SYS C:
   C:
   EXITEMU 

·  Crie o arquivo /etc/dosemu.users com os nomes dos login dos seus usários favoritos (um por linha) 

·  Aconselho a lida ao Dosemu-HOWTO 

·  Da próxima vez que for usar o dosemu, basta digitar: dos 

Sugestão: Tente CTRL+ ^ h (CTRL+SHIFT+6 h) para aprender sobre o teclas especiais. 
 
GCC 2.7.2 para compilação do kernel
 
Este pacote foi desenvolvido apenas para a compilação do kernel. 
 
Kernel 2.0.30
 
Com patches para FAT32 e para a versão antiga do 3c59x. 
Arquivo de configuração do kernel incluido na distribuição. 
 
Página Manual 
 
Aqui não há todos os manpages, neste pacote ele está um pouco reduzido. 
 
Netscape Navigator Gold 3.01
 
Contém o pacote original do servidor de FTP da Netscape. Este é um software registrado, por favor, leia sua Licença. 
 
Sendmail 8.8.5 com Pine 
 
Sendmail requer configuração própria de sua rede. 
 
Servidor X acelerado 3.2 para chipset Mach 64

Servidor X acelerado 3.2 para chipset S3

Download

 

Home page:

http://www.spsselib.hiedu.cz/monkey/

FTP oficial:

ftp://ftp.spsselib.hiedu.cz/pub/monkey/

Mirrors:

ftp://ftp.vslib.cz/pub/unix/linux/monkey/

 

ftp://sunsite.mff.cuni.cz/OS/Linux/Distributions/Monkey/

 

ftp://sunsite.unc.edu/pub/Linux/distributions/monkey/

Instalação

  1. Cire um diretório chamado LINUX. Ex: c:\linux 
  2. O sistema operacional do Linux inteiro será colocado neste diretório. 
  3. Descompacte todos os arquivos mlinuxNN.a?? para o diretorio c:\linux que foi criado. (NN é a versão): 

arj x -v -y mlinuxNN c:\linux 

  1. Entre no diretório LINUX (c:\linux). 
  2. Se você for instalar em outra partição ou HD que não seja o C:, por favor, verifique o arquivo LINUX.BAT 
  3. Digite LINUX.BAT, e cruze os dedos.... 
  4. Desisntalando: Simplismente remova o diretório C:\LINUX (ex: DELTREE /y C:\LINUX) 
     

 

OBS: Se você esta no Windows, nao tente executar o arquivo LINUX.BAT, saia e reinicie o computador em modo MS-DOS e ai sim vc poderá fazer todos os passos anteriores corretamente. Lembre-se, o Monkey Linux não é para Windows e sim para MS-DOS. 

 

 

 

Linux + Windows NT

 

 

 

 

Instalar o linux juntamente com uma versão do Windows, como o 95 ou o 98 é bastante simples e bem documentado. Mas aqui você irá aprender como instalar o seu Linux juntamente com o Windows NT numa mesma máquina. 

1) Recrie suas partições normalmente (Linux + Windows); 

2) Instale o WindowsNT com NTFS; 

3) Instale o Linux na outra partição. Na hora de configurar o lilo, não instale no MBR como de costume. Instale no super block da partição linux; 

4) Terminada a instalação do Linux, não de um reboot imediatamente, pois senão você cai direto no NT. Antes disso você vai precisar copiar o tal do super block onde está o lilo. Para fazer isso, monte um disquete em /floppy e digite: 

# dd if=/dev/hda2 of=/floppy/bootsect.lnx bs=512 count=1 

Substitua /dev/hda2 pela partição onde esta o linux! 

5) De um reboot. Logue no NT como administrator e abra no bloco de notas o arquivo c:\boot.ini; 

6) Nesse arquivo, troque o timeout para -1 e, na ultima linha, apague o c:\ = "MS-DOS", e coloque: 

c:\bootsect.lnx = "Linux Slackware 2.0.36"

Troque "Slackware" pela sua distribuição, ou sei lá, escreva qualquer coisa que você quiser, isso não importa; 

7) Copie o bootsect.lnx, que está naquele disquete do passo 4, para o c:\; 

8) De outro reboot. Escolha a opção Linux e o sistemadeverá entrar normalmente. 

OBS.: Configure apenas o linux no lilo, e coloque o wait para none.

 

 

 

Uso básico do linux para net

 

 

 

 

1)Correio Eletrônico

Utiliza-se o programa chamado PINE. Para iniciá-lo, basta digitar pine após entrar na sua conta (Ex: jazz% pine ). Obtém-se então uma tela com diversas opções de comando. 
 

  PINE 3.91   MAIN MENU         Folder: INBOX  238      Messages
 
 
  ?     HELP                  -  Get help using Pine
  C     COMPOSE MESSAGE       -  Compose and send/post a message
  I     FOLDER INDEX          -  View messages in current  folder
  L     FOLDER LIST           -  Select a folder OR news group to view
  A     ADDRESS BOOK          -  Update address book
  S     SETUP                 -  Configure or update Pine
  Q     QUIT                  -  Exit the Pine program
 
   Copyright 1989-1994.  PINE is a trademark of the University of
Washington.
             [Folder "INBOX" opened with 238 messages]
? Help                     P PrevCmd                  R RelNotes
O OTHER CMDS L [ListFldrs] N NextCmd                  K KBLock

Para ver as mensagens recebidas, escolha a opção I - INBOX folder. Para enviar novas mensagens, escolha C - Compose and send/post a message. 

2) Listas de Discussão

O intercâmbio de informações que uma lista de discussão possibilita é efetuado por um servidor (um programa), que redistribui toda mensagem que recebe para uma lista de endereços de usuários interessados no determinado tema que a lista aborda, e que a assinaram. Para se inscrever em uma lista , envia-se uma mensagem para o servidor listserv@<subdomínio. domínio> . No corpo da mensagem deve constar subscribe <nome da lista> <nome do usuário> . Para se desligar, unsubscribe <nome da lista>. Após a assinatura, as mensagens devem ser enviadas diretamente para o endereço da lista. 

Exemplo de end. de lista: 

usuarios@cr-df.rnp.br

Exemplo de assinatura de lista: 

                        To: listserv@cr-df.rnp.br
                        (corpo) Subscribe usuarios Pilar Almeida

Uma versão atualizada da "lista das listas" é periodicamente publicada e está disponível para consulta no CR-DF. Pode-se obter esta mesma relação das listas através de uma conexão FTP para mambo.cr-df.rnp.br. O arquivo chama-se interest-groups e estáno diretório pub/netinfo/guides. Atenção: este é um arquivo muito grande (aproximadamente 700k) e só deve ser transferido se realmente necessário. 

3) Talk - Comunicação interativa

O programa talk permite uma conversação interativa, entre dois usuários conectados à rede. Para isso, basta digitar:

talk usuário@máquina.subdomínio.domínio

A tela se dividirá em duas janelas, uma para a "fala" do usuário local e a outra para a do remoto. A mensagem de "Waiting your party to respond..." aparecerá enquanto o usuário remoto não responder a chamada. Na tela do usuário remoto, aparecerá a seguinte mensagem:
 
 

Message from Talk_Daemon@ossaim at 15:59...
talk: connection requested by paloma@jazz.cr-df.rnp.br
talk: respond with : talk paloma@jazz.cr-df.rnp.br

Ao responder, o usuário remoto estabelece a conexão.
Para fechar a conexão, usar o comando <Ctrl-C>

4) Telnet - Login a Distância

Acesso a computadores remotos ou login à distância. Permite conexão e consulta a base de dados, bibliotecas, universidades, e serviços de informação em geral. 

jazz% telnet <máquina.subdomínios.domínio>
login:<identificação>
password:<senha>

Ex:
jazz% telnet bupac.bu.edu
login :library

Para abandonar o programa telnet, digitar ctrl-] ou quit. 

5) Hytelnet 

Serviço de interface de acesso aos recursos disponíveis na Internet acessados por telnet, isto é, um "catálogo " de enderecos telnet de acesso público. 

jazz%hytelnet

6) Gopher

Serviço que oferece uma interface organizada de acesso aos recursos disponíveis na Internet através de menus hierárquicos. A opção do comando ? (help), oferece uma tela de comandos de gerenciamento de arquivos e ponteiros. (como salvar arquivos, marcar determinados menus, etc.) Entre outras opções do gopher, cabe lembrar o programa Veronica que possibilita ao usuário a fazer a procura de informações através de uma expressão. 

jazz%gopher

7) FTP (File Transfer Protocol) 

Serviço que possibilita transferência de arquivos de uma máquina para outra. Durante uma conexão FTP, o usuário pode trabalhar alternadamente na máquina local e na máquina remota. A transferência de material de acesso público na rede é feita através do ftp anonymous. Para abrir conexão ftp anonymous, digita-se: 

Ex:
jazz%ftp <nome da máq. subdomínios.domínio>
username/login: anonymous
password: <end. do usuário>

 Ex:
jazz%ftp.cr-df.rnp.br
login:anonymous
password: pillar@cr-df.rnp.br
ftp> dir 
: : 

Comandos do FTP: 

   dir                   listar diretório
   cd                    <nome do dir> chamar diretório
   (m)get                trazer arquivo(s) para máq. local
   (m)put                copiar arquivo(s) na máq. remota
   lcd                   listar diretorio na máq. local
   !"comando"            trabalhar na máq. local
   quit                  abandonar  a sessão FTP
   ?                     exibir telas de help

8) Archie 

Os servidores Archie localizam e informam os endereços das máquinas que contém arquivos disponíveis via FTP anonymous, de acordo com o assunto ou área do conhecimento especificado na consulta do usuário. Este tipo de serviço foi criado por pesquisadores da McGill University do Canadá. Consultas ao Archie podem ser feitas por correio eletrônico ou através de uma conexão telnet. 

Consulta por email: Deve ser enviada uma mensagem para um dos servidores archie (exemplo: archie@archie.mcgill.ca), apenas com a palavra help no corpo da mensagem. O usuário receberá então resposta contendo todas instruções sobre a forma de acesso aos serviços Archie através de correio eletrônico. Uma das opções é enviar uma mensagem, para este mesmo endereço, contendo apenas o texto prog <palavra> (exemplo: prog biochemistry). Pode-se realizar mais de uma consulta na mesma mensagem acrescentando novas linhas com o mesmo formato. Exemplo: 

prog chemistry 
prog ecology 

A resposta será enviada automaticamente pelo servidor archie, contendo as referências dos documentos localizados e a forma de acessá-los. 

  • Consulta por conexão telnet: Abrir uma conexão telnet, digitando telnet seguido de um dos seguintes endereços: 


ALGUNS SERVIDORES ARCHIE: 
archie.ans.net (New York, USA) 
archie. rutgers.edu (New Jersey, USA) 
archie.sura.net (Maryland, USA) 
archie.unl.net (Nebraska, USA) 
archie.mcgill.ca (primeiro servidor Archie, no Canadá) 
archie.funet.fi (Finlândia) 
archie.au (Austrália) 
archie.doc.ic.ac.uk (Grã-Bretanha) 

Quando for solicitado o login, digitar archie. Os principais comandos disponíveis nesses servidores são: help - mostra instruções para a utilização de recursos, prog - para realizar consultas e quit - para sair do Archie. 

9) WWW - Word Wide Web 

O WWW é uma ferramenta de navegação na internet baseada em hipertextos. Isto é documentos em que palavras ou imagens previamente definidas remetem a novos documentos, sejam eles textos ou imagens. Você pode ter acesso ao WWW, com interface não gráfica, digitando: 

jazz% lynx

A interface gráfica dependerá do seu ambiente de acesso. Dois dos programas mais conhecidos para acesso ao WWW, para quem possui esse tipo de acesso, são o MOSAIC e o NETSCAPE. 

10) Uso Básico do Sistema Unix : 

- Listar diretório ls ou dir

                        Ex:(/home/jazz/RNP/Pillar)
                        jazz%dir
                        enderecos     mercosul
                        Mail          rnp.html

- Listar diretório detalhado ls -l

        Ex:jazz% ls -l  <enter>
        drwxr-xr-x 4 pillar 512 Sep 1 12:42 enderecos
        drwxr-sr-x 2 pillar 512 Jul 15 11:57 maildir
        -rw-r--r-- 1 pillar 58897 Jul 15 11:55 mercosul
        -rw-r--r-- 1 pillar 1913 Aug 3 12:14 rnp.html

- Selecionar diretório cd <nome do diretório> 

        Ex:jazz% cd enderecos <enter>
           /home/jazz/RNP/pillar/enderecos
           jazz% dir <enter>
                  Rio       cr-df

- Exibir arquivo more <nome do arquivo>

        Ex:jazz% more Rio   <enter>
           patricia@impa .rnp.br
           bia@impa.rnp.br

- Informar diretório corrente pwd

        Ex:jazz%pwd
           /home/jazz/RNP/pillar/enderecos

- Criar diretório mkdir <nome do diretório> 

- Renomear arquivos mv <nome antigo> <nome novo> 

- Eliminar arquivo rm <nome do arquivo> 

- Sair do sistema Unix logout

 

 

 

Iniciando a conexão do linux, parte 1

 

 

 

 

Eliminando conflitos de IRC e portas COM
.
Uma erro muito comum que acontece com os usuários iniciantes que vão se conectar a Internet pelo Linux e que da muita dor de cabeça são os conflitos de IRQ. 

SINTOMAS DA "SINDROME DO IRQ":

Por exemplo, você entra no Minicom, tudo bem, daí já começa a lentidão, você digita ATDP (nº do TEL) e depois de muito tempo ele vai responder, consegue discar para o provedor, daí aparece o login e o password, OK, você digita com dificuldade. Daí vai aparecer os famosos `caracteres estranhos', entao você sai do minicom sem resetar o modem e quando vai digitar no prompt: 

# pppd /dev/modem 38400 defaultrout 

a conexão cai. 

Se o seu modem é 28.800 ou superior e possui esses 'sintomas', pode suspeitar, CONFLITO DE IRQ!! 

Se você tem esse problema siga os seguintes passos:
(Caso tenha certeza em qual IRQ seu modem esta, pode pular o passo 1) 

1- Entre no Win95 (ate me arrepio) e siga o caminho das pedras: 

Entre no Painel de Controle modems e não orelha Diagnóstico, clique na porta onde seu modem esta instalado, e depois em Maiores Informações. La irá aparecer a interrupção, beleza, essa é a IRQ do seu modem. 

2- Agora vamos para o Linux (Legal!!) 

- Configurando a IRQ do modem para utilizar a COM3 na IRQ 11. (Mude a porta (COM) e a IRQ de acordo com a sua) 

# rm -f /dev/modem
# ln -s /dev/cua2 /dev/modem
# ls -l /dev/modem
# setserial /dev/cua2 irq 11 

Dica: acrescente no setserial a opção "spd_hi" ou "spd_vhi". Assim, quando o pppd for usado e especificar a velocidade de 38400, a interface na verdade estará usando 57600 ou 115200 (respectivamente). IRQ bem configurada no Linux funciona 200% ;-) 

OBS: Para toda vez que o Linux for iniciado nessa configuração, faça o seguinte, coloque o setserial no fim do arquivo: /etc/rc.d/rc.local 

Ex.: setserial /dev/cua2 irq 11 spd_vhi 

Vale lembrar:

DOS

Linux

  COM1 

  /dev/cua0 

  /dev/ttyS0 

  COM2 

  /dev/cua1 

  /dev/ttyS1 

  COM3 

  /dev/cua2 

  /dev/ttyS2 

  COM4 

  /dev/cua3 

  /dev/ttyS3 

.
Conectando o Linux à Internet - Minicom
.
Se você verificou se o seu modem estava em conflito de IRQ, a solucionou o problema, agora vai ser fácil, siga os passos: 

LEMBRETE: Voce deve ter instalado os softwares de rede (pacote N, no Slackware), alem de ter compilado o kernel com suporte a PPP. Esteja certo que sua configuração da rede foi feita na hora da instalação. Se nao foi? Digite # netconfig para configura-la (Tipo, porta do modem, host, domain, etc.) 

Para editar esses arquivos você pode utilizar qualquer programa como: vi, Joe, pico, emacs, etc.

1- Edite o arquivo "/etc/hosts" com as seguintes configurações: 

localhost 127.0.0.1
0.0.0.0 ross 

onde tem ross você coloca o host da sua maquina. 

2- Agora edite o arquivo "/etc/resolv.conf". 

domain servidor.com.br
nameserver 200.255.0.97
nameserver 200.255.67.1
nameserver... 

- Onde tem servidor.com.br, você substitui pelo domain do provedor a ser acessado.
- Onde tem nameserver, coloque o DNS Primário do provedor (se tiver secundário, você vai colocando embaixo como no exemplo). Você poderá colocar ate 3 nameservers para caso o primeiro não responda, ele vai no segundo e assim por diante.) 

3- Edite tambem o arquivo /etc/hosts.deny com o seguinte conteudo: 

#/etc/hosts.deny
ALL: ALL
#End of /etc/hosts.deny 

4- /etc/hosts.allow: 

#/etc/hosts.allow
ALL: 127.0.0.1
#End of /etc/host.allow 

OBS: Eu estou contando que você não esta conectado a nenhuma rede local ou tem um IP estático. 

5- E para finalizar faça uma pequena modificação no arquivo /etc/networks. 

#/etc/networks
loopback 127.0.0.1
localnet 0.0.0.0
#End of /etc/networks 

6- Agora vc irá criar um arquivo chamado options no diretório /etc/ppp/ para especificar as opções que serão usadas pelo pppd na hora da conexão, com o seguinte conteudo:

# /etc/ppp/options 
#
-detach
0.0.0.0:
modem
crtscts
defaultroute
asyncmap 0
mtu 552
mru 552
#
# END OF SAMPLE /etc/ppp/options 

THE END!! (fácil né?) 

Agora vamos para o que interessa, conectar a NET!! Digite minicom -s para configurar o minicom, confira se suas configurações estão todas certas, depois e só salvar e sair para o minicom. 

Já dentro do programa, digite: 

ATDP1234567 (para linhas pulse)
ATDT1234567 (para linhas tone) 

Substitua o 1234567 pelo numero do telefone a ser discado. 

Agora o seu provedor vai pedir o login e o password. OK! 

Vai a aparecer vários caracteres estranhos, de um ALT + A depois Q, isso vai fazer com que você saia do minicom sem resetar o modem, então digite: 

# pppd -d -detach /dev/modem & 

Isso ira conectar. Pronto, agora e só maravilhar-se com a Internet. 

OBS: Para desconectar, digite: 

# killall pppd

 

 

 

Iniciando a conexão do linux, parte 2

 

 

 

 

Conectando o Linux à Internet - pppsetup
.
O usuario que deseja conectar a internet usando o PPPSETUP, deve ler as caracteristicas de instalacao. Este manual foi testado em Slackware e Red Hat. Editor recomendado: mcedit 

OBS: Verifiquei que depois de ter instalado o Linux Slackware 3.5 o ppp-go nao funcionava ... simplesmente quando digitava ppp-go nao acontecia nada... bom, fiz o sequinte... Peguei o cd-rom do Linux Slackware 3.2 e copiei o ppp.tgz dele para o Linux Slackware 3.5, fiz novamente todas as configuracoes e resolveu o problema... Ai vai a dica de instalacao do ppp.tgz do Slackware 3.2 para o Slackware 3.5 

- Faça o download do ppp.tgz no servidor www.winfiles.com

1) Copie o arquivo ppp.tgz para a raiz:      cp ppp.tgz / 
2) Agora basta descompactar:      tar zxpvf ppp.tgz 
3) Prontinho, agora e so digitar pppsetup e configurar novamente o ppp que vai resolver o problema. 

- Para configurar o PPPSETUP, primeiro deve logar como ROOT. 

1) Digite no prompt do Linux 

     madmax:~# pppsetup 

-------------------------------------------------------------------------
2) msg: Press [ENTER] to continue with pppsetup.
     * basta teclar o [ENTER]
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
3) msg: PHONE NUNBER...
     * vc digita o telefone do seu provedor
     * atdp4111500
     Parametros:
     A) atdp --> discagem de PULSO
     B) atdt --> discagem de TOM
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
4) msg: MODEM DEVICE...
     * escolha qual COM seu modem esteja configurado
     Parametros:
     A) cua0 --> COM 1
     B) cua1 --> COM 2
     C) cua2 --> COM 3
     D) cua3 --> COM 4
    OBS: O PPPSETUP aceita modens usando configuracoes PNP ou JUMPEADO.
Exemplo: MODEM US ROBOTIC 33.6 WINMODEM
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
5) msg: MODEM BAUD RATE...
     * escolha a velocidade (BPS) do seu modem
     * Nao escolha uma velocidade acima dos 115200 BPS, a conexao pode ficar instavel.
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
6) msg: CALLBACK YES or NO?...
      * escolha NO
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
7) msg: MODEM INIT STRING...
    * deixe em branco e tecle [ENTER] para continuar
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
8) msg: DOMAIN NAME...
     * digite o Domain Name do seu provedor
     Exemplo: douranet.com.br
    OBS: Se nao souber, informe-se com o Adminitrador do seu Provedor.
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
9) msg: DNS IP ANDRESS...
     * digite o Numero de IP do seu provedor
     Exemplo: 200.241.188.100
    OBS: Se nao souber, informe-se com o Adminitrador do seu Provedor.
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
10) msg: PAP or CHAP?...
     * Se seu proverdor for um WINDOWS NT escolha PAP.
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
11) msg: PAP or CHAP LOGIN?...
     * digite seu login
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
12) msg: PAP or CHAP PASSWORD?...
     * digite sua senha
------------------------------------------------------------------------- 

-------------------------------------------------------------------------
13) DONE.
     * finalmente acabou! tecle [ENTER] para finalizar...
------------------------------------------------------------------------- 

- VAMOS AOS TESTES:
     * Para conectar basta digitar no prompt
     madmax:~# ppp-go
     * Se aparecer um erro no script tipo isso, ou o modem nao discar...

 -------------------------------------------------------------------------
Jun 7 00:10:09 darkstar pppd[287]: pppd 2.2.0 started by root, uid 0
Jun 7 00:10:10 darkstar chat[289]: timeout set to 10 seconds
Jun 7 00:10:10 darkstar chat[289]: abort on (ERROR) 
Jun 7 00:10:10 darkstar chat[289]: abort on (BUSY) 
Jun 7 00:10:10 darkstar chat[289]: abort on (NO CARRIER)
Jun 7 00:10:10 darkstar chat[289]: abort on (NO DIALTONE) 
Jun 7 00:10:10 darkstar chat[289]: report (CARRIER) 
Jun 7 00:10:10 darkstar chat[289]: report (CONNECT) 
Jun 7 00:10:10 darkstar chat[289]: send (AT\&FW1H0^M) 
Jun 7 00:10:10 darkstar chat[289]: expect (OK) 
Jun 7 00:10:10 darkstar chat[289]: AT&FW1H0^M^M 
Jun 7 00:10:10 darkstar pppd[287]: Connect script failed
Jun 7 00:10:10 darkstar pppd[287]: Exit.
Jun 7 00:10:10 darkstar chat[289]: ERROR -- failed
Jun 7 00:10:10 darkstar chat[289]: Failed (ERROR)
------------------------------------------------------------------------- 

     * Faca o seguinte...
     * Vai em cd /etc/ppp
     cd /etc/ppp
     * edita o arquivo pppscript
     mcedit /etc/ppp/pppscript
     * Na linha "8" vai ter a seguinte configuracao:
     "" "AT\&FW1H0"
     * Simplesmente troque o \&FW1H0 por Z
     Correto: "" "ATZ"
     * Salve o arquivo e digite ppp-go

 -------------------------------------------------------------------------
Jun 7 00:15:22 darkstar pppd[333]: pppd 2.2.0 started by root, uid 0
Jun 7 00:15:23 darkstar chat[335]: timeout set to 10 seconds
Jun 7 00:15:23 darkstar chat[335]: abort on (ERROR) 
Jun 7 00:15:23 darkstar chat[335]: abort on (BUSY) 
Jun 7 00:15:23 darkstar chat[335]: abort on (NO CARRIER) 
Jun 7 00:15:23 darkstar chat[335]: abort on (NO DIALTONE) 
Jun 7 00:15:23 darkstar chat[335]: report (CARRIER) 
Jun 7 00:15:23 darkstar chat[335]: report (CONNECT) 
Jun 7 00:15:23 darkstar chat[335]: send (ATZ^M) 
Jun 7 00:15:23 darkstar chat[335]: expect (OK) 
Jun 7 00:15:23 darkstar chat[335]: ATZ^M^M 
Jun 7 00:15:23 darkstar chat[335]: OK -- got it 
Jun 7 00:15:23 darkstar chat[335]: send (atdp4111500^M) 
Jun 7 00:15:23 darkstar chat[335]: timeout set to 75 seconds
Jun 7 00:15:23 darkstar chat[335]: expect (CONNECT) 
Jun 7 00:15:23 darkstar chat[335]: ^M 
Jun 7 00:15:54 darkstar chat[335]: atdp4111500^M^M 
Jun 7 00:15:54 darkstar pppd[333]: Serial connection established.
Jun 7 00:15:54 darkstar chat[335]: CONNECT -- got it 
Jun 7 00:15:55 darkstar pppd[333]: Using interface ppp0
Jun 7 00:15:55 darkstar pppd[333]: Connect: ppp0 <--> /dev/modem
Jun 7 00:15:59 darkstar pppd[333]: Remote message: Login Succeeded
Jun 7 00:15:59 darkstar pppd[333]: local IP address 200.242.186.24
Jun 7 00:15:59 darkstar pppd[333]: remote IP address 200.242.186.2
------------------------------------------------------------------------- 
               * YES CONNECTED...*

      * Sua conexao foi bem sucedida.
     * Para desconectar basta digitar ppp-off 

* Testando sua conexao!

 1) madmax:~# route 

Kernel IP routing table

 

 

 

 

 

 

Destination

Gateway

Genmask

Flags

Metric

Ref

Use Iface

pm01.douranet.c

*

255.255.255.255

UH

0

0

0 ppp0

loopback

*

255.0.0.0

U

0

0

1 lo

default

pm01.douranet.c

0.0.0.0

UG

0

0

1 ppp0

2) madmax:~# ifconfig

 lo       Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:66 errors:0 dropped:0 overruns:0 carrier:0 coll:0
                  
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:200.242.186.22  P-t-P:200.242.186.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING  MTU:1500  Metric:1
          RX packets:8 errors:1 dropped:1 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 coll:0
                 
                  

3) madmax:~# ping cade.com.br 

PING cade.com.br (200.239.232.101): 56 data bytes
64 bytes from 200.239.232.101: icmp_seq=0 ttl=119 time=449.5 ms
64 bytes from 200.239.232.101: icmp_seq=1 ttl=120 time=280.0 ms
64 bytes from 200.239.232.101: icmp_seq=2 ttl=120 time=220.0 ms
64 bytes from 200.239.232.101: icmp_seq=3 ttl=120 time=250.0 ms 

--- cade.com.br ping statistics ---
5 packets transmitted, 4 packets received, 20% packet loss
round-trip min/avg/max = 220.0/299.8/449.5 ms 
 .
Conectando o Linux à Internet - pppd1
.
Primeiro, você deve verificar se seu kernel está compilado para utilização do PPP, TCP/IP, etc... e verificar se existe o programa chat instalado na sua máquina. Certificando-se disso, verifique se existe o diretório /etc/ppp. Se não, crie-o. Dentro deste diretorio, crie um arquivo chamado options, com as seguintes linhas: 

#inicio#
/dev/modem   #aqui é o link de seu modem
38400            #aqui a velocidade de seu modem, virtualmente
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
noipdefault
mtu 576
#fim# 

==> Caso ainda não tiver um link simbólico para seu modem, vá em /dev e crie um na porta serial que ele está: caso estiver na porta COM2, ln -s cua1 modem; 

Agora, crie em /etc/ppp um arquivo chamado net-connect, dessa forma: 

# I N I C I O #
#!/bin/sh
/usr/sbin/chat -v -t 60 -f /etc/ppp/net-chat
# F I M # 

Execute o comando de chmod 500 /etc/ppp/net-connect 

Agora, no diretório /etc/ppp, crie um arquivo chamado net-chat: 

# I N I C I O #
ABORT "BUSY"
ABORT "NO CARRIER"
"" AT&F1&D1 # aqui é a string de seu modem. Portanto, pode ser que não seja esta aqui colocada
#Verfifique
OK ATDT8180411 #aqui é o n.° do telefone(8180411) Mude para o que vc usa. E se a linha telefônica for 
#pulse, mude ATDT para ATDP
LOGIN: "AQUI O SEU USERNAME"
PASS: "AQUI A SENHA"
# F I M # 

Execute o comando chmod 600 /etc/ppp/net-chat 

Depois, crie um outro arquivo em /etc/ppp, chamado ppp-off: 

# I N I C I O #
#!/bin/sh
kill -HUP pppd
# F I M # 

Execute chmod 755 /etc/ppp/ppp-off 

No dir. /etc, edite o arquivo resolv.conf e acrescente ou altere a linha: '

 nameserver 200.243.227.65 #esse número é o DNS primário de seu provedor 

Acabou... para se conectar, digite pppd. Caso queria acompanhar todo o processo de conexão, digite tail -f /var/log/messages  Quando aparecer "remote IP address...", tecle CTRL-C. Então você pode verificar a conexão, com ifconfig, route, pode pingar alguns endereços... Então é só abrir o seu browser/Email/NewsGroup/Chat/ICQ ou qualquer outra coisa e navegar à vontade... Para se desconectar, simplesmente digite /etc/ppp/ppp-off Caso não der certo, dê um ps e então um kill no número do processo do pppd.
 .
Conectando o Linux à Internet - pppd2
.
Aqui está mais uma das milhares de maneiras de se conectar a Internet atraves do Linux. A AnO 2001 Linux Page procura disponibilizar o maximo de possibilidades para que você usuário consiga configurar a sua conexão. Faça o download aqui dos pequenos textos (.txt) explicativos que irão fazer com que você possa configurar sem nenhuma dúvida. Deu pra notar que os arquivos que acompanham este pacote de arquivos possuem nomes como se fossem diretórios. Então, por exemplo, o conteudo do arquivo _etc_hosts.txt deverá substituir o conteudo do arquivo /etc/hosts do seu linux. Portanto, no caso de seu linux for RedHat, vc deverá apagar todo o conteudo do seu arquivo /etc/hosts e colocar exatamente (apenas modificando SUAS informações pessoais e de seu provedor) igual ao arquivo _etc_hosts.txt presente neste pacote. Concluimos que os "_" nos nomes dos arquivos deste pacote equivalem-se a "/" no seu linux. Durante todo o processo de configuração para voce conectar-se a internet, terá que entrar no seu linux como super-usuario, ou seja, root. E também durante o processo de configuração e modificação de conteudos dos arquivos, voce terá que criar alguns arquivos, caso seu linux não possua. 

- Aqui vão os passos para criar um arquivo e modificar:

Criando: para vc criar um arquivo, basta vc abrir qualquer editor de texto e colocar o conteudo desejado, logo após, voce terá que salva-lo, assim será perguntado o nome do novo arquivo que voce acabou de colocar seu conteudo, para isso, basta abrir um editor de texto (o que mais gosto é o "mcedit", pois acho o mais fácil de todos, mas fica à sua preferencia). Para abrir o mcedit basta escrever no terminal do linux o comando: mcedit. 

Modificando arquivos: para modificar, voce precisará de um mesmo editor de textos, por exemplo, o mcedit. Então para modificar um arquivo (so pode modificar se o arquivo já existir em sua máquima, é claro!), no caso com o mcedit, voce deverá escrever no terminal de seu linux o comando: mcedit nome_do_arquivo. 


 

 

IMPORTANTE: Todo o conteudo aqui presente, é destinado à usuários que NÃO possuem rede local! 

Para se conectar, basta colocar o comando abaixo no TERMINAL de seu linux (aquela tela preta que aparece depois que voce entra com seu login e password do linux. 

pppd /dev/modem defaultroute 


 

 

OBS: Tudo foi testado com sucesso no Linux RedHat 5.1

 

 

 

Conexão do linux com a rede

 

 

 

 

Conectando o Linux via REDE (intranet) c/ suporte a Internet
.

1º Passo - Configuração do kernel

1. Você deve configurar o seu kernel com as opções devidas para aceitar o IP Masquerade e a rede TCP/IP... além dos drivers da placa de rede. 

2. De um "make menuconfig" e habilite essas funcoes: 

Code maturity level options ---> 

[*] Prompt for development and/or incomplete code/drivers 

Loadable module support ---> 

[*] Enable loadable module support
[*] Set version information on all symbols for modules
[*] Kernel daemon support (e.g. autoload of modules) 

Networking options ---> 

[*] Network firewalls
[*] Network aliasing
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
[*] IP: firewalling
[*] IP: masquerading
[*] IP: ipautofw masq support
[*] IP: ICMP masquerading 

Network device support ---> 

[*] Network device support
    PPP (point-to-point) support
    SLIP (serial line) support
[*] Ethernet (10 or 100Mbit)
[*] Other ISA cards 

NE2000/NE1000 support ---> somente esta! Se sua placa for compatível, a maioria das placas são, a minha que é uma genius funcionou direitinho com o suport NE2000... mas se sua placa constar na lista coloque um "M" do lado dela... 

[*] EISA, VLB, PCI and on board controllers 

3. Salve as configurações e recompile seu kernel. Para + detelhes de como recompilar o seu kernel 

4. Antes de dar um boot edite o arquivo "/etc/rc.d/rc.modules" e procure na parte de placas de rede. Descomente a linha em que tiver NE2000 e coloque o endereço e IRQ da placa (Tendo duvidas sobre isso, de um "cat /proc/pci" ou então olhe no Windows o endereço e a irq no Painel de Controle/Sistema... lá você encontrará o endereço da sua placa... é só clicar nela duas vezes que aparecem as propriedades da placa :) 

5. Agora de um boot :) 

2º Passo - Network Configuration - X-Windows 

1. Se estiver usando o Red Hat, depois de dar o boot, você entra no X-Windows e vá no Painel de Controle dele, clique duas vezes na icone referente a NetWorking, a configuração será bem mais facil: 

2. Antes disso, você tem que ter uma noção da rede que vai fazer :) 

Vou fazer isso bem rápido para adiantar o trabalho: 

Estou dando um exemplo de como monta um Rede de Classe C, do tipo 192.168.x.x, esse endereço é designado especialmente para Intranets. Defina quem vai ser a máquina servidora, ou seja, a máquina que estará conectada a Internet e fornecendo as outras maquinas da rede (máquinas cliente) o acesso a internet também :). Essa máquina terá o IP: 192.168.1.1 e as outras terão IP: 192.168.1.2... 192.168.1.3... e ai vai... todas as máquinas clientes terão que ter um gateway apontado para 192.168.1.1 usando o device "eth0". Vamos deixar de teoria e ir para a prática. 

3. Configuracao Pelo Red Hat - Usando o Painel de Controle 

Esta configuração é válida para a máquina servidor : 

» Na seção NAMES: 

Hostname: nome.da.maquina.com.br
Domain: dominio.do.seu.provedor
Nameservers: DNS do seu provedor 

OBS: Se for nas máquinas clientes só coloque o Hostname e deixe o resto em branco! :) Se quiser pode colocar para ele procurar o domain do servidor e nameserver o IP do servidor: 192.168.1.1 . Isso pode dar problemas em algumas máquinas, se for o caso apague, e só deixe o Hostname! 

LEMBRE: SÓ NAS MÁQUINAS CLIENTES! NA MAQUINA SERVIDORA VOCÊ TEM QUE COLOCAR O DOMAIN E NAMESERVERS DO PROVEDOR DE ACESSO A INTERNET! 

» Na seção HOSTS: 

   IP

   Name

   Nicknames

   127.0.0.1

   localhost

 

   192.168.1.1

   nomedoservidor.com.br

   nomedoservidor

   192.168.1.2

   nomedocliente1.com.br

   nomedocliente1

   192.168.1.3

   nomedocliente2.com.br

   nomedocliente2

OBS: O NickName é um alias para facilitar seu trabalho, ou seja, você pode digitar "telnet nomedoservidor.com.br" ou "telnet nomedoservidor" que vai dar no mesmo! :) 

» Na secao INTERFACES : 

Você deve dar uma espiada, provavelmente só terá o "lo" como device nessa parte. Se tiver o eth0 ainda bem! Você está com sorte! hehehe, se não tiver, adicione! Aperte em ADD e escolha EtherNet. 

Configurações do EtherNet : 

IP: Ipdamaquina, se for servidor coloque 192.168.1.1, se for o primeiro cliente coloque 192.168.1.2, se for o segundo 192.168.1.3 e por ai vai! 

NetMask: 255.255.255.0 => Pois trata-se de uma rede de classe C ! 

NetWork: Estah usando 192.168.1.x como IP ?! Entao coloque 192.168.1.0 

BroadCast: 192.168.1.255 se tiver usando 192.168.1.x 

Ative o "Activate Interface at boot time". 

Em Interface configuration protocol coloque "none". 

» Na secao ROUTING: 

Se a máquina for servidora deixe tudo vazio... se a máquina for cliente, coloque o seguinte: 

Default Gateway: 192.168.1.1
Default Gateway Device : eth0 

Aperte ADD e coloque: 

Device: eth0
Network: 192.168.1.0 ==> Voce já viu antes neh ?! :)
NetMask: 255.255.255.0
Gateway: 192.168.1.1 

Pronto ... DONE! (Só essa parte :) 

É ... finalmente você configurou tudo no X-Windows! Agora vamos para o prompt! :) 

3º Passo - Network Configuration - PROMPT 

1. Edite os seguintes arquivos em sua máquina: 

= /etc/hosts :
 
127.0.0.1       localhost
192.168.1.1     meucomp1.server.net  meucomp1 -> SERVIDOR
192.168.1.2     meucomp2.server.net  meucomp2 -> CLIENTE
 
Onde meucomp1, meucomp2 é o nome da máquina, e server.net será o seu domínio.

Você pode adicionar mais maáquinas se quiser: 192.168.1.3 ... etc etc... mas se lembre que isso pesará mais o seu link com a internet! :) 

PS: meucomp1 e meucomp2 é um alias para facilitar sua vida como antes dito na configuração do networking no X-Windows. 

= /etc/resolv.conf: 

search SEU.PROVEDOR.COM.BR
nameserver DNS.DO.PROVEDOR 

PS: Só coloque essas linhas se a máquina for a servidora... na cliente você pode colocar o seguinte: (se der problemas deixe em branco mesmo): 

search meucomp1.server.net (nome do servidor)
nameserver 192.168.1.1 (IP do servidor) 

= /etc/HOSTNAME 
meucomp*.server.net 
No * = Coloque de acordo com a máquina que você está configurando meucomp1 ou meucomp2. 

= /etc/sysconfig/network: 

NETWORKING=yes
HOSTNAME=meucomp*.server.net
GATEWAYDEV=
GATEWAY= 

No * = Coloque de acordo com a máquina que você está configurando meucomp1 ou meucomp2. 

Se a máquina for uma cliente coloque o seguinte em GATEWAYDEV e GATEWAY: 

GATEWAYDEV=eth0
GATEWAY=192.168.1.1 

= /etc/sysconfig/network-scripts/ifcfg-eth0 

Isso aqui no cliente: 

DEVICE=eth0
USERCTL=yes
ONBOOT=yes                          -> Essas configuraçõs são feitas
BOOTPROTO=none                 -> pela sua própria máquina (No
BROADCAST=192.168.1.255     -> caso de você ter configurado
NETWORK=192.168.1.0         -> pelo X-WIN. Não altere nenhum
NETMASK=255.255.255.0       -> desses valores, a não ser que
IPADDR=192.168.1.2              -> haja necessidade. :) 

Quando for o servidor o valor de IPADDR muda para: 192.168.1.1 

Depois de alterado o arquivo ifcfg-eth0 de o seguinte commando: 

     # chmod +x ifcfg-eth0 

= /etc/host.conf: 

order hosts,bind
multi on 

PS: Este arquivo é igual em todas as máquinas! :) 

4º Passo - IntraNet » InterNet LINK 

É, finalmente a última PARTE! UFAAAAAAAAAA! 

Conecte o servidor na internet e digite o seguinte comando tanto no servidor como no cliente: 

/sbin/ipfwadm -F -p masquerade 

Se quiser faça um scriptzinho para facilitar sua vida: 

bash# touch rede
bash# echo "/sbin/ipfwadm -F -p masquerade" >> rede
bash# chmod +x rede 

Copie esse arquivo rede executável para todas as máquinas, e quando conectado na internet o servidor execute esse script em todas as máquinas. Agora faça um teste na máquina cliente... tente dar um telnet para um servidor qualquer que esteja na internet :) 
.
SAMBA - REDE WINDOWS/LINUX
.

Introdução

Q: Oque diabos é o SAMBA? Tem algo a ver com a musica brasileira que toca no festival anual / carnaval? 
A: Não! (Pelomenos até onde eu saiba). Samba é um pacote onde lhe permite acessar suas maquinas Linux/SGI/Solaris apartir de um cliente que esteja rodando WfW v3.x, Win95 ou WinNT como um drive de rede normal. Imagine... Voce tem algumas maquinas na sua sala, e uma delas é um Ultra-novo-PentiumII com todos os tipos de placas e coizinhas que voce pode imaginar, e a outra é um velho 486 por exemplo, você pode configurar seu 486 para agir como um servidor e você pode acessa-lo pela outra maquina. 

Q: Então doque eu precizo? 
A: Umas maquinas funcionando, duas placas de rede convencionais, cabeamento 10-base-2, bastante paciência e café (Preto, açucar, sem leite), nervos de aço... e o que mais você queira! 

Q: Eu ouvi dizer que existem alguns IPs de graça que eu posso usar na minha rede privada LAN. Oque que é isso? 
A: Conforme o NET-3-HOWTO, que vem com algumas distribuições Linux (Provavelmente com a sua também) existem varios IPs livres que voce pode usar para montar a sua rede LAN sem atrapalhar as pessoas na NET. Aqui vão esses IPs. 

Classe da rede

Netmask

Endereço da Rede

 

 

 

A

255.0.0.0

10.0.0.0 - 10.255.255.255

B

255.255.0.0

172.16.0.0 - 172.31.255.255

C

255.255.255.0

192.168.0.0 - 192.168.255.255

Q: Eu estou um pouco confuso. Vamos dizer que eu tenha o Win95 instalado em casa e uma outra maquina é um velho 486 qual eu não uso mais. Voce pode me dar um exemplo de como que eu faço isso? O 486 é suficientemente capaz de dar conta dos serviços da rede? Pois esta maquina tem somente 8Mb de RAM e 540Mb de HD. 
A: CLARO! Para uma comparação, eu criei uma pequena LAN (2 maquinas) na firma de um amigo meu. O servidor é um 486/33Mhz/8Mb/Placa-de-rede 3com509 e o cliente era um 486/100Mhz/16Mb/3com509 e eles funcionam perfeitamente! Para o seguinte exemplo eu usei dois hostnames e domain name imaginários. Vamos dizer que o nome do seu servidor é Kirk :), do seu cliente é Spock e o seu domain é starfleet.com. Eu "reservei" o IP 192.168.1.1 para Kirk e 192.168.1.2 para Spock. 

1. Primeiro eu assumo que voce está usando a distribuicão do linux Red Hat 5.0. Voce pode inserir essas linhas manualmente no arquivo /etc/hosts ou usando netcfg no X (ou usando o comando netconfig nas distribuições slackware). A escolha é sua. 

# /etc/hosts 

192.168.1.1 kirk.starfleet.com kirk
192.168.1.2 spock.starfleet.com spock 

Agora estamos configurados! Tenha certeza que você já compilou o suporte para a sua placa de rede (Ou já tem os modulos nos lugares). Agora vamos rodas esses comandos no prompt. Importante! Você pode adicionar essas linhas em /etc/rc.d/rc.sysinit para que rode todas as vezes que voce der boot em sua maquina (Provavelmente nunca, se você nao tiver problemas de hardware, falta de energia ou upgrade de kernels.) 
(O local dos arquivos em outras distribuicoes podem ficar em lugares diferentes, procure se informar se nao estiver usando Red Hat 5.0). 

/sbin/ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up /sbin/route add -net 192.168.1.0 eth0

2. Tenha certeza que voce tem os daemons smbd e nmbd rodando em backgroud usando os comandos: 

ps -aux | grep nmbd
ps -aux | grep smbd 

3. Agora vamos editar o arquivo /etc/smb.conf para ter certeza que você possa enxergar essa maquina apartir do Win95. Adicione pelomenos essas linhas no seu smb.conf. Até eu descobrir essas opções eu quebrei a cabeça para descobrir o que estava errado: 

[global]
guest account = guest
null passwords = yes ; Muito importante, essa linha é requerida! 

4. Crie uma comta chamada "guest" sem senha para começar. Se você necessitar de mais segurança na sua LAN (Por exemplo, não quer que pessoas acessem coisas da rede) você pode setar uma senha para esse user. Se voce nao quiser usar uma senha com esse user, então pelo menos use "/bin/false" como o shell dele, para prevenir alguém logando em sua maquina Linux (Mesmo com "/bin/false" eles vao continuar conseguindo usar o Samba perfeitamente) 

É ISSO! 

Vamos para a configuração do Win95
  1. Clique no ícone REDE no painel de controle 
  2. Adicione o driver da placa de rede se você ainda nao o fez. 
  3. Clique no botão ADICIONAR e escolha o protocolo TCP/IP 
  4. Clique no botão ADICIONAR e escolha Clientes para redes Microsoft 
Estamos perto do fim!!

Na janela REDE escolha a divisao IDENTIFICAÇÃO. Escreva "WORKGROUP" na cessão Grupo de trabalho ou qualquer outro nome, desde que seja igual a que voce adicionou no arquivo /etc/smb.conf no linux. O padrão setado é WORKGROUP. Reinicie o Samba usando os seguintes comandos: 

/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/smb start 

Tenha certeza que você colocou o nome "Spock" (Sem aspas) na divisao Nome do computador.

Agora, na janela REDE, selecione TCP/IP e aperte o botão propriedades. Selecione "Especificar um endereço IP" e em Endereço IP coloque o nosso IP imaginário (192.168.1.2), e use "255.255.255.0" em Máscara de sub-rede. Agora vá para a divisão Configuração WINS e coloque o endereço IP do Kirk como o seu servidor WINS (192.168.1.1). Clique em OK. Você não preciza colocar nada na divisão Gateway, ao menos que você esteja brincando com IP masquerading, por exemplo. Escolha a divisão Ligações e TENHA CERTEZA que o Cliente para redes microsoft esteja abilitado!!! Você nao sabe quanto tempo eu perdi tentando achar o que estava errado na minha rede e como isso é frustrante! Agora estamos prontos. quando voce clicar em OK, o Win95 vai querer reiniciar a sua maquina (Normal, o Win95 tem uma tara por isso.) Bom, ja que é assim, reinicie... 

Agora finalmente vamos testar esse treco! 

Quando o Win95 bootar, vai aparecer uma janela com algumas coisas assim: 

Username: 

Coloque "guest" sem aspas 

Password: 

Coloque senha do guest, se nao tiver, deixe em branco. 

Depois clique em Ambiente de rede (Vai aparecer um ícone no desktop). Depois de alguns segundos você podera ver sua maquina Kirk esperando por você. Se voce configurou as setagens da rede corretamente, você vai enxergar as compartilhações disponíveis. Está pronto! Existem muito mais coisas que consegue-se fazer no samba, shares, impressões e outras coisas. Brevemente eu colocarei mais informações sobre o samba aqui. 

Tira-teimas:

Se você esta tendo problemas com senhas no windows, por exemplo, se ele diz que a senha esta errada, isto é porque o windows codifica a senha para o NT, e o Samba não aceita isso. Para solucionar esse problema, o samba traz um arquivinho que quando executado no windows ele altera o registry e tudo funciona normalmente. Procure no diretorio qual o samba está instalado e leia o arquivo que fala sobre Win95. Você nao terá muitos problemas! 

 

 

 

 

Ftp e linux

 

 

 

 

1. Introdução

O Linux tem a habilidade de possuir vários hosts em uma única máquina. Muitas pessoas já estão usando isto para rodar mais do que um serviço WWW em suas configurações, por exemplo: 

        www.sharpers.com                (192.168.55.37)
        www.usurers.com                 (192.168.55.38)
        www.swindlers.com               (192.168.55.39)
        

aparentemente é como se fossem três diferentes hosts, mas na verdade existe apenas um Linux-PC servindo-os. 

A técnica atrás desta característica é chamada de "multihoming" e é baseada na habilidade do Linux de atribuir vários endereços IP a uma mesma interface física (placa ethernet ou modem). Como conseqüência, você não precisa de várias placas ethernet para fazer o Linux responder por vários endereços na rede. O Linux manipula os endereços IP adicionais através de um mecanismo chamado "interfaces virtuais" que fisicamente representa o mesmo hardware, mas são logicamente distintos por seus endereços IP, pelo software (e o pelo kernel). 

Aquelas interfaces virtuais são rotuladas de maneira similar à interface principal para a qual elas "apontam", sendo colocado um sufixo com um número (mais ou menos) arbitrário. 

O termo certo para tais interfaces virtuais é o IPaliasing. Para os hosts virtuais acima, o comando "ifconfig" retornará o seguinte: 

interface  IP-address     broadcast-address      netmask
------------------------------------------------------------
eth0      192.168.55.37    192.168.55.63     255.255.255.224
 
eth0:0    192.168.55.38    192.168.55.63     255.255.255.224
eth0:1    192.168.55.39    192.168.55.63     255.255.255.224
eth0:2    192.168.55.40    192.168.55.63     255.255.255.224
eth0:3    192.168.55.41    192.168.55.63     255.255.255.224
     ^-- no. do ip-alias
             

Para estar disponível o uso do ip-alias, você precisa de um "módulo" para o Kernel do Linux que pode ser compilado ou carregado em tempo de execução digitando o seguinte comando (como root): 

insmod ipalias 

Muitas das distribuições mais recentes terão este módulo, portanto não perderemos muito tempo descrevendo com criá-lo (dica: se estiver faltando, leia o Linux Kernel-HOWTO). Os IP aliases para os exemplos acima são criados com poucas linhas no script de boot. 

--------
#!/bin/sh
 
NETMASK="255.255.255.224"      # replace with YOUR netmask
BROADCAST="192.168.55.63"      # replace with YOUR broadcast-address
MAIN_IF="eth0"                 # "main" interface
 
IPALIASES="192.168.55.38   192.168.55.39   192.168.55.40 \
           192.168.55.41   192.168.55.42   192.168.55.43 \
           192.168.55.44   192.168.55.45   192.168.55.46"
 
# you should not need to modify anything below
i=0
for ALIAS in $IPALIASES
do
        /sbin/ifconfig  ${NETTYPE}:${i}  ${ALIAS} \
                        broadcast ${BROADCAST}  netmask ${NETMASK}
        /sbin/route add -host ${ALIAS} dev ${NETTYPE}:${i}
        i=$[$i+1]
done

Se você tem qualquer dúvida sobre IPaliases, por favor veja no "Linux IP Alias mini-HOWTO" e no arquivo "Documentation/aliases.txt", dos fontes do kernel do Linux (normalmente no diretório "/usr/src/linux"). 

2. Serviços e servidores virtuais

Se um nome do host pertence a uma interface virtual, é normalmente chamado de "host virtual". Um daemon que roda um serviço no virtual host (ou interface virtual) é chamado de "servidor virtual". 

2.1 Servidores WWW virtuais

Nós já tivemos um exemplo de três servidores WWW virtuais acima: 

www.sharpers.com, www.usurers.com, www.swindlers.com 

A configuração de todos os principais http-daemons que eu conheço (por exemplo, o bem projetado "Roxen Challenger" ou o difundido "Apache") que usa hosts virtuais é fácil e já está bem documentada. Em resumo: apenas faça um bind da porta do WWW (número 80) para a interface virtual com o IP/hostname desejado para cada WWW-server que você queira rodar. Não existe segredo. Leia o "Virtual Web mini-HOWTO" para obter maiores informações deste tópico. 

2.2 Endereços de mail virtuais

No caso mais simples você quer receber mail de todos os hosts virtuais e para os domínios dedicados: 

        www.sharpers.com, www.usurers.com, www.swindlers.com,
            sharpers.com,     usurers.com,     swindlers.com
            

Mesmo a configuração do "smail" ou "sendmail" os daemons que controlam o tráfego de mail) é relativamente fácil: mencione adicionais hostnames/domínios em "/etc/smail/config" (entradas "hostnames=" e "domains=") ou "/etc/mail/sendmail.cw" (cada hostname em uma linha separada). 

2.3 Servidores virtuais de FTP

O conceito de servidores virtuais de ftp que eu saiba, não é suportado por nenhum daemon padrão de servidor de ftp. 

Para o daemon mais difundido, o "wu-ftp", existe um patch escrito por Brian Grossman que faz serviço de FTP anônimo distinguir entre as interfaces virtuais. A disponibilidade está descrita no capítulo 3. 

Aparentemente não há outros patches que façam o mesmo. 

A idéia principal do multihome patch de Brian é fazer o wu-ftpd dar um "chroot()" para: 

HOME_DIRECTORY_OF_ftp-ACCOUNT/HOSTNAME_THE_USER_TALKS_TO/ 

Ao invés de dar um chroot() para 

HOME_DIRECTORY_OF_ftp-ACCOUNT/ 

No exemplo mostrado abaixo, o usuário que conecta ao "ftp.swindlers.com" via ftp anônimo, fica preso embaixo de "/home/ano-ftp/ftp.swindlers.com/", ao invés de apenas "/home/ano-ftp/". 

Você pode supor que a configuração básica é direta e não difere muito de configurar uma conta simples de ftp anônimo. 

Glória ao Brian por esta fácil e eficiente estratégia de configuração. 

Vamos assumir que já teríamos esta versão especial do "wu-ftpd" compilado ou já pego como binário e adiar estas questões para o final deste documento. Eu darei a você um exemplo do mundo real e te digo o que fiz para um de meus clientes (eu somente mudei os nomes das máquinas). 

(a) Criei um diretório "/home/ano-ftp" para incoporar os diferentes servidores de ftp anônimo. 

mkdir /home/ano-ftp && cd /home/ano-ftp
mkdir ftp.sharpers.com ftp.usurers.com ftp.swindlers.com 

Resultando em três: 

/home/ano-ftp/
                |-- ftp.sharpers.com
                |-- ftp.swindlers.com
                `-- ftp.usurers.com
                     

(b) Copiei os arquivos necessários para um serviço anônimo de ftp de um diretório de ftp anônimo "/home/ftp" já configurado em novos diretórios: 

        cd     /home/ano-ftp/ftp.sharpers.com
        cp -a  /home/ftp/* .
 
        cd     ../ftp.swindlers.com
        cp -a  /home/ftp/* .
 
        cd     ../ftp.usurers.com
        cp -a  /home/ftp/* .
        

Mais tarde não esqueça de apagar os arquivos supérfulos sob o "pub/" (ou simplemente não copie todos eles). Por exemplo, o "home/ftp" da distribuição Debian se parece com: 

/home/ftp                       Permissions  Owner    Group   Size
        |-- bin                 d--x--x--x   2 root   root       
        |   |-- gzip            ---x--x--x   1 root   root   45121
        |   |-- ls              ---x--x--x   1 root   root   22945
        |   `-- tar             ---x--x--x   1 root   root   77769
        |
        |-- etc                 d--x--x--x   2 root   root       
        |   |-- group           -r--r--r--   1 root   root      18
        |   |-- passwd          -r--r--r--   1 root   root      44
        |   `-- pathmsg         -r--r--r--   1 root   root     172
        |
        |-- lib                 d--x--x--x   2 root   root
        |   |-- ld-linux.so.1   -r-xr-xr-x   1 root   root   21375
        |   |-- libc.so.5.2.18  -rwxr-xr-x   1 root   root  536252
        |   `-- libc.so.5 -> libc.so.5.2.18
        |
        |-- pub                 dr-xr-xr-x   3 root   root
        |   `-- whatever
        |
        `-- welcome.msg         -rw-r--r--   1 root   root     323
        

(c) Mudei o diretório home da conta de ftp anônimo para "/home/ano-ftp" editando o arquivo "/etc/passwd". 

        ftp:*:11:11:Anonymous FTP:/home/ano-ftp:/bin/sh
                                  ^^^^^^^^^^^^^
                                  home-directory

Esses três passos descritos aqui foram a configuração básica e já habilitaram áreas separadas para cada um dos três hosts virtuais. Meu trabalho atual foi um pouco mais complicado. Tive que habilitar quotas de disco (limitando o espaço em disco disponível por usuário/grupo) em cada diretório de entrada, portanto a história continua. 

(d) Habilitei áreas de upload no arquivo de configuração do wu-ftp "/etc/ftpd/ftpaccess": 

--------
upload  /home/ano-ftp/www.sharpers.de  *         no
upload  /home/ano-ftp/www.sharpers.de  /incoming yes sharpers ftp 0660 nodirs
upload  /home/ano-ftp/www.swindlers.de *         no
upload  /home/ano-ftp/www.swindlers.de /incoming yes swindler ftp 0660 nodirs
upload  /home/ano-ftp/www.usurers.de   *         no
upload  /home/ano-ftp/www.usurers.de   /incoming yes usurers  ftp 0660 nodirs
#                                                |      |      |    |     |
#                              uploads allowed --+      |      |    |     |
#  uploaded files should be owned by this user ---------+      |    |     |
#                           dito for the group ----------------+    |     |
#             access rights for uploaded files ---------------------+     |
#          creation of directories not allowed ---------------------------+
--------

Agora, todo arquivo que é feito o upload para os servidores virtuais, pertence a um usuário separado, para o qual as quotas podem ser habilitadas. 

(e) Configurei as quotas em disco 

Sugestões de leitura: "/usr/doc/quotas.txt" e o "Quota mini-HOWTO". 

    - Adicionei "usrquota=/etc/quota/ano-ftp.users" para as opções do    mount da partição do "/home/ano-ftp",
      que está guardado em "/etc/fstab".
    - Criei "/etc/quota/ano-ftp.users" via o comando touch.
    - Liguei as quotas fazendo "quotaon"
    - Ajuste as quotas com "edquota swindlers", etc. 

Quotas para o usuário swindlers: 

        /dev/sdb8: blocks in use: 0, limits (soft = 0, hard = 10000)
                   inodes in use: 1, limits (soft = 0, hard = 1000)

O espaço em disco correspondente depende do tamanho de blocos quando você criou o sistema de arquivo (o padrão é 1 bloco=1Kb). 

3. Disponibilidade

O patch de multihome (20Kb) para o wu-ftp pode ser pego em: ftp://ftp.softhome.net/pub/users/brian/

Nome do arquivo: multihomed-wu-ftpd-X.X-XX.patch (onde X e o número da versão) 

Por favor leia os detalhes sobre o copyright. 

Os fontes para o "wu-ftp" estão bastante espalhados pela Internet, use o archie para encontrar o servidor mais próximo que o contém. Mude para o diretório que é criado quando descompactado os fontes e digite 

patch < ../multihomed-wu-ftpd-X.X-XX.patch

OBS: Onde X e o número da versão. 

para misturar o patch aos fontes.

 

 

 

Proxy e linux

 

 

 

 

Squid nada mais é do que um servidor proxy. Para copilar o squid use o seguinte comando: 

  configure && make && make install 

Mas se voce quiser que instale as mensagens de erro em portugues use o seguinte comando: 

  configure --enable-err-language=Portuguese && make && make install 

Outras linguas disponíveis: 

Bulgarian
Czech
Dutch
Estonian
French
German
Hungarian
Italian
Japanese
Polish
Russian-1251
Russian-koi8-r
Slovak
Spanish
Traditional_Chinese
Turkish 

O arquivo de configuração é o /usr/local/squid/etc/squid.conf. 

Para inicializar o squid execute os seguintes comandos: 

  mkdir /usr/local/squid/cache
  mkdir /usr/local/squid/logs
  chown nobody.nogroup /usr/local/squid/cache
  chown nobody.nogroup /usr/local/squid/logs
  /usr/local/squid/bin/squid -z
  /usr/local/squid/bin/squid 

e para o squid iniciar toda vez que você inicie o computador coloque a seguinte linha no seu arquivo rc.local: 

  /usr/local/squid/bin/squid 

Pronto, agora você terá um proxy no seu computador.