--- title: Aos iniciantes em FreeBSD e UNIX authors: - author: Annelise Anderson email: andrsn@andrsn.stanford.edu releaseinfo: "$FreeBSD$" trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"] --- = Aos iniciantes em FreeBSD e UNIX :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Índice :part-signifier: Parte :chapter-signifier: Capítulo :appendix-caption: Apêndice :table-caption: Tabela :figure-caption: Figura :example-caption: Exemplo [.abstract-title] Resumo Parabéns por instalar o FreeBSD! Esta introdução é para iniciantes em FreeBSD _e_ UNIX(R)-então vamos começar do básico. ''' toc::[] [[in-and-out]] == Logando e Deslogando Entre com o usuário que você criou na instalação (quando você visualizar o prompt `login:`) ou como `root`. (Sua instalação do FreeBSD já terá uma conta para o `root`; esse usuário pode ir a qualquer lugar e fazer qualquer coisa, incluindo deletar arquivos essenciais do sistema, então tenha cuidado!) Os símbolos `%` e `#` no prompt (o seu pode ser diferente) indicam o tipo do usuário logado, o símbolo `%` indica um usuário comum e `#` indica que o usuário é `root`. Para se sair (e obter um novo `login:`), digite [source,bash] .... # exit .... quantas vezes forem necessárias. Pressione kbd:[enter] após digitar os comandos, e lembre-se que o UNIX(R) diferencia letras maiúsculas de minúsculas, então, digite `exit`, e não `EXIT`. Para desligar o computador, digite [source,bash] .... # /sbin/shutdown -h now .... Ou para reiniciar, digite [source,bash] .... # /sbin/shutdown -r now .... ou [source,bash] .... # /sbin/reboot .... Você também pode reiniciar com kbd:[Ctrl+Alt+Delete]. Aguarde um instante para a conclusão do processo. Esta sequência de teclas é equivalente ao `/sbin/reboot` nas versões recentes do FreeBSD, e claro, este procedimento é muito, mas muito melhor do que simplesmente pressionar o botão reset do seu computador. Você não quer ter que reinstalar o sistema, não é mesmo? [[adding-a-user]] == Adicionando um usuário com privilégios de Root Se você não criou um usuário quando instalou o sistema operacional e está logado como `root`, você provavelmente deve criar um usuário com [source,bash] .... # adduser .... A primeira vez que você usar o comando `adduser`, ele poderá solicitar alguns padrões para salvar. Você pode querer tornar o man:csh[1] no shell padrão ao invés do man:sh[1], se for sugerido o `sh` como padrão. Caso contrário, basta pressionar enter para aceitar cada padrão. Esses padrões são salvos em [.filename]#/etc/adduser.conf#, um arquivo editável. Suponha que você crie um usuário `jack`, o qual possui _Jack Benimble_ como nome completo. Dê a `jack` uma senha se a segurança (até mesmo crianças ao redor que podem esbarrar no teclado) for um problema. Quando perguntarem se você deseja convidar `jack` para outros grupos, digite `wheel` [source,bash] .... O grupo de login é "jack". Convide o jack para outros grupos: wheel .... Isso tornará possível efetuar login como `jack` e usar o comando man:su[1] para tornar-se `root`. Dessa forma, você não será mais repreendido por fazer login como `root`. Você pode sair do `adduser` a qualquer momento digitando kbd:[Ctrl+C], e no final você terá a chance de aprovar seu novo usuário ou simplesmente digitar kbd:[n] para não criá-lo. Você pode querer criar um segundo novo usuário para que ao editar os arquivos de login do `jack`, você tenha um login de reserva caso algo dê errado. Depois de fazer isso, use `exit` para voltar a um prompt de login e efetuar login como `jack`. Em geral, é uma boa ideia fazer o máximo possível de trabalho como um usuário comum que não tenha o poder --e o risco-- do usuário `root`. Se você já criou um usuário e deseja que o usuário seja capaz de executar o comando `su` para logar-se como `root`, é possível efetuar login como `root` e editar o arquivo [.filename]#/etc/group#, adicionando `jack` à primeira linha (no grupo `wheel`). Mas primeiro você precisa praticar com o man:vi[1], o editor de texto - ou usar um editor de texto mais simples, como por exemplo, o man:ee[1], instalado em versões recentes do FreeBSD. Para excluir um usuário, use o comando `rmuser`. [[looking-around]] == Explorando Logado como um usuário comum, explore e experimente alguns comandos que acessarão as fontes de ajuda e informações dentro do FreeBSD. Aqui estão descritos alguns comandos e o que eles fazem: `id`:: Diz a você quem você é! `pwd`:: Mostra onde você está--quanto ao diretório atual de trabalho. `ls`:: Lista os arquivos presentes no diretório atual. `ls -F`:: Lista os arquivos do diretório atual com um `*` depois dos executáveis, um `/` depois dos diretórios, e um `@` depois de links simbólicos. `ls -l`:: Lista os arquivos em formatos estendidos--tamanho, data, permissões. `ls -a`:: Lista arquivos "dot" junto com os outros. Se você é `root`, os arquivos com nome iniciando por um "ponto" serão mostradas sem a opção `-a`. `cd`:: Altera o diretório atual de trabalho. `cd ..` te leva ao diretório antecessor do atual; note o espaço depois de `cd`. `cd /usr/local` te leva a esse mesmo diretório. `cd ~` te leva ao diretório home do usuário que você está logado--exemplo: [.filename]#/usr/home/jack#. Tente `cd /cdrom`, e depois `ls`, para saber se o CDROM está montado e funcionando. `less _filename_`:: Te permite ver um arquivo (chamado _filename_) sem alterá-lo. Tente `less /etc/fstab`. Digite `q` para sair. `cat _filename_`:: Exibe o conteúdo do arquivo _filename_ na tela. Se o conteúdo for longo a ponto de que você consiga ler apenas o final, pressione kbd:[ScrollLock] e use kbd:[up-arrow] para retroceder; você pode usar kbd:[ScrollLock] em páginas de manual também. Pressione kbd:[ScrollLock] novamente para parar de rolar. Você também pode querer experimentar `cat` em alguns arquivos com nomes iniciados por ponto em seu diretório home -- `cat .cshrc`, `cat .login`, `cat .profile`. Você notará os aliases em [.filename]#.cshrc# para alguns dos comandos `ls`. (Eles são muito convenientes). Você pode criar aliases ao editar [.filename]#.cshrc#. Você pode disponibilizar esses aliases para todos os usuários do sistema, colocando-os no arquivo de configuração global do `csh` localizado em [.filename]#/etc/csh.cshrc#. [[getting-help]] == Obtendo ajuda e informações Aqui estão algumas fontes úteis de ajuda. A palavra _Texto_ deve ser substituída por algo de sua escolha--geralmente um comando ou nome de arquivo. `apropos _texto_`:: Tudo que contém a palavra _texto_ no `whatis database`. `man _texto_`:: Exibe a página de manual referente ao _texto_. A principal fonte de documentação para os sistemas UNIX(R). O comando `man ls` lhe dirá todas as maneiras de usar o comando `ls`. Pressione kbd:[Enter] para percorrer o texo, kbd:[Ctrl+B] para voltar a página anterior, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair. `which _texto_`:: Te informa em qual local no path do usuário o comando _texto_ é encontrado. `locate _texto_`:: Todos os paths nos quais a string _texto_ é encontrada. `whatis _texto_`:: Te informa o que o comando _texto_ faz e sua página de manual. Digitando `whatis *` a saída do comando te informará sobre todos os binários no diretório atual. `whereis _texto_`:: Encontra o arquivo _texto_, te informando seu path completo. Você pode experimentar usar `whatis` em alguns comandos utéis e comuns como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, e `script`. `more` te permite ler uma página por vez como no DOS, exemplo: `ls -l | more` ou `more _filename_`. O símbolo * funciona como um caractere curinga--exemplo: `ls w*` mostrará os arquivos que começam com `w`. Alguns deles não estão funcionado muito bem? Ambos man:locate[1] e man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. Se a sua máquina não for ficar ligada nos fins de semana (e rodando FreeBSD), você pode executar os comandos a seguir para que ela execute manutenções diárias, semanais, mensais ou apenas de vez em quando. Execute-os como `root` e dê a cada comando o tempo necessário para ser finalizado antes de executar o próximo. [source,bash] .... # periodic daily output omitted # periodic weekly output omitted # periodic monthly output omitted .... Se você se cansar de esperar, pressione kbd:[Alt+F2] para obter outro _console virtual_, e efetue seu login novamente. Afinal, é um sistema multi-usuário e multitarefa. No entanto, esses comandos provavelmente irão piscar mensagens na tela enquanto eles estiverem em execução; você pode digitar `clear` no prompt para limpar a tela. Uma vez executados, você pode querer olhar o conteúdo do [.filename]#/var/mail/root# e do [.filename]#/var/log/messages#. A execução de tais comandos faz parte da administração do sistema--e como usuário único de um sistema UNIX(R), você é seu próprio administrador de rede. Praticamente tudo o que você precisa para ser `root` é administrar o sistema. Tais responsabilidades não são abordadas nem mesmo naqueles livros gigantescos de UNIX(R), os quais parecem dedicar muito espaço para menus e gerenciadores de janelas. Você pode querer obter um dos dois principais livros sobre administração de sistemas, pode ser o Evi Nemeth et.al.'s UNIX System Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)--a segunda edição com a capa vermelha; ou o livro Æleen Frisch's Essential System Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Eu usei Nemeth. [[editing-text]] == Editando textos Para configurar o seu sistema, você precisará editar arquivos de texto. A maioria deles estará no diretório [.filename]#/etc#; e você precisará utilizar o comando `su` para acessar o usuário `root` do sistema e assim poder alterá-los. Você pode utilizar um editor de texto simples, como o `ee`, mas a longo prazo, é recomendado aprender a utilizar o editor de texto `vi`. Existe um excelente tutorial do editor de texto vi disponível em [.filename]#/usr/src/contrib/nvi/docs/tutorial#, se você tiver o código fonte do sistema instalado. Antes de editar um arquivo, é recomendado criar um backup do mesmo. Suponha que você queira editar o [.filename]#/etc/rc.conf#. Você poderia usar apenas `cd /etc` para acessar o diretório [.filename]#/etc# e usar o seguinte comando: [source,bash] .... # cp rc.conf rc.conf.orig .... Isso iria copiar [.filename]#rc.conf# para [.filename]#rc.conf.orig#, e após isso você poderia copiar [.filename]#rc.conf.orig# para [.filename]#rc.conf# para recuperar o original. Mas melhor ainda seria mover (renomear) e depois copiar de volta: [source,bash] .... # mv rc.conf rc.conf.orig # cp rc.conf.orig rc.conf .... porque o comando `mv` preserva a data original e o proprietário do arquivo. Agora você pode editar o [.filename]#rc.conf#. Se você quiser o original de volta, você deve então executar `mv rc.conf rc.conf.myedit` (considerando que você quer preservar sua versão editada) e então [source,bash] .... # mv rc.conf.orig rc.conf .... para colocar as coisas de volta da maneira que estavam. Para editar um arquivo, digite [source,bash] .... # vi filename .... Movimente-se através do texto com as teclas direcionais. kbd:[Esc] (a tecla de escape) coloca o editor `vi` em modo de comando. Aqui estão alguns comandos: `x`:: deleta a letra localizada onde o cursor está `dd`:: Apaga a linha inteira (mesmo se ela não estiver por inteiro aparecendo na tela) `i`:: Insere um texto na posição do cursor `a`:: Insere um texto após a posição do cursor Uma vez que você digitou `i` ou `a`, você pode entrar com o texto. Se você pressionar `Esc` você colocará novamente o editor em modo de comando, e lá será onde você irá digitar `:w`:: para escrever suas alterações no disco e continuar editando `:wq`:: para gravar e sair `:q!`:: para sair do arquivo sem salvar as alterações `/_texto_`:: para mover o cursor para a primeira ocorrência da palavra _texto_; `/` kbd:[Enter] (a tecla Enter) para encontrar a próxima ocorrência da palavra _texto_. `G`:: para ir para o final do arquivo `nG`:: para ir para a linha _n_ dentro do arquivo em edição, onde _n_ é um número kbd:[Ctrl+L]:: para recarregar a tela kbd:[Ctrl+b] and kbd:[Ctrl+f]:: retrocede e avança uma tela, como fazem com `more` e `view`. Pratique com o `vi` em seu diretório home criando um novo arquivo com `vi _filename_` e adicionando e excluindo texto, salvando o arquivo, e o chamando novamente. O `vi` oferece algumas surpresas porque ele realmente é muito complexo e, às vezes, você irá executar um comando que fará algo que você não espera. (Algumas pessoas realmente gostam do `vi`-- é mais poderoso que o DOS EDIT -- saiba mais sobre o comando `:r`). Use kbd:[Esc] uma ou mais vezes para ter certeza de que você está no modo de comando e prossiga dali quando ele lhe der problema, salve frequentemente com `:w`, e use `:q!` para sair e começar novamente (do seu último `:w`) quando você precisar. Agora você pode usar o comando `cd` para ir para o [.filename]#/etc#, use o comando `su` para logar como `root`, use o `vi` para editar o arquivo [.filename]#/etc/group#, e adicione um usuário ao grupo `wheel`, assim, o usuário terá privilégios de root. Basta adicionar uma vírgula e o nome do login do usuário ao final da primeira linha do arquivo, pressione kbd:[Esc], e use `:wq` para salvar as alterações no disco e sair. Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, colocou?) [[other-useful-commands]] == Outros comandos úteis `df`:: mostra o espaço dos sistemas de arquivos que estão montados. `ps aux`:: mostra os processos em execução. O `ps ax` é uma forma mais básica do comando. `rm _filename_`:: deleta o arquivo _filename_. `rm -R _dir_`:: remove o diretório _dir_ e todos os subdiretórios -- use com cuidado! `ls -R`:: lista os arquivos no diretório atual e em todos os subdiretórios; Eu usei uma variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos no diretório [.filename]#/# e [.filename]#/usr# (separadamente) antes de encontrar melhores maneiras de encontrar arquivos. `passwd`:: para mudar a senha do usuário (ou a senha do usuário `root`). `man hier`:: exibe as páginas do manual para o sistema de arquivos UNIX(R) e sua estrutura hierárquica. Use o comando `find` para localizar [.filename]#filename# no diretório [.filename]#/usr# e nos seus subdiretórios: [source,bash] .... % find /usr -name "filename" .... Você pode usar `*` como um caractere curinga em `"_filename_"` (que deve estar entre aspas). Se você utilizar o comando `find` para procurar no [.filename]#/# em vez de [.filename]#/usr# ele procurará o(s) arquivo(s) em todos os sistemas de arquivos montados, incluindo o CDROM e a partição DOS. Um excelente livro que explica os comandos e demais utilitários do UNIX(R) é o Abrahams & Larson, Unix for the Impatient (Addison-Wesley, 1996, segunda edição). Há também toneladas de informações na internet sobre o UNIX(R). [[next-steps]] == Próximos Passos Agora você deve ter as ferramentas necessárias para explorar e editar arquivos, para que você possa colocar tudo em funcionamento. Há uma grande quantidade de informações no Handbook do FreeBSD (que provavelmente está no seu disco rígido) e no https://www.FreeBSD.org/[site oficial do FreeBSD]. Uma grande variedade de pacotes e ports estão no CD-ROM e no site. O Handbook traz mais informações sobre como usá-los (obtenha o pacote, se existir, com o comando `pkg_add /cdrom/packages/All/_packagename_`, onde _packagename_ é o nome do pacote). O CDROM possui listas de pacotes e ports com descrições breves em [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#cdrom/ports/index#, e descrições completas em [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de programas e nomes de programas, respectivamente. Se você achar o handbook muito sofisticado (com isso do `lndir` e tudo mais) ao instalar os ports do CDROM, veja a seguir o que geralmente funciona: Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é um bom lugar para softwares que você adicione no sistema e que devem estar disponíveis para todos os usuários) com: [source,bash] .... # cp -R /cdrom/ports/comm/kermit /usr/local .... Isto deve resultar em um subdiretório [.filename]#/usr/local/kermit# que possui todos os arquivos que o subdiretório `kermit` no CDROM possui. Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda não existir usando o comando `mkdir`. Agora verifique em [.filename]#/cdrom/ports/distfiles# um arquivo com um nome que indique o port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/distfiles#; você pode pular esse passo em versões recentes, pois o FreeBSD fará isso para você. No caso do `kermit`, não existe um distfile. Em seguida, use o comando `cd` para ir para o subdiretório [.filename]#/usr/local/kermit# que contém o arquivo [.filename]#Makefile#. Digite [source,bash] .... # make all install .... Durante este processo, o port irá usar o FTP para obter os arquivos compactados de que precisa e que ele não encontrou no CDROM ou no [.filename]#/usr/ports/distfiles#. Se a sua rede ainda não está configurada e não havia nenhum arquivo para o port em [.filename]#/cdrom/ports/distfiles#, você terá que pegar o distfile usando outra máquina e copiá-lo manualmente para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com `cat` ou `more` ou `view`) para descobrir onde ir (o principal site de distribuição) para obter o arquivo e o nome dele. (Use transferências binárias de arquivos!) Em seguida volte para o diretório [.filename]#/usr/local/kermit#, encontre o diretório com [.filename]#Makefile#, e digite `make all install`. [[your-working-environment]] == Seu ambiente de trabalho Seu shell é a parte mais importante do seu ambiente de trabalho. O shell é o que interpreta os comandos que você digita na linha de comando e, assim, se comunica com o restante do sistema operacional. Você também pode escrever scripts de shell, que consiste em uma série de comandos para serem executados sem intervenção. Dois shells vem instalados com o FreeBSD: `csh` e `sh`. `csh` é bom para trabalhos na linha de comando, mas scripts devem ser escritos com o `sh` (ou `bash`). Você pode descobrir qual shell você utiliza executando o comando `echo $SHELL`. O `csh` é bom, mas o `tcsh` faz tudo que o `csh` faz e ainda mais. Ele permite recuperar comandos com as teclas de seta e editá-los. Ele permite usar a tecla tab para completar o nome dos arquivos (o `csh` usa a tecla kbd:[Esc]), e permite alternar o diretório em que você estava por último com o comando `cd -`. E também é muito mais fácil alterar o seu prompt com o `tcsh`. Ele tornará sua vida muito mais fácil. Aqui estão os dois passos para instalar um novo shell: [.procedure] . Instale o shell como um port ou um pacote, como faria com qualquer outro port ou pacote. . Use o comando `chsh` para alterar permanentemente seu shell para `tcsh`, ou digite `tcsh` no prompt para alterar seu shell sem precisar efetuar login novamente. [NOTE] ==== Pode ser perigoso alterar o shell do usuário `root` para outro diferente do `sh` ou `csh` nas primeiras versões do FreeBSD e também em muitas outras versões do UNIX(R); talvez você não tenha um shell funcional quando o sistema entrar em modo de single user. A solução é usar `su -m` para se tornar `root`, o que lhe dará o `tcsh` como `root`, por que o shell faz parte do ambiente. Você pode tornar isso permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como um alias, para isso, execute: [.programlisting] .... alias su su -m .... ==== Quando o `tcsh` é iniciado, ele lê os arquivos [.filename]#/etc/csh.cshrc# e [.filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá o arquivo [.filename]#.login# no seu diretório home e também o arquivo [.filename]#.cshrc#, a menos que você forneça um arquivo [.filename]#.tcshrc#. Você pode fazer isso simplesmente copiando o [.filename]#.cshrc# para [.filename]#.tcshrc#. Agora que você instalou o `tcsh`, você pode ajustar o seu prompt. Você pode encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha para colocar em seu [.filename]#.tcshrc# que informará quantos comandos você digitou, qual o horário atual, e em qual diretório você está. Ele também produz um `>` se você for um usuário comum e # se você for `root`,mas o tcsh fará isso em qualquer caso: set prompt = "%h %t %~ %# " Isso deve ir no mesmo lugar em que está a linha de prompt atual caso exista uma, ou logo abaixo de "if($?prompt) then" caso ela não exista. Comente a linha antiga; você sempre pode voltar a ela se preferir. Não esqueça os espaços e as aspas. Você pode forçar a releitura do [.filename]#.tcshrc# digitando `source .tcshrc`. Você pode obter uma listagem de outras variáveis de ambiente que estão configuradas digitando `env` no prompt. O resultado mostrará seu editor padrão, pager e tipo de terminal, entre possivelmente muitas outras variáveis. Um comando útil se você efetuar o seu login a partir de um local remoto e não puder executar um programa porque o terminal não é capaz de fazê-lo é o `setenv TERM vt100`. [[other]] == Outros Como `root`, você pode desmontar o CDROM com o comando `/sbin/umount /cdrom`, retire-o da unidade, insira outro e monte-o com `/sbin/mount_cd9660 /dev/cd0a /cdrom` considerando que `cd0a` é o nome do dispositivo da sua unidade de CDROM. As versões mais recentes do FreeBSD permitem montar o CDROM apenas com o comando `/sbin/mount /cdrom`. Usar o live filesystem -- o segundo dos discos de CDROM do FreeBSD -- é útil se você tiver espaço limitado. O que está no live filesystem varia de release para release. Você pode tentar jogar jogos a partir do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X Window System, para informar ao(s) programa(s) onde encontrar os arquivos necessários, porque eles estão no sistema de arquivos do [.filename]#/cdrom# em vez do [.filename]#/usr# e seus subdiretórios, que é onde eles devem estar. Leia o manual deste utilitário executando `man lndir`. [[comments-welcome]] == Comentários são bem-vindos Caso você venha a usar este guia, eu estaria interessada em saber onde ele pode não ter ficado claro e o que foi deixado de fora que você acha que deveria ser incluído, e se ele foi útil para você. Meus agradecimentos a Eugene W. Stark, professor de ciência da computação na SUNY-Stony Brook, e também ao John Fieber pelos comentários úteis. Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford.edu]