1. Breve história O sistema Unix foi desenvolvido nos laboratórios Bell durante 1.969. Nos laboratórios Bell, propriedade da companhia telefónica estadounidense ATT, Ken Thompson e Dennis Ritchie junto com um pequeno grupo de colaboradores, criarom um sistema de tempo compartido e de uso geral ajeitado e cómodo abondo para atrair a um grande número de usuários. Em 1.973 Ritchie e Thompson reescreverom o núcleo (kernel em inglês) de Unix na linguagem de programaçom C, rompendo coa tradiçom de que o software de sistemas estivesse escrito em linguagem ensambladora. O sistema adquiriu daquela a estrutura básica que apresenta hoje em dia. Dado que Unix está escrito numha linguagem de alto nível como é o C, resulta totalmente portável, adaptando-se ao jogo de instruçons de diversas máquinas. Cara 1.974 foi introduzido nas universidades, com fins educativos e ao cabo de poucos anos estava já disponível para o seu uso comercial. Por aquela época, os sistemas Unix prosperarom nos laboratórios Bell e de ali difundirom-se a outros laboratórios e a distintas companhias de desenvolvimento de software e telefonia. Desde entom começou-se a usar em todo o mundo e instalou-se em miles de sistemas, desde micro até macrocomputadoras. Originariamente, Thompsom tomara como referência o sistema multiusuário de Bell e General Electric, o MULTICS (MULTiplexed Information Computing Service), fazendo umha versom monousário do mesmo que recebeu o nome UNICS (UNiplexed Information Computing Service). Cronologia 1.969 O sistema operacional Unix é desenvolvido por primeira vez por Ken Thompson e Dennis Ritchie nos laboratórios Bell. A primeira versom fam-na em ensamblador para a máquina PDP7. 1.970 Thompson define a linguagem B e redefine Unix em B. Unix é portado a PDP-11/20 com runoff. Adoptado por laboratórios Bell como processador de textos. 1.972 Ritchie define a linguagem C a partir do B. 2nd edition "O número de estaçons Unix eleva-se a 10 e aguarda-se que siga medrando". 1.973 Unix reescreve-se em C deixando-se a prática totalidade do mesmo escrito em dita linguagem de alto nível. 1.974 4th edition. 1.977 5th & 6th edition. 1.979 7th edition: ascendente directo das versons actuais. Existem muitas versons de Unix, ainda que todas possuem praticamente o mesmo sistema, pero adaptado a diferentes arquitecturas de ordenadores. As versons mais importantes de Unix som System V e Unix BSD. System V Unix BSD A maioria dos fabricantes oferecem um sistema Unix coas suas próprias inovaçons: SunOS, Solaris (este combina sistema de arquivos de BSD com conceitos de System V) de Sun Microsystems. Ultrix de Digital Equipment Corporation (DEC) HP-UX de Hewlett-Packard (HP) AIX de International Business Machines (IBM). XENIX de Microsoft (MS) Linux para PCs, de livre distribuçom. Com tantas versons diversas é lógico que tenha havido intentos de unificaçom: POSIX (Portable Operating System unIX): foi o intento mais relevante de unificaçom do System V e Unix BSD, por parte do IEEE. OSF (Open Software Foundation): empresas como IBM, DEC, HP criam a sua versom para competir com ATT. 2. Início de sessom Para que um usuário poda aceder ao sistema Unix deve de ter umha identificaçom, USER_ID que será proporcionada polo administrador do sistema, e umha contrasenha, password. Esta clave só a conhecerá o próprio usuário, protegendo desta forma o aceso de qualquer outro usuário à sua informaçom. Os passos a seguir som os seguintes. Em primeiro lugar aparecerá em pantalha: login: O usuário introduzirá o seu nome de usuário ou login_name. Tras premer Enter, o sistema pedirá que se introduza a palavra clave: password: Se o usuário se equivocou, ou nom conhez a clave porque nom tenha aceso, aparecerá a seguinte mensagem: login incorrect Haverá que tentá-lo de novo. Umha vez que se acedeu ao sistema, inicia-se o intérprete de comandos (shell em inglês), principal interface entre o sistema e o usuário. Aparecerá em pantalha o carácter ou símbolo de espera (prompt em inglês) indicando ao usuário que o sistema está listo para aceitar comandos. Estes comandos som solicitudes para que o sistema leve a cabo algumha acçom. Para finalizar a sessom com Unix, o usuário deve asegurar-se de que tem finalizado todos os seus trabalhos. Daquela, tecleando o comando: logout Rematará-se a sessom. Outra forma de sair do sistema é tecleando o carácter Control-D (^D). 3. A interface de usuário Ao iniciar a sessom, entra em funcionamento o intérprete de comandos, um programa denominado shell ("cuncha" em inglês), invocado polo login shell do usuário. Actualmente os tipos de IC's mais usados som o IC de Bourne: sh, desenvolvido por S.R.Bourne e o C-Shell: csh, de William Joy. O IC possue umha série de variáveis configuráveis polo usuário que definem o comportamento do sistema. Umha das mais importantes é TERM, que identifica o tipo de terminal desde o qual o usuário está acedendo ao sistema. Unix oferece ao usuário multitude de comandos para ser executados. A sintaxe seguida é a seguinte. Um comando consiste numha ou duas palavras separadas por espaços. Estas palavras som o próprio comando e os seus argumentos (parámetros secundários). A linha de comando acaba quando se preme Enter. Numha mesma linha podem-se introduzir vários comandos, separados por ponto e coma ";". Acompanhando ao comando, tamém podem aparecer umha série de bandeiras (flags em inglês), que indicam umha opçom do mesmo. O formato é o seguinte: nome_comando [-flag]...[arg]... Os corchetes indicam que essa parte é opcional. Depois de receber um comando, o IC processa-o e executa-o. Quando remata, aparece de novo o indicativo, fazendo-lhe saber ao utente que já pode introduzir o seguinte. Quando se quer deter a execuçom de um comando, introduzirá-se o carácter Control-C (^C). Um comando importante que deve chamar-se reciém se acede ao sistema fixa o tipo de terminal do usuário, e será: export TERM=vt100 Para obter ajúda sobre qualquer comando existe umha utilidade chamada man (de manual) que amosa páginas da documentaçom disponível. A sintaxe é: man <nome_de_comando> 4. Jerarquia de arquivos Acesso a arquivos e diretórios Ao igual que outros sistemas operacionais, Unix permite aos seus usuários introduzir os seus programas e dados em arquivos que lhe som acessíveis. A estrutura utilizada para armazenar e gerir os arquivos denomina-se sistema de arquivos. Os arquivos de Unix acham-se estruturados como umha árvore, onde o arquivo raiz vem dado polo símbolo "/". Se um arquivo contém um programa ou dados, assim se chamará. Se o que contém som os endereços de outros arquivos, chamará-se-lhe diretório. O diretório home Cada usuário do sistema tem associado um diretório, ao que acede quando inícia a sessom. Este diretório denomina-se diretório home ou "de usuário". Soi pendurar de outro diretório, que à sua vez conterá todos os diretórios home de usuários que pertençam ao mesmo grupo. Os arquivos criados polo usuário armazenarám-se por defeito neste diretório, e herdarám o diretório home do seu predecessor. É convinte que o usuário tamém organize jerarquicamente os seus arquivos, criando subdiretórios. O comando
Necessita-se algum mecanismo que permita navegar pola jerarquia de arquivos e diretórios. Para aceder a um diretório determinado usa-se o comando:
cd diretório
Hai distintas maneiras de indicar o diretório:
1. A primeira é introduzindo a trajectória completa (i.e. o primeiro carácter é /) a seguir, desde o diretório raiz, até o lugar onde se acha o diretório ao que se quer aceder. Partindo do diretório raiz /, todos os componentes do caminho se separarám mediante /. Por exemplo:
$ cd /home/x3/x3122/so2/programas/fontes-c
2. A segunda é introduzindo a trajectória relativa (i.e. o primeiro carácter nom é /) desde o diretório no que estamos (pode-se saber tecleando a ordem pwd).
$ pwd /home/x3/x3122/so2
$ cd programas/fontes-c
O diretório actual referencia-se por . (um ponto) e o diretório pai do actual, por .. (dous pontos).
Outros comandos básicos
Diretórios do sistema
O sistema Unix utiliza a estrutura de sistema de arquivos antes exposta para armazenar e gerir os seus programas e dados. Os diretórios empregados polo sistema denominam.se diretórios do sistema e contêm executáveis, programas fonte, documentaçom, bases de dados para a gestom do sistema, etc.
Em Unix o conceito de arquivo é universal. Os dispositivos do sistema, como os terminais, as impressoras, os discos som considerados arquivos.
A continuaçom explicarám-se as funçons de cada um dos diretórios do sistema. O diretório de máximo nível é "/". Del penduram:
bin boot dev etc lib tmp vmunix usr
/vmunix é o programa do núcleo de Unix: quando o sistema começa a sua execuçom, /vmunix carrega-se de disco a memória e começa a se executar. Em realidade o processo tem lugar em dous passos: primeiro carrega-se o arquivo /boot, e logo este lê /vmunix.
/bin (binários) contém os comandos básicos do sistema, é dizer, os programas executáveis.
/dev contém os arquivos de dispositivos. Como já explicámos, Unix trata os periféricos do sistema (unidades de cinta, impressoras, ...) como arquivos.
/etc contém vários arquivos administradores, como o arquivo de contrasenhas (/etc/password) e alguns programas do sistema como /etc/getty que inicializa a conexom de terminais; ou /etc/rc que é um arquivo de shell (shell script) que se executa depois do arranque do sistema.
/lib contém principalmente partes do compilador de C tais como /lib/cpp, o preprocessador de C, ou /lib/libc.a, a biblioteca de subrutinas de C.
/tmp armazena os arquivos de curta vida, criados durante a execuçom de algum programa.
/usr denomina-se sistema de arquivos do usuário, ainda que este pode nom ter muito que ver cos verdadeiros usuários do sistema. Ao igual que em /, existem diretórios chamados /usr/bin, /usr/lib, /usr/tmp. Estes diretórios têm funçons semelhantes aos seus homónimos em /, pero contêm programas nom tam importantes para o sistema.
5. Protecçom de arquivos
Os desenhadores de Unix considerarom que a seguridade nom era um dos objectivos primordiais do sistema. De facto, os mecanismos de protecçom de arquivos e diretórios implantados no sistema consideram-se um impedimento para o logro principal meta do sistema Unix: a criaçom de um entorno de trabalho em equipa, no que se poda compartir informaçom.
O resultado é que qualquer usuário pode navegar polo sistema de arquivos de Unix, e unicamente nom terá acesso aos arquivos sobre os que o seu proprietário previamente nom tenha dado permiso.
Em Unix, cada arquivo tem um conjunto de permisos associados que determinam que pode fazer-se co arquivo e quem o pode fazer. Para isto emprega-se um código de 9 bits (bits de protecçom), que especificam o acesso ao arquivo por parte de três classes de usuários:
proprietário 3 primeiros bits: que pode fazer o dono do arquivo grupo 3 seguintes bits: que podem fazer os membros do mesmo grupo que o dono resto 3 restantes bits: que podem fazer o resto dos usuários do sistema
À sua vez, cada um dos três bits especifica o acesso que tem o tipo de usuário em qüestom. Os permisos som os seguintes:
r permiso de leitura (primeiro bit de cada grupo de três bits) w permiso de escritura (segundo bit de cada grupo de três bits) x permiso de execuçom (terceiro bit de cada grupo de três bits)
O comando utilizado para modificar os permisos de um arquivo é o seguinte:
chmod modo arquivo
onde modo se indica com números em base 8, por exemplo 644 para os permisos rw-r--r--
Sem embargo, existe um usuário especial em todo sistema Unix, o superusuário que podera ler ou modificar qualquer arquivo do sistema. A clave de acesso especial root possue privilégios de superusuário. Soi ser empregada polos administradores do sistema quando levam a cabo o mantimento do mesmo. Existe ademais um comando su que otorga o mesmo permiso, sempre e quando se conheça a palavra clave do root.
6. Processos
Até agora, o intérprete de comandos utilizou-se para executar certos comandos. depois havia que aguardar o resultado. Quando aparecia de novo o indicador (prompt), introduzia-se outro comando. Era um mecanismo estrictamente seqüencial. Pero Unix oferece umha forma de execuçom mais potente e eficiente. Nom será necessário esperar a que um trabalho termine de se executar para lançar a execuçom de outro, ambos poderám-se executar de modo concorrente.
Quando o processamento de um programa consome muito tempo, o que se pode fazer é executá-lo em segundo plano (background). Isto indica-se co carácter & ao final do comando. Entom aparecerá o símbolo do intérprete de comandos, indicando que se pode introduzir umha nova ordem.
Quando se lança o comando em background, aparecem a continuaçom dous números, o primeiro é o "número de trabalho" (job number) e o segundo o "identificador de processo" (PID). Um processo é um programa em execuçom. O usuário poderá utilizar o identificador de processo para se referir a um programa específico em execuçom. Se se executam distintos programas ao mesmo tempo, cada um deles é um processo com um identificador distinto.
O comando wait espera até que todos os processos lançados em background rematem.
O usuário pode utilizar o identificador do processo desplegado pola shell para deter um processo iniciado com & da seguinte forma:
kill -9 id_processo
Para obter a lista de todos os processos que se estám executando no sistema num momento dado, usa-se o comando ps. Por exemplo, no nosso sistema, num momento dado:
PID TT STAT TIME COMMAND 3227 p3 S 0:00 -csh (csh) 3234 p3 R 0:00 ps
onde PID é o identificador de processo e COMMAND é o programa em execuçom.
Para que o usuário poda ver os seus processos em execuçom deve teclear:
ps -u <nome_usuário>
Todo comando tem um número de trabalho associado que permite trabalhar com el. Aqueles comandos que nom se executem em background e consomam tempo de mais podem abortar-se com ^C ou podem durmir-se com ^Z. Umha vez durmido, pode-se passar de primeiro a segundo plano co comando bg.
O comando jobs lista os números de trabalhos de aqueles comandos que se estám executando nesse momento. Se desejamos "despertar" a um processo durmido só temos que teclear:
$ fg %<número_trabalho>
Se queremos despertar um processo durmido e que a sua execuçom nom nos impida seguir entrando comandos, teclearemos:
$ bg %<número_trabalho>
Se queremos matar um processo durmido usaremos a ordem
$ kill <número_processo>
Os processos possuem a mesma classe de estrutura jerárquica que os arquivos, cada processo tem um processo predecessor (pai) e pode ter sucessores (filhos). A shell de usuário foi criada por um processo associado ao terminal que se conecta ao sistema. Enquanto se executam comandos, esses processos som os filhos directos do intérprete de comandos. Se se executasse um programa dentro de algum deles, geraria-se um processo filho do mesmo que à sua vez seria neto do intérprete de comandos.
|