UM BREVE HISTÓRICO •Unix é um sistema de grande popularidade por sua portabilidade e flexibilidade; •O Unix foi criado pelo laboratório Bell subsidiária da AT&T no final da década de 60, sendo suas primeiras versões criadas em Assembler; •Em 1973, Dennis Ritchie reescreveu o UNIX na linguagem C, o que tronou possível transportar o sistema Unix de uma arquitetura para outra com um mínimo de esforço. CONCEITOS BÁSICOS •Sistema Operacional É um programa que gerencia a utilização dos recursos da máquina. - Multiusuário Vários usuários têm acesso ao sistema simultaneamente - Multitarefa Cada usuário pode executar várias tarefas simultaneamente CONCEITOS BÁSICOS •Programa É uma seqüência de instruções que o computador executa. Normalmente está armazenado em disco sob a forma de um arquivo. •Processo Quando um programa está executando, é chamado processo. ARQUITETURA DO SISTEMA UNIX USUÁRIOS APLICAÇÕES COMANDOS SHELL Kernel/Núcleo Função: •Organizar processos; •Gerenciar memória; •Gerenciar armazenamento em disco; •Supervisiona a transferência de dados dos meios de armazenamento. NÚCLEO HARDWARE Kernel/Núcleo Características: •Isola o HW através de uma interface Unix padronizada (SVR4, X-OPEN, POSIX), facilitando a portabilidade do sistema; •O usuário só acessa o Kernel via comandos; •Poucos serviços. ARQUITETURA DO SISTEMA UNIX USUÁRIOS APLICAÇÕES COMANDOS SHELL Shell Características: •É o interpretador de comandos do Unix e responsável pela comunicação entre o usuário e o computador; •Possui ferramentas que permitem programar de maneira estruturada, como linguagens de alto nível. NÚCLEO HARDWARE SESSÕES DO UNIX Loggin in •Um usuário no sistema Unix só pode usar o sistema se for devidamente autorizado no procedimento de “loggin in”, isto é ter licença para uso. SESSÕES DO UNIX Loggin in •Para evitar que usuários distintos ou não cadastrados usem o sistema em nome do outro, um usuário autorizado tem nome de sessão público e uma senha só de seu conhecimento ou do administrador por rede.. SESSÕES DO UNIX Loggin off •O comando exit fecha a sessão. SESSÕES DO UNIX Administrador do sistema •É um usuário especial (também chamado de superusuário), com poderes ilimitados, e com tarefas administrativas tais como cadastrar usuários, realizar backups, instalar ou configurar softwares ou periféricos, etc. ALGUNS COMANDOS passwd - Troca a senha do usuário. Um usuário só pode alterar sua senha, ALGUNS COMANDOS who am i - Lista o nome do usuário. ALGUNS COMANDOS who - Lista todos os usuários que estão ativos na máquina, seus respectivos terminais e a data e hora de abertura de sessão. ALGUNS COMANDOS date - Lista a data e hora do sistema. O superusuário pode executar o programa para alterar a data corrente. ALGUNS COMANDOS tty - Exibe o nome do terminal do usuário. ALGUNS COMANDOS man - Exibe um manual sobre o comando. Deve ser utilizado para se conhecer a sintaxe do comando desejado. USUÁRIOS UNIX Usuário/Grupo - Todo o usuário UNIX possui dois números que o identificam. UID (User Identifier) Identificador de usuário, está associado ao nome da sessão, que o identifica univocamente um usuário do sistema. GID (Group Identifier) Identificador de Grupo, cria o conceito de grupo, onde estão cadastrados usuários que possuem alguma coisa em comum, por exemplo, trabalham no mesmo departamento, ou em um determinado projeto. USUÁRIOS UNIX Estes identificadores são também utilizados para controle de permissão de acesso a arquivos, conforme será visto mais tarde. Exemplo de usuários e grupos de uma instalação USUÁRIO aluno1 aluno2 carlos jose pedro paulo UID 5001 5002 GRUPO GID curso 3333 curso 3333 1000 vendas 230 2134 vendas 230 5879 suporte 534 3020 suporte 534 USUÁRIOS UNIX Comando id USUÁRIOS UNIX Superusuário - Identifica o usuário com privilégios de acesso irrestrito a qualquer arquivo. Seu UID é sempre 0. Normalmente o administrador do sistema assume esta condição para poder realizar tarefas de sua competência. O comando id lista os identificadores de usuário e grupo de sua sessão. Ex. $id uid=5001(aluno1) gid=3333(curso) FORMATO DE UM COMANDO UNIX Os comandos Unix seguem um padrão,composto basicamente por três campos: nome do comando, opções e argumentos. Comando -opções argumentos O nome do comando corresponde ao nome do arquivo que contém o programa. As opções são modificadores do comportamento do comando. Os argumentos são os objetos sobre os quais o comando irá atuar. FORMATO DE UM COMANDO UNIX Cada um destes campos deve ser separado por um ou mais caracteres em branco (espaços). Normalmente as opções são letras, que devem ser precedidas pelo caractere -, podendo ser em qualquer ordem, cada letra tem um significado. Para comandos que recebem mais de um argumento, estes devem estar separados por um ou mais espaços. Em caso de dúvida, ou retorno de erro no comando, consultar o comando man referente ao comando. FORMATO DE UM COMANDO UNIX 1. Comando ls - Lista nomes de arquivos do diretório. a) comando sem opções ou argumentos. Usa opções e agumentos default. $ ls arq1 arq2 FORMATO DE UM COMANDO UNIX Exemplos: b) comando com uma opção, sem argumentos. (argumentos default). $ ls -l -rw-r--r-- 1 aluno1 curso 221 May 15 11:20 arq1 -rwxr-xr-x 1 aluno1 curso 32544 Apr 11 08:00 arq2 Com esta opção é apresentada todas as informações do arquivo FORMATO DE UM COMANDO UNIX Exemplos: c) comando com opções e argumentos. (opções: a,l,s,i; argumentos: /tmp e /var/adm): $ ls -alsi /tmp /var/adm /tmp: total 14 315 2 ... 316 2 ... /var/adm total 1240 123342 ... ......... 12342 2 24357 10 os-data license-log 38 messages FORMATO DE UM COMANDO UNIX Exemplos: 2. Comando uname a) Lista o nome do Kernel do Unix (opção default): $ uname SunOs b) Lista o nome da máquina: $ uname -n cobra c) Lista todas informações: $ uname -a SunOs cobra 5.5.1 Generic sun4u sparc SUNW,Ultra-1 PROCESSOS Ao abrir uma sessão, o usuário ganha acesso à máquina. O sistema, executa uma Shell que envia um prompt para a tela e passa a ler comandos. Cada programa em execução corresponde a um processo. Um processo tem ciclo de vida que consiste em nascer (ser criado - sempre filho de outro processo, que é quem o criou), viver (executar) e morrer (terminar sua execução). PROCESSOS Como funciona a Shell: lê um comando da linha de comandos e cria um novo processo associado ao comando. Este novo processo, depende de seu funcionamento, pode ou não criar novos. Cada sessão aberta corresponde, a pelo menos um processo ativo, associado a shell, podendo ter outros processos associados às suas aplicações ou comandos. Todo o processo possui um número que o identifica, PID (Process IDentifier). Este número é gerado pelo sistema no momento da criação do processo, desaparecendo ao seu fim. No Unix o processo que é a origem de todos os processos e o INIT, correspondendo ao PID 1. PROCESSOS Comando ps - É o comando usado para listar o estado dos processos gerados por uma determinada sessão ou de todos os processos, listando apenas os identificadores ou informações completas. Nos exemplos a seguir foi usado o comando sh. Este comando corresponde à Shell, e sua função é ler comandos do teclado e executá-los. Executar este comando várias vezes é equivalente a se abrir uma sessão dentro da outra. PROCESSOS Comando ps - Exemplos: 1. Listar os processos em execução, associados ao usuário atual $ sh $ sh $ ps PID 657 670 669 TTY pts/5 pts/5 pts/5 TIME 0:01 0:00 0:00 CMD ksh sh sh PROCESSOS Comando ps - Exemplos: 2. Listar informações completas dos processos do exemplo 1. $ ps -f UID PID PPID C STIME TTY TIME CMD aluno1 657 aluno1 670 aluno1 669 655 657 670 09:15:19 09:15:37 09:15:36 pts/5 pts/5 pts/5 0:01 0:00 0:00 0 0 0 ksh sh sh PROCESSOS 3. Listar todas as informações, de todos os processos $ ps -ef UID PID PPID C root 0 0 0 root 1 0 0 root 2 0 0 root 238 1 0 ................................... aluno1 657 655 0 aluno1 670 657 0 aluno1 669 670 0 root 770 670 1 STIME TTY TIME CMD 08:11:27 08:11:30 08:11:30 08:12:10 ? ? ? ? 0:00 0:00 0:00 0:00 sched /etc/init pageout /sbin/vold 09:15:19 09:15:37 09:15:36 09:24:28 pts/5 pts/5 pts/5 pts/5 0:01 0:00 0:00 0:00 ksh sh sh ps -ef PROCESSOS 3. Listar todas as informações, de todos os processos $ ps -ef UID PID UID PID PPID C STIME TTY TIME COMMAND PPID C STIME TTY TIME CMD - nome da sessão (identificação de usuário); - identificador de processo; - identificador de processo pai; - parâmetro associado à prioridade (não mais usado); - hora de início do processo; - nome do terminal; - tempo de execução acumulado do processo; - nome do comando que está sendo executado. SINAIS Sinais (signal, em inglês) é uma de comunicação entre processos; É possível enviar um sinal a um processo, para alterar sua execução ou informar a ocorrência de algum evento; Os sinais correspondem a números (1,2,3,4,...); Que sinais são usados e o que significam, depende da implementação do programa ou aplicação; Existe um sinal especial, o de número 9 (chamado SIGKILL), que causa o cancelamento do processo que o receber; O comando Kill gera o envio do sinal especificado ao processo indicado. SINAIS O Comando kill pode ser usado por qualquer usuário, porém somente é permitido o envio de sinais a processos que tenham sido gerados pela mesma sessão de quem está enviando o sinal, no caso de superusuário é permitido o envio a qualquer processo. Exemplo: Cancelar o processo de PID=657 $ kill -9 657 Existe um outro sinal (chamado SIGINTR), que pode ser gerado pelo teclado e causa, para a maioria dos comandos, o seu cancelamento. Para ser gerado deve ser digitado o caractere c, estando pressionando a tecla crtl (representado por ^c) COMUNICAÇÃO ENTRE USUÁRIOS Neste item serão discutidos três comandos de comunicação entre usuários: mail, write e talk. mail - Comando usado para ler ou enviar correio eletrônico para outros usuários ou grupo de usuários. Use o comando mail, sem parâmetros, para ler as mensagens recebidas. Uma vez executado, o comando lista a última mensagem recebida e envia um prompt(?), passando a aceitar comandos. COMUNICAÇÃO ENTRE USUÁRIOS mail Comandos válidos: d - remove mensagem corrente; h - lista cabeçalhos das mensagens recebidas; num - lista a mensagem de número num; q - termina o comando. COMUNICAÇÃO ENTRE USUÁRIOS Exemplos: 1. Ler mensagens recebidas: $ mail From root Wed Jun 25 09:12:04 1997 Return-Path: <root> Received: by dolly. (SMI-8.6/SMI-SVR4) id JAA00638; Wed, 25 Jun 1997 09:12:03 - 0300 Date: Wed, 25 Jun 1997 09:12:03 -0300 Message-Id:<199706251212.JAA00638@dolly.> Subject: Boa tarde Content- Type: text Apparently-To:aluno@dolly Content-Length: 35 Isto e so para desejar boa tarde. COMUNICAÇÃO ENTRE USUÁRIOS Exemplos: ?2 From guga@sardinha Wed Jun 25 09:11:20 1997 Return-Path: <guga@sardinha> Received: from sardinha by dolly. (SMI-8.6/SMI-SVR4) id JAA00632; Wed, 25 Jun 1997 09:11:20 -0300 Date: Wed, 25 Jun 1997 09:11:20 -0300 Recebido: por sardinha (5.0/SMI-SVR4) id AA00388; Tue, 25 May 1993 09:12:03 +0300 Data: Tue, 25 May 1993 09:12:03 + 0300 De: guga@sardinha Message-Id: <9305251212.AAA00388@sardinha> Content-Type: text Apparently-To: aluno1@dolly Content-Length: 21 Isto é outro teste. COMUNICAÇÃO ENTRE USUÁRIOS Exemplos: ?h 3 letters found in /var/mail/aluno1, 0 scheduled for deletion, 0 newly arrived > 1997 ?q 3 369 root 2 514 guga@sardinha 1 362 root Wed Jun 25 09:12:04 1997 Wed Jun 25 09:11:20 Wed Jun 25 09:07:19 1997 COMUNICAÇÃO ENTRE USUÁRIOS Para enviar mensagens para um ou mais usuários, use a seguinte sintax: mail usuário1 usuário2 A seguir digite o corpo da mensagem, e termine digitando uma linha apenas com o caractere . (ponto), ou a seqüência de caracteres ^d (control-d). Se desejar que apareça o assunto da mensagem no cabeçalho, escreva na primeira linha a palavra. Subject: seguida do texto indicando o assunto. Para enviar mensagem para usuários de oura máquina, use a sintaxe: nome_do_usuário@nome_da_máquina COMUNICAÇÃO ENTRE USUÁRIOS Exemplo: Para enviar uma mensagem para o usuário aluno2 da máquina local e guga da máquina sardinha: $ mail aluno2 guga@sardinha Subject: Confirmação de reuinão A reunião está marcada para as 16hs. Será realizada na sala 12. . Obs. O domínio tem que ser o mesmo para se usar o mail COMUNICAÇÃO ENTRE USUÁRIOS write - comando usado para estabelecer entre dois usuários locais. Quando algum usuário, este recebe uma mensagem informando a origem, em seguida recebe as linhas, à medida em que são digitadas pelo remetente. Para terminar uma conexão digitar ^d(control d). O usuário destino pode também executar o write inverso. De modo que os dois podem se comunicar ao mesmo tempo. COMUNICAÇÃO ENTRE USUÁRIOS Exemplo: write 1. O usuário aluno1 deseja se comunicar com o aluno2: aluno1: $write aluno2 Bom dia, Vamos almoçar? ^d Na tela do aluno2, aparece a mensagem: $ Message from aluno1 on cobra (pts/5) [Tue May 25 10:57:45] Bom dia. Vamos almoçar? <EOT> COMUNICAÇÃO ENTRE USUÁRIOS Exemplo: write 1. Se o aluno2 desejar responder, deve usar $write aluno1 Vamos! ^d $ COMUNICAÇÃO ENTRE USUÁRIOS talk Comando que abre um canal de comunicação entre dois usuários. O usuário que inicia a conversa executa o comando, passando a esperar que o interlocutor receba uma mensagem do sistema, informando a solicitação de estabelecimento de conexão e execute o mesmo comando para estabelecer a conexão. Uma vez estabelecida a conexão, os dois podem digitar ao mesmo tempo, sendo que a tela do terminal de cada um deles será dividida em duas sessões, aparecendo o que for digitado pelos dois. Para encerrar a conversa, deve ser digitado ^d. Este comando pode ser executado entre máquinas remotas. COMUNICAÇÃO ENTRE USUÁRIOS Comando talk Exemplo: 1. Usuário aluno1deseja se comunicar com aluno2: $talk aluno2 (waiting for your party to respond) 2. Na tela do usuário aluno2 aparecerá: $ Message from Talk_Deamon@sardinha at 11:38 ... talk: connection requested by aluno1@sardinha. talk: respond with: talk aluno1@sardinha. 3. O usuário aluno2, para estabelecer a conexão, deve executar: $talk aluno1@sardinha COMUNICAÇÃO ENTRE USUÁRIOS mesg O comando permite o usuário receber ou não mensagens Se o usuário destino com recebimento inibido, o comando indicará erro. Exemplos: 1. Para listar o estado de recebimento de mensagens (mensagens habilitadas): $mesg is y COMUNICAÇÃO ENTRE USUÁRIOS mesg Exemplos: 2. Para inibir, e depois habilitar o recebimento de mensagens: $mesg -n $mesg -y $ 3. Com o recebimento inibido em aluno1, write de aluno2: $ write aluno1 permission denied $ SISTEMA DE ARQUIVAMENTO Arquivos são dados armazenados em um dispositivo de armazenamento como disco, CDROM ou disquete. O sistema de arquivamento do Unix organiza os arquivos na forma de uma árvore hierárquica, permitindo que os arquivos sejam agrupados em determinadas áreas da árvore, podendo conter quantos subgrupos forem necessários. root / etc hosts dev init.d rmt var tty crash dhcp SISTEMA DE ARQUIVAMENTO O Unix é um sistema multiusuário, em que muitos usuários estão autorizados a usá-lo. É implementado um mecanismo de permissões de acesso a arquivos, para que um usuário, e principalmente o próprio sistema, possa se proteger contra outros usuários. O mecanismo é baseado no identificador de usuário (UID) e grupo de usuário (GID). Todo arquivo do Unix possui um nome e um tipo. O nome pode ser qualquer um, com qualquer número de caracteres, podendo conter caracteres, maiúsculos e minúsculos (são considerados diferentes). Em um mesmo grupo, os nomes não podem ser repetidos. O tipo do arquivo corresponde a uma característica interna (não podendo ser repetido), que indica a espécie de dados que o arquivo contém. SISTEMA DE ARQUIVAMENTO Existem dois tipos de arquivos, mas os mais importantes são dois: Arquivo tipo Diretório Arquivo tipo Regular SISTEMA DE ARQUIVAMENTO Arquivo Diretório Sua função é implementar a estrutura hierárquica da árvore de arquivamento. Corresponde aos nós intermediários da árvore. Um arquivo do tipo diretório, ou simplesmente diretório, contém nomes de outros arquivos, de qualquer tipo, que são aqueles imediatamente abaixo na árvore hierárquica. SISTEMA DE ARQUIVAMENTO Arquivo Regular É usado para armazenar informações genéricas. Para o sistema, o conteúdo e formato de um arquivo deste tipo é diferente. O conteúdo é de responsabilidade de quem o criou, por exemplo texto de um editor criado por um usuário, ou um banco de dados criado por uma aplicação. Exemplo de arquivos Regular •Um texto de um documento; •Registros dos empregados de uma empresa; •Um arquivos de comando Shell; •Um programa a ser executado; •Um desenho ou um relatório a ser impresso; •Um arquivo de som. CAMINHO DE ARQUIVO O caminho de uma arquivo é a forma de se referenciar um arquivo na árvore de arquivamento Contém os nomes de todos os diretórios que se deve passar para alcançar o arquivo. Cada nome é separado pelo caracter / (barra), sem espaços intermediários Os arquivos podem ter o mesmo nome, mas com caminhos diferentes Existem duas formas de se especificar o caminho de um arquivo: • Caminho absoluto; • Caminho relativo. CAMINHO ABSOLUTO É quando se fornece o caminho do arquivo a partir da raiz da árvore A raiz do sistema de arquivamento é única, e é indistintamente chamada de / (barra), raiz, ou root Sempre que o caminho do arquivo começar pelo caractere / (barra), será considerado absoluto Um caminho absoluto representa apenas um arquivo da árvore Exemplos: /export/home/aluno1/textos/teste /export/home/aluno1 /etc/passwd /usr/openwin/bin/openwin /openwin/bin/openwin CAMINHO RELATIVO - DIRETÓRIO-CORRENTE O caminho relativo representa a localização do arquivo a partir de um ponto da árvore, ou seja, é relativo a uma determinada posição. Esta posição é dada pelo que é chamado diretóriocorrente O diretório-corrente especifica o diretório onde o usuário está posicionado. Todo caminho relativo começa com um nome de arquivo imediatamente abaixo do diretório-corrente Exemplos: teste textos textos/teste export/home/aluno1 usr/openwin/bin/openwin DIRETÓRIO DE TRABALHO Todo usuário tem um diretório de trabalho. Este diretório representa a localização preferencial do usuário dentro da árvore de arquivamento tabém conhecido como diretório HOME. Este diretório é onde se encontram seus arquivos de trabalho. Nesta região da árvore os usuários normalmente possuem poderes totais, podendo criar arquivos regulares ou diretórios, remover, alterar permissões liberando para outros, etc. Ao abrir sua sessão, o usuário é automaticamente posicionado neste diretório. Posteriormente, se necessário, ele pode se posicionar em outros pontos da árvore, desde que tenha permissão para tal. DIRETÓRIO DE TRABALHO O diretório de trabalho de um usuário é atribuído pelo Administrador ao cadastrar o usuário. Normalmente corresponde ao diretório com o nome da sessão, localizado no diretório /export/home Exemplos: /export/home/aluno1 /export/home/aluno2 COMANDOS ls Lista nomes e informações de arquivos. É o comando básico de arquivos Exemplos 1. Para listar os nomes dos arquivos contidos no diretóriocorrente: $ ls a b c d texto 2. Para listar os arquivos de diretório: $ ls /var /export/home/aluno1 /export/home/aluno1: a b c d texto /var: adm sadm uucp saf spool COMANDOS ls Informações geradas pelo comando ls, opção l: drwxr-xr-x 3 aluno1 curso 512 May 16 10:34 aluno1 nome data tamanho grup o dono Num. de links permissões tipo COMANDOS Tipo do arquivo - Contém um caractere indicando o tipo do arquivo: - : indica arquivo tipo regular; d : indica arquivo tipo diretório. Permissões do arquivo: Será visto em outro capítulo deste curso. Número de links do arquivo: Será visto em outro capítulo deste curso. Dono e Grupo: Identificador de usuário e de grupo do processo criou o arquivo. que Tamanho do arquivo: Tamanho em bytes do arquivo. Data: Data e hora da última modificação do arquivo. Nome: Nome do arquivo - relativo ao absoluto, dependendo de como foi fornecido o nome no argumento do comando COMANDOS ls Lista nomes e informações de arquivos. É o comando básico de arquivos Exemplos 3. Para listar informações sobre arquivos de um diretório (opção l, argumento, o nome): $ ls -l /export/home/aluno1 -rwxr--r-1 aluno1 curso 235 May 16 10:34 a -rwxr--r-1 aluno1 curso 425 May 16 10:34 b -rwxr--r-1 aluno1 curso 2134May 16 10:34 c drwxr-xr-x 2 aluno1 curso 512 May 16 10:34 texto COMANDOS pwd Mostra o diretório-corrente, onde o processo do usuário está posicionado no momento.(print working directory) cd Altera Mostra o diretório-corrente, onde o processo do usuário está posicionado no momento.(change directory) COMANDOS pwd e cd Exemplos 1. Listar e alterar o diretório-corrente: $ pwd /export/home/aluno1 $ cd textos $ pwd /export/home/aluno1/textos $ cd /etc $ pwd /etc COMANDOS pwd e cd Exemplos 1. Para se posicionar novamente no diretório de trabalho, use cd sem argumentos: $ cd $ pwd /export/home/aluno1 COMANDOS mkdir e rmdir Estes comandos são usados para criar ou remover diretórios. Um diretório, para ser removido, deve estar vazio. Exemplos 1. Para criar três diretórios, no diretório- corrente: $ mkdir dir1 dir2 dir3 $ ls -l “lista os arquivos e diretórios do diretório corrente” 2. Para remover um diretório: $ rmdir dir2 $ ls -l corrente” “lista os arquivos e diretórios do diretório COMANDOS mkdir e rmdir Estes comandos são usados para criar ou remover diretórios. Um diretório, para ser removido, deve estar vazio. Exemplos 1. Para criar diretórios, criando também os diretórios intermediários, se estes não existirem (opção p): $ mkdir -p /export/home/aluno1/dir4/dir $ ls -lR recurssivamente” dir1/dir/dir dir3/dir “lista os arquivos e diretórios COMANDOS Diretórios “.” e “..” Todo diretório, mesmo vazio, possui duas entradas chamadas “.” (ponto) e “..”(ponto-ponto). A entrada . é um ponteiro para o próprio diretório e .. (pontoponto) um ponteiro para o diretório-pai. O diretório “.” representa o diretório-corrente Obs. O default do comando ls é o ponto. Portanto, os dois comandos a seguir são equivalentes: $ls $ls . COMANDOS Exemplos Obs. O default do comando ls é o ponto. Portanto, os dois comandos a seguir são equivalentes: $ls $ls . 1. Para criar diretórios, criando também os diretórios intermediários, se estes não existirem (opção p):