Essa seção fornece uma orientação básica para o mundo Debian para o verdadeiro novato. Se você tiver usado algum sistema semelhante ao Unix por algum tempo, provavelmente sabe tudo que expliquei aqui. Por favor, use isso como uma verificação da realidade.
Depois da instalação do sistema Debian em seu PC, você precisa aprender algumas coisas para torná-lo útil. Vamos dar-lhe um treinamento expresso.
Após reiniciar o sistema, será apresentado a você uma tela de login gráfica ou baseada em caracteres dependendo de sua seleção inicial de pacotes. Para simplificar, se lhe for apresentada uma tela de login gráfica, pressione Ctrl-Alt-F1 [2] para obter a tela de login baseada em caracteres.
Suponha que o nome de seu sistema é foo, o prompt de login parece assim:
foo login:
Digite root, pressione a tecla Enter e digite a senha que você selecionou durante o processo de instalação. No sistema Debian, seguindo a tradição Unix, a senha é sensível a maiúsculas/minúsculas. Então o sistema começa com uma mensagem de saudação e lhe apresenta o prompt de comando root aguardando sua entrada. [3]
foo login: root Password: Last login: Sun Oct 26 19:04:09 2003 on tty3 Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@foo:root#
Você está pronto para fazer a administração do sistema a partir desse prompt de comando root. Essa conta root também é chamada de super-usuário ou usuário privilegiado. A partir dessa conta, você pode fazer qualquer coisa:
É uma idéia extremamente ruim compartilhar o acesso para a conta root
compartilhando a senha. O uso de um programa como o sudo(8)
é a
maneira certa de compartilhar privilégios administrativos.
Por favor note que considera-se um bom hábito de Unix fazer login para a conta
de usuário não privilegiado mesmo quando você planeja fazer atividades
administrativas. Use os comandos sudo, super, ou
su -c para obter o privilégio de root limitado quando necessário.
Veja Trabalhando de forma mais segura
– sudo
, Seção 9.2.4. [4]
Eu acho que aprender um sistema de computador é como aprender um idioma
estrangeiro novo. Apesar de livros tutoriais ajudarem, você tem que praticá-lo
com ferramentas de ajuda. Nesse contexto, acho que é uma boa idéia instalar
alguns pacotes adicionais tais como mc
, vim
,
lynx
, doc-linux-text
e debian-policy
.
[5]
# apt-get update ... # apt-get install mc vim lynx doc-linux-text debian-policy ...
Se você já tiver esses pacotes instalados, nada será instalado.
Durante a instalação, normalmente se cria uma conta de usuário não privilegiado que recebe e-mails destinados à conta root. [6] Já que você não quer usar essa conta de usuário especial para as atividades de treinamento seguintes, você deve criar outra conta de usuário nova.
Supondo que você deseje que esse novo nome de usuário seja pinguim, digitar:
root@foo:root# adduser pinguim ... responda todas as questões
irá criá-la. [7] Antes de ir adiante, vamos aprender algumas coisas primeiro.
No sistema Debian padrão, há seis pseudo-terminais independentes disponíveis, isto é, você pode usar a tela de console de caracter VGA do PC como 6 terminais VT-100 comutáveis. Mude de um para outro pressionando a telcla Alt esquerdo e uma das teclas F1–F6 simultaneamente. Cada pseudo-terminal permite login independente para contas. O ambiente multi-usuário é uma grande característica do Unix, e muito importante.
Se você acidentalmente pressionou Alt-F7 em um sistema executando o Sistema X Window e a tela de console mostrar uma tela gráfica, obtenha o acesso ao console de caracter novamente pressionando Ctrl-Alt-F1. Tente mudar para um console diferente e volte ao original para exercitar isso.
Como quaisquer outros SOs modernos onde a operação de arquivos envolve cache de dados na memória, o sistema Debian precisa de um procedimento de desligamento apropriado antes que a energia possa ser desligada de forma segura para manter a integridade dos arquivos. Use o comando seguinte a partir do prompt root para desligar o sistema:
# shutdown -h now
Isso é para o modo multi-usuário normal. Se você estiver no modo usuário único, use o seguinte a partir do prompt de comando root:
# poweroff -i -f
Alternativamente, você pode pressionar Ctrl-Alt-Delete para desligar. [8]
Espere até que o sistema mostre "System halted" e então desligue a energia. Se a função APM ou ACPI tiver sido ativada pelo Linux e BIOS apropriadamente, o sistema se desligará sozinho. Veja Memória grande e autodesligamento, Seção 3.7.4 para maiores detalhes.
Agora você está pronto para brincar com seu sistema Debian sem riscos desde que você use essa conta de usuário não privilegiado pinguim. [9]
Vamos fazer login para o pinguim. Se você estiver no prompt shell root, pressione Ctrl-D [10] no prompt de comando root para fechar a atividade shell root e retornar ao prompt de login. Entre seu nome de usuário recém criado pinguim e a senha correspondente. [11] Será apresentado a você o seguinte prompt de comando.
pinguim@foo:pinguim$
A partir daqui, o exemplo dado usará o prompt de comando simplificado por facilidade. Eu usarei:
Nós começaremos aprendendo o sistema Debian primeiro da maneira fácil, Midnight Commander (MC), Seção 4.2 e mais tarde da maneira apropriada, Ambiente de trabalho semelhante ao Unix, Seção 4.3.
O Midnight Commander (MC) é um "canivete suíço" do GNU para o console Linux e outros ambientes de terminal. Isso dá ao novato uma experiência com o console baseada em menu que é muito mais fácil de aprender que os comandos Unix padrões.
Use esse comando para explorar o sistema Debian. Essa é a melhor maneira de aprender. Por favor, explore alguns locais chave simplesmente usando as teclas de cursor e a tecla Enter:
/etc
e seus subdiretórios.
/var/log
e seus subdiretórios.
/usr/share/doc
e seus subdiretórios.
/sbin
e /bin
Para fazer com que o MC mude o diretório de trabalho ao sair, você precisa
modificar seu arquivo ~/.bashrc
(ou /etc/bash.bashrc
,
chamado a partir do .bashrc
), como detalhado em sua página de
manual, mc(1)
, sob a opção -P. [12]
$ mc
O MC cuida de todas as operações de arquivo através de seu menu, requerendo esforço mínimo do usuário. Simplesmente pressione a F1 para obter a tela de ajuda. Você pode brincar com o MC simplesmente pressionando as teclas de cursor e as teclas de função. [13]
O padrão são dois painéis de diretórios contendo listas de arquivos. Outro
modo útil é definir a janela direita para "info" para ver a
informação de privilégio de acesso dos arquivos, etc. A seguir estão alguns
comandos de teclado essenciais. Com o daemon gpm
sendo executado,
pode-se usar o mouse também. (Não esqueça de pressionar a tecla shift para ter
o comportamento normal de cortar e colar no MC.)
cd
mudará o diretório exibido na janela
selecionada.
cp
ou mv
junto com edição de
linha de comando.
O editor interno tem um interessante esquema de cortar-e-colar. Pressionando F3, marca-se o início da seleção, um segundo F3 marca o fim e destaca a seleção. Você pode então mover seu cursor. Se você pressionar F6, a área selecionada será movida para o local do cursor. Se pressionar F5, a área selecionada será copiada e inserida no local do cursor. Para salvar o arquivo, tecle F2. Para sair, use o F10. Muitas teclas de cursor funcionam intuitivamente.
Esse editor pode ser iniciado diretamente em um arquivo:
$ mc -e nome_do_arquivo_a_editar $ mcedit nome_do_arquivo_a_editar
Esse editor não é multi janela, mas pode-se usar vários consoles Linux para obter o mesmo efeito. Para copiar entre janelas, use as teclas Alt-Fn para alternar entre os consoles virtuais e use "Arquivo->Inserir arquivo" ou "Arquivo->copiar para Arquivo" para mover uma parte de um arquivo para outro.
Esse editor interno pode ser substituído por qualquer editor externo de sua escolha.
Além disso, muitos programas usam as variáveis de ambiente EDITOR
ou VISUAL para decidir qual editor a ser usado. Se você não se
sentir confortável com o vim
, defina essas variáveis para o
mcedit adicionando essas linhas ao arquivo ~/.bashrc
:
... export EDITOR=mcedit export VISUAL=mcedit ...
Eu recomendo que elas sejam definidas para vim se possível.
Aprender os comandos do vim
é a coisa certa a fazer, já que o
editor Vi está sempre lá no mundo Linux/Unix. [14]
Esse é um visualizador muito esperto. É uma grande ferramenta para procurar
palavras em documentos. Eu o uso sempre para os arquivos no diretório
/usr/share/doc
. Essa é a maneira mais rápida de navegar entre as
massas de informação do Linux. Esse visualizador pode ser iniciado diretamente
assim:
$ mc -v nome_do_arquivo_a_visualizar
Pressione Enter em um arquivo, e o programa apropriado manipulará seu conteúdo. Esse é um recurso muito conveniente do MC.
arquivo executável: Executa o comando arquivo man, html: Direciona o conteúdo para o programa visualizador arquivo tar.gz, deb: Navega em seu conteúdo com se fosse um subdiretório
Para permitir que esses recursos de visualizador e arquivo virtual funcionem,
os arquivos visualizáveis não devem estar definidos como executáveis. Mude
seus estados usando o comando chmod
através do menu de arquivo do
MC.
O MC pode ser usado para acessar arquivos na Internet usando FTP. Vá para o menu pressionando F9, e então tecle `p' para ativar o sistema de arquivos virtual FTP. Entre uma URL na forma nomeusuario:senha@nomemaquina.nomedominio, e será obtido um diretório remoto, que parecerá como um local.
Tente http.us.debian.org/debian como URL e navegue o repositório de arquivos do Debian. Veja Os repositórios Debian, Seção 2.1 para detalhes sobre como eles são organizados.
Apesar de o MC possibilitar que você possa fazer quase tudo, é muito importante para você que aprenda como usar as ferramentas de linha de comando invocadas a partir do prompt shell e se torne familiar com o ambiente de trabalho semelhante ao Unix. [15]
No ambiente similar ao Unix, há alguns comandos de teclado que tem significados especiais. [16]
O shell padrão, bash
, tem capacidades de edição de histórico e
tab-completar para ajudar o uso interativo.
Outros comandos de teclado importantes a lembrar:
Aqui, para usar um mouse no console de caracter do Linux, você precisa ter
instalado o gpm
como daemon. [18] Veja Configuração do
mouse, Seção 3.3.
Vamos aprender os comandos Unix básicos. [19] Teste todos os comandos seguintes a partir da conta de usuário não privilegiado pinguim:
..
" e ".
")
foo
no diretório atual ou no
diretório listado na variável CDPATH. Veja o comando
cd
na página de manual builtins(7)
/foo
.
/etc/motd
usando o paginador padrão. Veja comando < foo, Seção
4.3.10.8. [21]
arquivolixo
vazio.
foo
existente para um novo arquivo
bar
.
arquivolixo
.
foo
existente para um novo nome
bar
.
foo
existente para um novo local com um
novo nome bar/baz
. O diretório
bar/
precisa existir.
foo
existente não-legível e
não-gravável para outras pessoas. (não-executável para todos)
foo
existente legível mas não-gravável
por outras pessoas. (não-executável para todos)
foo
existente legível mas não-gravável
por outras pessoas. (executável para todos)
exim
. Aprenda a expressão
regular a partir da página de manual do grep(1)
digitando
man grep.
foo
para criar foo.gz
usando o código Lempel-Ziv (LZ77).
foo.gz
para criar o arquivo
foo
.
foo
para criar foo.bz2
usando o algoritmo de compressão de texto por ordenação de bloco de
Burrows-Wheeler, e código de Huffman. (Melhor compressão que o
gzip
)
foo.bz2
para criar o arquivo
foo
.
foo.tar
.
foo.tar.gz
gzipado.
foo.tar.bz2
. [22]
bar/
no arquivo
foo.tar
.
bar/
no arquivo comprimido
foo.tar.gz
.
bar/
no arquivo
foo.tar.bz2
. [23]
README.gz
comprimido usando o paginador
padrão.
foo
com o conteúdo descompactado de
README.gz
.
README.gz
ao final do
arquivo foo
. (Se ele não existir, cria-o primeiro.)
Por favor cruze diretórios e mergulhe no sistema usando os comandos acima como um treinamento. Se você tiver questões sobre qualquer um dos comandos de console, por favor, certifique-se de ler a página de manual. Por exemplo, esses comandos são um bom começo:
$ man man $ man bash $ man ls
Também é uma boa hora para iniciar o vim
e pressionar a tecla F1.
Você deve ler pelo menos as primeiras 35 linhas. Então faça o curso de
treinamento online movendo o cursor para |tutor| e pressionando
Ctrl-]. Veja Editores, Capítulo 11 para
aprender mais sobre editores.
Por favor note que muitos comandos similares a Unix incluindo os do GNU e BSD mostrarão uma breve informação de ajuda se você invocá-los em uma das seguintes maneiras (ou sem nenhum argumento em alguns casos):
$ nomedecomando --help $ nomedecomando -h
Teste também exemplos em Dicas Debian, Capítulo 8 como seu auto treinamento.
Agora você tem alguma idéia de como usar o sistema Debian. Vamos olhar com mais profundidade o mecanismo da execução de comando no sistema Debian. [24]
Um comando simples é uma seqüência de
Para comandos mais complexos com aspas e substituições, veja Processamento de linha de comando, Seção 13.2.6.
A execução de comando típica usa uma seqüência de linha shell como a seguinte: [25]
$ date Sun Oct 26 08:17:20 CET 2003 $ LC_ALL=fr_FR date dim oct 26 08:17:39 CET 2003
Aqui, o programa date
é executado como o trabalho em primeiro
plano (foreground). A variável de ambiente LC_ALL é:
Muitas execuções de comandos geralmente não têm uma definição de variável de ambiente precedendo. Para o exemplo acima, você pode executar alternativamente:
$ LC_ALL=fr_FR $ date dim oct 26 08:17:39 CET 2003
Como você pode ver aqui, a saída do comando é afetada pela variável de ambiente para produzir saída em francês. Se você quiser que a variável de ambiente seja transmitida aos subprocessos (por exemplo, quando chamando um script shell), você precisa ao invés "export"á-la usando:
$ export LC_ALL
Quando você digita um comando no shell, o shell procura o comando na lista de diretórios contida pela variável de ambiente PATH. O valor da variável de ambiente PATH também é chamado de caminho de busca do shell.
Na instalação Debian padrão, a variável de ambiente PATH de uma
conta de usuário não deve incluir /sbin
. Então se você quiser
executar quaisquer comandos como ifconfig
de /sbin
,
você precisa mudar a variável de ambiente PATH para incluí-lo. A
variável de ambiente PATH geralmente é definida pelo arquivo de
inicialização ~/.bash_profile
, veja Configuração do bash, Seção 3.2.
Alguns comandos levam argumentos. Os argumentos começando com - ou -- são chamados de opções e controlam o comportamento do comando.
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
Aqui o argumento de linha de comando -R muda o comportamento do
comando date
para saída com data em conformidade com a RFC-2822.
Freqüentemente se deseja que um comando funcione com um grupo de arquivos sem digitar todos eles. O padrão de expansão de nome de arquivo usando os curingas do shell facilitam essas necessidades.
Por exemplo, teste o seguinte e pense por si mesmo:
$ mkdir lixo; cd lixo; $ touch 1.txt 2.txt 3.c 4.h .5.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt $ echo .[^.]* .5.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf lixo
Cada comando retorna seu estado de saída como o valor de retorno.
O valor de retorno pode ser acessado pela variável shell $? imediatamente após a execução.
Por favor note que, quando o valor de retorno é usado no contexto lógico para o shell, sucesso é tratado como o TRUE (VERDADEIRO) lógico. Isso é um pouco não intuitivo já que sucesso produz valor zero.
Veja Condicionais de shell, Seção 13.2.5.
Vamos tentar lembrar as seguintes expressões de comandos shell. Veja Parâmetros shell, Seção 13.2.3, Redirecionamento shell, Seção 13.2.4, Condicionais de shell, Seção 13.2.5, e Processamento de linha de comando, Seção 13.2.6 depois de ler essas expressões.
O comando
é executado na subshell no plano de
fundo (background). Tarefas em plano de fundo permitem que usuários
executem vários programas em um único shell.
O gerenciamento de processos em plano de fundo envolve os comandos embutidos do
shell: jobs
, fg
, bg
, e
kill
. Por favor leia as seções da página de manual
bash(1)
em "SIGNALS", "JOB CONTROL", e
"SHELL BUILTIN COMMANDS". [26]
A saída padrão do comando1
é transmitida à entrada padrão do
comando2
. Ambos os comandos podem estar sendo executados
ao mesmo tempo. Isso é chamado de pipeline.
O comando1
e o comando2
são executados
seqüencialmente.
O comando1
é executado. Se tiver sucesso, o comando2
também é executado seqüencialmente. Retorna sucesso se o
comando1
ou o comando2
tiverem
sucesso.
Redireciona a saída padrão do comando
para um arquivo
foo. (sobrescreve)
Redireciona a saída padrão do comando
para um arquivo
foo (acrescenta (append))
Redireciona tanto a saída padrão quanto a saída padrão de erro do
comando
para um arquivo foo.
Redireciona a entrada padrão do comando
para um arquivo
foo. Teste:
$ </etc/motd pager ... (as saudações) $ pager </etc/motd ... (as saudações) $ pager /etc/motd ... (as saudações) $ cat /etc/motd | pager ... (as saudações)
Apesar de as 4 sintaxes mostrarem a mesma coisa, o último exemplo executa um
comando cat
extra e desperdiça recursos sem motivo.
Você pode definir um apelido (alias) para o comando usado freqüentemente. Por exemplo:
$ alias la='ls -la'
Agora, la
funciona como um atalho para ls -la que
lista todos os arquivos em formato de listagem longa.
Você pode identificar o caminho (path) exato ou identidade do comando usando o
comando type
. Por exemplo:
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to `ls -la' $ type echo echo is a shell builtin $ type file file is /usr/bin/file
Aqui o ls
foi procurado recentemente enquanto file
não foi, então o ls
está "hashed", isto é, o shell tem
um registro interno para o acesso rápido da localização do comando
ls
.
Há algumas ferramentas de processamento de texto que são usadas muito freqüentemente no sistema similar ao Unix.
head
tem como saída a primeira parte de arquivos.
tail
tem como saída a última parte de arquivos.
sort
ordena linhas de arquivos texto.
uniq
remove linhas duplicadas de um arquivo ordenado.
tr
troca ou apaga caracteres.
diff
compara aquivos linha por linha.
grep
encontra texto com o padrão.
ed
é um editor de linha primitivo.
sed
é um editor de fluxo.
vi
é um editor de tela.
emacs
é um editor de tela.
egrep
encontra texto com o padrão.
awk
faz processamento de texto simples. Veja Awk, Seção 13.3.
perl
faz todo tipo de processamento de texto concebível. Veja Perl, Seção 13.4.
Veja Substituição de expressões regulares, Seção 8.6.12, Pequenos scripts para ligar comandos, Seção 8.6.17, e Loucura de script Perl curto, Seção 8.6.19 para ter alguns exemplos de script.
Expressões regulares são usadas em muitas ferramentas de processamento de texto. Elas são análogas aos curingas de shell (veja Curingas (wildcards) de shell, Seção 4.3.8), mas são também mais complicadas e mais poderosas.
A expressão regular descreve um padrão de combinação e é feita de caracteres de texto e metacaracteres. O metacaracter é apenas um caracter com um significado especial. Há 2 estilos principais, ERB e ERE, dependendo das ferramentas de texto como descrito em Processamento de texto em similares a Unix, Seção 4.4.
Para as EREs, os metacaracteres incluem "\ . [ ] ^ $ * + ? ( ) { } |". A expressão regular significa:
Em ERBs os metacaracteres "+ ? ( ) { }
|" perdem seu significado especial; ao invés disso use as versões
com barra invertida "\+ \? \( \) \{ \} \|". Assim a
construção de agrupamento (r1|r2) precisa ser colocada como
\(r1|r2\) em ERBs. No emacs
, apesar de ser
basicamente ERB, "+ ?" são tratados como os
metacaracteres. Então não há necessidade de usar barra
invertida para eles. Veja Expressões de substituição,
Seção 4.4.2 para saber como a construção de agrupamento é usada.
Por exemplo, o grep
pode ser usado para fazedr a busca de texto
usando a expressão regular:
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
Para a expressão de substituição, os seguintes caracteres têm significados especiais:
emacs
)
Para string de substituição Perl, usa-se $n ao invés de \n e & não tem significado especial.
Por exemplo:
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=
Aqui por favor preste uma atenção extra ao estilo da expressão regular entre parênteses e como as strings casadas são usadas no processo de substituição de texto em ferramentas diferentes.
Essas expressões regulares podem ser usadas para os movimentos de cursor e as ações de substituições de texto nos editores também.
Por favor leia todas as páginas de manual relacionadas para aprender esses comandos.
No GNU/Linux e outros SOs similares ao Unix, os arquivos são
organizados em diretórios. [27] Todos os
arquivos e diretórios são arranjados em uma
grande árvore, a hierarquia de arquivos, com raiz em /
.
Esses arquivos e diretórios podem ser distribuídos entre vários dispositivos.
O comando mount(8)
serve para anexar o sistema de arquivos
encontrado em um dispositivo à grande árvore de arquivos. Inversamente, o
comando unmount(8)
desconecta o dispositivo novamente.
Aqui está o básico:
MEUARQUIVO
e MeuArquivo
são arquivos
diferentes.
/
. Não
confunda essa "raiz"(root) com o usuário root. Veja Login em um prompt shell como root, Seção 4.1.1.
/
. [28] O diretório raiz é uma exceção; seu nome é /
(pronunciado como "slash" (barra) ou "o diretório raiz") e
não pode ser renomeado.
/
, e há uma
/
entre cada diretório ou arquivo no nome de arquivo. A primeira
/
é o nome de um diretório, mas as outras são simplesmente
separadores para distinguir as partes do nome de arquivo.
As palavras usadas aqui podem ser confusas. Tome o seguinte exemplo:
/usr/share/keytables/us.map.gz
Esse é um nome de arquivo totalmente qualificado; algumas pessoas o chamam de
caminho (path). Entretanto, as pessoas também se referem a
us.map.gz
sozinho como um nome de arquivo. [29]
/etc
e
/usr
. Esses subdiretórios também ramificam em ainda mais
subdiretórios, como /etc/init.d
e /usr/local
. O
conjunto todo junto é chamado de árvore de diretórios.
Você pode pensar em um nome de arquivo absoluto como uma rota a partir da base
da árvore (/
) até o fim de algum ramo (um arquivo). Você também
ouvirá as pessoas falarem sobre a árvore de diretórios como se fosse uma árvore
familiar: assim os subdiretórios tem
ancestrais, e um caminho mostra a ascendência completa de um
arquivo.
Há também caminhos relativos que começam em algum lugar diferente do diretório
raiz. Você deve se lembrar de que o diretório ../
se refere ao
diretório pai.
As melhores práticas detalhadas para a hierarquia de arquivos estão descritas
no Padrão de
Hierarquia de Sistema de Arquivos
. Você deve se lembrar dos
seguintes fatos como iniciante:
/
/
simples representa o diretório raiz.
/etc
/var/log
/home
Seguindo a tradição Unix, o sistema Debian fornece o sistema de arquivos sob o qual os dados físicos em discos rígidos e outros dispositivos de armazenamento, e a interação com os dispositivos de hardware como telas de console e consoles seriais remotos são representados em uma forma unificada.
Cada arquivo, diretório, pipe nomeada, ou dispositivo físico em um sistema
Debian tem uma estrutura de dado chamada inode que descreve
seus atributos associados como o usuário que é seu dono, o grupo ao qual
pertence, a hora do último acesso, etc.. Veja /usr/include/linux/fs.h
para ter a
definição exata da estrutura inode no sistema Debian GNU/Linux.
Essa representação unificada de entidades físicas é muito poderosa já que nos permite usar o mesmo comando para o mesmo tipo de operação em muitos dispositivos totalmente diferentes.
Todos os seus arquivos poderiam estar em um disco --- ou você poderia ter 20 discos, alguns deles conectados a computadores diferentes em algum lugar na rede. Você não pode dizer simplesmente olhando pela árvore de diretórios, e praticamente todos os comandos funcionam da mesma forma independentemente do tipo de dispositivo(s) físico(s) em que seus arquivos realmente estão.
As permissões de acesso a arquivo e diretório são definidas separadamente para as três seguintes categorias de usuários afetados:
Para um arquivo, cada permissão correspondente possibilita:
Para um diretório, cada permissão correspondente possibilita:
Aqui, permissão de executar no diretório não significa apenas permitir a leitura dos arquivos em seu diretório, mas também permitir a visualização de seus atributos, como o tamanho e o tempo de modificação.
Para obter as informações de permissão (e outras) de arquivos e diretórios,
usa-se o ls
. Consulte ls(1)
. Quando o
ls
é invocado com a opção -l, exibe essas informações
na seguinte ordem:
Para mudar o dono do arquivo, usa-se o chown
a partir da conta
root. Para mudar o grupo do arquivo, usa-se o chgrp
a partir da
conta do dono do arquivo ou da conta root. Para mudar as permissões de acesso
de arquivo e diretório, usa-se o chmod
a partir da conta do dono
do arquivo ou da conta root. A sintaxe básica para manipular o arquivo
foo
é:
# chown novodono foo # chgrp novogrupo foo # chmod [ugoa][+-=][rwx][,...] foo
Veja chown(1)
, chgrp(1)
, e chmod(1)
para
os detalhes.
Por exemplo, para fazer uma árvore de diretórios ser de propriedade de um usuário foo e compartilhada por um grupo bar, execute os seguintes comandos a partir da conta root:
# cd /algum/local/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .
Há mais três bits de permissão especiais:
Aqui a saída de ls -l
para esses bits é transformada em maiúsculas
se os bits de execução estiverem ocultos devido a essas saídas estarem
desabilitadas.
Habilitar set user ID para um arquivo executável permite que um usuário execute o arquivo executável com ID do dono do arquivo (por exemplo root). Similarmente, definir set group ID em um arquivo executável permite que um usuário execute o arquivo executável com o group ID do arquivo (por exemplo root). Devido a esses ajustes poderem causar sérios riscos de segurança, suas habilitações requerem cuidado extra.
Habilitar set group ID para um diretório permite o esquema de criação de arquivo no estilo BSD, onde todos os arquivos criados no diretório pertencem ao grupo do diretório.
Habilitar sticky bit em um diretório impede que um arquivo no
diretório seja removido por um usuário que não é dono do arquivo. Para
assegurar o conteúdo de um arquivo em diretórios globalmente graváveis como
/tmp
ou em diretórios graváveis por grupo, é necessário não apenas
que a permissão de escrita (write) esteja desativada para o
arquivo, mas também ativar o sticky bit no diretório. Caso
contrário, o arquivo pode ser removido e um novo arquivo pode ser criado com o
mesmo nome por qualquer usuário que tenha permissão de escrita no diretório.
Aqui estão alguns exemplos interessantes das permissões de arquivo.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp -rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd -rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow -rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp
Há um modo numérico alternativo para descrever permissões de arquivo em
comandos chmod(1)
. Esse modo numérico usa de 3 a 4 dígitos de
números octais (base=8). Cada dígito corresponde a:
Isso parece complicado mas na verdade é muito simples. Se você olhar para as primeiras (2-10) colunas da saída do comando ls -l e lê-las como uma representação binária (base=2) de permissões de arquivo ("-" sendo "0" e "rwx" sendo "1"), esse valor de modo numérico deve fazer sentido como uma representação octal (base=8) das permissões de arquivo para você. [30] Por exemplo, teste:
$ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 pinguim pinguim 0 Nov 3 23:30 foo -rw-r--r-- 1 pinguim pinguim 0 Nov 3 23:30 bar
A máscara de permissão de arquivo padrão pode ser definida usando o comando
interno de shell umask
. Consulte builtins(7)
.
Há três tipos de marcas de tempo para um arquivo GNU/Linux:
Note que ctime não é a hora de criação do arquivo.
Note que até uma simples leitura de um arquivo no sistema Debian normalmente
causará uma operação de escrita de arquivo para atualizar a informação de
atime no inode. Montar um sistema de
arquivos com a opção noatime fará com que o sistema pule essa
operação e resultará em acesso para leitura mais rápido. Veja
mount(8)
.
Use o comando touch(1)
para mudar as marcas de tempo de arquivos
existentes.
Há dois métodos para associar um arquivo foo a um nome de arquivo diferente bar.
Veja no seguinte exemplo as mudanças no contador de ligações e as sutis
diferenças no resultado do comando rm
.
$ echo "Conteúdo Original" > foo $ ls -l foo -rw-r--r-- 1 osamu osamu 4 Feb 9 22:26 foo $ ln foo bar # ligação direta (hard link) $ ln -s foo baz # ligação simbólica (symlink) $ ls -l foo bar baz -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 bar lrwxrwxrwx 1 osamu osamu 3 Feb 9 22:28 baz -> foo -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 foo $ rm foo $ echo "Novo Conteúdo" > foo $ cat bar Conteúdo Original $ cat baz Novo Conteúdo
A ligação simbólica tem as permissões nominais de acesso de arquivo como "rwxrwxrwx", como mostrado no exemplo acima, com as permissões de acesso efetivas ditadas pelas permissões do arquivo apontado por elas.
O diretório .
liga ao diretório em que aparece, então o contador
de ligações de qualquer diretório novo começa com 2. O diretório
..
liga ao diretório superior, então o contador de ligações do
diretório aumenta com a adição de novos subdiretórios.
Um pipe nomeado é um arquivo que age como um pipe. Você coloca alguma coisa no arquivo e isso sai do outro lado. Então é chamado de FIFO, ou First-In-First-Out (Primeiro-Entra-Primeiro-Sai): a primeira coisa que você coloca no pipe é a primeira coisa que sai do outro lado.
Se você escrever em um pipe nomeado, o processo que está escrevendo no pipe não termina até que a informação que está sendo escrita seja lida pelo pipe. Se você ler de um pipe nomeado, o processo de leitura espera até que haja algo para ler antes de terminar. O tamanho do pipe é sempre zero --- ele não grava dados, apenas liga dois processos como o | do shell. Entretanto, como o pipe tem um nome, os dois processos não precisam estar na mesma linha de comando ou mesmo serem executados pelo mesmo usuário.
Você pode testar isso fazendo o seguinte:
$ cd; mkfifo meupipe $ echo "olá" >meupipe & # põe em plano de fundo (background) [1] 5952 $ ls -l meupipe prw-r--r-- 1 pinguim pinguim 0 2003-11-06 23:18 meupipe $ cat meupipe hello [1]+ Done echo olá >meupipe $ ls meupipe prw-r--r-- 1 pinguim pinguim 0 2003-11-06 23:20 meupipe $ rm mypipe
O soquete é similar ao pipe nomeado (FIFO) e possibilita que processos troquem informações. Para o soquete, esses processos não precisam ser executados ao mesmo tempo nem ser filhos do mesmo processo pai. Esse é o ponto final para a comunicação entre processos. A troca de informação pode ocorrer pela rede entre diferentes sistemas.
Arquivos de dispositivos se referem a dispositivos físicos ou virtuais em seu sistema, tais como seu disco rígido, sua placa de vídeo, monitor, ou teclado. Um exemplo de dispositivo virtual é o teclado, representado pelo /dev/console.
Há dois tipos de dispositivos:
Você pode ler ou escrever em arquivos de dispositivos, embora o arquivo possa
conter dados binários que podem ser algo sem nexo, incompreensível para
humanos. Escrever dados diretamente nesses arquivos algumas vezes é útil para
resolução de problemas de conexões de hardware. Por exemplo, você pode enviar
um arquivo texto para o dispositivo de impressora /dev/lp0
ou
enviar comandos de modem para a porta serial apropriada
/dev/ttyS0
. Mas, a menos que isso seja feito com cautela, isso
pode causar um grande desastre. Então seja cuidadoso.
/dev/null
etc.
/dev/null
é um arquivo de dispositivo especial que descarta
qualquer coisa quq você escrever nele. Se você não quiser alguma coisa, envie
para /dev/null
. É essencialmente um poço sem fundo. Se você ler
de /dev/null
, obterá um caracter fim-de-arquivo (EOF)
imediatamente.
/dev/zero
é similar, mas se você ler a partir dele obtém o
caracter \0 (não o mesmo que o número zero ASCII). Veja Arquivos Falsos, Seção 8.6.33.
O número de nó de dispositivo é mostrado executando ls
assim:
$ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root disk 3, 0 Mar 14 2002 /dev/hda crw-rw---- 1 root dialout 4, 64 Nov 15 09:51 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Aug 31 03:03 /dev/zero
Aqui,
/dev/hda
tem o número maior (major) de dispositivo 3 e número
menor (minor) de dispositivo 0. É acessível para leitura/escrita pelo usuário
que pertence ao grupo disk,
/dev/ttyS0
tem número maior de dispositivo 4 e número menor de
dispositivo 64. É acessível para leitura/escrita pelo usuário que pertence ao
grupo dialout, e
/dev/zero
tem número maior de dispositivo 1 e número menor de
dispositivo 5. É acessível para leitura/escrita por qualquer um.
No sistema mais antigo, o processo de instalação cria os nós de dispositivos
usando o comando /sbin/MAKEDEV
. Veja a página de manual
MAKEDEV(8)
.
No sistema mais novo, o sistema de arquivos sob o /dev
é povoado
automaticamente pelo sistema de arquivos de dispositivos de forma similar ao
sistema de arquivos /proc
.
/proc
O sistema de arquivos /proc
é um pseudo sistema de arquivos e
contém informações sobre o sistema e processos que estão sendo executados.
As pessoas freqüentemente se apavoram quando notam um arquivo em particular -
/proc/kcore
- que é geralmente enorme. Ele é (mais ou menos) uma
cópia do conteúdo da memória de seu computador. É usado para depurar (debug) o
kernel. Ele não existe realmente em lugar nenhum, então não se preocupe com
seu tamanho.
Veja Ajustando o kernel pelo sistema
de arquivos proc, Seção 7.3 e a página de manual proc(5)
.
Veja X, Seção 9.4.
O Sistema X Window pode ser iniciado automaticamente com um daemon de login
gráfico similar ao xdm
ou digitando o seguinte a partir do
console.
$ exec startx
Como o ambiente X pode acomodar muitos gerenciadores de janelas, suas interfaces de usuário variam bastante. Por favor, lembre-se de que clicando com o botão direito no plano de fundo (root window), obtem-se um menu de seleções. Isso está sempre disponível.
Se você não encontrar a entrada de menu, instale os pacotes pertinentes. Veja Básico do gerenciamento de pacotes Debian, Seção 6.2.
A seguir são apresentados os comandos de teclado importantes a lembrar ao executar o Sistema X Window.
Nesse momento, recomendo que você leia os livros guia chaves a partir de
O Projeto de Documentação
Linux: Guias
:
sysadmin-guide
/usr/share/doc/sysadmin-guide/html/index.html
http://www.tldp.org/LDP/sag/index.html
(not available)
(not applicable)
http://www.tldp.org/LDP/nag2/index.html
rutebook
(from non-free)
/usr/share/doc/rutebook/
http://www.icon.co.za/~psheer/book/index.html.gz
Veja Suporte para o Debian, Capítulo 15 para maiores recursos de aprendizado.
Referência Debian
CVS, Seg Abr 3 22:58:08 UTC 2005osamu@debian.org
pormenese@uol.com.br