LPI 103-104 | TUTORIAL Vamos continuar com a segunda aula da preparação para a certificação LPI A aula de hoje trata do importantíssimo ambiente de linha de comando, além de sistemas de arquivos e outros assuntos. por Luciano Siqueira Tópico 103: Comandos GNU e Unix. Objetivo 1.103.3: Trabalhando na linha de comando tos. Usar alias sem argumentos mostra quais aliases existem e seus conteúdos. exec O comando iniciado através de exec não se torna um processo filho do shell, mas toma seu lugar. Dessa forma, o shell é finalizado quando o comando terminar. O shell interpreta a primeira palavra na linha de comando como um comando. O caminho completo ou relativo para o comando precisa ser fornecido, a menos que o comando esteja localizado em um dos diretórios contidos na variável de ambiente PATH. Se o programa se encontrar no diretório de trabalho atual e fora dos diretórios contidos em PATH, ele precisará ser invocado precedido por ./. A maneira mais direta de interagir com o computador é usando a linha de comando. O prompt do shell (terminando em $ ou # para o usuário root) indica que o shell está pronto para receber instruções. O shell é o ambiente que faz o intermédio entre o usuário e os recursos do computador, como um ambiente de programação em tempo real para executar tarefas. O shell padrão no Linux é o bash (Bourne Again Shell), Variáveis e é a ele que os procedimentos aqui As variáveis usadas no shell são semelhanmostrados se referem. tes às usadas em linguagens de prograAs instruções do shell geralmente mação. Nomes de variáveis são limitados seguem o formato: comando [opções] {ar- a caracteres alfanuméricos. gumentos} Para se criar ou modificar uma variável, Alguns comandos embutidos do am- espaços não devem ser usados: biente shell: $ nome_da_variável=valor_da_variável alias Cria um apelido para um comando, no formato: O valor de uma variável é retornado acrescentando-se $ ao seu nome: $ alias apelido=’nome_do_programa --opções’ $ echo $nome_da_variável valor_da_variável É útil para facilitar a entrada de comandos recorrentes que levam muitos argumen- Há dois tipos de variáveis: locais e exportadas: Linux Magazine #27 | Fevereiro de 2007 TUTORIAL LPI nível 1: Aula 2 Gözde Otman - www.sxc.hu ➧ Locais: Acessíveis apenas no shell atual. ➧ Exportadas: Acessíveis no shell e pelos processos iniciados neste shell. Todas as variáveis são listadas usando o comando set. Para ver apenas as variáveis exportadas, usa-se env. Se uma variável pode ser acessada por qualquer processo ou shell, é chamada de variável “global”. Algumas variáveis de ambiente podem ser pré-definidas, seja de forma embutida na shell ou nos arquivos de configuração, como mostra a tabela 1. Variáveis especiais ➧ $!: PID do último processo filho ➧ $$: PID do shell atual ➧ $?: Retorna 0 se o último comando foi bem sucedido, caso contrário retorna 1 ➧ ~: Corresponde ao diretório pessoal do usuário atual ➧ ~alaor: Corresponde ao diretório pessoal do usuário chamado “alaor” Comandos Seqüenciais Para executar três comandos em seqüência, independente do resultado de cada um, utiliza-se o formato: $ comando1 ; comando2 ; comando3 Para executar o comando seguinte apenas se o anterior foi bem sucedido (se retornou 0): $ comando1 && comando2 && comando3 51 TUTORIAL | LPI 103-104 Tabela 1: Variáveis pré-definidas Variável Definição DISPLAY Usado pelo X para saber onde executar os aplicativos clientes HISTFILE Caminho para o histórico de comandos do usuário (geralmente $HOME/.bash_history) HOME Caminho para o diretório pessoal do usuário LOGNAME O nome que o usuário usou para entrar no sistema PATH Lista de diretórios nos quais programas serão procurados caso tenham sido solicitados sem o caminho completo ou relativo PWD O diretório atual SHELL O shell utilizado (nesse caso, /bin/bash) TERM O tipo de emulador de terminal utilizado Executar o comando seguinte apenas se o anterior não foi bem sucedido (se retornou diferente de 0): $ comando1 || comando2 || comando3 Auto-Completar Comandos e Caminhos Um recurso que agiliza a digitação de comando e caminhos existentes, é a utilização da tecla [TAB]. Exemplo: Comando whatis $ wha<TAB> $ whatis Objetivo 1.103.2: Processar fluxos de texto através de filtros posição de campo. Para separar por campo, usa-se a opção -d para especificar o caractere que delimita os campos e -f para informar a posição do campo. Mostrar os campos da posição 1 e 3 do arquivo /etc/group, campos que estão separados por :: $ cut -d ‘:’ -f 1,3 /etc/group root:0 bin:1 daemon:2 sys:3 adm:4 (...) Para mostrar outro delimitador no lugar do original, usa-se a opção --output-delimiter: a leitura deve ser feita a partir da linha de $ cut -d ‘:’ -f 1,3 /etc/group --outputnúmero especificado após o +. wc: Conta linhas, palavras ou caracteres, ➥delimiter ‘ = ‘ root = 0 com as opções -l, -w e -c respectivamente. bin = 1 Quando usado sem argumentos, mostra daemon = 2 esses três valores na seqüência. sys = 3 nl: Numera linhas, como cat -b. O adm = 4 argumento -ba faz numerar todas as li- (...) nhas. O argumento -bt apenas as que não estejam em branco. paste: Concatena arquivos lado a lado. expand: Substitui espaços de tabulação (“TABs”) por espaços simples, mantendo $ paste texto_simples texto_simples texto simples texto simples a mesma distância aparente. criado com cat criado com cat unexpand: Substitui dois ou mais espaços simples por espaços de tabulação (TABs). join: Similar ao paste, mas trabalha hexdump: Mostra arquivos binários. A especificando campos, no formato join opção -C torna a saída mais legível, mos- -1 CAMPO -2 CAMPO <arquivo um> <arquitrando a coluna de endereço hexadecimal, vo dois>, onde CAMPO é o número seguida pela coluna dos dados do arquivo indicando qual campo nos respectivos (valores hexadecimais seqüenciais sepa- arquivos (primeiro e segundo) deve ser rados a cada dois bytes), e por último a correlacionado. Exemplo: Relacionar coluna que mostra esses mesmos bytes as linhas de arq2 cujo primeiro camno formato ASCII. po (coluna 1) seja igual ao primeiro split: Divide um arquivo em outros campo de arq2: menores seguindo critérios como tamanho ou número de linhas. A opção -l indica arq1: o número de linhas de cada parte do ar- 1 a1 x1 2 b1 y1 quivo dividido. A opção -b indica qual o 3 c1 z1 tamanho de cada parte. Um prefixo para as partes pode ser indicado após o nome arq2: 1 a2 x2 do arquivo a ser dividido: Dividir um arquivo em partes de 2 b2 y2 3 c2 z2 1024Kb usando o prefixo “parte_”: $ Esse objetivo se relaciona principalmente ao uso das ferramentas do pacote GNU textutils. São comandos Unix padrão, utilizados para modificar seqüências de texto. cat: É usado para mostrar o conteúdo de arquivos. tac: Tem a mesma função do cat, mas mostra o conteúdo de trás para frente. head: Mostra o começo de arquivos. Por padrão, as primeiras dez linhas são mostradas. A quantidade de linhas a serem mostradas é indicada pela opção -n. A opção -c especifica o número de caracteres (bytes) a serem mostrados no split -b 1024k “arquivo original” par- $ join -1 1 -2 1 arq1 arq2 lugar de linhas. tail: Mostra o final de arquivos. Por pa- te_ . Esse comando criará arquivos 1 a1 x1 a2 x2 drão, as últimas dez linhas são mostradas. chamados parte_aa, parte_ab, parte_ac 2 b1 y1 b2 y2 A quantidade de linhas a serem mostradas etc. Para concatenar novamente o 3 c1 z1 c2 z2 é indicada pela opção -n . A opção -c es- arquivo, usa-se cat. Será criado um pecifica o número de caracteres (bytes) a arquivo de conteúdo idêntico ao do A primeira coluna do resultado é o serem mostrados no lugar de linhas. Para arquivo original. campo que foi relacionado, seguido das que o final do arquivo seja mostrado conuniq: Mostra o conteúdo de arquivos su- linhas correspondentes. É possível delitinuamente, à medida que mais texto é primindo linhas seqüenciais repetidas. mitar quais campos mostrar, com a opção adicionado ao final do mesmo, usa-se a cut: Delimita um arquivo em colunas, em -o. Essa opção deve ser escrita no formato opção -f (de follow). O sinal + indica que determinado número de caracteres ou por N.M, onde N é o número correspondente 52 http://www.linuxmagazine.com.br LPI 103-104 | TUTORIAL ao arquivo e M o número correspondenO comando ls é usado para listar arquite ao campo desse arquivo. O campo de vos e conteúdo de um diretório. A opção relação também pode ser referido por -l exibe detalhes sobre o(s) arquivo(s), -s 0. Exemplo: Fazer a mesma relação do mostra o tamanho em KB, e -d mostra o exemplo anterior, mostrando apenas o diretório, e não seu conteúdo. Exemplo primeiro campo de arq1 e apenas o se- de saída de ls -l: gundo de arq2: $ join -1 1 -2 1 -o ‘1.2 2.3’ arq1 arq2 a1 x2 b1 y2 c1 z2 sort: Ordena alfabeticamente. Com a opção -n, ordena numericamente, e -r inverte o resultado. sort texto_simples criado com cat texto simples fmt: Formata para determinado número de caracteres por linha. O padrão é 75. ➧ -w: indica o número de caracteres por linha ➧ -s: quebra linhas grandes, mas não as preenche ➧ -u: um espaço entre palavras e dois espaços entre sentenças. pr: Divide o arquivo para impressão. O padrão é 66 linhas por 72 caracteres de largura, modificados por -l e -w respectivamente. tr: Converte caracteres. O comando tr lê apenas diretamente via stdin. Conversão simples de um único caractere: $ cat texto_simples | tr ‘ ‘ ‘.’ texto.simples criado.com.cat Converter letras minúsculas para maiúsculas: $ cat texto_simples | tr ‘a-z’ ‘A-Z’ TEXTO SIMPLES CRIADO COM CAT Objetivo 1.103.3: Gerenciamento básico de arquivos Diretórios e arquivos Arquivos podem ser acessados tanto por seu caminho absoluto quanto por seu caminho relativo. Caminhos absolutos são aqueles iniciados pela barra da raiz (/), e caminhos relativos são aqueles que tomam por referência o diretório atual. O ponto (.) refere-se ao diretório atual, e .. refere-se ao diretório contendo o diretório atual. Linux Magazine #27 | Fevereiro de 2007 $ ls -l /etc/X11/xinit/ total 20 -rw-r--r-- 1 root root 321 2006-01-14 ➥17:33 README.Xmodmap lrwxrwxrwx 1 root root 15 2006-03-20 ➥22:31 xinitrc -> xinitrc.fluxbox -rwxr-xr-x 1 root root 556 2003-03-16 ➥19:59 xinitrc.blackbox -rwxr-xr-x 1 root root 560 2006-03-07 ➥03:32 xinitrc.fluxbox -rwxr-xr-x 1 root root 799 2006-01-14 ➥17:30 xinitrc.twm -rwxr-xr-x 1 root root 788 2005-07-21 ➥15:27 xinitrc.wmaker A primeira coluna mostra o tipo e as permissões do arquivo, a segunda coluna mostra o número de links físicos (hard links) para o arquivo, a terceira e a quarta mostram o dono e o grupo aos quais o arquivo pertence, a quinta mostra o tamanho em bytes, a sexta e a sétima mostram a data e a hora da última modificação no arquivo, e a oitava coluna mostra o nome do arquivo. Se o arquivo for um link simbólico, uma seta mostra o arquivo para o qual ele aponta. O comando cp é utilizado para copiar arquivos. Suas opções principais são: ➧ -i: Modo interativo. Pergunta antes de sobrescrever um arquivo. ➧ -p: Copia também os atributos do arquivo original. ➧ -r: Copiar recursivamente o conteúdo do diretório de origem. É importante saber que, ao se copiar um diretório recursivamente, o uso da barra / no final do diretório de origem fará com que apenas o conteúdo do diretório seja copiado para o destino, e o não uso da barra fará com que o diretório de origem e seu conteúdo sejam copiados no destino. O comando mv move e renomeia arquivos. Usado com a opção -i, ele pede confirmação antes de sobrescrever um arquivo de destino. Para alterar a data de um arquivo, utiliza-se o comando touch. Usado sem argumentos, touch altera a data e a hora de criação e modificação de um arquivo para os valores atuais do sistema. Para alterar apenas a data de modificação, usa-se a opção -m, e para alterar apenas a data de acesso, usa-se a opção -a. O argumento passado com -t usa outro valor de tempo. No bash, o comando para retornar o diretório atual é pwd. O comando cd muda para o diretório especificado ou vai para o diretório pessoal quando nenhum diretório for especificado. O comando mkdir cria diretórios. Para criar uma árvore de diretórios recursivamente, usa-se a opção -p: $ mkdir -p caminho/completo/para/dir. Para alterar as permissões do diretório no ato da criação, as mesmas são transmitidas ao mkdir com a opção -m. Diretórios vazios podem ser apagados pelo comando rmdir. Para apagar uma árvore de diretórios vazios, usa-se a opção -p. Para apagar diretórios com conteúdo, usa-se rm -r, e para forçar a remoção, a opção -f é utilizada. Encontrando arquivos com o comando find Sintaxe do find: find diretório critério [-exec comando {} \;] O argumento diretório indica onde o find deve iniciar a busca, e critério pode ser o nome do arquivo ou diretório a ser procurado, ou uma regra para a busca. Critérios comuns para o find: ➧ -type: Tipo do arquivo (d para diretório, f para arquivo comum e l para link) ➧ -name nome: Nome do arquivo ➧ -user usuário: Dono do arquivo ➧ -atime -/+n: Data de último acesso ao arquivo, menor ou maior que n. n corresponde a n * 24 horas. ➧ -ctime -/+n: Data de criação do arquivo, menor ou maior que n. ➧ -mtime -/+n: Data de modificação do arquivo, menor ou maior que n. ➧ -amin -/+n: Data de último acesso ao arquivo, menor ou maior que n. n corresponde a minutos. ➧ -cmin -/+n: Data de criação do arquivo, menor ou maior que n. ➧ -mmin -/+n: Data de modificação do arquivo, menor ou maior que n. ➧ -newer arquivo: O arquivo procurado foi criado ou modificado mais recentemente que arquivo. ➧ -perm modo: O arquivo procurado tem permissão modo. ➧ -perm -modo: O arquivo procurado tem todas as permissões listadas em modo. ➧ -perm +modo : O arquivo procurado tem qualquer das permissões listadas em modo. Exemplo: encontrar todos os arquivos do tipo link em /usr/lib criados há menos de 24 horas: 53 TUTORIAL | LPI 103-104 $ find /usr/lib -type l -ctime -1 /usr/lib/libssl.so /usr/lib/libcrypto.so /usr/lib/libssl.so.0 /usr/lib/libcrypto.so.0 dados. Esses descritores podem ser redirecionados de e para outros arquivos ou processos. Por padrão, o descritor de entrada (stdin) é o teclado e os descritores de saída padrão (stdout) e saída de erro Caracteres curinga (file globbing) (stderr) são a tela do computador. Os As operações com arquivos e diretórios valores numéricos para esses descritores permitem o uso de caracteres curinga, são 0 para stdin, 1 para stdout e 2 para stque são padrões de substituição de ca- derr. Os descritores também podem ser racteres. O caractere * substitui qualquer acessados através dos dispositivos virtuais seqüência de caracteres: /dev/stdin, /dev/stdout e /dev/stderr. O fluxo dos dados para redireciona$ ls /etc/host* mentos e canalizações numa linha de co/etc/host.conf mando vai da esquerda para a direita. /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/hosts.equiv O caractere ? substitui apenas um caractere: $ ls /dev/fd? /dev/fd0 /dev/fd1 /dev/fd2 /dev/fd3 O uso de colchetes ([]) indica uma lista de caracteres: $ ls /dev/hd[abc] /dev/hda /dev/hdb /dev/hdc Chaves ({}) indicam uma lista de termos separados por vírgula: $ ls /dev/{hda,fd0} /dev/fd0 /dev/hda O uso de exclamação antes de um curinga o exclui da operação: $ ls /dev/fd[!01] /dev/fd2 /dev/fd3 Curingas precedidos de barra invertida (\) não realizam substituição: $ ls /dev/fd\[\!01\] ls: /dev/fd[!01]: Arquivo ou diretório não ➥encontrado Entre aspas duplas, apenas os caracteres especiais |, / e $ têm efeito. Entre aspas simples, apenas o caractere especial \ tem efeito. Objetivo 1.103.4: Fluxos, canalização e redirecionamentos de saída Processos Unix geralmente abrem três descritores padrão de arquivos, que os permitem processar entrada e saída de 54 Redirecionamento Para redirecionar a saída padrão de um comando para um arquivo, utiliza-se o símbolo > após o mesmo, que deve indicar o arquivo a ser criado com os dados referidos, como em $ cat texto_simples > clone_texto_simples. Se o arquivo existir previamente, será sobrescrito. Para adicionar os valores sem apagar o conteúdo existente, usa-se >>. Para redirecionar o conteúdo de um arquivo para a entrada padrão de um comando, usa-se <. Nesse caso, o fluxo dos dados segue da direita para a esquerda. É especialmente útil para utilizar com comandos como o tr, que não lê arquivos diretamente. O conteúdo redirecionado por padrão é o de stdout. Para especificar stderr, usa-se 2>. Para redirecionar ambos simultaneamente, usa-se &>. Canalização (pipe) É possível enviar a saída de um comando para a entrada de outro comando, utilizando o caractere de canalização |. Exemplo: extrair a terceira música de um CD com o comando cdparanoia, canalizando o áudio através do programa oggenc para armazenar a música no formato Ogg Vorbis. É possível também usar a saída de um comando como argumento para outro, usando aspas invertidas: $ ls -dl `cat /etc/ld.so.conf` drwxr-xr-x 5 root root 7464 2006-01-14 ➥17:35 /usr/X11R6/lib drwxr-xr-x 2 root root 712 2006-03-17 ➥12:26 /usr/i486-slackware-linux/lib drwxr-xr-x 2 root root 688 2005-10-29 ➥22:53 /usr/lib/qt/lib drwxr-xr-x 16 root root 7272 2006-03-21 ➥02:49 /usr/local/lib Resultado idêntico é conseguido inserindo o comando entre as aspas de $(). O comando xargs desempenha função parecida, passando os dados que recebe via stdin como argumento para um segundo comando. Exemplo do xargs acompanhando a execução do find: $ find /usr/X11R6/bin/ -name ‘xt*’ | xargs ➥ls -l -rwxr-xr-x 1 root bin 268928 2006-01-14 ➥17:35 /usr/X11R6/bin/xterm -rwxr-xr-x 1 root bin 13076 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapchar -rwxr-xr-x 1 root bin 6536 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapin (...) Nesse exemplo, xargs tomou cada caminho passado por find e repassou como argumento para o comando ls -l. Objetivo 1.103.5: Criar, monitorar e finalizar processos Em linhas gerais, um processo é um programa em execução. Cada processo possui um número único de identificação chamado PID. Esse número pode ser usado para mudar a prioridade de um processo ou para finalizá-lo. pstree: Mostra processos ativos em formato de árvore genealógica (processos filhos $ cdparanoia -d /dev/cdrom 3 - | oggenc - - ligados aos respectivos processos pais). ➥o 03.ogg ps: Mostra os processos ativos de maneira detalhada. Por fim, é possível redirecionar sitop: Monitora continuamente os promultaneamente a saída tanto para um cessos, mostrando informações como uso arquivo quanto para stdout, através do de memória e CPU de cada processo. A comando tee. Para tal, canaliza-se a sa- tecla [H] fornece ajuda sobre o uso do ída do comando para o comando tee, e programa. Pode ser usado para alterar a a este um nome de arquivo para arma- prioridade de um processo. zenar a saída: pidof: Retorna o PID do programa cujo nome foi solicitado, se o programa $ cat /etc/passwd | tee cópia_passwd estiver em execução. kill : Envia sinais de controle para O conteúdo de /etc/passwd será mos- processos. O sinal padrão quando trado na tela e copiado no arquivo có- nenhum sinal é informado é SIGTERM, de valor numérico 15, que pede ao pia_passwd. http://www.linuxmagazine.com.br LPI 103-104 | TUTORIAL programa em questão para finalizar. O processo não necessariamente obedece ao sinal, a menos que o sinal seja SIGKILL. Em alguns casos, o sinal SIGHUP pode ser interpretado como ordem para o processo reler seu(s) arquivo(s) de configuração. Exemplo de kill: ➧ SIGKILL: Força a finalização do processo. Valor numérico 9. ➧ SIGTERM: Pede ao processo para finalizar. Valor numérico 15. killall: Tem função igual à de kill, porém usa o nome do processo no lugar do PID. Com a opção -l, lista os possíveis sinais. # kill -SIGTERM 4902 Tarefas em primeiro e segundo plano Após iniciado um programa no shell, ele normalmente assumirá o controle de stdin e stdout, ou seja, ficará em primeiro plano. Para interromper o programa e voltar ao prompt do shell, usa-se a combinação de teclas [Ctrl]+[Z]. Feito isso, para continuar a execução do programa em segundo plano, ou seja, mantendo o prompt do bash em primeiro plano, usa-se o comando bg Envia o sinal SIGTERM para o processo de PID 4902. Sinais comuns: ➧ SIGHUP: Termina ou reinicia o processo. Valor numérico 1. ➧ SIGINT: Interrompe o processo, igual a [Ctrl]+[C]. Valor numérico 2. ➧ SIGQUIT: Fecha o processo. Valor numérico 3. Tabela 2: Comandos do modo de comando Tecla(s) Efeito 0, $ Início e fim de linha 1G, G Início e fim de documento b, e Início e fim de palavra (, ) Início e fim de sentença {, } Início e fim de parágrafo w, W Pular palavra e pular palavra contando com a pontuação h, j, k, l Esquerda, abaixo, acima, direita /, ? Busca para frente e para trás i Entra no modo de inserção na posição atual do cursor a, A Entra no modo de inserção depois do cursor ou no fim da linha o, O Adiciona linha e entra no modo de inserção depois ou antes do cursor s, S Apaga item ou linha e entra no modo de inserção c Modifica um item através de inserção de texto r Substitui um único caractere x Apaga um único caractere y, yy Copia um item ou toda linha p, P Cola o conteúdo copiado depois ou antes do cursor u Desfazer ZZ Fecha e salva se necessário ZQ Fecha e não salva Tabela 3: Comandos de última linha ou coluna :! Chama um comando do shell :quit ou :q Fecha :quit! ou :q! Fecha sem gravar :wq Salva e fecha :exit ou :x ou :e Fecha e grava se necessário :visual Volta para o modo de comando Linux Magazine #27 | Fevereiro de 2007 (background). Para continuar a execução do programa em primeiro plano, usa-se o comando fg (foreground). Ao interromper uma tarefa, é mostrado um número que identifica a mesma. Este número é passado para fg e bg para especificar a tarefa desejada. Se houver apenas uma tarefa na sessão atual, fg e bg podem ser usados sem argumentos. Para usar o nome do programa no lugar de seu número de tarefa, basta precedê-lo por %?. O comando jobs lista as tarefas existentes na sessão atual do bash. É especialmente útil quando há mais de uma tarefa em andamento. É possível iniciar programas diretamente em segundo plano, adicionando o símbolo & ao seu final. Os números que são mostrados correspondem ao número da tarefa e ao PID, respectivamente. O número de uma tarefa pode ser usado como argumento do comando kill desde que precedido do símbolo %. Quando um usuário sai do sistema, um sinal SIGHUP é enviado a todos os processos iniciados por ele. Para que esse sinal não interrompa o processo do usuário após este sair do sistema, o comando deve ser invocado através do nohup: $ nohup wget ftp://transferência/muito/ ➥demorada.tar.bz2 & nohup: appending output to `nohup.out’ As saídas stdout e stderr serão redirecionadas para o arquivo nohup.out, criado no mesmo diretório em que o comando foi executado. Objetivo 1.103.6: Modificar a prioridade de execução de um processo Números nice (NI) são usados para alterar a prioridade de CPU e balancear seu uso num ambiente multiusuário. Todo processo comum é iniciado com uma prioridade padrão (0). Números nice vão de 19 (menor prioridade) a -20 (prioridade maior). Apenas o usuário root pode diminuir o número nice de um processo para abaixo de zero. É possível iniciar um comando com uma prioridade diferente da padrão através do comando nice. Por padrão, nice muda a prioridade para 10. nice -n 15 tar czf home_backup.tar.gz /home inicia o comando tar com número nice de prioridade 15. 55 TUTORIAL | LPI 103-104 Para alterar a prioridade de um processo em andamento, o renice é usado. A opção -p indica o PID do processo em questão. # renice -10 -p 2997 2997: prioridade antiga = 0; prioridade ➥nova = -10 sed: O comando sed é mais utilizado para procurar e substituir padrões em textos, mostrando o resultado em stdout. Sua sintaxe é sed [opções] ‘comando e expressão regular’ [arquivo original]. No sed, a ex- Tópico 104: Dispositivos, Sistemas de arquivos Linux e padrão FHS pressão regular fica circunscrita entre barras (/). Por exemplo, sed -e ‘/^#/d’ /etc/lilo.conf mostra o arquivo /etc/lilo. Objetivo 1.104.1: Criação de As opções -g e -u permitem alterar to- conf sem as linhas começadas por # (li- partições e sistemas de arquivos dos os processos do grupo ou do usuário, nhas de comentário). A letra d ao lado respectivamente. Com renice +5 -g users, da expressão regular é um comando sed Por padrão, discos IDE podem conter até todos os processos de usuários do grupo que indica a exclusão de linhas contendo quatro partições físicas, das quais uma pode users tiveram suas prioridades (número o respectivo padrão. Por exemplo, para ser estendida. A partição estendida pode nice) alteradas para +5. substituir o termo hda por sdb, usaríamos ser dividida em partições lógicas. Prioridades podem ser modificadas sed -e ‘s/hda/sdb/g’ /etc/lilo.conf. Fdisk: O fdisk é o programa padrão interativamente através do programa para manipular partições no Linux. Com Opções comuns de sed: top. Quando na tela de processos, basta ➧ -e: Executa a expressão e comando a opção -l, ele lista os dispositivos e as apertar a tecla [R] e indicar o número a seguir. partições existentes. Para manipular PID do processo. ➧ -f: Lê expressões e comandos do partições, o fdisk deve ser iniciado tenarquivo indicado pela opção. do como argumento o dispositivo em ➧ -n: Não mostrar as linhas que não questão. Uma vez dentro do fdisk, certas Objetivo 1.103.7: Procurar correspondam à expressão. letras corresponderão a comandos. Alguns Comandos comuns de sed: comandos bastante utilizados, podem ser em arquivos de texto usando ➧ s: Substituir. vistos na tabela 4: expressões regulares ➧ d: Apagar a linha. O fdisk cria novas partições identifiExpressões regulares e grep ➧ r: Insere o conteúdo do arquivo indi- cadas como partições nativas de Linux, cujo código hexadecimal é 83 (0x83). O Expressões regulares são elementos cado na ocorrência da expressão. de texto, palavras-chave e modifica➧ w: Escreve a saída no arquivo indi- código de identificação de partições do dores que formam um padrão, usacado. tipo swap é 82 (0x82). do para encontrar e opcionalmente ➧ g: Substitui todas as ocorrências da Criação de Sistemas de Arquivos: alterar um padrão correspondente. expressão na linha atual. Durante muito tempo o sistema de arMuitos programas suportam o uso de quivos mais utilizado no Linux foi o Ext2 expressões regulares. O comando grep Objetivo 1.103.8: Edição (second extended). No entanto, hoje são muito usados sistemas de arquivos com é o mais comum para realizar buscas básica de arquivos com o vi por expressões regulares em textos. journalling, como o Ext3 e o ReiserFS. Caracteres especiais em expressões Na maioria das distribuições, o vi é o edi- Ext2 e Ext3 utilizam blocos de 1024 bytes. regulares: tor de textos padrão. O vi localiza-se em Há três tipos de blocos: ➧ ^: Começo de linha /bin. Há três modos básicos no vi: ➧ Superblocks: Repetem-se a cada 8193 Modo de inserção: A maneira mais ➧ $: Fim de linha blocos. Contêm informações sobre comum de entrar no modo de inserção ➧ .: Qualquer caractere o tamanho dos blocos, inodes livres, ➧ *: Qualquer seqüência de zero ou é apertando a tecla [i] ou [A]. É o modo data da última montagem etc. mais caracteres mais intuitivo, usado para digitar tex➧ inodes: Indicadores para os blocos ➧ []: Qualquer caractere que esteja to no documento. A tecla [ESC] sai do de dados. Os 12 primeiros blocos modo de inserção e volta para o modo presente nos colchetes de dados após o inode são acessaExemplos: Mostrar apenas as linhas de comando. dos seqüencialmente. Se os dados que começam com o caractere # do arexcederem 12 blocos, blocos inode Modo de última linha ou coluna: quivo /etc/lilo.conf: grep ‘^#’ /etc/lilo. Acessível ao apertar a tecla [:] no modo indiretos agem como espelho. Cada conf. Mostrar linhas de /etc/lilo.conf que de comando. Usado para fazer buscas, inode tem 256 bytes e contém a incontenham os termos hda ou hdb: grep salvar, sair, executar comandos no shell, formação de usuário, grupo, peralterar configurações do vi etc. Para re‘hda[ab]’ /etc/lilo.conf. missões e data referente aos dados Mais opções de grep: tornar ao modo de comando, usa-se o associados. ➧ -c: Conta as linhas contendo o comando visual. Veja a tabela 3 para ➧ Blocos de dados: Os blocos que padrão. mais detalhes. contêm os arquivos e diretórios ➧ -i: Ignora a diferença entra maiúsModo de comando: É o modo inicial propriamente ditos. culas ou minúsculas. do vi. Serve para navegação e edição. GeA diferença para um sistema de arqui➧ -f: Usa a expressão regular contida no ralmente, os comandos são letras únicas. vos com journalling é que um sistema arquivo indicado por essa opção. Se precedido por número, o comando com essa capacidade registra de antemão ➧ -n: Procurar somente na linha indi- será repetido correspondentemente ao todas alterações que irá realizar no disco. valor desse número. cada por essa opção. Dessa forma, erros de gravação (normal➧ -v: Mostra todas as linhas exceto a Algumas teclas comuns usadas no modo mente ocasionados por queda de energia que corresponder ao padrão. de comando podem ser vistas na tabela 2: ou desligamento incorreto) podem ser 56 http://www.linuxmagazine.com.br LPI 103-104 | TUTORIAL Tabela 4: Comandos do fdisk Como o comando mkfs, o fsck possui a opção -t para especificar o Comando Efeito p Lista as partições n Cria uma nova partição interativamente t Muda a identificação da partição d Apaga uma partição q Sai do fdisk sem gravar as alterações w Sai do fdisk e grava as alterações m Mostra a ajuda de comandos tipo do sistema de arquivos, e um comando específico para cada partição: fsck.ext2 ou e2fsck, fsck. ext3, fsck.xfs, reiserfsck e dosfsck. Examinando e corrigindo o sistema de arquivos mais facilmente diagnosticados e sanados. debugfs: Depurador inÉ possível fazer a conversão de Ext2 para terativo de sistemas de arquivos. Examina Ext3 sem perda de dados. sistemas Ext2 e Ext3. Muda diretórios, O comando mkfs cria sistemas de ar- examina dados de inodes, apaga arquivos, quivos em partições. A opção -t indica cria links, mostra o log de journalling o tipo do sistema de arquivos. Para criar Ext3 etc. É usado em casos extremos, uma partição Ext2 na partição /dev/hda3, geralmente após o fsck ter falhado. usa-se mkfs -t Ext2 /dev/hda3. Há tamdumpe2fs: Mostra informações de bém comandos específicos para cada grupo de blocos e de superblocos. sistema de arquivos: mkfs.ext2, mke2fs, tune2fs: Configura parâmetros ajustámkfs.ext3, mkfs.xfs, mkreiserfs, mkdosfs veis em sistemas de arquivos Ext2, como e mkfs.vfat. rótulo e limites de montagem antes de Partição Swap: Após a partição swap checar automaticamente. ser criada pelo fdisk, ela precisa ser formatada com o comando mkswap. Por exemUso do disco plo, mkswap /dev/hda2. Após ser criada e df: Mostra o espaço disponível em cada formatada, uma partição swap precisa dispositivo. A análise é feita diretamenser ativada para ser usada como memó- te no dispositivo. Por padrão, mostra o ria swap. O comando swapon -a ativa espaço em unidades de 1 KB. A opção todas as partições swap que constarem -h usa medidas apropriadas para tornar a em /etc/fstab. As entradas referentes a saída mais inteligível. partições swap em /etc/fstab não têm du: Mostra o espaço ocupado. Sem argumentos, mostra o uso de cada direponto de montagem. Exemplo de entrada de partição swap tório no sistema. Um diretório específico em /etc/fstab: pode ser indicado através da opção -s. A opção -h usa medidas apropriadas para /dev/hda2 swap swap defaults 0 0 tornar a saída mais inteligível. Normalmente, todas as partições swap contidas em /etc/fstab são ativadas pelos scripts de inicialização do sistema. Para ativar ou desativar essa partição manualmente, usa-se swapon /dev/hda2 e swapoff /dev/hda2, respectivamente. Informações sobre partições swap ativas são armazenadas em /proc/swaps. Objetivo 1.104.2: Manutenção da integridade de sistemas de arquivos Checando o sistema de arquivos O comando fsck deve ser executado em partições que apresentarem erros ou em dispositivos que foram desligados incorretamente. A partição deverá estar desmontada ou montada como somenteleitura (ro) para a verificação. Linux Magazine #27 | Fevereiro de 2007 Objetivo 1.104.3: Controle da montagem e desmontagem dos sistemas de arquivos /etc/fstab Durante os procedimentos de carregamento do sistema, é o arquivo /etc/fstab que determina os pontos de montagem dos dispositivos. Cada linha corresponde a um dispositivo. Cada linha contém os seguintes termos separados por tabulações ou espaços: ➧ Dispositivo ➧ Ponto de montagem (swap se for uma partição de swap) ➧ Tipo de sistema de arquivos ➧ Opções ➧ Dump ( 0 ou 1). Determina se o dispositivo deverá ser considerado pelo comando dump. Se ausente, 0 é considerado. ➧ fsck (1 ou 2). Determina a ordem da checagem feita pelo fsck durante a inicialização. Para a partição raiz, deve ser 1. Se ausente, 0 é presumido e a checagem não é feita no boot. Para permitir que usuários comuns montem e desmontem dispositivos – geralmente, o caso de dispositivos removíveis –, devese incluir a opção users para o respectivo dispositivo. O termo auto na posição referente ao sistema de arquivos indica que o sistema de arquivos deve ser identificado automaticamente. Para mais opções do arquivo /exc/fstab veja a tabela 5. mount O comando mount usado sem argumentos mostra os dispositivos montados e outros detalhes, como ponto de montagem e tipo do sistema de arquivos. Também é usado para montar dispositivos manualmente. Para montar manualmente um dispositivo que conste em /etc/fstab, basta fornecer para o comando mount a localização do dispositivo ou do diretório alvo. Para desmontar um dispositivo, o comando umount é utilizado, tendo como argumento o dispositivo ou o diretório alvo a ser desmontado. Usado com a opção -a, mount monta todos os dispositivos em /etc/fstab (exceto os marcados com a opção noauto). Opções de montagem As opções de montagem são as mesmas para /etc/fstab e para mount. Se mais de uma opção for fornecida, deverão ser separadas por vírgula. Objetivo 1.104.4: Administração de cotas de disco Para habilitar o controle de cotas de disco, é necessário que o kernel suporte essa função, e incluir a opção usrquota ou grpquota em /etc/fstab. Para que a opção recém-adicionada tenha efeito, é necessário remontar o dispositivo. Para gerar a tabela de estatísticas de uso do sistema de arquivos, deve-se executar o quotacheck -a, o que é normalmente feito pelos scripts de inicialização. Para criar as configurações de cota para usuários e grupos, usa-se o comando edquota. A opção -u altera as configurações de cota para o usuário especificado, da mesma forma que -g altera para o grupo especificado. O editor padrão do sistema (geralmente o vi) é usado para essa tarefa. 57 TUTORIAL | LPI 103-104 Tabela 5: Opções do arquivo /etc/fstab Opção Efeito Incluir permissão de escrita para o grupo do arquivo texto_simples: rw ou ro Gravável ou somente leitura noauto Não é montado automaticamente users O dispositivo poderá ser montado e desmontado por usuários comuns user Apenas quem montou terá permissão de desmontar owner As permissões do dispositivo montado se adequarão ao usuário que o montou usrquota Habilita o uso de cotas de disco para usuário grpquota Habilita o uso de cotas de disco para grupo remount Remonta um dispositivo montado com outras opções. Útil para remontar um dispositivo como somente leitura, por exemplo Essas configurações são armazenadas no diretório alvo onde a partição em questão foi montada, nos arquivos aquota.user e aquota.group. Nesses arquivos é possível especificar limites como espaço e inodes para o usuário ou grupo. Para que as cotas passem a ser monitoradas e controladas, deve-se executar o comando quota -a. Assim, os limites para cada usuário serão comparados à tabela de estatísticas de cotas, até que um dos limites seja alcançado e o usuário não disponha de mais espaço. É possível também estabelecer um período em que o usuário será avisado de que seu limite foi alcançado, através do comando edquota com a opção -ta, de uma maneira semelhante à forma de configurar os limites. Para que o usuário acompanhe o status de sua cota, basta executar o comando quota sem argumentos. O superusuário pode gerar relatórios de cota dos sistemas de arquivos com o comando repquota -a. Objetivo 1.104.5: Controle de permissões e acesso a arquivos Há três níveis de permissão para arquivos e diretórios: usuário dono do arquivo (u), grupo dono do arquivo (g) e outros (o). Exemplo de permissões de arquivos: $ ls -l /etc/X11/xdm/ total 80 -rwxr-xr-x 1 root root 385 2006-01-14 ➥17:30 GiveConsole -rwxr-xr-x 1 root root 244 2006-01-14 ➥17:30 TakeConsole -r--r--r-- 1 root root 3618 2006-01-14 ➥17:30 Xaccess -rwxr-xr-x 1 root root 191 2006-01-14 ➥17:30 Xreset -r--r--r-- 1 root root 2559 2006-01-14 ➥17:30 Xresources -r--r--r-- 1 root root 487 2005-09-12 58 $ chmod g=r,o-r texto_simples $ chmod g+w texto_simples ➥02:56 Xservers (...) lrwxrwxrwx 1 root root 20 2006-03-19 ➥09:36 authdir -> ../../../var/lib/xdm -rwxr-xr-x 1 root root 14696 2006-01-14 ➥17:35 chooser drwxr-xr-x 2 root root 104 2006-01-14 ➥17:30 pixmaps -r--r--r-- 1 root root 1533 2006-01-14 ➥17:30 xdm-config A primeira letra representa o tipo do arquivo, podendo ser: ➧ d: diretório ➧ l: link simbólico ➧ c: dispositivo especial de caracteres ➧ p: canal fifo ➧ s: socket ➧ -: arquivo convencional As demais letras são divididas em grupos de três, determinando as permissões para o dono do arquivo, o grupo do arquivo e demais usuários, respectivamente. As permissões são alteradas com o comando chmod, podendo ser de leitura (r), escrita (w) e execução (x). Exemplo: O grupo a que pertence o arquivo texto_simples terá apenas acesso de leitura ao mesmo, e para os demais usuários será retirada a permissão de leitura: Apesar de possuírem o mesmo modelo de permissões, arquivos e diretórios reagem de maneiras diferentes. Em diretórios, a permissão r permite acessar o conteúdo do diretório, a permissão w permite criar arquivos dentro do diretório, e x permite listar o conteúdo do diretório. Permissões Octais Permissões podem ser manejadas mais eficientemente através de um formato numérico, chamado octal. O número octal consiste de uma seqüência de dígitos, cada um representando as permissões para o usuário, grupo e outros, nessa ordem. Veja a tabela 6 . Assim, o comando chmod 0664 texto_simples mudará as permissões do arquivo texto_simples para -rw-rw-r--, ou seja, leitura e escrita para o usuário, leitura e escrita para o grupo e somente leitura para outros. Para mudar recursivamente todos os arquivos dentro de um diretório especificado, utiliza-se o chmod com a opção -R. umask O umask é o filtro de permissões para criação de arquivos. As permissões para novos arquivos criados são aplicadas calculando as permissões padrão do sistema (0666 para arquivos e 0777 para diretórios) menos as permissões umask. umask, sem argumentos, mostra a máscara atual de criação de arquivos. Para mudar, basta fornecer a nova máscara como argumento. Em sistemas onde os grupos iniciais dos usuários são particulares, a máscara poderá ser 002, o que sub- Tabela 6: Permissões octais e seus significados Dígito Leitura (valor 4) Escrita (valor 2) Execução (valor 1) 0 – – – 1 – – sim 2 – sim – 3 – sim sim 4 sim – – 5 sim – sim 6 sim sim – 7 sim sim sim http://www.linuxmagazine.com.br LPI 103-104 | TUTORIAL Tabela 7: Permissões especiais em formato octal Dígito suid (valor 4) sgid (valor 2) sticky (valor 1) 0 – – – 1 – – sim 2 – sim – 3 – sim sim 4 sim – – 5 sim – sim 6 sim sim – 7 sim sim sim trairá das permissões padrão do sistema a permissão 2 (w, escrita), na categoria outros (o). Dessa forma, os arquivos serão criados com as permissões 0664. Em sistemas onde o grupo inicial de todos os usuários é o grupo users, a máscara poderá ser 0022, o que subtrairá das permissões padrão do sistema a permissão 2 (w, escrita), nas categoria grupo (g) e outros (o). Dessa forma, os arquivos serão criados com as permissões 0644, limitando a permissão de escrita apenas ao usuário dono do arquivo. suid e sgid Todos os processos são vinculados ao usuário que os iniciou. Dessa forma, um programa pode trabalhar com um arquivo apenas até onde as permissões desse arquivo permitem ao usuário. Algumas tarefas, no entanto, exigem que um usuário altere ou acesse arquivos aos quais não tem a permissão necessária. Por exemplo, alterar a própria senha exige que o arquivo /etc/passwd seja alterado e as permissões de /etc/passwd só permitem escrita ao usuário dono (root): $ ls -l /etc/passwd -rw-r--r-- 1 root root 814 2006-03-15 ➥14:04 /etc/passwd Para contornar essa condição, existe um bit de permissão especial chamado suid. Arquivos executáveis que possuam a permissão suid serão executados em nome do dono do arquivo, e não em nome de quem os executou. A permissão suid é representada pela letra s, no campo referente ao dono do arquivo (u): $ ls -l /usr/bin/passwd -rws--x--x 1 root bin 37880 2004-06-21 ➥16:20 /usr/bin/passwd Exemplo: Incluir o modo suid em um arquivo executável: Linux Magazine #27 | Fevereiro de 2007 $ chmod u+s meu_programa De maneira semelhante, a permissão sgid atua em diretórios. A permissão sgid é uma permissão de grupo, portanto aparece no campo de permissões referente ao grupo. Num diretório com a permissão sgid, todos os arquivos criados pertencerão ao grupo do diretório em questão, o que é especialmente útil em diretórios com o qual trabalham um grupo de usuários pertencentes ao mesmo grupo. Quando habilitadas, as permissões suid e sgid fazem aparecer a letra s no lugar da letra x nas permissões de dono do arquivo e grupo do arquivo, respectivamente. Se a permissão de execução também existir, aparecerá a letra s em minúsculo. Se apenas as permissões suid e sgid existirem, aparecerá a letra S, em maiúsculo. Permissões especiais em formato octal Como as opções convencionais, as permissões especiais também podem ser manipuladas em formato octal (numérico). A permissão especial é o primeiro dos quatro dígitos da opção no formato octal. A tabela 7 detalha essa correspondência. Objetivo 1.104.6: Modificar donos e grupos de arquivos Para alterar dono e grupo de arquivos e diretórios, usa-se chown e chgrp. O primeiro argumento é um nome válido de usuário ou grupo, e o segundo é o arquivo ou diretório a ser alterado. Apenas o superusuário pode usar o comando chown, mas qualquer usuário pode usar chgrp em seus arquivos e diretórios. Mudar dono de arquivo: # chown luciano texto_simples Mudar grupo de arquivo: $ chgrp users texto_simples Para alterar usuário e grupo simultaneamente: # chown luciano.users texto_simples Tanto chown quanto chgrp possuem a opção -R, para alterar conteúdos de diretórios recursivamente. A permissão sticky O inconveniente em usar diretórios compartilhados é que um usuário po- Objetivo 1.104.7: Criar e alterar deria apagar algum ou todo o conteúdo links simbólicos e links físicos inadvertidamente. Para evitar que isso aconteça, existe o modo de permissão sticky, que impede que usuários apaHardlinks (links físicos) guem arquivos que não tenham sido Hardlinks são um ou mais nomes que um criados por eles mesmos. É o caso do inode do sistema de arquivos pode ter. diretório /tmp: Todo arquivo criado é, necessariamente, um hardlink para seu inode correspon$ ls -ld /tmp dente. O mesmo só será apagado após drwxrwxrwt 21 root root 1312 2006-03-23 seu último hardlink remanescente ser ➥22:51 /tmp apagado e nenhum programa estar mantendo o arquivo aberto. Novos hardlinks A letra t nas permissões para demais são criados usando o comando ln: usuários demonstra o uso da permissão sticky. Se apenas a permissão sticky existir, $ ln texto_simples outro_texto_simples aparecerá a letra T maiúscula. Exemplo: Usar a permissão sticky no A opção -i do ls mostra o número diretório comunitario: dos inodes dos arquivos: $ chmod o+t comunitario/ $ ls -i texto_simples outro_texto_simples 59 TUTORIAL | LPI 103-104 55412 outro_texto_simples 55412 texto_ ➥simples Ambos texto_simples e outro_texto_simsão hardlinks para o mesmo inode 55412. Hardlinks para o mesmo inode possuem mesma permissão, donos, tamanho e data, pois esses atributos são registrados diretamente nos inodes. ples $ ls -l texto_simples -rw-r--r-- 2 luciano users 29 2006-01-01 ➥00:01 texto_simples Diretórios Conteúdo /bin e /sbin Contêm os programas necessários para carregar o sistema e comandos especiais /etc Arquivos de configuração específicos da máquina /lib Bibliotecas compartilhadas pelos programas em / bin e /sbin e módulos do kernel /mnt Pontos de montagem para outras partições ou dispositivos /proc Armazena informações do kernel em tempo de execução O número 2 na segunda coluna de informações demonstra que há dois hardlinks para o inode correspondente ao arquivo texto_simples. Hardlinks só podem ser criados dentro de um mesmo sistema de arquivos. Não é possível criar hardlinks para diretórios. Os arquivos especiais . e .. são hardlinks para diretório criados exclusivamente pelo próprio sistema. Tabela 9: Diretórios que podem ser pontos de montagem para outras partições e dispositivos Softlinks (links simbólicos) Links simbólicos apontam para um caminho ou, mais especificamente, para um hardlink. Links simbólicos podem apontar para qualquer alvo, inclusive em sistemas de arquivos diferentes. Para criar um link simbólico, usa-se ln com a opção -s. $ ln -s texto_simples link_texto_simples Detalhes do link: $ ls -l mais_texto_simples lrwxrwxrwx 1 luciano users 13 2006-03-24 ➥05:11 mais_texto_simples -> texto_simples Um link é indicado pela letra l no início das permissões, que nesse caso são sempre rwxrwxrwx. O tamanho do arquivo de link é exatamente a quantidade de bytes (caracteres) do caminho alvo. A seta ao lado do nome do link simbólico indica o caminho até o alvo. Um link simbólico para um caminho relativo será quebrado se o alvo ou o próprio link for movido. Um link simbólico para um caminho absoluto só será quebrado se o alvo for movido ou apagado. Para atualizar a informação de alvo de um link simbólico existente, recria-se o link com a opção -f. Funções comuns para links simbólicos são indicar caminhos longos freqüentemente usados, criar nomes mais simples para executáveis e nomes adicionais para bibliotecas de sistema. 60 Tabela 8: Diretórios que residem obrigatoriamente na partição raiz Diretórios Conteúdo /boot Kernel e mapas do sistema e os carregadores de boot de segundo estágio /home Os diretórios dos usuários /root Diretório do superusuário /tmp Arquivos temporários /usr Programas, bibliotecas e documentos disponíveis no sistema /usr/local e /opt Programas adicionais. Também podem conter as bibliotecas necessárias para os programas adicionais /var/www e /var/ftp Páginas HTML e diretórios para FTP anônimo /var Dados de programas como configurações variantes e logs. Contém diretórios compartilhados (ex: /var/ spool/mail) e não compartilhados (ex: /var/log) Objetivo 1.104.8: Encontrar arquivos de sistema e conhecer sua localização correta geralmente feito por um agendamento cron diário, mas que pode ser executado Hierarquia padrão de sistemas de arquivos (FHS) O FHS (do inglês Filesystem Hierarchy Standard) é o padrão de diretórios base adotado pela maioria da distribuições Linux. Cada diretório serve a um propósito, sendo divididos entre os que devem existir na partição raiz (veja a tabela 8) e os que podem ser pontos de montagem para outras partições ou dispositivos (veja a tabela 9). manualmente. O arquivo de configuração do updatedb é o /etc/updatedb.conf. Nele constam informações como quais diretórios e sistemas de arquivos ignorar na atualização do banco de dados. which: Usado para retornar o caminho completo para o programa fornecido. Realiza a busca apenas nos diretórios definidos na variável de ambiente PATH. whereis: Retorna os caminhos para o arquivo executável, código-fonte e página manual referente ao comando solicitado, se houver. Encontrando arquivos Além do find, é possível utilizar o locate para encontrar arquivos. Todo caminho de arquivo ou diretório contendo a expressão fornecida como argumento será mostrado. A busca é significativamente mais rápida em relação ao find pois o locate realiza a busca em seu banco de dados – /var/lib/slocate/slocate.db – e não diretamente no disco. Esse banco de dados precisa ser regularmente atualizado através do comando updatedb, o que é Consideração sobre os tópicos Os tópicos 103 e 104 são alguns dos mais extensos. Justamente por isso, não espere perguntas muito detalhadas sobre os assuntos abordados. Porém, os temas atravessam outros tópicos, e na prova haverá várias perguntas a respeito. Tenha certeza de conhecer o propósito de cada comando e suas principais opções. Além de perguntas práticas, serão feitas algumas perguntas conceituais, principalmente sobre sistemas de arquivos. ■ http://www.linuxmagazine.com.br