====== UNIX: O ambiente de trabalho ====== ===== Sessão de trabalho ===== O uso de UNIX se baseia na noção de //sessão de trabalho//. Cada usuário é designado por um //nome de login//, ou simplesmente //login//, com uma senha secreta associada. Uma sessão de trabalho típica consiste das seguintes etapas: * O usuário identifica-se, fornecendo seu nome de login e sua senha ao sistema. * A sessão de trabalho inicia, com o lançamento do shell (modo texto) ou do ambiente (modo gráfico). * Uso do sistema (lançamento de comandos e aplicações). * Fim da sessão (operação de //logout// ou //logoff)//. O UNIX pode gerenciar diversas sessões simultâneas de usuários distintos na mesma máquina. Cada um terá uma visão independente e transparente dos recursos disponíveis, sem conflitos ou interferências. ===== Interfaces gráficas ===== No UNIX a interface gráfica é completamente separada do núcleo do sistema operacional. Isso permite uma grande versatilidade em relação aos ambientes gráficos disponíveis. A interface gráfica é construída em dois níveis: * O servidor gráfico X-Window, que oferece as funcionalidades gráficas básicas, gerencia entidades básicas como regiões de tela e trata eventos relacionados à interface (como operações de mouse e teclado). * O ambiente de trabalho, composto por vários processos, que implementam a decoração das janelas, menus, ícones, desktops virtuais, etc. {{xwindows.png}} Algumas características importantes diferenciam a arquitetura gráfica do UNIX daquela implantada em outros sistemas: * O **ambiente gráfico é implementado fora do núcleo**. Com isso eventuais falhas na interface gráfica não comprometem a estabilidade do sistema. * A comunicação entre o servidor gráfico, o ambiente e as aplicações é feita através de **sockets TCP/IP**, usando um protocolo especial chamado **X-Protocol**. Com isso é possível estabelecer conexões gráficas entre aplicações e servidores gráficos em máquinas separadas. * Os processos que implementam o ambiente de trabalham são executados com o identificador do usuário (UID), com isso várias sessões gráficas distintas podem ser suportadas na mesma máquina, em displays distintos. * Existem dezenas de possibilidades de ambientes gráficos distintos, à escolha do usuário. As aplicações gráficas irão executar sobre todos eles, sem necessidade de versões específicas para um ou outro ambiente. Os ambientes gráficos usados em nosso curso são o [[http://www.kde.org|KDE]] e o [[http://www.gnome.org|Gnome]], que executam sobre um processo servidor X-Window padrão ([[http://www.x.org|X.Org]]). ===== Documentação on-line ===== O sistema UNIX implementa um sistema de documentação //on-line// simples, mas bastante útil e eficiente, chamado **páginas de manual** (//man pages//). As páginas de manual estão estruturadas em sessões: * Sessão 1: Comandos do usuário. * Sessão 2: Chamadas ao sistema operacional (em linguagem C) * Sessão 3: Bibliotecas e funções standard (idem) * Sessão 4: Descrição de dispositivos e formatos de arquivos de dados * Sessão 5: Formato de arquivos de configuração * Sessão 6: Jogos * Sessão 7: Diversos * Sessão 8: Comandos de administração do sistema O acesso às páginas de manual é normalmente efetuado através do comando man. Assim, man ls apresenta a página de manual do comando ls, enquanto man man apresenta a página de manual do próprio comando man. Os ambientes gráficos oferecem ferramentas gráficas para a consulta às páginas de manual, geralmente acessíveis através de um ícone na barra de ferramentas. ===== Usuários e grupos ===== A noção de usuário está muito presente em UNIX: * Cada usuário registrado possui um nome de login, uma senha e um identificador numérico associado (UID). * Os usuários são organizados em grupos. * Um usuário sempre pertence a um grupo primário e pode pertencer a outros grupos secundários. * Cada grupo é identificado por um nome e um identificador de grupo (GID). * O comando ''id'' //user// permite visualizar as informações de usuários e grupos. * O comando ''finger'' //user// oferece informações adicionais sobre um usuário. A informação de usuário e grupo é usada pelo sistema para gerenciar o acesso aos recursos (arquivos e diretórios) e para a gerência dos processos de usuários distintos. ===== O usuário root e outros usuários especiais ===== O usuário com UID = 0 é chamado "root" e possui poderes especiais no sistema: * Acesso a todos os arquivos e diretórios * Reboot/shutdown do sistema * Lançamento e cancelamento de qualquer processo * Montagem de diretórios de rede e de dispositivos externos Assim, torna-se óbvio que a senha de root é de grande importância para a segurança do sistema. Além do root, outros usuários são definidos para a implantação de serviços específicos. Esse é o caso dos usuários **"bin"**, **"daemon"**,**"lp"**, **"mail"**, **"news"**, **"ftp"** e **"nobody"**, que não correspondem a seres humanos. Normalmente esses usuários não são acessíveis via login, existindo apenas internamente no sistema. ===== O shell básico ===== O shell é um programa que permite o uso do sistema através de uma interface em linha de comandos. Existem diversos estilos de shell, sendo os mais comuns o //Bourne Shell// (sh) e o //C-Shell //(csh). Neste curso usaremos o BASH (//Bourne Again SHell//), escolhido por ser o shell padrão na maior parte dos sistemas UNIX. Apesar da interface em linha de comandos ser um conceito considerado antiquado, o shell oferece mecanismos para tornar a vida do usuário mais simples e produtiva. Além disso, é uma ferramenta de valor inestimável para operações em máquinas remotas. ===== O sistema de arquivos ===== O sistema de arquivos do UNIX possui as seguintes características fundamentais: * É estruturado na forma de uma **árvore única**, iniciando pelo diretório "/", que é chamado de "raiz". * Há suporte para arquivos, diretórios e links (atalhos). * Os **arquivos podem ter qualquer nome**, usando quaisquer caracteres, com distinção entre maiúsculas e minúsculas. Os nomes são normalmente limitados a 255 caracteres. * O caractere separador de diretórios é o "/" (barra). * Arquivos e diretórios cujos nomes começam com "**.**" (ponto) são considerados "**ocultos**" e normalmente não aparecem nas listagens de diretórios. * As extensões são normalmente usadas apenas para facilitar a vida do usuário, mas não são importantes para o sistema operacional, que não depende delas para identificar o conteúdo de um arquivo. * Os arquivos e diretórios possuem permissões de acesso controláveis por seus proprietários. ===== Principais diretórios ===== Os diretórios de um sistema de arquivos UNIX têm uma estrutura pré-definida, com poucas variações. A seguir ilustramos os principais: * ''/home'': raiz dos diretórios home dos usuários. * ''/boot'': arquivos de boot (núcleo do sistema, etc) * ''/var'': arquivos variáveis, áreas de spool (impressão, e-mail, news), arquivos de log * ''/etc'': arquivos de configuração dos serviços * ''/usr'': aplicações voltadas aos usuários * ''/tmp'': arquivos temporários * ''/mnt'': montagem de diretórios compartilhados temporários * ''/bin'': aplicações de base para o sistema * ''/dev'': arquivos de acesso aos dispositivos físicos e conexões de rede * ''/lib'': bibliotecas básicas do sistema ===== O diretório HOME ===== Cada usuário possui um diretório especial, chamado "**diretório home**" (casa), onde são armazenados: * arquivos e diretórios pessoais de trabalho * e-mails já lidos (folders pessoais) * arquivos de configuração individuais * configuração das aplicações usadas O diretório **home** do usuário é o seu local de início de sessão de trabalho (via shell ou gráfica). O usuário possui plenos poderes de acesso ao seu diretório home (e seus sub-diretórios), e normalmente não pode criar arquivos fora dele. O diretório home de cada usuário é normalmente inacessível aos outros usuários, mas isso pode ser controlado pelo administrador do sistema (root).