Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Linux Introdutório, Notas de estudo de Engenharia Mecânica

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 07/11/2008

joao-paulo-de-paula-almeida-3
joao-paulo-de-paula-almeida-3 🇧🇷

5

(2)

6 documentos

Pré-visualização parcial do texto

Baixe Linux Introdutório e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity! LINUX - Curso Básico Linux Introdução Matt Welsh Phil Hughes David Bandel Boris Beletsky Sean Dreilinger Robert Kiesling Henry Pierce Gleydson Mazioli da Silva Tradução Oficial Alfamídia Fernando Miguel de Alava Soto Rodrigo de Losina Silva Alexandre Folle de Menezes Versão 1.3, julho/2002. Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Os Capítulos 3, 5 e 8 são adaptações do texto: Guia Foca GNU/Linux Copyleft O 1999-2002 - Gleydson Mazioli da Silva. Fonte: nttp://focalinux .cipsga.org.br O restante do texto é uma adaptação do original: Linux Installation and Getting Started Copyright 01992-1996 Matt Welsh Copyright 01998 Specialized Systems Consultants, Inc (SSC) P.O. Box 55549 Seattle, WA 98155-0549 USA Phone: +1-206-782-7733 Fax: +1-206-782-7191 E-mail: 1ligsêssc. com URL: http: //www.ssc.com/ Tradução autorizada pelo autor. As marcas registradas utilizadas no decorrer deste documento são usadas unicamente para fins didáticos, sendo estas propriedade de suas respectivas companhias. A Alfamídia não assume qualquer responsabilidade por erros ou omissões, ou por danos resultantes do uso das informações contidas neste livro. Tradução para português - Brasil, 2002: Alfamídia Ltda Rua Félix da Cunha, 818 Porto Alegre - RS - Brasil Fone/Fax: +55 (51) 3346-7300 E-mail: alfamidiatalfamidia.com.br URL: http: //www.alfamidia.com.br Tradução para português: Fernando Miguel de Alava Soto (soto(D alfamidia.com.br) Rodrigo de Losina Silva (rodrigoDalfamidia.com.br) Alexandre Folle de Menezes (menezes alfamidia.com.br) Permissão para copiar, distribuir, alterar, conforme licença GNU, desde que sejam mantidos os créditos acima, incluindo nome e dados da empresa e nome dos tradutores. NOTA DO TRADUTOR: FORAM TRADUZIDOS OS CAPÍTULOS 1 a 3 do Guia "Linux Installation and Getting Started", de Matt Welsh. O sinal (.....) marca onde partes do texto foram suprimidas na tradução. Basicamente, foram suprimidos textos considerados pelo tradutor como partes que necessitam uma atualização mais profunda ou partes que fazem referência aos demais capítulos ou partes não traduzidas. Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 2.2.4 — SHELLS E COMANDOS ...........cccrireeeeaeaeemeeeeeeeeeeeeeerererererererereeeerererererererararararas DD 2.2.5 LOGOUT........... 2.2.6 MUDANDO SUA SENHA 2.2.7 ARQUIVOS E DIRETÓRIOS..............cciieerrrereeeeeereererereereerereeereeeraree re eraraeeenraras 2.2.8 — A ÁRVORE DE DIRETÓRIOS................. 2.2.9 O DIRETÓRIO DE TRABALHO CORRENTE 2.2.10 -REFERINDO-SE A DIRETÓRIOS HOME... maeeereerememeaeereereereremrreriros DB 2.3 PRIMEIROS PASSOS NO LINUX 2.3.1 PASSEANDO POR AÍ........... 2.3.2 VISUALIZANDO O CONTEÚDO DE DIRETÓRIOS ............ cicero DÁ 2.3.3 CRIANDO NOVOS DIRETÓRIOS 2.3.4 COPIANDO ARQUIVOS.......... 2.3.5 | MOVENDO ARQUIVOS................cc iii iriceereeeerererer area aeererareraeeeerarereracaraenes 2.3.6 EXCLUINDO ARQUIVOS E DIRETÓRIOS 2.3.7 VISUALIZANDO ARQUIVOS............. 2.3.8 — BUSCANDO AJUDA ONLINE..........cceseeeeeeeeeeeeeeeeeeererererere rece ceeeeeererererererarasaraeas 2.4 COMANDOS BÁSICOS DO UNIX.............eeseesenenseneas 3 COMANDOS PARA MANIPULAÇÃO DE DIRETÓRIOS ............ cesso 40 31 O COMANDO IS .......ccrernesecreresaeae secs esnene cosa en aeae anta ea ae as ata ea aaa atacadas ata emas ata an aa 40 3.2 O COMANDO cp... 3.3 O COMANDO PWD 3.4 O COMANDO MEDIR 3.5 O COMANDO RMDIR ......ceceeeneneneneesereserererececececa caca crener crer eram an an asas asas nene nene neneneneso 42 4 EXPLORANDO O SISTEMA DE ARQUIVOS 5 COMANDOS PARA MANIPULAÇÃO DE ARQUIVOS ...................e eee 47 51 O COMANDO RM......cccrenesecreresaeae soco ssnene esa en nene cata sa ae as ata ea aaa ata cada as a ta en aa ata ana 4 5.2 O COMANDO ce... 5.3 O COMANDO wv.. 5.4 O COMANDO 1N......cccrernesecresesaeae secs esnene cosa en nene anta ea ae as ata ea aaa ata emana ata emas ata an aa 49 5.5 O COMANDO CAT ......cccsresecrereaeaesrcsesnene cosa en nene casa en nene casa cade as atacada as ata em ans ata emas 50 5.6 O COMANDO Tac... 5.7 O COMANDO voRE .. 5.8 O COMANDO LESS .. 5.9 O COMANDO HEAD ......csreseereresaeaesrcsennene cosa en nene anta ea ae ae ataca aaa atacada as ata emas ata an aa 51 5.10 O COMANDO TAIL.. 5.11 O COMANDO ToucH 5.12 O COMANDO vc..... 5.13 O COMANDO SORT .......ccresnssesreresasaesreresasae secs ssnsne saca as asa aca sa as ae aca asas a acessa aan caos 53 5.14 O COMANDO DIFF .......ccrcrcrererenererarararasarasaenenenenenesese receoso caca cacacncr crer enem amam amananas o) Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 6 PERMISSÕES DE ARQUIVOS.................ce ecc emsseemmsseemmsseemmserenssermmseerassseranos 57 61 CONCEITOS DE PERMISSÕES DE ARQUIVOS... 57 6.2 INTERPRETANDO PERMISSÕES DE ARQUIVOS 57 6.3 | DEPENDÊNCIAS DE PERMISSÕES .......cceceensasaseneasesenensasanencasesenensnsamencasasesensnsanas 58 6.4 MODIFICANDO PERMISSÕES .....scssesserseanesascesemns asse seansassemscn sean seas ces ansrascemsanatas 59 7 GERENCIANDO LINKS DE ARQUIVOS .................cecreresnesessesrsaseseesesasaessenes 60 7.1 LINKS RÍGIDOS. 7.2 LINKS SIMBÓLICOS 8 COMANDOS DE BUSCA ...............eceeereeeenenenenenesererererececececesacasnenenen enem an amananasas 62 81 O COMANDO crEP .. 8.2 O COMANDO FIND. 8.3. O COMANDO wEICH 8.4 O COMANDO WHEREIS ........0csessecresesneae cosa esa ene anca eu aens cosa en ae as anta en aaa asa ta emas asa en aaa 65 9 USANDO O EDITOR VI 9.1 CONCEITOS........... 9.2 INICIANDO O VI........secscresnssecresesasaesrcresasae secs ssasne saca seas ae saca sa asa aca asas a acessa mesa caos 67 9.3 INSERINDO TEXTO 9.4 — APAGANDO TEXTO 9.5 MODIFICANDO TEXTO .........crcresnesesseseasaessesesasae crer ssasme secs seas aee ca sons ae essas asma ssenas 70 9.6 COMANDOS PARA MOVIMENTAR O CURSOR. 9.7 SALVANDO ARQUIVOS E SAINDO DO VI...... 9.8 EDITANDO OUTRO ARQUIVO ..........crcresnesesreresasaesresesasae secs senao secs ssasae secs ssasaessenas 72 9.9 INCLUINDO OUTROS ARQUIVOS. 9.10 RODANDO COMANDOS DO SHELL .. 9.11 AJUDANO VI......ccceererererererereneneramarasasasasasaenenenenesesese see se seca ce caca cn creu enem amam amamananas 74 10 ACESSANDO ARQUIVOS MS-DOS/WINDOWS .. 11 OSHELL................sessseserrereenesesoenasasaesrescsnese sa en ss aasea casa as aaa case as aaa cases asa emana ada 76 11.1 TIPOS DESHELL....... 11.2 CARACTERES CORING. 11.3 REDIRECIONAMENTOS E PIPE! 11.3.1 ENTRADA PADRÃO E SAÍDA PADRÃO . 11.3.2. REDIRECIONANDO ENTRADA E SAÍDA 11.3.3 REDIRECIONAMENTO DE SAÍDA NÃO-DESTRUTIVO............ emma BT 11.3.4 USANDO PIPES...........cis 11.4 PERSONALIZANDO SEU AMBIENTE 11.4.1 VARIÁVEIS DO SHELL E O AMBIENTE . 11.4.1.1 A variável de ambiente PATH... 11.4.2 SCRIPTS DE INICIALIZAÇÃO DO SHELL Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 12 CONTROLE DE TAREFAS...............cccrerererenerereresesasacasnenenenenenesesesesecececesesasasnos 88 12.1 TAREFASE PROCESSOS.............. 88 12.2 FOREGROUND AND BACKGROUND. 89 12.3 COLOCANDO TAREFAS EM SEGUNDO PLANO E ABORTANDO TAREFAS......ececeeee 89 12.4 PARANDO E REINICIANDO TAREFAS ....ce0esnsaeesesesasaesoesesasanso cs ssnsaessesssasmesscssmasaesa 91 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico O desenvolvimento inicial do Linux - na época feito todo em assembly - lidou principalmente com os recursos multitarefa da interface de modo protegido do 80386. Linus escreveu: "Depois desta etapa ficou bem mais simples: um código complicado, ainda, mas a depuração era bem mais fácil. Eu comecei a utilizar C neste ponto, e isto certamente acelerou o desenvolvimento. Foi também então que comecei a pensar seriamente nas minhas idéias megalomaníacas de criar um Minix melhor que o Minix. Eu tinha a esperança de que conseguiria recompilar o gec em cima do Linux algum dia.” "Foram pouco mais de dois meses para eu ter um driver de disco rígido (cheio de bugs, mas que pelo menos na minha máquina funcionava) e um pequeno sistema de arquivos. Foi nesta época que liberei a versão 0.01 (perto do final de agosto de 1991): não era algo bonito, não tinha driver para disquete e não podia fazer muita coisa. Duvido que alguém tivesse chegado a compilar esta versão. Mas então eu já estava envolvido, e não iria parar enquanto não superasse o Minix”. Nenhum anúncio jamais foi feito do lançamento da versão 0.01. Os códigos fonte não eram sequer executáveis. Continham apenas os rudimentos do kernel e assumiam que você tinha acesso a uma máquina Minix para compilar e experimentar com eles. Em outubro de 1991 Linus anunciou a primeira versão "oficial" do Linux, que era a versão 0.02. Nesta fase, Linus conseguia rodar o bash (o Bourne Again Shell do GNU) e o GCC (o compilador C do GNU), mas bem pouco além disto. Novamente, tratava-se de um sistema para hackers. O foco principal era o desenvolvimento do Kernel - questões como suporte a usuários, documentação e distribuição nem haviam sido levantadas. Hoje, a comunidade Linux ainda tende a tratar estas questões como secundárias perante a "verdadeira programação": o desenvolvimento do kernel. Como Linus escreveu no comp.os .minix: "Você ainda sente falta dos saudosos dias do Minix-1.1, quando os homens eram homens e escreviam seus próprios drivers de dispositivo? Está sem um projeto legal e morrendo de vontade de cravar seus dentes em um sistema operacional que você pode modificar como quiser? Está ficando frustrado quando tudo funciona no Minix? Com saudades de perder noites tentando fazer um programa difícil funcionar? Então esta mensagem é para você." "Como havia mencionado um mês atrás, eu estou trabalhando numa versão gratuita de um sistema parecido com o Minix para computadores 386. Ele finalmente atingiu o estágio em que talvez seja até usável (embora talvez não, dependendo do que você quer), e eu estou disposto a disponibilizar os fontes para uma distribuição mais abrangente. É apenas a versão 0.02, mas consegui com sucesso executar nele o bash, gcc, gnu-make, gnu-sed, compress, etc." 10 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Após a versão 0.03, Linus subiu o número de versão para 0.10, já que mais pessoas estavam trabalhando no projeto. Depois de várias outras revisões, Linus subiu o número de versão para 0.95 em março de 1992, refletindo suas expectativas que o sistema estava quase pronto para um lançamento oficial. (De modo geral, um software não recebe o número de versão 1.0 até que esteja teoricamente completo ou livre de bugs). Quase um ano e meio depois, no final de dezembro de 1993, o kernel do Linux ainda estava na versão 0.99.pl14, lentamente se aproximando de 1.0. Hoje, o Linux já está na versão 2.4.18, e a versão 2.5 já está em desenvolvimento. A maioria dos principais pacotes gratuitos UNIX já foi portada para o Linux, e softwares comerciais também estão disponíveis. Mais hardware é suportado do que na versão original do kernel. Quem iria imaginar que este "pequeno" clone do UNIX iria crescer até atingir a posição que atingiu no universo de computadores pessoais. 1.3 Recursos do Sistema O Linux suporta os recursos normalmente encontrados em outras implementações do UNIX, e muitos outros que não são encontrados em nenhum outro sistema operacional. Nesta seção iremos apresentar rapidamente os recursos do kernel do Linux. O Linux é um sistema operacional multiusuário e multitarefa completo, como o são todas as outras versões do UNIX. Isto significa que muitos usuários diferentes podem entrar e executar programas na mesma máquina simultaneamente. O sistema Linux é quase totalmente compatível com diversos padrões UNIX no código fonte, incluindo IEEE POSIX 1, UNIX System V e Berkeley System Distribution UNIX (BSD UNIX). O Linux foi desenvolvido tendo em mente a portabilidade do código fonte, e é comum encontrar recursos que são compartilhados por mais de uma plataforma. Boa parte do software livre UNIX disponível na Internet compila diretamente em Linux. Adicionalmente, todo o código fonte do Linux, incluindo Kernel, drivers de dispositivo, bibliotecas, programas para usuários e ferramentas de desenvolvimento, pode ser livremente distribuído. Outros recursos internos específicos do Linux incluem controle de tarefas POSIX (usado em shells como csh e bash), pseudo-terminais (dispositivos tty), e suporte para dispositivos lidos dinamicamente para controle de teclados nacionais ou customizados. Linux também suporta consoles virtuais que permitem que você troque entre sessões de usuário no mesmo console de sistema. O Kernel também pode emular instruções de ponto flutuante do 387, de forma que máquinas sem um co-processador aritmético podem rodar programas que exijam este tipo de instruções. O Linux também suporta diversos sistemas de arquivo para armazenar dados, como o ext2, que foi desenvolvido especificamente para o Linux. Os sistemas de arquivos Xenix e UNIX System V também são suportados, bem como o FAT do MS-DOS e o VFAT do Windows 95. Também são suportados os sistemas de arquivos |IS09660, para CD-ROM, e UDF, para DVD. Acreinfo - Consultoria e Serviços de Informática 11 LINUX - Curso Básico O Linux fornece uma implementação completa do software de TCP/IP, incluindo drivers de dispositivo para várias placas Ethernet, protocolos SLIP e PPP, para conexão TCP/IP discada, PLIP e NFS. A gama completa de clientes e serviços TCP/IP também é suportada, o que inclui FTP, telnet, NNTP e SMTP. O kernel do Linux é desenvolvido para utilizar os recursos do modo protegido do Intel 80386 e seus sucessores. Qualquer pessoa familiarizada com o modo protegido do 80386 sabe que o chip foi desenvolvido para sistemas multitarefa, como o Linux. O kernel suporta executáveis lidos sob demanda. Apenas aqueles segmentos do programa que eventualmente estão em uso são lidos do disco para a memória. Além disto, se diversas instâncias de um programa estão rodando ao mesmo tempo, elas compartilham a mesma memória física, o que reduz o consumo total de memória. Visando aumentar a memória disponível, o Linux também implementa paginação de disco. Até um gigabyte de área de swap pode ser alocada no disco. Quando o sistema exige mais memória física, ele salva as páginas inativas em disco, permitindo que você rode aplicações maiores e suporte mais usuários. Entretanto, naturalmente há uma perda de velocidade, pois o disco é muito mais lento do que a memória RAM. O kernel do Linux também implementa um gerenciamento de memória unificado para programas de usuário e cache de disco. Toda a memória livre é utilizada para cache de disco, que é reduzido quando são executados programas grandes. Executáveis usam bibliotecas dinâmicas compartilhadas, de forma semelhante ao mecanismo de compartilhamento de bibliotecas do sistema operacional SunOS. Conseguentemente, arquivos executáveis ocupam menos espaço em disco, em particular aqueles que utilizam muitas funções de biblioteca. Existem também bibliotecas lincadas estaticamente, para depuração e criação de arquivos binários completos, para o caso de sistemas que não tenham as bibliotecas dinâmicas instaladas. Para facilitar a depuração, o kernel gera core dumps (imagens da memória) para análise em caso de falha do sistema, tornando possível identificar o que fez determinado programa derrubar o sistema. 1.4 Recursos de Software Praticamente todas as ferramentas que se espera encontrar em uma implementação padrão do UNIX já foram portadas para o Linux, incluindo os comandos básicos, como Is, awk, tr, sed, bc, e more. O ambiente de desenvolvimento de outros sistemas UNIX é duplicado no Linux. Todos os comandos e utilitários padrões estão incluídos. Muitos editores de texto estão disponíveis, como vi, ex, pico, jove e GNU Emacs. O editor de texto que você está acostumado a usar muito provavelmente já foi portado para o Linux. A escolha do editor de texto é uma questão interessante. Muitos 12 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico janelas. Este programa é responsável pelo posicionamento, movimentação e redimensionamento das janelas, controle dos ícones associados às janelas, entre outras tarefas semelhantes. O XFree86 inclui o twm, o gerenciador de janelas clássico do MIT, e gerenciadores de janela avançados, como o Open Look Virtual Window Manager (olvwm). Outro gerenciador de janelas popular é o fvwm, que mostra as janelas com uma aparência tridimensional. Muitas distribuições do Linux utilizam o fywm como gerenciador padrão de janelas. Uma versão do fvwm chamada fvwm95-2 imita o visual do ambiente de janelas Windows. A distribuição do XFree86 inclui bibliotecas de programação para programadores que desejam desenvolver aplicações para o X. A exigência mínima para utilizar o X é um 80386 com pelo menos 4 megabytes de RAM, embora 16 MB ou mais seja recomendável. 1.4.3 Introdução às Redes Você gostaria de se comunicar com o mundo? Linux suporta dois protocolos de rede UNIX: TCP/IP e UUCP. TCP/IP (Transmission Control Protocol/Internet Protocol) é o paradigma de conexão que permite que sistemas de todo o mundo se comuniquem em uma rede única, a Internet. Com Linux, TCP/IP e uma conexão com a Internet, você pode se comunicar com usuários e máquinas através de e-mail, news e FTP. A maioria das redes TCP/IP utiliza a Ethernet como meio físico de transporte. O Linux suporta várias placas Ethernet para computadores pessoais, incluindo adaptadores PCMCIA. Entretanto, como nem todos tem uma conexão Ethernet em casa, Linux também suporta os protocolos SLIP e PPP, que permitem o acesso a Internet via modem. Muitas empresas e universidades possuem servidores SLIP e PPP. Se seu sistema Linux tem uma conexão Ethernet com a Internet, você pode torná-lo também um servidor SLIP ou PPP. O NFS (Network File System) permite que seu sistema Linux compartilhe arquivos e diretórios com outras máquinas da rede. O FTP permite que você transfira arquivos de e para outras máquinas. O Sendmail envia e recebe e- mails através do protocolo SMTP. Telnet, rlogin e rsh permitem que você entre em outras máquinas presentes em uma rede e execute comandos nelas. O finger permite que você recupere informações sobre outros usuários da Internet. O Linux também suporta conexão com máquinas Windows através do Samba e com máquinas Macintosh com AppleTalk e LocalTalk. Suporte ao protocolo IPX da Novell também está incluído. A gama completa de leitores de e-mail e news também está disponível para o Linux, incluindo elm, pine, m, nn e tin. Qualquer que seja sua preferência, você pode configurar um sistema Linux para enviar e receber news e e-mail para qualquer lugar do mundo. O Linux fornece ainda uma interface padrão para a programação de sockets. Virtualmente qualquer programa que utiliza TCP/IP pode ser portado para o Linux. O servidor X do Linux também suporta TCP/IP, e aplicações rodando remotamente podem utilizar o monitor de seu computador. Acreinfo - Consultoria e Serviços de Informática 15 LINUX - Curso Básico UUCP (UNIT-to-UNIX Copy) é um mecanismo mais antigo de transferência de arquivos, e-mails e news entre máquinas UNIX. Historicamente, máquinas UUCP se conectam por linhas telefônicas, via modem, mas UUCP pode ser utilizado também para transferir dados em uma rede. 1.4.4 Telecomunicações e Softwares de BBS Se você tem um modem, você será capaz de se comunicar com outras máquinas via pacotes de telecomunicação disponíveis para o Linux. Um pacote popular de comunicação para o Linux é o seyon, que fornece uma interface customizável e ergonômica no X, e possui suporte para os protocolos de transferência de arquivos Kermit e ZModem. Outros programas de telecomunicação incluem o C-Kermit, pcomm e minicom. São programas similares aos encontrados em outros sistemas operacionais e relativamente fáceis de utilizar. Se você não tem acesso a um servidor SLIP ou PPP, pode utilizar o term para dividir sua linha serial. O programa term permite que você abra mais de uma sessão de usuário em uma conexão por modem. Permite ainda que você redirecione conexões de um cliente X para seu servidor X local por uma linha serial. Outro pacote de software, KA9Q, implementa uma interface SLIP similar. 1.4.5 World Wide Web É importante observar que o Linux inclui servidores web, bem como navegadores da web. O servidor mais conhecido é o Apache. Milhares de sistemas Linux rodam Apache na Internet hoje em dia. Distribuições do Linux incluem diferentes web browsers, e outros podem ser copiados da Internet. Browsers disponíveis incluem Lynx, Mosaic, Netscape, Arena e Amaya. O Linux também oferece suporte completo para Java e CGl, e o Perl é uma ferramenta padrão do ambiente de programação Linux. 1.4.6 Interface com o MS-DOS Existem diversas ferramentas que fazem interface com o MS-DOS. A mais conhecida é o Linux MS-DOS Emulator, que permite que se execute aplicativos MS-DOS diretamente do Linux. Ainda que ambos sejam sistemas operacionais completamente diferentes, o ambiente de modo protegido do 80386 possibilita que aplicações MS-DOS comportem-se como se estivessem executando diretamente. Diversas ferramentas executam no emulador MS-DOS. Naturalmente, aplicações MS-DOS que usam recursos bizarros e esotéricos do sistema podem nunca vir a ser suportadas, devido às limitações inerentes a qualquer emulador. Comandos e ferramentas que são padrão no MS-DOS, como pkzip.exe, 4dos, e outras, executam normalmente no emulador. 16 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico O emulador MS-DOS se destina a ser apenas uma solução para quem precisa utilizar algumas poucas aplicações MS-DOS, e utiliza Linux para todas as outras atividades. Não se destina a ser uma implementação completa do MS-DOS. Se o emulador não é suficiente para atender as suas necessidades, sempre é possível executar o MS-DOS e o Linux na mesma máquina. Utilizando o LILO, você pode especificar na inicialização do sistema qual o sistema operacional que vai ser executado. Outro emulador, o WINE, se destina a permitir o uso de aplicativos MS- Windows, emulando o Microsoft Windows no Sistema X-Windows. 1.4.7 Outras Ferramentas Um conjunto de outros programas e ferramentas existe para Linux. Bancos de dados relacionais, como Postgres, Ingres e Mbase, bem como bancos de dados comerciais, como Oracle, existem em plataforma Linux. Muitas outras aplicações já foram portadas para Linux. Se você não consegue encontrar o que procura, você pode você mesmo portar uma aplicação de outra plataforma para Linux. (o) 1.5 Questões de Copyright O Linux é protegido pelo que é conhecido como a GNU GPL (GNU General Public License). A GPL foi desenvolvida pela Free Software Foundation para o projeto GNU e especifica uma série de regras para a distribuição e modificação de software livre. Livre, neste sentido, refere-se a distribuição, não ao custo. Originalmente, Linus Torvalds disponibilizou o Linux através de uma licença mais restritiva que a GPL, que permitia que o software fosse livremente distribuído e modificado, mas que impedia que qualquer quantia em dinheiro fosse cobrada por sua distribuição e uso. A GPL, por outro lado, permite que pessoas vendam e tenham lucro com software livre, mas não permite que elas restrinjam de qualquer forma o direito de outros de distribuírem também o software como bem entenderem. Primeiro é preciso que se explique que o software livre protegido pela GPL não é de domínio público. Software de domínio público, por definição, não tem um copyright e pertence ao público. Software protegido pela GPL, por outro lado, é copyright do autor. O software é protegido pelas leis internacionais de copyright, e o autor está legalmente definido. A GPL protege softwares que podem ser livremente distribuídos, mas que não são de domínio público. Software GPL também não é shareware. Normalmente, sharewares pertencem a um autor que exige que os usuários lhe enviem dinheiro para utilizá-lo. Softwares GPL podem ser distribuídos e utilizados sem que nada seja cobrado por eles. A GPL também permite que qualquer um utilize, modifique e distribua suas próprias versões do software. Entretanto, todo e qualquer trabalho derivado de um software protegido pela GPL precisa, necessariamente, Acreinfo - Consultoria e Serviços de Informática 17 LINUX - Curso Básico software pode ir direto para a etapa final, na qual é considerado completo e utilizável. Tenha em mente que estas são convenções, não regras. Alguns programadores podem se sentir tão confiantes em seus softwares que optem por não lançar versões alfa ou beta. Sempre cabe ao desenvolvedor tomar este tipo de decisão. Você pode chegar a duvidar que tal sistema desestruturado de voluntários que programam e testam um UNIX completo consigam produzir resultados. Hoje é sabido que o Linux é um dos mais eficientes e motivados esforços de desenvolvimento já realizado. O kernel inteiro do Linux foi construído do zero, sem nenhum código proprietário. Bibliotecas são escritas e portadas, sistemas de arquivo são desenvolvidos, e drivers de dispositivos são escritos, tudo graças ao trabalho de voluntários. O software Linux geralmente é disponibilizado como uma distribuição, um conjunto de ferramentas já empacotado que compreende todo um sistema. Seria difícil para a maioria dos usuários instalar um sistema completo do zero, começando com o kernel, incluindo ferramentas e instalando todos os softwares necessários, sem utilizar uma distribuição. Assim, muitas distribuições estão disponíveis que incluem tudo que é necessário para instalar e rodar um sistema completo. Não existe uma única distribuição padrão. Existem muitas, e cada uma tem suas vantagens e desvantagens. 1.7 Diferenças entre o Linux e outros Sistemas Operacionais É importante entender as diferenças entre o Linux e outros sistemas operacionais, como MS-DOS, Windows e outras implementações de UNIX para computadores pessoais. Em primeiro lugar, Linux coexiste pacificamente com outros sistemas operacionais na mesma máquina. Você pode executar MS- DOS ou Windows na mesma máquina em que roda Linux. 1.7.1 Porque usar o Linux? Porque utilizar Linux ao invés de um sistema operacional comercial? Para usuários e programadores de UNIX e estudantes que têm interesse em dominar tal plataforma, faz muito mais sentido utilizar um sistema operacional Linux do que Windows em casa. Para hackers, no sentido sempre de experts em informática, Linux é o sistema operacional ideal. Para empresas, Linux pode ser uma solução mais barata, robusta e eficiente que outras alternativas. Muitas empresas têm utilizado como forma de evitar os altos custos anuais com compras de licenças de software, enquanto outras têm escolhido como forma de utilizar eficientemente máquinas ultrapassadas, que não rodam nas versões recentes do Windows, mas funcionam com eficiência em um Linux. 1.7.2 Linux vs Windows Tanto as diferentes versões do Windows quanto o Linux são sistemas operacionais multitarefa, suportando aproximadamente os mesmos recursos de 20 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico interface com usuários, conexão com redes de computadores, etc. A verdadeira diferença é que o Linux é uma versão do UNIX, beneficiando-se da contribuição da comunidade UNIX como um todo. Ao contrário do Linux, o Windows é propriedade de uma única empresa. O desenvolvimento do sistema operacional é controlado por uma única corporação, o que traz vantagens em termos de padronização e definição de interface, mas também significa que as definições de política de preços e padrões a serem utilizados serão todos definidos por uma empresa. (o) 1.7.3 Linux vs outras implementações de UNIX Existem diversas outras implementações do UNIX para o PC, mesmo porque a arquitetura do 80386 e de seus sucessores é bastante adequada à estrutura do UNIX. Outras implementações do UNIX para computadores pessoas são similares ao Linux. Praticamente todas as versões do UNIX suportam os mesmos softwares, ambientes de programação e recursos de conexão. Diferenças existem, porém. Muitos usuários relatam que o Linux é pelo menos tão estável quanto versões UNIX comerciais. O tempo para o desenvolvimento de novos recursos, porém, costuma ser significativamente menor. O mais importante fator, porém, é preço. Sendo um software livre, o Linux pode ser copiado de graça da Internet ou adquirido por um pequeno valor na forma de uma distribuição em CD-ROM. Se você pretende instalar o Linux em um grupo de máquinas, o custo é apenas o de comprar uma única cópia. Implementações comerciais do UNIX, por outro lado, oferecem mais do que apenas o software. Em geral o preço pago pelas mesmas inclui documentação, suporte e garantias quanto a qualidade. Para grandes instituições, estas podem ser questões importantes, mas usuários domésticos e mesmo determinadas empresas podem preferir não seguir por esta alternativa e fazer uso do Linux gastando um valor muito menor. (2...) 1.8 Exigências de Hardware É possível que você esteja convencido das potencialidades do Linux e ansioso por aproveitar tudo o que ele tem a fazer. Entretanto, antes de sair instalando o sistema operacional, você precisa estar ciente das necessidades e limitações do mesmo em termos de hardware. 1.8.1 Placa-mãe e CPU O Linux atualmente suporte sistemas com processadores 80386, 80486, Pentium e suas variações e sucessores, bem como outros chips compatíveis com Intel. Linux também já foi portado para PowerPC, Alpha, MIPS e Sparc. Acreinfo - Consultoria e Serviços de Informática 2 LINUX - Curso Básico 1.8.2 Exigências de Memória O Linux exige muito pouca memória, em comparação com outros sistemas operacionais avançados. Você precisa ter pelo menos 4MB de RAM, mas 16MB é recomendável. Quanto mais memória, mais rápido o sistema irá rodar. Algumas distribuições podem exigir mais memória RAM. O Linux suporta o endereçamento de 32 bits do processador, utilizando toda a memória RAM automaticamente. O Linux irá funcionar em uma máquina com 4MB de RAM, podendo inclusive executar o sistema X-Windows e o editor Emacs. Entretanto, ter mais memória é tão importante quanto ter um processador mais rápido. 16MB é suficiente para muitas aplicações, mas sistemas que vão operar como servidores podem precisar de consideravelmente mais memória, de acordo com o tipo de serviço que eles vão executar. A maioria dos usuários Linux aloca uma porção do disco como espaço de swap, que é utilizado como uma memória RAM virtual. Mesmo que seu computador tenha 16MB ou mais, pode ser interessante utilizar espaço de swap. 1.8.3 Controladores de Disco Rígido É teoricamente possível executar o Linux de um disquete ou, em algumas distribuições, diretamente de um CD-ROM, mas para se ter um bom desempenho é necessária uma área no disco rígido. O Linux pode co-existir com outros sistemas operacionais - ele apenas precisa de uma ou mais partições. O Linux suporta controladores IDE e EIDE. Em geral, seo MS-DOS ou outro sistema operacional consegue acessar o disco rígido, o Linux também consegue. 1.8.4 Espaço em Disco Obviamente, para instalar o Linux você precisa de algum espaço disponível no disco. O Linux suporta mais de um disco rígido, de tal forma que você pode instalar partes do sistema em cada disco. O espaço em disco necessário para o Linux depende de suas necessidades e do software que você irá instalar. Para uma implementação do UNIX, o Linux é relativamente pequeno. É possível executar o sistema com apenas 20MB de espaço em disco. Naturalmente, para expansões e grandes pacotes de software, como as interfaces gráficas, mais espaço é necessário. Exigências realistas de espaço em disco variam de 200MB até 1GB ou mais. Cada distribuição do Linux vem com uma documentação que irá ajudá-lo a definir as necessidades exatas de espaço em disco. 1.8.5 Outros Dispositivos De uma forma geral, todos os dispositivos comumente encontrados em computadores e mesmo alguns relativamente incomuns são suportados pelo 22 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Há muitas listas de Linux com propósitos específicos. A melhor maneira de encontrar informação sobre isso é observar os newsgroups de Linux na Usenet, assim como verificar o rol de listas públicas de e-mail disponíveis, que é publicado no grupo news. answers da Usenet. 1.10 Buscando ajuda sobre Linux Sem dúvida alguma você vai precisar de ajuda durante suas "aventuras" no mundo Linux. Até mesmo experts em UNIX ficam ocasionalmente confusos com alguma particularidade do Linux. E importante saber como, onde e quando buscar ajuda. O meio básico de obter ajuda é através de listas de e-mail e grupos de discussão, como discutido nas seções anteriores. Se você não tem acesso a essas fontes, você pode procurar outros meios online, como BBSs e CompuServe. Também está disponível online o Linux Journal's Best of Technical Support, no endereço nttp://www.linuxjournal.com/techsup.html. Muitas empresas oferecem suporte comercial para o Linux. Muitos desses serviços oferecem contratos de suporte que dão acesso a consultas sobre problemas de Linux. Mantenha em mente as sugestões abaixo para melhorar sua experiência em Linux e garantir um maior sucesso na busca de ajuda. Consulte toda a documentação disponível primeiro! Esta é a primeira coisa a fazer quando você encontrar um problema. As documentações disponíveis foram arduamente escritas para pessoas que precisem de ajuda no sistema operacional Linux (exemplo: HOWTOS). Como mencionado anteriormente, livros escritos para UNIX são aplicáveis ao Linux e devem ser usados também. Se você tem acesso ao Usenet, ou qualquer lista de e-mail sobre Linux, leia primeiramente a infornação que já foi publicada. Frequentemente, soluções para problemas comuns que não estão cobertas na documentação são amplamente discutidas nas listas. Se você publicar uma pergunta sem ler antes se este assunto já foi tratado, prepare-se para as respostas :). Aprenda a apreciar a autoconfiança. Você pediu por isso ao executar o Linux! Lembre-se, hacking tem tudo a ver com Linux. Ele não é um sistema comercial, nem pretende tornar-se um. Será esclarecedor investigar e resolver problemas por conta própria - você até poderá ser um guru Linux algum dia! Aprenda a apreciar o valor de vasculhar o sistema e consertar problemas por conta própria. Não espere, no entanto, criar um sistema Linux totalmente personalizado sem muita mão de obra. Mantenha-se calmo. Você não vai ganhar nada usando uma marreta no seu computador Linux. Compre um bom saco de pancadas ou saia para uma longa caminhada. Essa é uma boa maneira de aliviar situações de estresse. Com a maturidade do Linux e das distribuições, esperamos que estes problemas diminuam. Entretanto, mesmo UNIX comerciais podem ser problemáticos. Quando tudo falhar, sente-se, inspire fundo e retorne ao problema quando estiver relaxado. Sua mente e consciência estarão mais Acreinfo - Consultoria e Serviços de Informática 25 LINUX - Curso Básico claras. Evite publicar perguntas desnecessárias. Muitas pessoas cometem o erro de mandar mensagens pedindo ajuda prematuramente. Quando encontrar algum problema, não corra para mandar uma mensagem na lista. Primeiro, tente resolver por sua conta, e esteja absolutamente certo do problema que temem mãos. O seu sistema não liga? Talvez esteja desligado da tomada... Quando pedir ajuda, faça valer a pena. Lembre-se que as pessoas que vão ler sua mensagem não estão lá necessariamente para ajudar você. Lembre-se de ser educado, resumido e informativo tanto quanto possível. Como fazer tudo isso? Primeiramente, você deve incluir toda a informação relevante possível sobre seu sistema e problema. Mandando uma mensagem simples, como: "Não consigo fazer o e-mail funcionar" provavelmente não será de grande ajuda e vai levá-lo a lugar nenhum a não ser que você inclua informação sobre seu sistema, que software usa, o que você já tentou fazer e quais os resultados que obteve. Quando incluir informações técnicas, é uma boa idéia incluir também informação sobre as versões de software utilizadas (versão do kernel, por exemplo), assim como um breve sumário da configuração de hardware. Também não exagere - o tipo de monitor e marca é provavelmente irrelevante se você está tentando configurar sua placa de rede. 26 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 2 TUTORIAL SOBRE LINUX 2.1 Introdução Se você for novo no UNIX e Linux, pode estar um pouco intimidado pelo tamanho e aparente complexidade do sistema na sua frente. Este capítulo não entra em grandes detalhes nem trata de tópicos avançados. Ao invés disso, queremos que você comece colocando a mão na massa. Assumimos muito pouco sobre o que você já sabe, exceto talvez que você tenha alguma familiarização com computadores, e com MS-DOS. Entretanto, mesmo que você nunca tenha usado o MS-DOS, deve ser capaz de entender tudo exposto aqui. À primeira vista, o Linux se parece bastante com o MS-DOS -- mesmo porque, partes do MS-DOS foram modeladas no sistema operacional CP/M, que por sua vez foi modelado no UNIX. No entanto, só as características mais superficiais do Linux lembram o MS-DOS. Mesmo que você seja completamente novo ao mundo do PC, este tutorial deve ajudá-lo. E, antes de começarmos: não tenha medo de experimentar. O sistema não morde.Você não pode destruir alguma coisa ao trabalhar no sistema. O Linux tem segurança embutida que previne usuários "normais" de danificarem arquivos essenciais ao sistema. Mesmo assim, a pior coisa que pode acontecer é que você apague alguns ou todos os seus arquivos e tenham que reinstalar o sistema. Assim, por agora você não tem nada a peder. 2.2 Conceitos Básicos do Linux O Linux é um sistema operacional multitarefa e multi-usuário, o que significa que muitas pessoas podem rodar aplicações diferentes em um computador ao mesmo tempo. Isso difere do MS-DOS, por exemplo, onde somente uma pessoa pode usar o sistema de cada vez. No Linux, para se identificar, você deve "logar" no sistema, o que exige que você forneça sua identificação (login - o nome que o sistema usa para identificá-lo), e sua senha, que é sua chave pessoal para entrar na sua conta. Como somente você sabe sua senha, ninguém pode "logar" no sistema usando seu nome de usuário. Em sistemas UNIX tradicionais, o administrador do sistema determina um nome de usuário e uma senha inicial quando você recebe uma conta do sistema. Entretanto, como neste Linux você é o administrador do sistema, você deve configurar sua conta pessoal antes de poder logar. Para os próximos debates usaremos o nome de usuário imaginário "larry”. Além disso, cada sistema tem um nome de máquina (host name) determinado. É o hostname que dá nome a sua máquina; dá a ela caráter e charme. O hostname é usado para identificar máquinas individuais na rede, mas mesmo que sua máquina não esteja em rede, ela deve ter um hostname. Para o nosso exemplo, o nome da máquina será "mousehouse”. Acreinfo - Consultoria e Serviços de Informática 27 LINUX - Curso Básico esse nome, ele falhou com uma mensagem de erro engraçada e nos retornou para o prompt do shell. O que acontece se digitarmos um comando para o shell e o shell não conseguir encontrar um programa com o nome especificado? Bem, podemos tentar o seguinte: lhomel/larry& coma lixo coma: command not found lhomellarryk Bem simples, se o shell não pode encontrar o comando com o nome dado (no exemplo, "coma”), ele imprime uma mensagem de erro. Você vai ver esta mensagem de erro com frequência se digitar um comando errado (ex: se você digitou "mkae love" ao invés de "make love"). 2.2.5 Logout Antes de nos aprofundarmos ainda mais, temos que lhe contar como dar logout (sair) do sistema. No prompt do shell, use o comando "exit" para dar logout. Há outras formas ainda, mas esta é a que envolve menos riscos. 2.2.6 Mudando sua senha Você deve saber como mudar sua senha no sistema. O comando “passwd" pede pela sua velha senha e por uma nova. Ele também pede que você redigite a nova para validação. Cuidado para não esquecer sua senha - se você esquecê-la, só o administrador do sistema pode recuperar seu acesso. 2.2.7 Arquivos e diretórios Na maioria dos sistemas operacionais (incluindo o Linux), há o conceito de arquivo, que é um monte de informações com um nome (chamado filename - nome de arquivo). Exemplos de arquivos são seu trabalho de conclusão de curso, uma mensagem de e-mail, ou um programa que pode ser executado. Essencialmente, qualquer coisa gravada no disco é gravada em um arquivo individual. Arquivos são identificados por seus nomes. Por exemplo, um arquivo contendo seu trabalho de conclusão pode ser gravado como nome trabalho-de- conclusao. Esses nomes usualmente identificam o arquivo e seu conteúdo de alguma forma que faça sentido para você. Não há um formato padrão para nomes de arquivo como existe no MS-DOS ou Windows e outros sistemas operacionais. Em geral, um nome de arquivo pode conter um caracter (exceto o caracter /) e é limitado a 256 caracteres de comprimento. Como conceito de arquivos, vem o conceito de diretórios. Um diretório é uma coleção de arquivos. Você pode pensar nele como uma "pasta" que contém muitos arquivos diferentes. Diretórios também recebem nomes, com os quais você os identifica. Além disto, diretórios são mantidos em uma estrutura tipo árvore. Isso significa que diretórios podem conter outros diretórios. 30 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Conseqguentemente, você pode se referenciar a um arquivo pelo seu caminho (path), que é composto do nome de arquivo, precedido pelo nome do diretório que contém o arquivo. Vamos assumir que o Larry, por exemplo, tenha um diretório chamado "papers", que contém três arquivos: history-final, english-lit, e tese-mestrado. Cada um desses três arquivos contém informação sobre um dos projetos do Larry. Para se referir ao arquivo english-lit, o Larry pode especificar o path como "papers/english-lit". Como você pode ver, o diretório e nome são separados por uma barra simples (/). Por este motivo, os nomes de arquivo não podem conter o caracter / Os usuários do MS-DOS irão achar esta convenção familiar, embora no MS-DOS seja usada a contra-barra (1). Como mencionado, diretórios podem ser aninhados dentro de outros. Vamos assumir, por exemplo, que exista outro diretório dentro de "papers", chamado "notas". O diretório "notas" contém os arquivos notas-matematica e notas-rascunho. O path do arquivo notas-rascunho será: papers/notas/notas-rascunho Assim, o path é como um caminho para o arquivo. O diretório que contém um dado subdiretório é conhecido como diretório superior (parent directory). Aqui, o diretório papers é superior ao diretório notas. 2.2.8 A árvore de diretórios A maioria dos sistemas Linux usa um formato padrão para guardar os arquivos, de forma a que recursos e programas possam ser facilmente localizados. Esse formato forma a árvore de diretórios, que começa com o diretório "/", também chamado de diretório raiz. Diretamente abaixo do "/" estão importantes subdiretórios: /bin, /etc, /dev e /usr, dentre outros. Esses diretórios, por sua vez, contêm outros diretórios que contém arquivos de configuração do sistema, programas, e assim por diante. Cada usuário tem um diretório home (home directory), que é o diretório reservado para que aquele usuário armazend seus arquivos. Nos exemplos acima, todos os arquivos do Larry (como notas-rascunho e tese- mestrado) estão contidos no diretório home do Larry. Usualmente, diretórios home estão abaixo do diretório /home, e seus nomes refletem os usuários aos quais os diretórios pertencem. O diretório home do Larry, por exemplo, é lhomellarry. O diagrama abaixo mostra um exemplo de árvore de diretórios que pode lhe dar uma idéia de como a árvore de diretórios do seu sistema está organizada. Acreinfo - Consultoria e Serviços de Informática 3 LINUX - Curso Básico f——hbin — dev —eto home = larry sam —lib proc tmp —ust ——— X11IR6 bin — emacs Etr — gAH+-dhelude —ibelude — lib local bi emacs etc hb mai — ElL —yart ———, spool —— hinux tmp Figura 3.1: Uma árvore de diretórios típica (abreviada) do Linux. 2.2.9 O diretório de trabalho corrente A qualquer momento, assume-se que comandos que você digita são relativos ao seu diretório de trabalho corrente. Você pode pensar no seu diretório de trabalho como o diretório onde você está atualmente localizado. Quando você entra no sistema, seu diretório de trabalho é configurado como seu diretório home - /home/larry, no seu caso. Sempre que se referir a um arquivo, você pode fazê-lo em relação ao seu diretório de trabalho corrente, ao invés de ter que ficar especificando o caminho do arquivo (path). Aqui vemos um exemplo. Larry tem o diretório papers, e papers contém o arquivo history-final. Se o Larry quer ver este arquivo, ele pode usar o comando lhomellarry& more /homellarry/papers/history-final O comando "more" simplesmente mostra o arquivo na tela, uma página por vez. Entretanto, como o diretório de trabalho corrente do Larry é lhomellarry, ele pode se referenciar ao arquivo de forma relativa a sua localização atual usando o comando lhomellarry& more papers/history-final 32 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico lhomellarryk Aqui podemos ver que o Larry tem três entradas no seu diretório corrente: Mail, letters e papers. Isso não nos diz muito - eles são arquivos ou diretórios? Podemos usar a opção -F do comando Is para ver informação mais detalhada. lhomellarry& Is -F Mail/ letters/ papers/ lhomellarryk Através da barra (/) adicionada a cada nome de arquivo, sabemos que estas três entradas são de fato subdiretórios. O "Is -F" pode também acrescentar um asterisco ( *) no fim dos arquivos, o que indicaria que o arquivo é executável, ou um programa que pode ser rodado. Se nada for acrescentado ao nome do arquivo usando "Is - Fº, o arquivo é um "arquivo simples" (plain), isto é, nem um diretório nem um executável. Em geral, cada comando UNIX pode receber um número de opções, além dos outros parâmetros. Essas opções usualmente começam com um como demonstrado acima com a opção "-F". A opção "-F" diz ao Is para dar mais informações sobre o tipo dos arquivos envolvidos - neste cado, imprimindo uma "/" depois do nome de cada diretório. Se você fornecer ao Is um nome de diretório, o sistema irá mostrar o conteúdo desse diretório. lhomellarryk Is -F papers english-lit history-final tese-mestrado notas/ lhomellarryk Ou, para uma listagem mais interessante, vamos ver o que há no diretório /etc do sistema: /home/larryf 1s /etc Images ftpusers 1pc rc.new shells adm getty magic rc0.d startcons bcheckre gettydefs motd rcl.d swapoff bre group mount re2.d swapon bro- inet mtab re3.d syslog.conf csh.cshre init mtools re4.d syslog.pid Acreinfo - Consultoria e Serviços de Informática 35 LINUX - Curso Básico Se você for um usuário MS-DOS, você pode notar que os nomes de arquivos podem ser maiores que 8 caracteres, e que podem conter pontos em qualquer posição. Você pode até usar mais de um ponto num nome de arquivo. Vamos nos mover para o topo da árvore de diretórios, e depois para baixo, para outro diretório, com os comandos: /home/larryf cd... /homet cd... /& cd usr /usrt cd bin /usr/bint Você também pode se mover para dentro de vários diretórios em um único passo, como em "cd /usr/bin”. Tente movimentar-se por vários diretórios, usando o Ise o cd. Talvez você encontre algumas mensagens do tipo "Permission denied". Trata-se apenas da segurança do UNIX mostrando suas garras: para usar o Is ou cd, você deve ter permissão para isso. 2.3.3 Criando novos diretórios É hora de aprender a criar diretórios. Isso envolve o uso do comando mkdri. Tente o seguinte: lhome/larry& mkdir foo lhomellarry& Is -F Mail/ foo/ letters/ papers/ lhomellarry& cd foo lhomellarry/foof Is lhome/larry/foof Parabéns! Você criou um novo diretório e entrou nele. Como não há arquivos nesse novo diretório, vamos aprender como copiar arquivos de um lugar para o outro. 2.3.4 Copiando arquivos Para copiar arquvis, use o comando cp, como mostrado: lhomellarry/foo% cp /etc/termcap . lhomellarry/foo% cp /etc/shells . lhomellarry/foo& Is -F shells termcap lhomellarry/foo% cp shells bells lhomellarry/foo& Is -F 36 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico bells shells termcap lhome/larry/foof O comando cp copia os arquivos listados na linha de comando para o arquivo ou diretório dado como último argumento. Note que usamos um ponto (".) para nos referirmos ao diretório corrente. 2.3.5 Movendo arquivos O comando mv move arquivos, ao invés de copiá-los. A sintaxe é bem direta: lhomellarry/foof mv termcap sells lhomellarry/foo& Is -F bells sells shells lhome/larry/foof Note que o arquivo termcap foi renomeado para sells. Você também pode usar o comando mv para mover um arquivo para um diretório completamente novo. Nota: o mv e o cp vão sobreescrever o arquivo destino que tiver o mesmo nome sem pedir por confirmação. Tome cuidado quando mover um arquivo em outro diretório. Pode já existir um nome igual no mesmo diretório, que você irá sobreescrever! 2.3.6 Excluindo arquivos e diretórios Para excluir um arquivo, use o comando "rm" (que vem de "remover", como mostrado aqui: lhomellarry/foo% rm bells sells lhomellarry/foo& Is -F shells lhome/larry/foof Ficamos sem nada, a não ser "shells", mas não nos queixamos. Note que o rm, por default, não vai pedir confirmação antes de apagar um arquivo - tome cuidado! Note também que você pode apagar vários arquivos, passando uma lista como parâmetro ao "rm Um comando relacionado ao rm é o rmdir. Esse comando exclui um diretório, mas somente se o diretório estiver vazio. Se o diretório contém qualquer arquivo, ou subdiretório, o rmdir vai reclamar. 2.3.7 Visualizando arquivos Os comandos "more" e "cat" são usados para visualizar o conteúdo de arquivos. O “more” mostra um arquivo, uma tela por vez, enquanto o "cat" mostra todo o arquivo de uma vez. Acreinfo - Consultoria e Serviços de Informática 37 LINUX - Curso Básico 3 COMANDOS PARA MANIPULAÇÃO DE DIRETÓRIOS Abaixo comandos úteis para a manipulação de diretórios. Um diretório é usado para armazenar arquivos de um determinado tipo. O diretório pode ser entendido como uma pasta onde você guarda seus papeis (arquivos). Como uma pessoa organizada, você utilizará uma pasta para guardar cada tipo de documento, da mesma forma você pode criar um diretório vendas para guardar seus arquivos relacionados com vendas naquele local. 3.1 O comando 1s Mostra informação sobre os nomes de arquivos e diretórios. Sintaxe: ls [opções] [caminho/arquivo] [caminhol/arquivol] onde: 92 92 caminho/arquivo: Diretório/arquivo que será listado. caminho?/arquivol: Outro Diretório/arquivo que será listado. Podem ser feitas várias listagens de uma só vez. opções: Modificam o comportamento do comando o -a Lista todos os arquivos (inclusive os ocultos) de um diretório. -1 Usa o formato longo para listagem de arquivos. Lista as permissões, data de modificação, donos, grupos, etc. -F Insere um caracter após arquivos executáveis (*”), diretórios ('/), soquete ('=9, link simbólico (O e pipe (|). Seu uso é útil para identificar de forma fácil tipos de arquivos nas listagens de diretórios. --color=PARAM Mostra os arquivos em cores diferentes, conforme o tipo de arquivo. PARAM pode ser: * never nunca lista em cores (mesma coisa de não usar o parâmetro --color). * always sempre lista em cores conforme o tipo de arquivo. * auto somente colore a listagem se estiver em um terminal. A listagem pode ser classificada usando-se as seguintes opções: 40 92 92 92 Não ordena, e usa -au para listar os arquivos. Inverte a sequência de ordenação. Ordena pela data de alteração. Ordena pela extensão. Não ordena, lista os arquivos na ordem do diretório. Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Exemplos: ls lista os arquivos do diretório atual. ls /bin /sbin lista os arquivos do diretório /bin e /sbin ls -la /bin listagem detalhada e completa dos arquivos do diretório /bin 3.2 O comando cd Muda o diretório de trabalho atual. É necessário ter a permissão de execução para entrar no diretório. Sintaxe: cd [diretorio] onde: diretorio - diretório para onde se deseja mudar. "." se refere ao diretório corrente, ".." ao diretório superior na hierarquia, e “-” é o diretório padrão do usuário. Se nenhum diretório for especificado, “—” é assumido. Exemplos: cd retorna ao diretório padrão do usuário. cd / muda para o diretório raiz. cd /etc muda para o diretório /etc. cd - retorna ao diretório anteriormente acessado. cd... sobe um diretório na hierarquia. 3.3 O comando pwd O comando pwd pode ser usado para verificar em qual diretório o usuário se encontra, caso seu aviso de comandos não mostre isso. Exemplo: pwd mostra o nome e caminho do diretório atual 3.4 O comando mkdir Cria um novo diretório. Sintaxe: mkdir [opções] [caminho/diretório]) [caminhol/diretóriol] onde: ? caminho Caminho onde o diretório será criado. ? diretório Nome do diretório que será criado. ? opções: Modificam o comportamento do comando: Acreinfo - Consultoria e Serviços de Informática 4 LINUX - Curso Básico o -—-verbose mostra uma mensagem para cada diretório criado. As mensagens de erro serão mostradas mesmo que esta opção não seja usada. Para criar um novo diretório, você deve ter permissão de gravação no diretório pai do novo diretório. Exemplos: mkdir /home/larry/test | criao diretório test em /home/larry. mkdir testl test2 cria os diretórios test1 e test2 dentro do diretório atual. 3.5 O comando rmdir Remove diretórios. Este comando faz exatamente o contrário do mkdir. O diretório a ser removido deve estar vazio e você deve ter permissão de gravação para remove-lo. Além disso, o diretório de trabalho atual não deve estar dentro do diretório a ser excluído. Sintaxe: rmdir [caminho/diretório] [caminhol/diretóriol] onde: ? caminho Caminho do diretório que será removido. ? diretório Nome do diretório que será removido. Para remover diretórios que contenham arquivos, use o comando rm com a opção -r (para maiores detalhes, veja rm, Seção 9.3). Exemplos: rmdir /home/larry/test remove o diretório test em /home/larry. rmdir testl test2 remove os diretórios testl e test2 de dentro do diretório atual. 42 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico lusr é um diretório muito importante. Contém uma série de subdiretórios que por sua vez contêm alguns dos mais importantes e úteis programas e arquivos de configuração usados no sistema. Os vários diretórios descritos acima são essenciais para o sistema operar, mas a maioria dos itens no /usr são opcionais. Entretanto, são esses itens opcionais que tornam o sistema útil e interessante. Sem /usr, você teria um sistema tedioso que suportaria somente programas como cp e Is. O Jusr contém a maioria dos pacotes grandes de software e os arquivos de configuração que os acompanham. lusr/X11R6 lusr/X11R6 contém o sistema X Window se você o instalou. O sistema X Window é um ambiente gráfico poderoso que proporciona um grande número de ferramentas e programas gráficos, mostrados em janelas na sua tela. Se você está familiarizado com os ambientes MS Windows ou Macintosh, o X Window lhe será muito familiar. O diretório /usr/X11R6 contém todos os executáveis do X Window, arquivos de configuração e suporte. Entraremos em mais detalhes sobre isso na seção 5.1. lusrt/bin lusr/bin contém a maioria dos programas executáveis não encontrados em outras partes, como no /bin. lusr/ete Como o fetc, contém diferentes arquivos de configuração e programas do sistema, /usr/etc contém inclusive mais que o anterior. Em geral, os arquivos que se encontram em /usr/etc não são essenciais para o sistema, diferentemente dos que se encontram no fetc. lusr/include lusrlinclude contém os arquivos include para o compilador C. Esse arquivos (a maioria dos quais termina com .h, de "header", declaram estruturas de dados, subrotinas e constantes usadas no desenvolvimento de programas em C. Os arquivos que se encontram em [usr/include/sys geralmente são usados quando programando no nível do sistema UNIX. Se você está familiarizado com programação C, encontrará arquivos como stdio.h, o qual declara funções como printf(). lusr/g++-include lusr/g++-include contém arquivos de inclusão para o computador C++ (muito parecido ao /usr/include). lusr/lib lusr/lib contém as bibliotecas “stub" e "static" equivalentes aos arquivos encontrados em /lib. Ao compilar um programa, ele é "linkado" com as bibliotecas que se encontram em /usr/lib, as quais direcionam o programa para o Ilib, quando precisa buscar o código real da biblioteca. Além disso, vários programas armazenam arquivos de configuração no /usr/lib. lusr/local lusrlocal é muito parecido ao /usr. Ele contém programas e arquivos não essenciais ao sistema, mas que tornam o sistema mais divertido e excitante. Em geral, os programas que se encontram em [usr/local são específicos do seu sistema, isto é, o diretório /ussr/local difere bastante entre Acreinfo - Consultoria e Serviços de Informática 45 LINUX - Curso Básico os sistemas UNIX. Aqui encontrará grandes programas, como o TeX (sistema de formatação de documentos) e Emacs (editor grande e poderoso), se os instalar. lust/man Esse diretório contém as páginas de manual. Há dois subdiretórios para cada seção de página de manual (use o comando "man man” para detalhes). Por exemplo, /usr/man/man1 contém os fontes (isto é, o original não formatado) para as páginas de manual na seção 1, e /usr/man/cat1 contém as páginas de manual formatadas para a seção 1. lust/ste lusr/sre contém o código fonte (programas a compilar) de vários programas do sistema. O subdiretório mais importante é o /usr/src/linux, que contém o código fonte do kernel do Linux. Ivar Ivar contém diretórios que fregêntemente mudam de tamanho ou tendem a crescer. Muitos desses diretórios residiam antes em /usr, mas desde que estamos tratando de deixar o /usr inalterado, os diretórios que mudam de tamanho foram levados para o /var. Alguns deles são: Ivar/adm Ivar/adm contém vários arquivos de interesse para o administrador do sistema, especificamente históricos do sistema, que armazenam erros ou problemas com o sistema. Outros arquivos guardam logins do sistema, assim como tentativas frustradas. O capítulo 4 abordará este assunto. Ivar/spool Ivar/spool contém arquivos que vão ser passados a outros programas. Por exemplo, se sua máquina está conectada a uma rede, o correio de entrada será armazenado em /var/spool/mail até que você o leia ou apague. Artigos novos dos News, tanto os que entram quanto os que saem, se encontram em Ivar/spool/news, etc. 46 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 5 COMANDOS PARA MANIPULAÇÃO DE ARQUIVOS Abaixo, comandos utilizados para manipulação de arquivos. 5.1 O comando rm Remove arquivos. Também pode ser usado para apagar diretórios, vazios ou não. Note que no UNIX quando um arquivo é removido, ele não é mais recuperável (como no MS-DOS, onde você pode usar o "undelete”, ou no Windows, coma lixeira). Sintaxe: rm [opções] [caminho] [arquivo/diretório] onde: ? caminho: Localização do arquivo que deseja apagar. Se omitido, assume que o arquivo esteja no diretório atual. ? arquivo/diretório: Arquivo/diretório que será apagado. ? opções: Modificam o comportamento do comando: o -i, --interactiveConfirma antes de remover, esta é ativada por padrão. -f, ——force Remove os arquivos sem confirmação. -r, --recursive Usado para remover arquivos em sub- diretórios. Esta opção também pode ser usada para remover sub-diretórios. Exemplos: rm teste.txt Remove o arquivo teste.txt do diretório atual. em *.txt Remove todos os arquivos do diretório atual que terminam com txt. rm *.txt teste.novo Remove todos os arquivos do diretório atual que terminam com .txt e também o arquivo teste.novo. rm -rf /tmp/teste/* Remove todos os arquivos e sub-diretórios do diretório /tmp/teste mas mantém o sub-diretório /tmp/teste. rm -rf /tmp/teste Remove todos os arquivos e sub-diretórios do diretório /ftmpiteste, inclusive /tmpiteste. 5.2 O comando cp Copia arquivos. Sintaxe: cp [opções] [origem] [destino] onde: ? origem Arquivo que será copiado. Podem ser especificados mais de um arquivo para ser copiado usando "Curingas" (veja Curingas Seção 2.12). Acreinfo - Consultoria e Serviços de Informática 47 LINUX - Curso Básico 7 Se for usado um comando de visualização (como o cat), o arquivo original será visualizado. Exemplos: ? In -s /dev/ttySl /dev/modem Cria o link simbólico /dev/modem para o arquivo /dev/ttyS1. ? In -s /tmp -/tmp Cria um link - /tmp para o diretório /tmp. 5.5 O comando cat Oficialmente usado para concatenar arquivos, mas também pode ser usado para mostrar o conteúdo completo de um arquivo por vez. Sintaxe: cat [opções] [diretório/arquivo] [diretóriol/arquivol] Onde ? diretório/arquivo: Localização do arquivo que se deseja visualizar o conteúdo. ? opções: Modificam o comportamento do comando: o -n, --number Mostra o número das linhas enquanto o conteúdo do arquivo é mostrado. o -s, —-squeeze-blank Não mostra mais que uma linha em branco entre um parágrafo e outro. O comando cat trabalha com arquivos texto. Use o comando zcat para ver diretamente arquivos compactados com gzip. Exemplo: cat /usr/doc/copyright/GPL 5.6 O comando tac Mostra o conteúdo de um arquivo binário ou texto (como o cat) só que emordem inversa. Sintaxe: tac [opções] [diretório/arquivo] [diretóriol/arquivol] ? diretório/arquivo: Localização do arquivo que se deseja visualizar o conteúdo ? opções: Modificam o comportamento do comando: o -s [string] Usao [string] como separador de registros. Exemplo: tac /usr/doc/copyright/GPL so Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 5.7 O comando more Permite fazer a paginação de arquivos ou da entrada padrão. O comando more pode ser usado como comando para leitura de arquivos que ocupem mais de uma tela. Quando toda a tela é ocupada, o more efetua uma pausa e permite que você pressione Enter ou espaço para continuar avançando no arquivo sendo visualizado. Para sair do more pressione q. Sintaxe: more [arquivo] Onde: ? arquivo: É o arquivo que será paginado. Para visualizar diretamente arquivos texto compactados pelo gzip (*.gz”) use o comando zmore. Exemplos: more /etc/passwd cat /etc/passwd more 5.8 O comando 1ess Permite fazer a paginação de arquivos ou da entrada padrão. O comando less pode ser usado como comando para leitura de arquivos que ocupem mais de uma tela. Quando toda a tela é ocupada, o less efetua uma pausa (semelhante ao more) e permite que você pressione Seta para Cima e Seta para Baixo ou PgUP/PgDowmm para fazer o rolamento da página. Para sair do less pressione q. Sintaxe: less [arquivo] Onde: ? arquivo: É o arquivo que será paginado. Para visualizar diretamente arquivos texto compactados pelo gzip (*.gz”) use o comando zless. Exemplos: less /etc/passwd cat /etc/passwd less 5.9 O comando head Mostra as linhas iniciais de um arquivo texto. Sintaxe: head [opções] [arquivo] Onde: ? arquivo: E o arquivo que será mostrado. ? opções: Modificam o comportamento do comando: o -c [numero] Mostra o [numero] de bytes do início do arquivo. Acreinfo - Consultoria e Serviços de Informática ey LINUX - Curso Básico o -— [numero] Mostra o [numero] de linhas do inicio do arquivo. Caso não seja especificado, mostra as 10 primeiras linhas. Exemplos: head teste.txt head -20 teste.txt 5.10 O comando tail Mostra as linhas finais de um arquivo texto. Sintaxe: tail [opções] [arquivo] Onde: ? arquivo: É o arquivo que será mostrado. ? opções: Modificam o comportamento do comando: o -c [numero] Mostra o [numero] de bytes do final do arquivo. o [numero] Mostra o [numero] de linhas do final do arquivo. Caso não seja especificado, mostra as 10 últimas linhas. Exemplos: tail teste.txt tail -n 20 teste.txt 5.11 O comando touch Muda a data e hora que um arquivo foi alterado. Também pode ser usado para criar arquivos vazios. Caso o touch seja usado com arquivos que não existam, por padrão ele criará estes arquivos. Sintaxe: touch [opções] [arquivos] Onde: ? arquivos: Arquivos que terão sua data/hora modificados. ? opções: Modificam o comportamento do comando: o -a, —-time=atime Faz o touch mudar somente a data e hora do acesso ao arquivo. o -m, -—-time=mtime Faz o touch mudar somente a data e hora da modificação. o -c, --no-create Não cria arquivos vazios, caso os arquivos não existam. o -—t MMDDhhmm[AA.ss] Usa Minutos (MM), Dias (DD), Horas (hh), minutos (mm) e opcionalmente o Ano (AA) e 52 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico a opção -t especifica o caracter como delimitador de campos ao invés do espaço. Neste caso, o que estiver após ":" será considerado o próximo campo. 5.14 O comando di £f Compara dois arquivos e mostra as diferenças entre eles. O comando diff é usado somente para a comparação de arquivos em formato texto. As diferenças encontradas podem ser redirecionadas para um arquivo que poderá ser usado pelo comando patch para aplicar as alterações em um arquivo que não contém as diferenças. Isto é útil para grandes textos porque é possível copiar somente as modificações (geradas através do diff, que são muito pequenas) e aplicar no arquivo para atualiza-lo (através do patch) ao invés de copiar a nova versão. Este é um sistema de atualização muito usado na atualização dos código fonte do kernel do GNU/Linux. Sintaxe: diff [diretóriol/arquivol] [diretório2/arquivo2] [opções] Onde: ? diretório 1/arquivo1 diretórioZ/arquivo? Arquivos (diretórios que serão comparados. Normalmente é usado como primeiro arquivo/diretório o mais antigo e o mais novo como segundo. ? Opções: o -lines [num] Gera a diferença com [num] linhas de contexto. Por padrão o diff gera um arquivo com 2 linhas que é o mínimo necessário para o correto funcionamento do patch. —-a Compara os dois arquivos como arquivos texto. -b Ignora espaços em branco como diferenças. o -Blgnora linhas em branco inseridas ou apagadas nos arquivos. o -Ilgnora diferenças entre maiúsculas e minúsculas nos arquivos. -H Usa análise heurística para verificar os arquivos. -N Em uma comparação de diretórios, se o arquivo apenas existe em um diretório, trata-o como presente mas vazio no outro diretório. o -P Em uma comparação de diretórios, se o arquivos apenas existe no segundo diretório, trata-o como presente mas vazio no primeiro diretório. o -q Mostra somente se os dois arquivos possuem diferenças. Não mostra as diferenças entre eles. o -r Compara diretórios e sub-diretórios existentes. o -S [nome] Inicia a comparação de diretórios pelo arquivo [nome]. E útil quando cancelamos uma comparação. —t Aumenta a tabulação das diferenças encontradas. -u Usa o formato de comparação unificado. Acreinfo - Consultoria e Serviços de Informática 55 LINUX - Curso Básico Use o comando zdiff para comparar diretamente arquivos compactados pelo utilitário gzip Use o comando sdiff para visualizar as linhas diferentes entre os dois arquivos em formato texto simples. Exemplos: diff texto.txt textol.txt - Compara o arquivo texto.txt com texto1.txt e exibe suas diferenças na tela. diff -Bu texto.txt textol.txt - Compara o arquivo texto.txt com texto1.txt ignorando linhas em branco diferentes entre os dois arquivos e usando o formato unificado. diff texto.txt textol.txt >texto.diff - Compara o arquivo texto.txt com texto1.txt e gera um arquivo chamdo texto.diff contendo a diferença entre eles. Este arquivo poderá ser usado pelo patch para aplicar as diferenças existente entre os dois no arquivo texto.txt. diff -r /usr/src/linux-2.2.13 /usr/src/linux-2.2.14 >patch- 2.2.14.diff - Compara o diretório e sub-diretórios linux-2.2.13 e linux-2.2.14 e grava as diferenças entre eles no arquivo patch-2.2.14.diff. s6 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 6 PERMISSÕES DE ARQUIVOS 6.1 Conceitos de permissões de arquivos Como há tipicamente mais de um usuário num sistema Linux, o Linux fornece um mecanismo conhecido com permissão de arquivos, que protegem arquivos de usuários de serem mal utilizados por outros usuários. Esse mecanismo permite que arquivos e diretórios "pertençam" ao um usuário particular. Por exemplo, como Larry criou os arquivos em seu diretório home, o Larry é dono desses arquivos e tem acesso a eles. O Linux também permite que arquivos sejam compartilhados entre usuários e grupos de usuários. Se o Larry desejasse, sele poderia tirar o acesso a seus arquivos de forma a que nenhum outro usuário poderia acessá- los. Entretanto, na maioria dos sistemas, o padrão é permitir que outros usuários leiam seus arquivos, mas não possam modificá-los ou exclui-los de alguma forma. Cada arquivo pertence a um usuário em particular. Entretanto, arquivos também pertencem a um grupo, que é um grupo definido de usuários do sistema. Cada usuário é colocado em pelo menos um grupo quando sua conta é criada. No entanto, o administrador do sistema pode conceder ao usuário o acesso a mais de um grupo. Grupos são usualmente definidos pelo tipo de usuários que acessam a máquina. Por exemplo, numa universidade, o sistema Linux pode ser configurados para os grupos estudante, administracao, faculdade ou convidado. Há também alguns grupos pré-definidos do sistema (como bin e admin), que são usados pelo próprio sistema para controlar acesso aos recursos - muito raramente usuários reais pertencem a grupos de sistema. Permissões estão divididas em três tipos: leitura, escrita e execução. Essas permissões podem ser concedidas a três tipos de usuários: o dono do arquivo, o grupo ao qual o arquivo pertence, e a todos os usuários, independentemente de grupo. A permissão de leitura permite que um usuário leia o conteúdo do arquivo e, no caso de diretórios, liste o conteúdo do diretório (usando Is). A permissão de escrita permite que o usuário escreva e/ou modifique o arquivo. Para diretórios, a permissão de escrita permite que o usuário crie novos arquivos ou exclua arquivos naquele diretório. Finalmente, a permissão de execução permite que um usuário rode um arquivo como um programa ou script de shell (o arquivo precisa ser um programa ou script de shell). Para diretórios, ter permissão de execução permite que o usuário entre no diretório em questão (com o comando cd). 6.2 Interpretando permissões de arquivos Vamos observer um exemplo que demonstra permissões de arquivos. Usando o comando Is com a opção "-|" mostra uma listagem mais completa do arquivo, incluindo permissões de arquivos. Acreinfo - Consultoria e Serviços de Informática 57 LINUX - Curso Básico 7 GERENCIANDO LINKS DE ARQUIVOS Links permitem que você dê mais de um nome a um único arquivo. Arquivos são identificados pelo sistema pelo número do "inode", que é o identificador único para o arquivo no sistema. Um diretório é na verdade uma listagem de "inodes" com seus nomes de arquivos correspondentes. Cada nome de arquivo num diretório é um link para um "inode” particular. 7.1 Links Rígidos O comando "In" é usado para criar múltiplos links para um arquivo. Por exemplo, digamos que você tenha um arquivo chamado "foo" em um diretório. Usando "Is -i", você pode ver o número do "inode" para este arquivo. /home/larryf Is -i foo 22192 foo /home/larryf Aqui, "foo" tem o número de inode 22192 no sistema de arquivos. Você pode criar outro link para o arquivo "foo", chamado, por exemplo, "bar", como segue: /home/larryf In foo bar Como "Is -i", você pode ver que os dois arquivos tem o mesmo inode. /home/larryf Is -i foo 22192 bar 22192 foo /home/larryf Agora, especificando tanto "foo" quanto "bar", você terá acesso ao mesmo arquivo. Se você fizer mudanças a "foo", essas mudanças aparecem em "bar" também. Para todos os proósitos, "foo" e "bar" são o mesmo arquivo. Esses links são conhecidos como links rígidos (hard link), porque criam um link direto para um inode. Note que você só pode fazer hard links para arquivos se os links estiverem no mesmo sistema de arquivos. Links simbólicos (veja abaixo) não têm esta restrição. Quando você exclui um arquivo com "rm", você está, na verdade, apagando um link para o arquivo. Se você usar o comando /home/larryf rm foo somente o link chamado foo é excluído, bar ainda vai existir. Um arquivo é realmente excluído do sistema somente quando não há mais links para ele. Usualmente, arquivos só tem um link. Assim, usando o comando "rm" exclui o arquivo. Entretanto, se um arquivo tem múltiplos links, usando o comando "rm excluirá somente um link. Para excluir o arquivo, você tem que excluir todos os links para o mesmo. O comando "Is -I" mostra o número de links para um arquivo (entre outras informações). /home/larryf Is -1 foo bar =rW-r-—-r—— 2 root root 12 Aug 5 16:51 bar 60 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico =rW-r-—-r—— 2 root root 12 Aug 5 16:50 foo /home/larryf A segunda coluna na listagem, " arquivo. especifica o número de links para o Com isso claro, um diretório é, na verdade, somente um arquivo contendo a informação sobre as associações link para inode. Além disso, cada diretório contém, no mínimo, dois links rígidos: (um link apontando para si mesmo), e "..” (um link apontando para o diretório superior). No diretório root (), o link ".” aponta novamente para /. (Em outras palavras, o diretório superior do diretório root é o próprio diretório root). 7.2 Links Simbólicos Links simbólicos, ou symlinks, são outro tipo de link, e são diferentes dos links rígidos. Um link simbólico permite que você dê outro nome a um arquivo, mas não faz o link ao arquivo por inode. O comando "In -s" cria um link simbólico para um arquivo. Por exemplo, se você usa o comando: /home/larryf In -s foo bar Você estará criando um link simbólico chamado "bar" que aponta para o arquivo "foo". Se você usa o "Is -i", você verá que os dois arquivos têm, de fato, inodes diferentes. /home/larryf Is -i foo bar 22195 bar 22192 foo /home/bar% Entretanto, usando o "Is -l", vemos que o arquivo "bar" é um ponteiro simbólico para "foo". /home/larryf Is -1 foo bar lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo =ILW-1>—r—— 1 root root 12 Aug 5 16:50 foo /home/larryf As permissões de arquivo num link simbólico não são usadas (sempre aparecem como rwxrwxrwx). Elas são determinadas pelas permissões no arquivo alvo do link simbólico (em nosso exemplo, o arquivo foo). Funcionalmente, links rígidos e links simbólicos são similares, mas há diferenças. Você pode, por exemplo, criar um link simbólico para um arquivo que não existe; o mesmo não funciona para links rígidos. Links simbólicos são processados pelo kernel diferentemente de links rígidos. É somente uma diferença técnica, mas algumas vezes importante. Links simbólicos são úteis porque identificam o arquivo para o qual apontam. Com links rígidos, não há uma maneira fácil de determinar quais arquivos estão "linkados" para o mesmo inode. Links são usados em muitos lugares no sistema Linux. Links simbólicos são especialmente importante para bibliotecas compartilhadas no /lib. Acreinfo - Consultoria e Serviços de Informática 6 LINUX - Curso Básico 8 COMANDOS DE BUSCA 8.1 O comando grep Procura entrada padrão. por um texto dentro de um arquivo(s) ou no dispositivo de Sintaxe: grep [expressão] [arquivo] [opções] Onde: ? Expressão: Expressão regular que será procurada no texto. Se tiver mais de 2 palavras você deve identifica-la com aspas "" caso contrário o grep assumirá que a segunda palavra é o arquivo! ? Arquivo: Arquivo onde será feita a procura. ? Opções: o -A [número] Mostra o [número] de linhas após a linha encontrada pelo grep. -B [número] Mostra o [número] de linhas antes da linha encontrada pelo grep. -f [arquivo] Especifica que o texto que será localizado, esta no arquivo [arquivo]. -h, --no-filenameNão mostra os nomes dos arquivos durante a procura. -i, --ignore-caselgnora diferença entre maiúsculas e minúsculas no texto procurado e arquivo. -n, --line-numberMostra o nome de cada linha encontrada pelo grep. -U, --binary Trata o arquivo que será procurado como binário. Se não for especificado o nome de um arquivo ou se for usado um hífen , grep procurará a string no dispositivo de entrada padrão. O grep faz sua pesquisa em arquivos texto. Use o comando zgrep para pesquisar diretamente em arquivos compactados com gzip, os comandos e opções são as mesmas. Exemplos: grep "capitulo" texto.txt ps ax | grep inetd grep "capitulo" texto.txt -A 2 -B2 8.2 O comando find Procura por arquivos/diretórios no disco. find pode procurar arquivos através de sua data de modificação, tamanho, etc através do uso de opções. find, ao contrário de outros programas, usa opções longas através de um "-", Sintaxe: 62 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico which [comando] Exemplos: which Is which shutdown which which 8.4 O comando whereis Localiza o arquivo que contém uma página de manual. A pesquisa é feita usando-se os caminhos de páginas de manuais configuradas no sistema (normalmente o arquivo /etc/manpath.config). Sintaxe: whereis [comando] Exemplos: whereis ls whereis cd Acreinfo - Consultoria e Serviços de Informática 65 LINUX - Curso Básico 9 USANDO O EDITOR VI Um editor de textos é um programa usado para editar arquivos que são compostos de textos: uma carta, um programa C, ou um arquivo de configuração do sistema. Ainda que existam vários desses editores disponíveis para o Linux, o único que você garantidamente vai encontrar em qualquer UNIX ou sistema Linux, é o vi (do inglês, "visual editor). O vi não é o editor mais fácil de usar, nem é muito auto-explicativo. Entretanto, como o vi é tão comum em sistemas UNIX/Linux, e muitas vezes necessário, ele merece um pouco de nossa atenção. Sua escolha por um editor é mais uma questá pessoal de gosto e estilo. Muitos usuários preferem o barroco, auto-explicativo e poderoso Emacs - um editor com mais funções que qualquer outro programa no mundo UNIX. Por exemplo, o Emacs tem o seu próprio dialeto da linguagem de programação LISP embutido, e tem muitas outras extensões (uma das quais é umtipo Eliza - um programa de inteligência artificial). No entanto, como o Emacs e seus arquivos de suporte são relativamente grandes, ele não pode ser instalado em alguns sistemas. O vi, por outro lado, é pequeno e poderoso, mas mais difícil de usar. Entretanto, uma vez que você saiba lidar com ele, será muito fácil. Esta seção apresenta uma introdução ao vi - não vamos discutir todas os seus atributos, somente aqueles que você precisa saber para começar a usá-lo. Você pode verificar a página de manual do vi se estiver interessado em aprendar mais sobre o editor e suas funções. Alternativamente, você pode ler o livro Learning the vi Editor, da editora O“Reilly and Associates, ou Vi Tutorial, da Specialized Systems Consultants (SSC) Inc. 9.1 Conceitos. Enquanto estiver usando o vi, em qualquer momento você está em um dos três modos de operação. Esses modos são chamados: modo de comando, modo de inserção, e modo última linha. Quando você inicia o vi, você está no modo de comando. Esse mode permite que você use comandos para editar arquivos ou para trocar para outros modos. Por exemplo, digitando "x" no modo comando apaga o caracter que está sob o cursor. As teclas de setas movem o cursor pelo arquivo que você está editando. Geralmente, os comandos usados no modo de comando são de um ou dois caracteres. Você pode inserir ou editar textos no modo de inserção. Quando estiver usando o vi, vai provavelmente usar a maior parte do tempo neste modo. Você inicia o modo de inserção pressionando o comando "i" (de "inserir") no modo de comando. Enquanto estiver em modo de inserção, você pode inserir texto no documento na posição do cursor. Para sair do modo de inserção e retornar ao modo de comando, pressione <Esc>. O modo de última linha é um modo especial que permite alguns comandos extendidos do vi. Ao digitar esses comandos, eles aparecem na última linha da tela (daí o nome). Por exemplo, quando você digita "." no modo de comando, você pula para o modo de última linha e pode usar os comandos “wq" (gravar e sair - do inglês, write and quit), ou "q!" (para sair sem salvar). O 66 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico modo de última linha é geralmente usado para comandos do vi que são mais longos do que um caracter. No modo de última linha, você entra um comando de uma linha e pressiona <Enter> para executá-lo. 9.2 Iniciando o vi A melhor maneira de compreender estes conceitos é chamar o vi e editar um arquivo. O exemplo "screens" abaixo mostra algumas linhas de texto, como se a tela tivesse somente seis linhas de altura, ao invés de vinte e quatro. A sintaxe do vi é vi arquivo onde arquivo é o nome do arquivo a editar. Chame o vi digitando: /home/larryf vi test para editar o arquivo "test". Você deve ver algo parecido com: "test" [New file] A coluna de caracteres "-" indicam que você está no fim do arquivo. No exemplo, o caracter" " representa o cursor. 9.3 Inserindo texto O programa vi está agora no modo de comando. Insira um texto no arquivo - pressionando "i" você coloca o editor em modo de inserção. A partir daí, comece a digitar. Now is the time for all good men to come to the aid of the party Acreinfo - Consultoria e Serviços de Informática 67 LINUX - Curso Básico Você pode apagar linhas inteiras usando o comando "dd" (isso mesmo, pressione "d" duas vezes seguidas), Se o cursor está na segunda linha, e você pressionar "dd", verá: Now is the time for all good humans to come to the aid of the party. Para apagar a palavra onde está o cursor, use o comando "dw!. Coloque o cursor no início da palavra good, e digite "dw!. Now is the time for all humans to come to the aid of the party. 9.5 Modificando texto Você pode substituir seções de texto usando o comando "R" (maiúsculo). Posicione o cursor na primeira letra da palavra "party", pressione "Rº e digite a palavra "hungry”. Now is the time for all humans to come to the aid of the hungry . 70 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico ou "a", mas o "R” Usando "R" para editar um texto é como usar sobreescreve, ao invés de inserir. O comando "r" (minúsculo) substitui o caracter sob o cursor. Por exemplo, mova o cursor para o início da palavra "Now' e pressione "r”, depois "C", você verá: Cow is the time for all humans to come to the aid of the hungry. O comando "-" troca a caixa da letra que está sob o cursor de alta para baixa e vice-versa. Por exemplo, se você posiciona o cursor no "o", na palvra “Cow! acima e repetidamente pressiona "-", terá: Cow IS THE TIME FOR ALL HUMANS TO COME TO THE AID OF THE HUNGRY . Nota: em teclados programados para o português, você terá que pressionar "-" seguido da tecla de espaço para ter o mesmo efeito. 9.6 Comandos para movimentar o cursor Você já sabe como usar as setas para se movimentar pelo documento. Além disso, você pode usar os comandos "h", "j", "K" e "|" para mover o cursor para a esquerda, baixo, cima e direita, respectivamente. Isso é útil quando (por alguma razão) suas teclas de setas não funcionam corretamente. O comando "w' move o cursor para o início da próxima palavra, o comando "b" para o início da palavra anterior. Acreinfo - Consultoria e Serviços de Informática n LINUX - Curso Básico O comando "0" (tecla zero) move o cursor para o início da linha corrente, e o comando "$" para o fim da linha. Quando editar arquivos grandes, você vai querer avançar e retroceder através do arquivo uma tela por vez. Pressionado "Ctrl-F" move o cursor uma tela para a frente, e Ctrl-B, uma tela para trás. Para mover o cursor para o fim do arquivo, pressione "G". Você também pode movê-lo para uma linha arbitrária; por exemplo, digite o comando "10G" para mover o cursor para a linha 10 no arquivo. Para movê-lo para a primeira linha, use "1G". Você pode combinar comandos de movimentação com outros comandos, como aqueles usados para apagar texto. Por exemplo, o comando “d$" apaga tudo do cursor até o fim da linha; "dG" apaga tudo do cursor até o fum do arquivo, e assim por diante. 9.7 Salvando arquivos e saindo do vi Para sair do vi sem salvar mudanças no arquivo, use o comando ":g!”. Quando você pressiona o cursor se move para a última linha da tela e você estará no modo de última linha. Cow IS THE TIME FOR ALL HUMANS TO COME TO THE AID OF THE HUNGRY . No modo de última linha, certos comandos extendidos estão disponíveis. Um deles é o "g!", que sai do vi sem salvar. O comando ":wq" salva o arquivo e sai do vi. O comando "ZZ" (do modo comando, sem os ":") é equivalente a “wq". Se o arquivo não foi modificado desde a última vez que foi salvo, o comando só sai, preservando a data de modificação da última mudança. Lembre-se que você deve pressionar <Enter> depois de um comando entrado no modo de última linha. Para salvar o arquivo sem sair do vi, use “:w”. 9.8 Editando outro arquivo Para editar outro arquivo, use o comando "e". Por exemplo, para parar a edição do arquivo "test" e editar o arquivo "foo" no lugar, use o comando: 72 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 10 ACESSANDO ARQUIVOS MS-DOS/WINDOWS Se, por qualquer motivo bizarro, você quiser acessar arquivos do MS- DOS (ou Windows), pode fazê-lo facilmente no Linux. A maneira usual de acessar arquivos MS-DOS é montar uma partição ou disquete MS-DOS no Linux, permitindo que você acesse os arquivos diretamente através do sistema de arquivos. Por exemplo, se você tem um disquete MS-DOS em /devifdO, o comando * mount -t msdos /dev/fdO /mnt vai montá-lo no diretório /mnt. Você também pode montar uma partição MS-DOS no seu disco rígido para acessá-la através do Linux. Se você tem uma partição MS-DOS em Idev/hda1, o comando: * mount -t msdos /dev/hda1 Immt monta a partição. Lembre-se de desmontar a partição quando tiver terminado de usá-la. Você pode ter uma partição MS-DOS montada automaticamente na inicialização do sistema se você incluir a entrada no letclífstab. A próxima linha no /etc/fstab irá montar a partição MS-DOS no Idevihdaf no diretório /dos automaticamente: Idevihda1 Idos msdos defaults Você também pode montar o sistema de arquivos VFAT (usado pelo Windows 95): *% mount -t vfat /devihda1 /mt Isso permite acessar nomes de arquivo longos do Windows. Você pode montar um sistema de arquivos FAT16 e usar isto para gerar nomes de arquivo longos. O software Mtools também pode ser usado para acessar arquivos MS- DOS. Os comandos mcd, mdir e mcopy se comportam como seus correspondentes MS-DOS. Se você instalar o Mtools, poderá consultar páginas de manual para esses comandos. Acessar arquivos MS-DOS é uma coisa, executá-los é outra. Há um emulador MS-DOS em desenvolvimento no Linux. Ele é incluído em muitas distribuições. Também pode ser baixado de muitos sites de FTP. O emulador é bastante poderoso e pode rodar várias aplicações. Entretanto, Linux e MS- DOS são sistemas bem diferentes. O poder de qualquer emulador MS-DOS num UNIX é limitado. Há também um emulador Windows para ambiente X em desenvolvimento. Acreinfo - Consultoria e Serviços de Informática 78 LINUX - Curso Básico 11 O SHELL 11.1 Tipos de shell Como mencionado anteriormente, o Linux é um sistema de arquivos multitarefa e multi-usuário. Ser multitarefa é bem útil, e uma vez que você tenha entendido isso, vai usá-lo todo o tempo. Em pouco tempo você vai estar rodando programas em segundo plano, mudando entre tarefas, e fazendo pipelines entre programas. Tudo isso junto para atingir resultados complicados em um único comando. Muitas das características que nós vamos cobrir nesta seção são fornecidas pelo próprio shell. Tome cuidado para não confundir o Linux (o próprio sistema operacional) com um shell - um shell é somente uma interface para o sistema que está embaixo. O shell fornece funcionalidade para o Linux. Um shell não é somente um interpretador para comandos interativos que você digita no prompt, mas também uma poderosa linguagem de programação. Ele permite que você escreva scripts de shell, para agrupar vários comandos shell em um único arquivo. Se você sabe MS-DOS, você vai reconhecer a semelhança com os arquivos "batch" (BAT). Os scripts do shell são uma ferramenta poderosa, que permitirão que você automatize e expanda seu uso do Linux. Há vários tipos de shell no mundo Linux. Os dois tipos principais são o “Bourne shell" e o “C shell". O "Bourne shell" usa uma sintaxe de comando como o shell original dos sistemas UNIX, como o System Ill. O nome do “Bourne shell" na maioria dos sistemas Linux é /bin/sh (onde sh vem de "shell"). O "C shell" usa uma sintaxe diferente, parecida com programação C, e na maioria dos sitemas é chamado de /bin/csh. No Linux, várias variantes desses shell estão disponíveis. As duas mais comunmente usadas são "Bourne Again Shell", ou "Bash" (/bin/bash), e "Tesh” (/bintcsh). Bash é uma forma de Bourne shell que inclui muitas das características avançadas encontradas no "C shell". Como o bash suporta um conjunto maior de comandos que o "Bourne shell", os scripts em shell escritos para o Bourne shell devem funcionar no bash. Se você prefere usar a sintaxe do C shell, o Linux suporta o tcsh, que é uma versão expandida do C shell original. O tipo de shell que você vai escolher é mais uma questão de religião. Alguns preferem a sintaxe do Bourne shell com as características avançadas do bash, e outros preferem a sintaxe mais estruturada do C shell. Para comandos normais como cp e Is, o shell que você usar não faz diferença - a sintaxe não muda. Só quando você começar a escrever scripts shell ou usar funções avançadas de um shell é que as diferenças entre os tipos vai começar a importar. A medida que for se acostumando, você vai notar diferenças entre o Bourne e o C shell. Entretanto, para os propósitos deste livro, a maioria das diferenças é irrelevante. (Se você está curioso sobre este ponto, leia as páginas de manual do bash e do tcsh). 76 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico 11.2 Caracteres Coringa Uma característica fundamental da maioria dos shell do Linux é a habilidade de se referir a mais de uma arquivo usando caracteres especiais. Esses caracteres coringa permitem que você se refira, digamos, a todos os arquivos que contenham o caracter "n O caracter coringa "*" especifica qualquer caracter ou sequência de caracteres num nome de arquivo. Quando você usa o caracter "*" em um nome de arquivo, o shell o substitui por todas as possibilidades possíveis de nomes de arquivos no diretório ao qual você se refere. Aqui temos um exemplo rápido. Suponha que Larry tenha os arquivos frog, joe e stuff no seu diretório corrente. lhomellarry& Is frog joe stuff lhomellarryk Para especificar todos os arquivos contendo a letra "o" no nome, use o comando: lhomellarryk Is *o* frog joe lhomellarryk Como você pode ver, cada instância do "*" é substituída por todas as substituições que casam com os arquivos no diretório corrente. O uso do "*' simplesmente, casa com todos os nomes, pois todos os caracteres casam com o caracter coringa. lhomellarryk Is * frog joe stuff lhomellarryk Abaixo, mais alguns exemplos: lhomellarryé 1s £* frog lhomellarryé 1s *£ff stuff lhomellarryé 1s *£* frog stuff lhomellarryé 1s s*f stuff lhomellarryk O processo de trocar um "*" numa série de nomes de arquivos é chamado de expansão de caracteres coringa e é feito pelo shell. Isto é importante: um comando individual, como Is, nunca vê o "*' na sua lista de Acreinfo - Consultoria e Serviços de Informática ” LINUX - Curso Básico lhomellarry/papersã Cada linha que você digita é imediatamente ecoada pelo cat. Quando estiver lendo da entrada padrão, você indica que a entrada "terminou" mandando um sinal de EOT (End-Of-Text - fim de texto) que, em geral, é gerado ao pressionar Ctrl-D. Aqui você tem outro exemplo. O comando sort lê linhas de texto (novamente, da stdin, a menos que você especifique um ou mais nomes de arquivos) e manda-as ordenadas para a stdout. Tente o seguinte: lhomellarry/papersg sort bananas carrots apples (Ctrl-D) apples bananas carrots lhomellarry/papersã Agora você pode ordenar sua lista de compras..... Linux é útil ou não é? 11.3.2 Redirecionando entrada e saída Digamos que você queira mandar a saída do sort para um arquivo, para gravar sua lista de compras no disco. O shell permite que você redirecione a saída padrão para um arquivo usando o simbolo ">". Veja como funciona: lhomellarry/papers& sort > shopping-list bananas carrots apples (Ctrl-D) lhomellarry/papersã Como você pode notar, o resultado do comando sort não é mostrado, mas sim gravado num arquivo chamado shopping-list. Vamos dar uma olhada no arquivo: lhomellarry/papers cat shopping-list apples bananas carrots lhomellarry/papersã Agora você pode ordenar sua lista de compras e salvá-la também! Mas vamos supor que você esteja armazenando a lista original não ordenada no 80 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico arquivo itens. Uma maneira de ordenar a informação e gravá-la num arquivo seria dar ao comando sort o nome do arquivo a ser lido no lugar da stdin, e redirecionar a stdout assim como fizemos antes. Veja o exemplo: lhomellarry/papersg sort itens > shopping-list lhomellarry/papersg cat shopping-list apples bananas carrots lhomellarry/papersã Entretanto, há outra forma de fazer isto. Além de redirecionar a stdout, você pode redirecionar a stdin também, usando o símbolo "<". lhomellarry/papers& sort < itens apples bananas carrots lhomellarry/papersã Tecnicamente, "sort < itens" é equivalente a "sort itens”, mas permite demonstrar o seguinte ponto: "sort < itens" se comporta como se os dados no arquivo "itens" tivessem sido digitados na stdin. O shell manipula o redirecionamento. O "sort" não recebeu o nome do arquivo itens para ler; tudo o que o sort sabe é que recebeu uma lista da stdin, como se você tivesse digitado todos os dados pelo teclado. Isso introduz o conceito de um filtro. Um filtro é um programa que lê dados da stdin, processa-os de alguma forma, e manda-os processados para a stdout. Usando redirecionamentos, stdin e stdout podem ser referenciados de arquivos. Como mencionado acima, stdin e stdout, por padrão, se comportam como teclado e tela respectivamente. O "sort" é um filtro simples. Ele ordena os dados de entrada e manda o resultdao para a saída padrão. O “cat” é ainda mais simples. Ele não faz nada com os dados de entrada. Simplesmente mostra o que lê. 11.3.3 Redirecionamento de saída não-destrutivo Usando ">" para redirecionar a saída para um arquivo é destrutivo. Em outras palavras, o comando lhomellarry/papersg Is > arquivo-lista sobreescreve o conteúdo do arquivo arquivo-lista. Se, no lugar de usar ">" você usar o simbolo ">>", a saída é adicionada ao final do arquivo dado ao invés de sobreescrevê-lo. Por exemplo, lhomellarry/papersg Is >> arquivo-lista anexa a saída do comando Is ao arquivo arquivo-lista. Acreinfo - Consultoria e Serviços de Informática 81 LINUX - Curso Básico Mantenha em mente que redirecionamentos e pipes são características do shell - que suporta o uso de ">", ">>" e "|". Não tem nada a ver com os comandos mesmos. 11.3.4 Usando pipes Já demonstramos como usar o "sort' como um filtro. Entretanto, esses exemplos assumem que você tenha dados armazenados em algum arquivo ou que vá digitar os dados da entrada padrão você mesmo. E se os dados que você quer ordenar vierem da saída de outro comando, por exemplo o Is? A opção -r do "sort" ordena os dados em ordem alfabética reversa. Se você quer listar os arquivos no diretório corrente em ordem reversa, uma maneira de fazer isso seria: lhomellarry/papersã Is english-list history-final masters-thesis notes Agora redirecione a saída do comando Is num arquivo chamado arquivo- lista: lhomellarry/papers Is > arquivo-lista lhomellarry/papers& sort -r arquivo-lista notes masters-thesis history-final english-list lhomellarry/papersã Assim você gravou a saída do Is num arquivo, e então rodou "sort -r' nesse arquivo. Mas isso é incômodo e usa um arquivo temporário para gravar os dados do Is. A solução é usar pipes. Essa é uma característica do shell que conecta uma série de comandos. A stdout do primeiro comando é enviada para a stdin do segundo comando. Neste caso, queremos mandar a stdout do Is para a stdin do sort. Use o símbolo "|" para criar um pipe, como segue: lhomellarry/papers& Is | sort -r notes masters-thesis history-final english-list lhomellarry/papersã Esse comando é menor e mais fácil de digitar. 82 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico lhomellarry& PAGER=more Note que não temos que usar o comando "export" depois de termos mudado o valor de PAGER. Só precisamos exportar uma variável uma vez. Qualquer mudança feita à variável posteriormente será automaticamente propagada para o ambiente. Frequentemente é necessário colocar as seguencias de caracteres entre aspas para previnir que o shell interprete vários caracteres como especiais. Por exemplo, você tem que colocar aspas em strings que contenham "*", "9", espaços, etc. Há muitos outros caracteres que precisam ser protegidos de interpretação do shell. Uma explicação detalhada é descrita no Bourne Shell Tutorial da SSC. As páginas de manual para um comando particular indicam se esse comando usa alguma variável de ambiente. Por exemplo, a página de manual do "man" explica que a variável PAGER é usada para especificar o comando paginador. Alguns comandos compartilham variáveis de ambiente. Por exemplo, muitos comandos usam a variável de ambiente EDITOR para especificar o editor padrão a ser usado quando um é necessário. O ambiente é também usado para informações importantes sobre a sessão de login. Um exemplo é a variável de ambiente HOME, que contém o nome do seu diretório home. lhomellarry/papersg echo $HOME lhomellarry Outra variável interessante é PS1, que define o prompt principal do shell. Por exemplo: lhomellarryk& PS1="Your command, please: " Your command, please: Para definir o prompt como antes (que contém o diretório de trabalho corrente seguido pelo símbolo "*', Your command, please: PS1="w& " lhomellarryk A página de manual do bash descreve a sintaxe usada para definir o prompt. 11.411 A variável de ambiente PATH Quando você usa o comando "Is", como o shell sabe onde encontrar o executável "Is"? De fato, o "Is" está no diretório /bin, na maioria dos sistemas. O shell usa a variável de ambiente PATH para localizar o arquivo executável para o comando que você digitou. Por exemplo, sua variável PATH pode ser definida como: !bin:/usr/bin:/usr/local/bin:. Acreinfo - Consultoria e Serviços de Informática 85 LINUX - Curso Básico Esta é uma lista de diretórios para o shell procurar. Cada diretório está separado por um “: Quando você usa o comando Is, o shell olha primeiramente em "/bin/ls", e então em "/usr/bin/ls", e assim por diante. Note que o PATH não tem nada a ver com arquivos regulares (de texto, por exemplo). Por exemplo, se você usa o comando: lhomellarry& cp foo bar o shell não usa o PATH para localizar os arquivos foo e bar - esses nomes de arquivos são assumidos como caminhos completos. O shell só usa o PATH para localizar o executável "cp". Isso economiza seu tempo, e você não precisa estar lembrando onde todos os executáveis estão armazenados. Em muitos sistemas, os executáveis estão espalhados em muitos lugares, como em [/usr/bin, /bin ou /usr/local/bin. Ao invés de dar o caminho completo para o comando (como /usr/bin/cp), você pode definir o PATH como uma lista de diretórios onde você quer que o shell procure automaticamente. Note que o PATH contém "", o que signífica o diretório de trabalho corrente. Isso permite que você crie scripts de shell ou programas e rode-os como um comando do seu diretório de trabalho corrente, sem ter que especificá-lo diretamente (como em "./makebook”). Se um diretório não está no seu PATH, o shell não vai procurar nesse diretório por comandos que devem ser rodados; essa regra inclui também o diretório de trabalho corrente. 11.4.2 Scripts de inicialização do Shell Além de scripts de shell que você cria, há uma série de scripts que o shell usa para certos propósitos. Os mais importantes são os scripts de inicialização, que são scripts executados pelo shell quando você dá login. Os scripts de inicialização são bem simples. Entretanto, eles inicializam seu ambiente executando comandos automaticamente quando você loga. Se você sempre usa o comando "mail" para verificar seus e-mails quando entra, você pode colocar esse comando no script de inicialização para executá-lo automaticamente. Tanto o bash quanto o tcsh fazem distinção entre um login shell e outras invocações do shell. Um login shell é o shell chamado quando você entra no sistema. Usualmente é o único shell que você usa. Entretanto, se você chama um shell de dentro do vi, por exemplo, você inicia uma nova instância do shell, que não é seu shell de login. Além disso, cada vez que você roda um script de shell, você automaticamente inicia outra instância do shell para executar o script. Os arquivos de inicialização usados pelo bash são: [etc/profile (configurado pelo administrador do sistema e executado por todos os usuários do bash no momento do login), SHOME/.bash profile (executado por uma sessão de login do bash), e SHOME/.bashrc (executado por todas as instâncias do bash que não sejam de login). Se o .bash profile não está presente, o "profile" é usado no lugar. O tcsh usa os seguintes scripts de inicialização: /etc/csh.login (executado por todos os usuários do tcsh no momento do login), $HOME/.tcshrc (executado no momento do login e a cada nova instância do 86 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico tcsh), e SHOME. login (executado no momento do login, após o .tcshrc). Se o "tcshre" não está presente, o ".cshrc” é usado no lugar. Um guia completo de programação shell estaria além do escopo deste livro. Veja as páginas do manual para o bash e o tcsh para aprender mais sobre personalizar o ambiente Linux. Acreinfo - Consultoria e Serviços de Informática 87 LINUX - Curso Básico Os y's vão continuar infinitamente. Você pode matar o processo pressionando a tecla de interrupção (Ctrl-C). Para que você não tenha que lidar com uma lista inoportuna de y's, vamos redirecionar a saída padrão do "yes" para /dev/null. Como você pode lembrar, /dev/null age como um "buraco negro" para os dados. Qualquer dado mandado para /dev/null desaparece. Esse é um método efetivo de calar um programa que "fala" muito. lhomellarryé yes > /dev/null Ah, bem melhor! Nada é impresso, mas o prompt do shell não volta. Isso porque o "yes" ainda está rodando, e mandando uma monte desses y's inúteis para o /dev/null. Novamente, para matar a tarefa, pressione a tecla de interrupção. Vamos supor que você queira que o comando "yes" continue rodando, mas quer ter o prompt do shell de volta para que possa continuar trabalhando. Você pode colocar o "yes" em segundo plano, permitindo que ele rode e sem que você tenha que interagir. Uma maneira de colocar o processo em segundo plano é anexar um caracter "&” no fim da linha de comando. lhomellarryé yes > /devinull & [1] 164 lhomellarryk Como você pode ver, o prompt do shell retornou. Mas o que é esse "[1] 164"? E o comando yes está realmente rodando? O "[1]" representa o número da tarefa para processo yes. O shell determina um número de tarefa para cada tarefa rodando. Como o yes é o primeiro e único arquivo que nós estamos rodando, ele recebe o número de tarefa 1. 0 "164" é o ID do processo, ou PID (process id), número dado pelo sistema para a tarefa. Você pode usar qualquer dos dois números para fazer referência à tarefa, como vamos ver mais tarde. Agora você tem o processo "yes" rodando em segundo plano, mandando continuamente uma lista de y's para o /dev/null. Para verificar o estado do processo, use o comando interno do shell, "jobs". lhomellarryk jobs [1]+ Running yes > /dev/null & lhomellarryk Com certeza, lá estará ele. Você também pode usar o comando ps, como demonstrado acima para verificar o estado da tarefa. Para matar a tarefa, use o comando kill. Esse comando recebe o número da tarefa ou o ID do process como um argumento. Esse era a tarefa de número 1, assim, usando o comando: lhomellarry& kill %1 mata a tarefa. Quando identificar uma tarefa pelo número de tarefa, você deve usar o caracter de percentagem (%) como prefixo ao número. 90 Acreinfo - Consultoria e Serviços de Informática LINUX - Curso Básico Agora que você matou a tarefa, use o comando jobs novamente para verificar seu estado. lhomellarryk jobs [1]+ Terminated yes > /dev/null & lhomellarryk A tarefa está, de fato, morta, e se você usar o comando jobs ainda mais uma vez, nada deve ser mostrado. Você também pode matar uma tarefa usando o PID do processo, mostrado junto com o número da tarefa quando você a iniciou. Em nosso exemplo, o ID do processo é 164, então o comando: lhomellarryk kill 164 é equivalente ao lhomellarry& kill %1 Você não deve usar o caracter "%" quando fizer referência a uma tarefa pelo ID do processo. 12.4 Parando e reiniciando tarefas Há outra forma de colocar uma tarefa em segundo plano. Você pode iniciar uma tarefa normalmente (em primeiro plano), parar o processo, e então reiniciá-lo em segundo plano. Primeiro, inicie o processo yes em primeiro plano, como você fez antes: lhomellarryé yes > /dev/null Novamente, como o yes está rodando em primeiro plano, você não vai receber o prompt do shell de volta. Agora, ao invés de interromper o processo com Ctrl-C, suspenda a tarefa. Suspender uma tarefa não a aborta. Somente a pára temporariamente até que você a reinicie. Para fazer isso, pressione a tecla de suspender, que normalmente é Ctrl-Z. lhomellarryé yes > /dev/null (Ctrl-Z) [1]+ Stopped yes > /dev/null lhomellarryk Enquanto a tarefa estiver suspensa, ela simplesmente não está rodando. Nenhum tempo de CPU é usado para a tarefa. No entanto, você pode reiniciá- la, o que causa que a tarefa continue rodando, como se nada tivesse acontecido. Ela continuara de onde havia parado. Para reiniciar uma tarefa em primeiro plano, use o comando "fg" (do inglês, foreground). Acreinfo - Consultoria e Serviços de Informática 9 LINUX - Curso Básico lhomellarry& fg yes > /dev/null O shell mostra o nome do comando novamente para que você saiba qual tarefa você colocou em primeiro plano. Pare a tarefa novamente com Ctrl- Z. Desta vez, use o comando "bg" para colocar a tarefa em segundo plano. Isso faz com que o comando rode como se você o tivesse iniciado com o caracter "&" (ver seção anterior). lhomellarryk bg [1]+ yes > /dev/null & lhomellarryk E você vai ter o prompt de volta. O comando "jobs" também deve mostrar que o "yes" está rodando, e você pode matar a tarefa com o kill, como fez antes. Como você pode parar a tarefa novamente? Usar o Ctrl-Z não vai funcionar, pois a tarefa está em segundo plano. A resposta é colocar a tarefa em primeiro plano com fg, e só então pará-la. Como você deve ter notado, pode usar o fg tanto em processos parados como em processos em segundo plano. Essa é uma grande diferença entre uma tarefa em segundo plano e uma tarefa que está parada. Uma tarefa parada não está rodando - ela não está usando nenhum tempo de CPU, e não está fazendo qualquer trabalho (a tarefa ainda ocupa memória do sistema, embora ele pode ter sido jogado para swap no disco). Uma tarefa em segundo plano está rodando e usando memória, bem como completando algum serviço enquanto você faz outro trabalho. Entretanto, uma tarefa em segundo plano pode tentar exibir texto em seu terminal, o que pode ser incômodo se você está tentando trabalhar em alguma outra coisa. Por exemplo, se você usar o comando: lhomellarry& yes & sem redirecionar a stdout para /dev/null, uma lista de y's será mostrada na sua tela, sem que você tenha uma maneira de interrompê-la. (Você não pode usar o Ctrl-C para interromper tarefas em segundo plano). Para parar essa lista infinita de y's, use o comando "fg" para trazer a tarefa para primeiro plano, e depois use o Ctrl-C para matá-la. Outra nota: os comandos fg e bg normalmente afetam as a última tarefa parada (indicada por um "+" seguindo o número da tarefa quando você usa o comando jobs). Se você estiver rodando múltiplas tarefas de uma vez, você pode colocar tarefas em primeiro ou segundo plano fornecendo o número da tarefa como argumento aos comandos fg ou bg, com no exemplo: lhomellarry& fg %2 (coloca a tarefa 2 em primeiro plano), ou lhomellarryt bg %3 92 Acreinfo - Consultoria e Serviços de Informática
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved