Unix / Linux - Guia rápido

O que é Unix?

O sistema operacional Unix é um conjunto de programas que atuam como um elo entre o computador e o usuário.

Os programas de computador que alocam os recursos do sistema e coordenam todos os detalhes internos do computador são chamados de operating system ou o kernel.

Os usuários se comunicam com o kernel por meio de um programa conhecido como shell. O shell é um interpretador de linha de comando; ele traduz comandos inseridos pelo usuário e os converte em uma linguagem que é entendida pelo kernel.

  • O Unix foi originalmente desenvolvido em 1969 por um grupo de funcionários da AT&T Ken Thompson, Dennis Ritchie, Douglas McIlroy e Joe Ossanna da Bell Labs.

  • Existem várias variantes do Unix disponíveis no mercado. Solaris Unix, AIX, HP Unix e BSD são alguns exemplos. O Linux também é um tipo de Unix que está disponível gratuitamente.

  • Várias pessoas podem usar um computador Unix ao mesmo tempo; portanto, o Unix é chamado de sistema multiusuário.

  • Um usuário também pode executar vários programas ao mesmo tempo; portanto, o Unix é um ambiente multitarefa.

Arquitetura Unix

Aqui está um diagrama de blocos básico de um sistema Unix -

O principal conceito que une todas as versões do Unix é o seguinte quatro princípios básicos -

  • Kernel- O kernel é o coração do sistema operacional. Ele interage com o hardware e com a maioria das tarefas, como gerenciamento de memória, agendamento de tarefas e gerenciamento de arquivos.

  • Shell- O shell é o utilitário que processa suas solicitações. Quando você digita um comando em seu terminal, o shell interpreta o comando e chama o programa que você deseja. O shell usa sintaxe padrão para todos os comandos. C Shell, Bourne Shell e Korn Shell são os shells mais famosos que estão disponíveis com a maioria das variantes do Unix.

  • Commands and Utilities - Existem vários comandos e utilitários que pode utilizar no seu dia-a-dia. cp, mv, cat e grep, etc. são alguns exemplos de comandos e utilitários. Existem mais de 250 comandos padrão, além de inúmeros outros previstos a 3 rd software festa. Todos os comandos vêm com várias opções.

  • Files and Directories- Todos os dados do Unix são organizados em arquivos. Todos os arquivos são organizados em diretórios. Esses diretórios são organizados em uma estrutura semelhante a uma árvore chamada defilesystem.

Inicialização do sistema

Se você tiver um computador com o sistema operacional Unix instalado, basta ligar o sistema para colocá-lo em funcionamento.

Assim que você liga o sistema, ele começa a inicializar e, finalmente, solicita que você faça login no sistema, que é uma atividade para fazer login no sistema e usá-lo para suas atividades diárias.

Login Unix

Quando você se conecta pela primeira vez a um sistema Unix, geralmente vê um prompt como o seguinte -

login:

Entrar

  • Tenha em mãos sua ID de usuário (identificação do usuário) e senha. Entre em contato com o administrador do sistema se você ainda não tiver.

  • Digite seu ID de usuário no prompt de login e pressione ENTER. Seu ID de usuário écase-sensitive, portanto, certifique-se de digitá-lo exatamente como o administrador do sistema instruiu.

  • Digite sua senha no prompt de senha e pressione ENTER. Sua senha também diferencia maiúsculas de minúsculas.

  • Se você fornecer o ID de usuário e a senha corretos, terá permissão para entrar no sistema. Leia as informações e mensagens que aparecem na tela, que são as seguintes.

login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$

Você receberá um prompt de comando (às vezes chamado de $prompt) onde você digita todos os seus comandos. Por exemplo, para verificar o calendário, você precisa digitar ocal comando da seguinte forma -

$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $

Mudar senha

Todos os sistemas Unix exigem senhas para ajudar a garantir que seus arquivos e dados permaneçam de sua propriedade e que o próprio sistema esteja protegido contra hackers e crackers. A seguir estão as etapas para alterar sua senha -

Step 1 - Para iniciar, digite a senha no prompt de comando conforme mostrado abaixo.

Step 2 - Digite sua senha antiga, a que você está usando atualmente.

Step 3- Digite sua nova senha. Sempre mantenha sua senha complexa o suficiente para que ninguém possa adivinhá-la. Mas certifique-se, você se lembra disso.

Step 4 - Você deve verificar a senha digitando-a novamente.

$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $

Note- Nós adicionamos um asterisco (*) aqui apenas para mostrar o local onde você precisa inserir a senha atual e a nova senha em seu sistema. Não mostra nenhum caractere quando você digita.

Listagem de diretórios e arquivos

Todos os dados no Unix são organizados em arquivos. Todos os arquivos são organizados em diretórios. Esses diretórios são organizados em uma estrutura semelhante a uma árvore chamada sistema de arquivos.

Você pode usar o lscomando para listar todos os arquivos ou diretórios disponíveis em um diretório. A seguir está o exemplo de usols comando com -l opção.

$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $

Aqui, as entradas começando com d.....representam diretórios. Por exemplo, uml, univ e urlspedia são diretórios e o restante das entradas são arquivos.

Quem é Você?

Enquanto estiver conectado ao sistema, você pode estar interessado em saber: Who am I?

A maneira mais fácil de descobrir "quem você é" é entrar no whoami comando -

$ whoami amrood $

Experimente em seu sistema. Este comando lista o nome da conta associado ao login atual. Podes tentarwho am i comando também para obter informações sobre você.

Quem está logado?

Às vezes, você pode se interessar em saber quem está conectado ao computador ao mesmo tempo.

Existem três comandos disponíveis para obter essas informações, com base no quanto você deseja saber sobre os outros usuários: users, who, e w.

$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu  ttyp2 Oct 4 09:08 (calliope)
qadir  ttyp4 Oct 8 12:09 (dent)

$

Tente o wcomando em seu sistema para verificar a saída. Isso lista as informações associadas aos usuários logados no sistema.

Sair

Ao terminar sua sessão, você precisa se desconectar do sistema. Isso é para garantir que ninguém mais acesse seus arquivos.

To log out

  • Basta digitar o logout comando no prompt de comando e o sistema irá limpar tudo e interromper a conexão.

Desligamento do sistema

A maneira mais consistente de desligar um sistema Unix adequadamente através da linha de comando é usar um dos seguintes comandos -

Sr. Não. Comando e Descrição
1

halt

Desativa o sistema imediatamente

2

init 0

Desliga o sistema usando scripts predefinidos para sincronizar e limpar o sistema antes de desligar

3

init 6

Reinicia o sistema desligando-o completamente e reiniciando-o

4

poweroff

Desliga o sistema desligando

5

reboot

Reinicia o sistema

6

shutdown

Desliga o sistema

Normalmente você precisa ser o superusuário ou root (a conta mais privilegiada em um sistema Unix) para desligar o sistema. No entanto, em algumas caixas Unix autônomas ou de propriedade pessoal, um usuário administrativo e, às vezes, usuários regulares podem fazer isso.

Neste capítulo, discutiremos em detalhes sobre o gerenciamento de arquivos no Unix. Todos os dados no Unix são organizados em arquivos. Todos os arquivos são organizados em diretórios. Esses diretórios são organizados em uma estrutura semelhante a uma árvore chamada sistema de arquivos.

Quando você trabalha com Unix, de uma forma ou de outra, você passa a maior parte do tempo trabalhando com arquivos. Este tutorial o ajudará a entender como criar e remover arquivos, copiá-los e renomeá-los, criar links para eles, etc.

No Unix, existem três tipos básicos de arquivos -

  • Ordinary Files- Um arquivo comum é um arquivo no sistema que contém dados, texto ou instruções do programa. Neste tutorial, você verá como trabalhar com arquivos comuns.

  • Directories- Os diretórios armazenam arquivos especiais e comuns. Para usuários familiarizados com Windows ou Mac OS, os diretórios Unix são equivalentes a pastas.

  • Special Files- Alguns arquivos especiais fornecem acesso ao hardware, como discos rígidos, unidades de CD-ROM, modems e adaptadores Ethernet. Outros arquivos especiais são semelhantes a apelidos ou atalhos e permitem que você acesse um único arquivo usando nomes diferentes.

Arquivos de listagem

Para listar os arquivos e diretórios armazenados no diretório atual, use o seguinte comando -

$ls

Aqui está o exemplo de saída do comando acima -

$ls

bin        hosts  lib     res.03
ch07       hw1    pub     test_results
ch07.bak   hw2    res.01  users
docs       hw3    res.02  work

O comando ls suporta o -l opção que o ajudaria a obter mais informações sobre os arquivos listados -

$ls -l
total 1962188

drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
drwxr-xr-x  2    200    300      4096 Nov 25  2007 webthumb-1.01
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf
drwxr-xr-x 11 amrood amrood      4096 May 29  2007 zlib-1.2.3
$

Aqui estão as informações sobre todas as colunas listadas -

  • First Column- Representa o tipo de arquivo e a permissão concedida ao arquivo. Abaixo está a descrição de todos os tipos de arquivos.

  • Second Column - Representa o número de blocos de memória usados ​​pelo arquivo ou diretório.

  • Third Column- Representa o proprietário do arquivo. Este é o usuário Unix que criou este arquivo.

  • Fourth Column- Representa o grupo do proprietário. Cada usuário Unix terá um grupo associado.

  • Fifth Column - Representa o tamanho do arquivo em bytes.

  • Sixth Column - Representa a data e a hora em que este arquivo foi criado ou modificado pela última vez.

  • Seventh Column - Representa o arquivo ou o nome do diretório.

No ls -l exemplo de listagem, cada linha de arquivo começa com um d, -, ou l. Esses caracteres indicam o tipo de arquivo listado.

Sr. Não. Prefixo e descrição
1

-

Arquivo normal, como um arquivo de texto ASCII, executável binário ou link físico.

2

b

Bloquear arquivo especial. Bloquear arquivo de dispositivo de entrada / saída, como um disco rígido físico.

3

c

Arquivo especial de caracteres. Arquivo de dispositivo de entrada / saída bruto, como um disco rígido físico.

4

d

Arquivo de diretório que contém uma lista de outros arquivos e diretórios.

5

l

Arquivo de link simbólico. Links em qualquer arquivo regular.

6

p

Pipe nomeado. Um mecanismo para comunicações entre processos.

7

s

Soquete usado para comunicação entre processos.

Metacaracteres

Os metacaracteres têm um significado especial no Unix. Por exemplo,* e ?são metacaracteres. Nós usamos* para corresponder a 0 ou mais caracteres, um ponto de interrogação (?) corresponde a um único caractere.

Por exemplo -

$ls ch*.doc

Exibe todos os arquivos, cujos nomes começam com ch e terminar com .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc ch02-1.doc c

Aqui, *funciona como um metacaractere que corresponde a qualquer caractere. Se você deseja exibir todos os arquivos que terminam com apenas.doc, então você pode usar o seguinte comando -

$ls *.doc

Arquivos Escondidos

Um arquivo invisível é aquele cujo primeiro caractere é o ponto ou ponto (.). Os programas Unix (incluindo o shell) usam a maioria desses arquivos para armazenar informações de configuração.

Alguns exemplos comuns de arquivos ocultos incluem os arquivos -

  • .profile - O script de inicialização Bourne shell (sh)

  • .kshrc - O script de inicialização do shell Korn (ksh)

  • .cshrc - O script de inicialização C shell (csh)

  • .rhosts - O arquivo de configuração do shell remoto

Para listar os arquivos invisíveis, especifique o -a opção para ls -

$ ls -a

.         .profile       docs     lib     test_results
..        .rhosts        hosts    pub     users
.emacs    bin            hw1      res.01  work
.exrc     ch07           hw2      res.02
.kshrc    ch07.bak       hw3      res.03
$
  • Single dot (.) - Isso representa o diretório atual.

  • Double dot (..) - Isso representa o diretório pai.

Criação de arquivos

Você pode usar o vieditor para criar arquivos comuns em qualquer sistema Unix. Você simplesmente precisa dar o seguinte comando -

$ vi filename

O comando acima irá abrir um arquivo com o nome de arquivo fornecido. Agora, pressione a teclaipara entrar no modo de edição. Quando estiver no modo de edição, você pode começar a escrever seu conteúdo no arquivo como no programa a seguir -

This is unix file....I created it for the first time.....
I'm going to save this content in this file.

Assim que terminar o programa, siga estas etapas -

  • Pressione a tecla esc para sair do modo de edição.

  • Pressione duas teclas Shift + ZZ juntos para sair do arquivo completamente.

Agora você terá um arquivo criado com filename no diretório atual.

$ vi filename $

Editando Arquivos

Você pode editar um arquivo existente usando o vieditor. Discutiremos resumidamente como abrir um arquivo existente -

$ vi filename

Uma vez que o arquivo é aberto, você pode entrar no modo de edição pressionando a tecla ie então você pode continuar editando o arquivo. Se você deseja mover aqui e ali dentro de um arquivo, então primeiro você precisa sair do modo de edição pressionando a teclaEsc. Depois disso, você pode usar as seguintes teclas para se mover dentro de um arquivo -

  • l chave para mover para o lado direito.

  • h tecla para mover para o lado esquerdo.

  • k chave para mover para cima no arquivo.

  • j chave para mover o lado negativo no arquivo.

Assim, usando as teclas acima, você pode posicionar o cursor onde quiser editar. Assim que estiver posicionado, você pode usar oipara entrar no modo de edição. Quando terminar de editar seu arquivo, pressioneEsc e finalmente duas chaves Shift + ZZ juntos para sair do arquivo completamente.

Exibir conteúdo de um arquivo

Você pode usar o catcomando para ver o conteúdo de um arquivo. A seguir está um exemplo simples para ver o conteúdo do arquivo criado acima -

$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$

Você pode exibir os números das linhas usando o -b opção junto com o cat comando da seguinte forma -

$ cat -b filename
1   This is unix file....I created it for the first time.....
2   I'm going to save this content in this file.
$

Contando Palavras em um Arquivo

Você pode usar o wccomando para obter uma contagem do número total de linhas, palavras e caracteres contidos em um arquivo. A seguir está um exemplo simples para ver as informações sobre o arquivo criado acima -

$ wc filename
2  19 103 filename
$

Aqui está o detalhe de todas as quatro colunas -

  • First Column - Representa o número total de linhas no arquivo.

  • Second Column - Representa o número total de palavras no arquivo.

  • Third Column- Representa o número total de bytes no arquivo. Este é o tamanho real do arquivo.

  • Fourth Column - Representa o nome do arquivo.

Você pode fornecer vários arquivos e obter informações sobre esses arquivos de uma vez. A seguir está uma sintaxe simples -

$ wc filename1 filename2 filename3

Copiando arquivos

Para fazer uma cópia de um arquivo, use o cpcomando. A sintaxe básica do comando é -

$ cp source_file destination_file

A seguir está o exemplo para criar uma cópia do arquivo existente filename.

$ cp filename copyfile
$

Agora você encontrará mais um arquivo copyfileem seu diretório atual. Este arquivo será exatamente o mesmo que o arquivo originalfilename.

Renomeando arquivos

Para alterar o nome de um arquivo, use o mvcomando. A seguir está a sintaxe básica -

$ mv old_file new_file

O programa a seguir irá renomear o arquivo existente filename para newfile.

$ mv filename newfile $

o mvcomando irá mover o arquivo existente completamente para o novo arquivo. Neste caso, você encontrará apenasnewfile em seu diretório atual.

Excluindo Arquivos

Para excluir um arquivo existente, use o rmcomando. A seguir está a sintaxe básica -

$ rm filename

Caution- Um arquivo pode conter informações úteis. É sempre recomendado ter cuidado ao usar esteDeletecomando. É melhor usar o-i opção junto com rm comando.

A seguir está o exemplo que mostra como remover completamente o arquivo existente filename.

$ rm filename
$

Você pode remover vários arquivos de uma vez com o comando fornecido abaixo -

$ rm filename1 filename2 filename3
$

Streams Unix padrão

Em circunstâncias normais, cada programa Unix tem três fluxos (arquivos) abertos para ele quando é iniciado -

  • stdin- Isso é referido como a entrada padrão e o descritor de arquivo associado é 0. Isso também é representado como STDIN. O programa Unix lerá a entrada padrão do STDIN.

  • stdout- Isso é referido como a saída padrão e o descritor de arquivo associado é 1. Isso também é representado como STDOUT. O programa Unix irá escrever a saída padrão em STDOUT

  • stderr- Isso é conhecido como o erro padrão e o descritor de arquivo associado é 2. Isso também é representado como STDERR. O programa Unix escreverá todas as mensagens de erro em STDERR.

Neste capítulo, discutiremos em detalhes sobre o gerenciamento de diretório no Unix.

Um diretório é um arquivo cujo trabalho individual é armazenar os nomes dos arquivos e as informações relacionadas. Todos os arquivos, sejam comuns, especiais ou de diretório, estão contidos em diretórios.

O Unix usa uma estrutura hierárquica para organizar arquivos e diretórios. Essa estrutura costuma ser chamada de árvore de diretórios. A árvore tem um único nó raiz, o caractere de barra (/), e todos os outros diretórios estão contidos abaixo dele.

Home Directory

O diretório no qual você se encontra ao fazer login pela primeira vez é chamado de diretório inicial.

Você fará grande parte do seu trabalho no diretório inicial e nos subdiretórios que criará para organizar seus arquivos.

Você pode acessar seu diretório inicial a qualquer momento usando o seguinte comando -

$cd ~
$

Aqui ~indica o diretório inicial. Suponha que você precise ir ao diretório inicial de qualquer outro usuário, use o seguinte comando -

$cd ~username
$

Para ir para o seu último diretório, você pode usar o seguinte comando -

$cd -
$

Nomes de caminho absolutos / relativos

Os diretórios são organizados em uma hierarquia com raiz (/) no topo. A posição de qualquer arquivo na hierarquia é descrita por seu nome de caminho.

Os elementos de um nome de caminho são separados por um /. Um nome de caminho é absoluto, se for descrito em relação à raiz, portanto, nomes de caminho absolutos sempre começam com /.

A seguir estão alguns exemplos de nomes de arquivos absolutos.

/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3

Um nome de caminho também pode ser relativo ao seu diretório de trabalho atual. Os nomes de caminho relativos nunca começam com /. Em relação ao diretório inicial do usuário amrood, alguns nomes de caminho podem ter a seguinte aparência -

chem/notes
personal/res

Para determinar onde você está na hierarquia do sistema de arquivos a qualquer momento, insira o comando pwd para imprimir o diretório de trabalho atual -

$pwd
/user0/home/amrood

$

Listagem de diretórios

Para listar os arquivos em um diretório, você pode usar a seguinte sintaxe -

$ls dirname

A seguir está o exemplo para listar todos os arquivos contidos em /usr/local diretório -

$ls /usr/local

X11       bin          gimp       jikes       sbin
ace       doc          include    lib         share
atalk     etc          info       man         ami

Criação de diretórios

Agora vamos entender como criar diretórios. Os diretórios são criados pelo seguinte comando -

$mkdir dirname

Aqui, o diretório é o caminho absoluto ou relativo do diretório que você deseja criar. Por exemplo, o comando -

$mkdir mydir $

Cria o diretório mydirno diretório atual. Aqui está outro exemplo -

$mkdir /tmp/test-dir $

Este comando cria o diretório test-dir no /tmpdiretório. omkdir comando não produz saída se ele cria com sucesso o diretório solicitado.

Se você fornecer mais de um diretório na linha de comando, mkdircria cada um dos diretórios. Por exemplo, -

$mkdir docs pub $

Cria os diretórios docs e pub no diretório atual.

Criação de diretórios pais

Agora entenderemos como criar diretórios pais. Às vezes, quando você deseja criar um diretório, seu diretório ou diretórios pai podem não existir. Nesse caso,mkdir emite uma mensagem de erro da seguinte forma -

$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $

Nesses casos, você pode especificar o -p opção para o mkdircomando. Ele cria todos os diretórios necessários para você. Por exemplo -

$mkdir -p /tmp/amrood/test $

O comando acima cria todos os diretórios pais necessários.

Removendo diretórios

Os diretórios podem ser excluídos usando o rmdir comando da seguinte forma -

$rmdir dirname $

Note - Para remover um diretório, certifique-se de que está vazio, o que significa que não deve haver nenhum arquivo ou subdiretório dentro deste diretório.

Você pode remover vários diretórios de uma vez da seguinte maneira -

$rmdir dirname1 dirname2 dirname3 $

O comando acima remove os diretórios dirname1, dirname2 e dirname3, se estiverem vazios. ormdir comando não produz nenhuma saída se for bem-sucedido.

Alterando Diretórios

Você pode usar o cdcomando para fazer mais do que apenas mudar para um diretório inicial. Você pode usá-lo para mudar para qualquer diretório, especificando um caminho absoluto ou relativo válido. A sintaxe é a seguinte -

$cd dirname $

Aqui, dirnameé o nome do diretório para o qual você deseja mudar. Por exemplo, o comando -

$cd /usr/local/bin $

Mudanças no diretório /usr/local/bin. A partir deste diretório, você podecd para o diretório /usr/home/amrood usando o seguinte caminho relativo -

$cd ../../home/amrood $

Renomeando diretórios

o mv (move)comando também pode ser usado para renomear um diretório. A sintaxe é a seguinte -

$mv olddir newdir $

Você pode renomear um diretório mydir para yourdir como segue -

$mv mydir yourdir $

Os diretórios. (ponto) e .. (ponto ponto)

o filename .(ponto) representa o diretório de trabalho atual; e afilename .. (ponto ponto) representa o diretório um nível acima do diretório de trabalho atual, geralmente referido como o diretório pai.

Se inserirmos o comando para mostrar uma lista dos diretórios / arquivos de trabalho atuais e usar o -a option para listar todos os arquivos e o -l option para fornecer a lista longa, receberemos o seguinte resultado.

$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $

Neste capítulo, discutiremos em detalhes sobre permissão de arquivo e modos de acesso no Unix. A propriedade de arquivos é um componente importante do Unix que fornece um método seguro para armazenar arquivos. Cada arquivo no Unix tem os seguintes atributos -

  • Owner permissions - As permissões do proprietário determinam quais ações o proprietário do arquivo pode executar no arquivo.

  • Group permissions - As permissões do grupo determinam quais ações um usuário, que é membro do grupo ao qual um arquivo pertence, pode executar no arquivo.

  • Other (world) permissions - As permissões para outros indicam qual ação todos os outros usuários podem executar no arquivo.

Os indicadores de permissão

Enquanto estiver usando ls -l comando, ele exibe várias informações relacionadas à permissão de arquivo da seguinte forma -

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

Aqui, a primeira coluna representa diferentes modos de acesso, ou seja, a permissão associada a um arquivo ou diretório.

As permissões são divididas em grupos de três, e cada posição no grupo denota uma permissão específica, nesta ordem: ler (r), escrever (w), executar (x) -

  • Os primeiros três caracteres (2-4) representam as permissões do proprietário do arquivo. Por exemplo,-rwxr-xr-- representa que o proprietário tem permissão de leitura (r), gravação (w) e execução (x).

  • O segundo grupo de três caracteres (5-7) consiste nas permissões para o grupo ao qual o arquivo pertence. Por exemplo,-rwxr-xr-- representa que o grupo tem permissão de leitura (r) e execução (x), mas nenhuma permissão de gravação.

  • O último grupo de três caracteres (8-10) representa as permissões para todos os outros. Por exemplo,-rwxr-xr-- representa que existe read (r) apenas permissão.

Modos de acesso a arquivos

As permissões de um arquivo são a primeira linha de defesa na segurança de um sistema Unix. Os blocos básicos de construção de permissões Unix são osread, write, e execute permissões, que foram descritas abaixo -

Ler

Concede a capacidade de ler, ou seja, ver o conteúdo do arquivo.

Escreva

Concede a capacidade de modificar ou remover o conteúdo do arquivo.

Executar

O usuário com permissões de execução pode executar um arquivo como um programa.

Modos de acesso ao diretório

Os modos de acesso ao diretório são listados e organizados da mesma maneira que qualquer outro arquivo. Existem algumas diferenças que precisam ser mencionadas -

Ler

O acesso a um diretório significa que o usuário pode ler o conteúdo. O usuário pode olhar para ofilenames dentro do diretório.

Escreva

Acesso significa que o usuário pode adicionar ou excluir arquivos do diretório.

Executar

Executar um diretório realmente não faz sentido, então pense nisso como uma permissão transversal.

Um usuário deve ter execute Acesso ao bin diretório para executar o ls ou o cd comando.

Alterando Permissões

Para alterar as permissões de arquivo ou diretório, você usa o chmod(modo de mudança) comando. Existem duas maneiras de usar chmod - o modo simbólico e o modo absoluto.

Usando chmod no modo simbólico

A maneira mais fácil para um iniciante modificar as permissões de arquivo ou diretório é usar o modo simbólico. Com permissões simbólicas, você pode adicionar, excluir ou especificar o conjunto de permissões desejado usando os operadores na tabela a seguir.

Sr. Não. Operador Chmod e descrição
1

+

Adiciona as permissões designadas a um arquivo ou diretório.

2

-

Remove as permissões designadas de um arquivo ou diretório.

3

=

Define a (s) permissão (s) designada (s).

Aqui está um exemplo usando testfile. Corridals -1 no arquivo de teste mostra que as permissões do arquivo são as seguintes -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Então cada exemplo chmod comando da tabela anterior é executado no arquivo de teste, seguido por ls –l, para que você possa ver as alterações de permissão -

$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Veja como você pode combinar esses comandos em uma única linha -

$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Usando chmod com permissões absolutas

A segunda maneira de modificar as permissões com o comando chmod é usar um número para especificar cada conjunto de permissões para o arquivo.

Cada permissão recebe um valor, como mostra a tabela a seguir, e o total de cada conjunto de permissões fornece um número para esse conjunto.

Número Octal Permission Representation Ref
0 Sem permissão ---
1 Permissão de execução --x
2 Permissão de escrita -W-
3 Permissão de execução e gravação: 1 (executar) + 2 (gravar) = 3 -wx
4 Permissão de leitura r--
5 Permissão de leitura e execução: 4 (leitura) + 1 (execução) = 5 rx
6 Permissão de leitura e gravação: 4 (leitura) + 2 (gravação) = 6 rw-
7 Todas as permissões: 4 (leitura) + 2 (gravação) + 1 (execução) = 7 rwx

Aqui está um exemplo usando o testfile. Corridals -1 no arquivo de teste mostra que as permissões do arquivo são as seguintes -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Então cada exemplo chmod comando da tabela anterior é executado no arquivo de teste, seguido por ls –l, para que você possa ver as alterações de permissão -

$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

Alteração de proprietários e grupos

Ao criar uma conta no Unix, ele atribui um owner ID e um group IDpara cada usuário. Todas as permissões mencionadas acima também são atribuídas com base no Proprietário e nos Grupos.

Dois comandos estão disponíveis para alterar o proprietário e o grupo de arquivos -

  • chown - o chown comando significa "change owner" e é usado para alterar o proprietário de um arquivo.

  • chgrp - o chgrp comando significa "change group" e é usado para alterar o grupo de um arquivo.

Mudança de propriedade

o chowncomando altera a propriedade de um arquivo. A sintaxe básica é a seguinte -

$ chown user filelist

O valor do usuário pode ser o name of a user no sistema ou no user id (uid) de um usuário no sistema.

O exemplo a seguir ajudará você a entender o conceito -

$ chown amrood testfile $

Altera o proprietário do arquivo fornecido para o usuário amrood.

NOTE - O superusuário, root, tem a capacidade irrestrita de alterar a propriedade de qualquer arquivo, mas os usuários normais podem alterar a propriedade apenas dos arquivos que possuem.

Mudança de propriedade do grupo

o chgrpcomando altera a propriedade de grupo de um arquivo. A sintaxe básica é a seguinte -

$ chgrp group filelist

O valor do grupo pode ser o name of a group no sistema ou the group ID (GID) de um grupo no sistema.

O exemplo a seguir ajuda a entender o conceito -

$ chgrp special testfile
$

Altera o grupo do arquivo fornecido para special grupo.

Permissão de arquivo SUID e SGID

Freqüentemente, quando um comando é executado, ele deve ser executado com privilégios especiais para realizar sua tarefa.

Por exemplo, quando você altera sua senha com o passwd comando, sua nova senha é armazenada no arquivo /etc/shadow.

Como um usuário regular, você não tem read ou writeacesso a este arquivo por razões de segurança, mas ao alterar sua senha, você precisa ter permissão de gravação para este arquivo. Isso significa que opasswd programa tem que lhe dar permissões adicionais para que você possa escrever no arquivo /etc/shadow.

Permissões adicionais são dadas a programas por meio de um mecanismo conhecido como Set User ID (SUID) e Set Group ID (SGID) bits.

Ao executar um programa com o bit SUID habilitado, você herda as permissões do proprietário desse programa. Os programas que não têm o conjunto de bits SUID são executados com as permissões do usuário que iniciou o programa.

Este também é o caso do SGID. Normalmente, os programas são executados com as permissões do seu grupo, mas em vez disso, seu grupo será alterado apenas para este programa para o proprietário do grupo do programa.

Os bits SUID e SGID aparecerão como a letra "s"se a permissão estiver disponível. O SUID"s" bit estará localizado nos bits de permissão onde os proprietários execute permissão normalmente reside.

Por exemplo, o comando -

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

Mostra que o bit SUID está definido e que o comando pertence à raiz. Uma letra maiúsculaS na posição de execução em vez de minúsculas s indica que o bit de execução não está definido.

Se o sticky bit estiver ativado no diretório, os arquivos só podem ser removidos se você for um dos seguintes usuários -

  • O dono do diretório fixo
  • O proprietário do arquivo sendo removido
  • O superusuário, root

Para definir os bits SUID e SGID para qualquer diretório, tente o seguinte comando -

$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $

Neste capítulo, discutiremos em detalhes sobre o ambiente Unix. Um importante conceito Unix é oenvironment, que é definido por variáveis ​​de ambiente. Alguns são configurados pelo sistema, outros por você, outros ainda pelo shell ou qualquer programa que carregue outro programa.

Uma variável é uma cadeia de caracteres à qual atribuímos um valor. O valor atribuído pode ser um número, texto, nome do arquivo, dispositivo ou qualquer outro tipo de dados.

Por exemplo, primeiro definimos uma variável TEST e, em seguida, acessamos seu valor usando o echo comando -

$TEST="Unix Programming" $echo $TEST

Ele produz o seguinte resultado.

Unix Programming

Observe que as variáveis ​​de ambiente são definidas sem usar o $assinar, mas ao acessá-los usamos o sinal $ como prefixo. Essas variáveis ​​retêm seus valores até sairmos da casca.

Quando você faz login no sistema, o shell passa por uma fase chamada initializationpara configurar o ambiente. Este é geralmente um processo de duas etapas que envolve o shell lendo os seguintes arquivos -

  • /etc/profile
  • profile

O processo é o seguinte -

  • O shell verifica se o arquivo /etc/profile existe.

  • Se existir, o shell o lê. Caso contrário, este arquivo é ignorado. Nenhuma mensagem de erro é exibida.

  • O shell verifica se o arquivo .profileexiste em seu diretório inicial. Seu diretório pessoal é o diretório que você inicia após efetuar login.

  • Se existir, o shell o lê; caso contrário, o shell o ignora. Nenhuma mensagem de erro é exibida.

Assim que ambos os arquivos forem lidos, o shell exibe um prompt -

$

Este é o prompt onde você pode inserir comandos para executá-los.

Note - O processo de inicialização do shell detalhado aqui se aplica a todos Bourne tipo shells, mas alguns arquivos adicionais são usados ​​por bash e ksh.

O arquivo .profile

O arquivo /etc/profile é mantido pelo administrador do sistema de sua máquina Unix e contém informações de inicialização do shell exigidas por todos os usuários em um sistema.

O arquivo .profileestá sob seu controle. Você pode adicionar quantas informações de personalização de shell desejar a este arquivo. O conjunto mínimo de informações que você precisa configurar inclui -

  • O tipo de terminal que você está usando.
  • Uma lista de diretórios nos quais localizar os comandos.
  • Uma lista de variáveis ​​que afetam a aparência do seu terminal.

Você pode verificar o seu .profiledisponível em seu diretório inicial. Abra-o usando o editor vi e verifique todas as variáveis ​​definidas para o seu ambiente.

Configurando o tipo de terminal

Normalmente, o tipo de terminal que você está usando é configurado automaticamente pelo login ou gettyprogramas. Às vezes, o processo de configuração automática adivinha seu terminal incorretamente.

Se o seu terminal estiver configurado incorretamente, a saída dos comandos pode parecer estranha ou você pode não ser capaz de interagir com o shell corretamente.

Para ter certeza de que este não é o caso, a maioria dos usuários define seu terminal para o menor denominador comum da seguinte maneira -

$TERM=vt100 $

Configurando o PATH

Quando você digita qualquer comando no prompt de comando, o shell deve localizar o comando antes que ele possa ser executado.

A variável PATH especifica os locais nos quais o shell deve procurar os comandos. Normalmente, a variável Path é definida da seguinte forma -

$PATH=/bin:/usr/bin $

Aqui, cada uma das entradas individuais separadas por dois pontos (:)são diretórios. Se você solicitar que o shell execute um comando e não puder encontrá-lo em nenhum dos diretórios fornecidos na variável PATH, uma mensagem semelhante à seguinte aparecerá -

$hello hello: not found $

Existem variáveis ​​como PS1 e PS2 que são discutidas na próxima seção.

Variáveis ​​PS1 e PS2

Os caracteres que o shell exibe como seu prompt de comando são armazenados na variável PS1. Você pode alterar essa variável para ser o que quiser. Assim que você alterá-lo, ele será usado pelo shell desse ponto em diante.

Por exemplo, se você emitiu o comando -

$PS1='=>'
=>
=>
=>

Seu prompt se tornará =>. Para definir o valor dePS1 para que ele mostre o diretório de trabalho, emita o comando -

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

O resultado desse comando é que o prompt exibe o nome de usuário do usuário, o nome da máquina (nome do host) e o diretório de trabalho.

Há muito poucos escape sequencesque podem ser usados ​​como argumentos de valor para PS1; tente limitar-se ao que é mais crítico para que o prompt não o sobrecarregue de informações.

Sr. Não. Sequência e descrição de escape
1

\t

Hora atual, expressa como HH: MM: SS

2

\d

Data atual, expressa como dia da semana, mês, data

3

\n

Nova linha

4

\s

Ambiente shell atual

5

\W

Diretório de trabalho

6

\w

Caminho completo do diretório de trabalho

7

\u

Nome de usuário do usuário atual

8

\h

Nome do host da máquina atual

9

\#

Número de comando do comando atual. Aumenta quando um novo comando é inserido

10

\$

Se o UID efetivo for 0 (ou seja, se você estiver conectado como root), termine o prompt com o caractere #; caso contrário, use o sinal $

Você pode fazer a alteração sozinho sempre que fizer login ou pode fazer com que a alteração seja feita automaticamente no PS1 adicionando-a ao seu .profile Arquivo.

Quando você emite um comando que está incompleto, o shell exibe um prompt secundário e espera que você conclua o comando e pressione Enter novamente.

O prompt secundário padrão é > (o maior que o sinal), mas pode ser alterado redefinindo o PS2 variável shell -

A seguir está o exemplo que usa o prompt secundário padrão -

$ echo "this is a > test" this is a test $

O exemplo abaixo redefine o PS2 com um prompt personalizado -

$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$

variáveis ​​ambientais

A seguir está a lista parcial de variáveis ​​de ambiente importantes. Essas variáveis ​​são definidas e acessadas conforme mencionado abaixo -

Sr. Não. Variável e Descrição
1

DISPLAY

Contém o identificador para a tela que X11 os programas devem usar por padrão.

2

HOME

Indica o diretório inicial do usuário atual: o argumento padrão para o cd built-in comando.

3

IFS

Indica o Internal Field Separator que é usado pelo analisador para divisão de palavras após a expansão.

4

LANG

LANG se expande para a localidade do sistema padrão; LC_ALL pode ser usado para substituir isso. Por exemplo, se seu valor forpt_BR, o idioma será definido como português (brasileiro) e a localidade como Brasil.

5

LD_LIBRARY_PATH

Um sistema Unix com um vinculador dinâmico contém uma lista de diretórios separados por dois pontos que o vinculador dinâmico deve pesquisar para objetos compartilhados ao construir uma imagem de processo após exec, antes de pesquisar em qualquer outro diretório.

6

PATH

Indica o caminho de pesquisa para comandos. É uma lista de diretórios separados por dois pontos, nos quais o shell procura por comandos.

7

PWD

Indica o diretório de trabalho atual conforme definido pelo comando cd.

8

RANDOM

Gera um número inteiro aleatório entre 0 e 32.767 cada vez que é referenciado.

9

SHLVL

Incrementa em um cada vez que uma instância do bash é iniciada. Esta variável é útil para determinar se o comando de saída integrado termina a sessão atual.

10

TERM

Refere-se ao tipo de exibição.

11

TZ

Refere-se ao fuso horário. Pode assumir valores como GMT, AST, etc.

12

UID

Expande-se para o ID de usuário numérico do usuário atual, inicializado na inicialização do shell.

A seguir está o exemplo de amostra que mostra algumas variáveis ​​de ambiente -

$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $

Neste capítulo, discutiremos em detalhes sobre Impressão e Email como utilitários básicos do Unix. Até agora, tentamos entender o sistema operacional Unix e a natureza de seus comandos básicos. Neste capítulo, aprenderemos alguns utilitários Unix importantes que podem ser usados ​​em nosso dia-a-dia.

Imprimindo arquivos

Antes de imprimir um arquivo em um sistema Unix, você pode querer reformatá-lo para ajustar as margens, destacar algumas palavras e assim por diante. A maioria dos arquivos também pode ser impressa sem reformatação, mas a impressão bruta pode não ser tão atraente.

Muitas versões do Unix incluem dois formatadores de texto poderosos, nroff e troff.

O pr Command

o prO comando faz a formatação secundária de arquivos na tela do terminal ou para uma impressora. Por exemplo, se você tiver uma longa lista de nomes em um arquivo, pode formatá-lo na tela em duas ou mais colunas.

A seguir está a sintaxe para o pr comando -

pr option(s) filename(s)

o praltera o formato do arquivo apenas na tela ou na cópia impressa; não modifica o arquivo original. A tabela a seguir lista algunspr opções -

Sr. Não. Opção e descrição
1

-k

Produz k colunas de saída

2

-d

Dê um espaço duplo na saída (não em todos pr versões)

3

-h "header"

Pega o próximo item como um cabeçalho de relatório

4

-t

Elimina a impressão do cabeçalho e das margens superior / inferior

5

-l PAGE_LENGTH

Define o comprimento da página em PAGE_LENGTH (66) linhas. O número padrão de linhas de texto é 56

6

-o MARGIN

Desloca cada linha com espaços MARGIN (zero)

7

-w PAGE_WIDTH

Define a largura da página em PAGE_WIDTH (72) caracteres para saída de várias colunas de texto apenas

Antes de usar pr, aqui está o conteúdo de um arquivo de amostra denominado food.

$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $

Vamos usar o prcomando para fazer um relatório de duas colunas com o cabeçalho Restaurantes -

$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $

Os comandos lp e lpr

O comando lp ou lprimprime um arquivo em papel ao invés da exibição na tela. Quando estiver pronto para a formatação usando opr comando, você pode usar qualquer um desses comandos para imprimir seu arquivo na impressora conectada ao seu computador.

O administrador do sistema provavelmente configurou uma impressora padrão em seu site. Para imprimir um arquivo chamadofood na impressora padrão, use o lp ou lpr comando, como no exemplo a seguir -

$lp food request id is laserp-525 (1 file) $

o lp comando mostra uma ID que você pode usar para cancelar o trabalho de impressão ou verificar seu status.

  • Se você estiver usando o lp comando, você pode usar o -nNumopção para imprimir Num número de cópias. Junto com o comandolpr, você pode usar -Num para o mesmo.

  • Se houver várias impressoras conectadas à rede compartilhada, você pode escolher uma impressora usando -dprinter junto com o comando lp e para o mesmo propósito você pode usar -Pprinteropção junto com o comando lpr. Aqui, impressora é o nome da impressora.

Os comandos lpstat e lpq

o lpstat O comando mostra o que há na fila da impressora: IDs de solicitação, proprietários, tamanhos de arquivo, quando os trabalhos foram enviados para impressão e o status das solicitações.

Usar lpstat -ose quiser ver todas as solicitações de saída, exceto as suas. As solicitações são mostradas na ordem em que serão impressas -

$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $

o lpq dá informações ligeiramente diferentes do que lpstat -o -

$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $

Aqui, a primeira linha exibe o status da impressora. Se a impressora estiver desabilitada ou sem papel, você poderá ver mensagens diferentes nesta primeira linha.

Os comandos cancel e lprm

o cancel comando encerra um pedido de impressão do lp command. olprm comando termina tudo lpr requests. Você pode especificar a ID da solicitação (exibida por lp ou lpq) ou o nome da impressora.

$cancel laserp-575 request "laserp-575" cancelled $

Para cancelar qualquer solicitação que esteja sendo impressa no momento, independentemente de sua ID, basta inserir cancelar e o nome da impressora -

$cancel laserp request "laserp-573" cancelled $

o lprmO comando cancelará o trabalho ativo se ele pertencer a você. Caso contrário, você pode fornecer números de trabalho como argumentos ou usar umdash (-) para remover todos os seus trabalhos -

$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $

o lprm comando informa os nomes de arquivos reais removidos da fila de impressão.

Enviando email

Você usa o comando Unix mail para enviar e receber mensagens. Aqui está a sintaxe para enviar um e-mail -

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

Aqui estão opções importantes relacionadas aos comandos de correio -s

Sr. Não. Opção e descrição
1

-s

Especifica o assunto na linha de comando.

2

-c

Envia cópias carbono para a lista de usuários. A lista deve ser uma lista de nomes separados por vírgulas.

3

-b

Envia cópias ocultas de carbono para a lista. A lista deve ser uma lista de nomes separados por vírgulas.

A seguir está um exemplo para enviar uma mensagem de teste para [email protected].

$mail -s "Test Message" [email protected]

Espera-se que você digite sua mensagem, seguido por "control-D"no início de uma linha. Para parar, basta digitar ponto(.) como segue -

Hi,

This is a test
.
Cc:

Você pode enviar um arquivo completo usando um redirect < operator como segue -

$mail -s "Report 05/06/07" [email protected] < demo.txt

Para verificar os e-mails recebidos em seu sistema Unix, basta digitar o e-mail da seguinte forma -

$mail
no email

Neste capítulo, discutiremos em detalhes sobre tubos e filtros no Unix. Você pode conectar dois comandos juntos para que a saída de um programa se torne a entrada do próximo programa. Dois ou mais comandos conectados desta forma formam um tubo.

Para fazer um cano, coloque uma barra vertical (|) na linha de comando entre dois comandos.

Quando um programa obtém sua entrada de outro programa, ele executa alguma operação nessa entrada e grava o resultado na saída padrão. É referido como umfilter.

O Comando grep

O comando grep procura um arquivo ou arquivos em busca de linhas que possuam um determinado padrão. A sintaxe é -

$grep pattern file(s)

O nome "grep" vem do comando ed (um editor de linha Unix) g/re/p que significa “pesquisar globalmente uma expressão regular e imprimir todas as linhas que a contenham”.

Uma expressão regular é um texto simples (uma palavra, por exemplo) e / ou caracteres especiais usados ​​para correspondência de padrões.

O uso mais simples de grep é procurar um padrão que consiste em uma única palavra. Ele pode ser usado em um tubo de modo que apenas as linhas dos arquivos de entrada contendo uma determinada string sejam enviadas para a saída padrão. Se você não fornecer ao grep um nome de arquivo para leitura, ele lerá sua entrada padrão; é assim que todos os programas de filtro funcionam -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Existem várias opções que você pode usar junto com o grep comando -

Sr. Não. Opção e descrição
1

-v

Imprime todas as linhas que não correspondem ao padrão.

2

-n

Imprime a linha correspondida e seu número de linha.

3

-l

Imprime apenas os nomes dos arquivos com linhas correspondentes (letra "l")

4

-c

Imprime apenas a contagem de linhas correspondentes.

5

-i

Corresponde a maiúsculas ou minúsculas.

Vamos agora usar uma expressão regular que diz ao grep para encontrar linhas com "carol", seguido por zero ou outros caracteres abreviados em uma expressão regular como ". *"), seguido por "Aug" .−

Aqui, estamos usando o -i opção de pesquisa sem distinção entre maiúsculas e minúsculas -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

O comando sort

o sortcomando organiza linhas de texto em ordem alfabética ou numérica. O exemplo a seguir classifica as linhas no arquivo de comida -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

o sortO comando organiza as linhas de texto em ordem alfabética por padrão. Existem muitas opções que controlam a classificação -

Sr. Não. Descrição
1

-n

Classifica numericamente (exemplo: 10 classificará após 2), ignora espaços em branco e tabulações.

2

-r

Inverte a ordem de classificação.

3

-f

Classifica maiúsculas e minúsculas juntas.

4

+x

Ignora primeiro x campos ao classificar.

Mais de dois comandos podem ser vinculados em um tubo. Tomando um exemplo de tubo anterior usandogrep, podemos classificar ainda mais os arquivos modificados em agosto por ordem de tamanho.

O seguinte tubo consiste nos comandos ls, grep, e sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Este pipe classifica todos os arquivos em seu diretório modificados em agosto por ordem de tamanho e os imprime na tela do terminal. A opção de classificação + 4n ignora quatro campos (os campos são separados por espaços em branco) e classifica as linhas em ordem numérica.

O pg e mais comandos

Uma saída longa normalmente pode ser compactada por você na tela, mas se você executar mais texto ou usar o pgcomando como um filtro; a exibição para quando a tela estiver cheia de texto.

Vamos supor que você tenha uma longa lista de diretórios. Para facilitar a leitura da lista classificada, canalize a saídamore como segue -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

A tela será preenchida assim que estiver cheia de texto, consistindo em linhas classificadas pela ordem do tamanho do arquivo. Na parte inferior da tela está omore prompt, onde você pode digitar um comando para percorrer o texto classificado.

Depois de concluir esta tela, você pode usar qualquer um dos comandos listados na discussão do programa more.

Neste capítulo, discutiremos em detalhes sobre o gerenciamento de processos no Unix. Quando você executa um programa em seu sistema Unix, o sistema cria um ambiente especial para esse programa. Este ambiente contém tudo o que é necessário para o sistema executar o programa como se nenhum outro programa estivesse sendo executado no sistema.

Sempre que você emite um comando no Unix, ele cria, ou inicia, um novo processo. Quando você experimentou olscomando para listar o conteúdo do diretório, você iniciou um processo. Um processo, em termos simples, é uma instância de um programa em execução.

O sistema operacional rastreia os processos por meio de um número de identificação de cinco dígitos conhecido como pid ou o process ID. Cada processo no sistema tem um únicopid.

Pids eventualmente se repetem porque todos os números possíveis são usados ​​e o próximo pid rola ou recomeça. Em qualquer ponto do tempo, não existem dois processos com o mesmo pid no sistema porque é o pid que o Unix usa para rastrear cada processo.

Iniciando um Processo

Quando você inicia um processo (executa um comando), existem duas maneiras de executá-lo -

  • Processos de Primeiro Plano
  • Processos de Fundo

Processos de Primeiro Plano

Por padrão, cada processo que você inicia é executado em primeiro plano. Ele obtém sua entrada do teclado e envia sua saída para a tela.

Você pode ver isso acontecer com o lscomando. Se você deseja listar todos os arquivos em seu diretório atual, você pode usar o seguinte comando -

$ls ch*.doc

Isso exibiria todos os arquivos, os nomes dos quais começam com ch e terminar com .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

O processo é executado em primeiro plano, a saída é direcionada para a minha tela e se o ls comando deseja qualquer entrada (o que não quer), ele espera por ela do teclado.

Enquanto um programa está sendo executado em primeiro plano e é demorado, nenhum outro comando pode ser executado (iniciar qualquer outro processo) porque o prompt não estaria disponível até que o programa conclua o processamento e saia.

Processos de Fundo

Um processo em segundo plano é executado sem estar conectado ao teclado. Se o processo em segundo plano exigir qualquer entrada do teclado, ele aguardará.

A vantagem de executar um processo em segundo plano é que você pode executar outros comandos; você não precisa esperar até que seja concluído para iniciar outro!

A maneira mais simples de iniciar um processo em segundo plano é adicionar um E comercial (&) no final do comando.

$ls ch*.doc &

Isso exibe todos os arquivos cujos nomes começam com ch e terminar com .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Aqui, se o ls comando deseja qualquer entrada (o que não quer), ele vai para um estado de parada até que movamos para o primeiro plano e forneçamos os dados do teclado.

Essa primeira linha contém informações sobre o processo em segundo plano - o número do trabalho e o ID do processo. Você precisa saber o número do trabalho para manipulá-lo entre o fundo e o primeiro plano.

Pressione a tecla Enter e você verá o seguinte -

[1]   +   Done                 ls ch*.doc &
$

A primeira linha informa que o lso processo de segundo plano do comando foi concluído com êxito. O segundo é um prompt para outro comando.

Listagem de processos em execução

É fácil ver seus próprios processos executando o ps (status do processo) comando da seguinte forma -

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

Um dos sinalizadores mais comumente usados ​​para ps é o -f opção (f para completo), que fornece mais informações conforme mostrado no exemplo a seguir -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

Aqui está a descrição de todos os campos exibidos por ps -f comando -

Sr. Não. Coluna e Descrição
1

UID

ID de usuário ao qual este processo pertence (a pessoa que o executa)

2

PID

ID de processo

3

PPID

ID do processo pai (o ID do processo que o iniciou)

4

C

Utilização da CPU do processo

5

STIME

Hora de início do processo

6

TTY

Tipo de terminal associado ao processo

7

TIME

Tempo de CPU gasto pelo processo

8

CMD

O comando que iniciou este processo

Existem outras opções que podem ser usadas junto com ps comando -

Sr. Não. Opção e descrição
1

-a

Mostra informações sobre todos os usuários

2

-x

Mostra informações sobre processos sem terminais

3

-u

Mostra informações adicionais como a opção -f

4

-e

Exibe informações estendidas

Processos de Parada

O encerramento de um processo pode ser feito de várias maneiras diferentes. Freqüentemente, a partir de um comando baseado em console, enviar um pressionamento de tecla CTRL + C (o caractere de interrupção padrão) irá encerrar o comando. Isso funciona quando o processo está sendo executado no modo de primeiro plano.

Se um processo está sendo executado em segundo plano, você deve obter seu ID de trabalho usando o pscomando. Depois disso, você pode usar okill comando para encerrar o processo da seguinte forma -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

Aqui o kill comando termina o first_oneprocesso. Se um processo ignorar um comando kill regular, você pode usarkill -9 seguido pelo ID do processo como segue -

$kill -9 6738
Terminated

Processos Pais e Filhos

Cada processo unix tem dois números de ID atribuídos a ele: O ID do processo (pid) e o ID do processo pai (ppid). Cada processo do usuário no sistema possui um processo pai.

A maioria dos comandos que você executa tem o shell como pai. Verifica aps -f exemplo em que este comando listou o ID do processo e o ID do processo pai.

Processos de zumbis e órfãos

Normalmente, quando um processo filho é eliminado, o processo pai é atualizado por meio de um SIGCHLDsinal. Em seguida, o pai pode fazer alguma outra tarefa ou reiniciar um novo filho, conforme necessário. No entanto, às vezes o processo pai é eliminado antes que seu filho seja eliminado. Neste caso, o "pai de todos os processos", oinitprocesso, torna-se o novo PPID (ID do processo pai). Em alguns casos, esses processos são chamados de processos órfãos.

Quando um processo é eliminado, um ps a listagem ainda pode mostrar o processo com um ZEstado. Este é um processo zumbi ou extinto. O processo está morto e não está sendo usado. Esses processos são diferentes dos processos órfãos. Eles concluíram a execução, mas ainda encontram uma entrada na tabela de processos.

Processos Daemon

Daemons são processos em segundo plano relacionados ao sistema que geralmente são executados com as permissões de root e solicitações de serviços de outros processos.

Um daemon não tem terminal de controle. Não pode abrir/dev/tty. Se você fizer um"ps -ef" e olhe para o tty campo, todos os daemons terão um ? para o tty.

Para ser preciso, um daemon é um processo executado em segundo plano, geralmente esperando que aconteça algo com o qual ele seja capaz de trabalhar. Por exemplo, um daemon de impressora aguardando comandos de impressão.

Se você tiver um programa que exige um processamento demorado, vale a pena torná-lo um daemon e executá-lo em segundo plano.

O comando superior

o top comando é uma ferramenta muito útil para mostrar rapidamente os processos classificados por vários critérios.

É uma ferramenta de diagnóstico interativa que atualiza com frequência e mostra informações sobre memória física e virtual, uso de CPU, médias de carga e seus processos ocupados.

Aqui está a sintaxe simples para executar o comando top e ver as estatísticas de utilização da CPU por diferentes processos -

$top

ID do trabalho versus ID do processo

Processos em segundo plano e suspensos são geralmente manipulados via job number (job ID). Este número é diferente do ID do processo e é usado porque é mais curto.

Além disso, um trabalho pode consistir em vários processos executados em série ou ao mesmo tempo, em paralelo. Usar o ID do trabalho é mais fácil do que rastrear processos individuais.

Neste capítulo, discutiremos em detalhes sobre os utilitários de comunicação de rede no Unix. Quando você trabalha em um ambiente distribuído, precisa se comunicar com usuários remotos e também acessar máquinas Unix remotas.

Existem vários utilitários Unix que ajudam os usuários a computar em um ambiente distribuído em rede. Este capítulo lista alguns deles.

O utilitário ping

o pingcomando envia uma solicitação de eco para um host disponível na rede. Usando este comando, você pode verificar se o seu host remoto está respondendo bem ou não.

O comando ping é útil para o seguinte -

  • Rastreando e isolando problemas de hardware e software.
  • Determinar o status da rede e de vários hosts estrangeiros.
  • Teste, medição e gerenciamento de redes.

Sintaxe

A seguir está a sintaxe simples para usar o comando ftp -

$ping hostname or ip-address

O comando acima começa a imprimir uma resposta a cada segundo. Para sair do comando, você pode encerrá-lo pressionandoCNTRL + C chaves.

Exemplo

A seguir está um exemplo para verificar a disponibilidade de um host disponível na rede -

$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $

Se um host não existir, você receberá a seguinte saída -

$ping giiiiiigle.com ping: unknown host giiiiigle.com $

O utilitário ftp

Aqui, ftp apoia File Transferir Protocol. Este utilitário o ajuda a carregar e baixar seu arquivo de um computador para outro.

O utilitário ftp tem seu próprio conjunto de comandos do tipo Unix. Esses comandos ajudam você a realizar tarefas como -

  • Conecte-se e faça login em um host remoto.

  • Navegue pelos diretórios.

  • Lista o conteúdo do diretório.

  • Colocar e obter arquivos.

  • Transferir arquivos como ascii, ebcdic ou binary.

Sintaxe

A seguir está a sintaxe simples para usar o comando ftp -

$ftp hostname or ip-address

O comando acima solicitará o ID de login e a senha. Depois de autenticado, você pode acessar o diretório inicial da conta de login e executar vários comandos.

As tabelas a seguir listam alguns comandos importantes -

Sr. Não. Comando e Descrição
1

put filename

Carrega o nome do arquivo da máquina local para a máquina remota.

2

get filename

Baixa o nome do arquivo da máquina remota para a máquina local.

3

mput file list

Carrega mais de um arquivo da máquina local para a máquina remota.

4

mget file list

Baixa mais de um arquivo da máquina remota para a máquina local.

5

prompt off

Desativa o prompt. Por padrão, você receberá uma solicitação para fazer upload ou download de arquivos usandomput ou mget comandos.

6

prompt on

Liga o prompt.

7

dir

Lista todos os arquivos disponíveis no diretório atual da máquina remota.

8

cd dirname

Muda o diretório para dirname na máquina remota.

9

lcd dirname

Muda o diretório para dirname na máquina local.

10

quit

Ajuda a sair do login atual.

Deve-se notar que todos os arquivos seriam baixados ou carregados de ou para os diretórios atuais. Se você quiser fazer upload de seus arquivos em um diretório específico, primeiro altere para esse diretório e, em seguida, faça upload dos arquivos necessários.

Exemplo

A seguir está o exemplo para mostrar o funcionamento de alguns comandos -

$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x   3 amrood   group       1024 Mar 11 20:04 Mail
drwxr-sr-x   2 amrood   group       1536 Mar  3 18:07 Misc
drwxr-sr-x   5 amrood   group        512 Dec  7 10:59 OldStuff
drwxr-sr-x   2 amrood   group       1024 Mar 11 15:24 bin
drwxr-sr-x   5 amrood   group       3072 Mar 13 16:10 mpl
-rw-r--r--   1 amrood   group     209671 Mar 15 10:57 myfile.out
drwxr-sr-x   3 amrood   group        512 Jan  5 13:32 public
drwxr-sr-x   3 amrood   group        512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r--   1 amrood   group       1630 Aug  8 1994  dboard.f
-rw-r-----   1 amrood   group       4340 Jul 17 1994  vttest.c
-rwxr-xr-x   1 amrood   group     525574 Feb 15 11:52 wave_shift
-rw-r--r--   1 amrood   group       1648 Aug  5 1994  wide.list
-rwxr-xr-x   1 amrood   group       4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$

O utilitário telnet

Às vezes, somos obrigados a nos conectar a uma máquina Unix remota e trabalhar nessa máquina remotamente. Telnet é um utilitário que permite que um usuário de computador em um site faça uma conexão, faça login e, em seguida, execute um trabalho em um computador em outro site.

Depois de fazer o login usando o Telnet, você pode executar todas as atividades em sua máquina conectada remotamente. A seguir está um exemplo de sessão Telnet -

C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.

login: amrood
amrood's Password: 
*****************************************************
*                                                   *
*                                                   *
*    WELCOME TO AMROOD.COM                          *
*                                                   *
*                                                   *
*****************************************************

Last unsuccessful login: Fri Mar  3 12:01:09 IST 2009
Last login: Wed Mar  8 18:33:27 IST 2009 on pts/10

   {  do your work }

$ logout
Connection closed.
C:>

O utilitário dedo

o fingercomando exibe informações sobre usuários em um determinado host. O host pode ser local ou remoto.

O dedo pode ser desativado em outros sistemas por razões de segurança.

A seguir está a sintaxe simples para usar o comando finger -

Verifique todos os usuários logados na máquina local -

$ finger
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Obtenha informações sobre um usuário específico disponível na máquina local -

$ finger amrood
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

Verifique todos os usuários logados na máquina remota -

$ finger @avtar.com
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Obtenha as informações sobre um usuário específico disponível na máquina remota -

$ finger [email protected]
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

Neste capítulo, vamos entender como o editor vi funciona no Unix. Existem muitas maneiras de editar arquivos no Unix. Editando arquivos usando o editor de texto orientado para a telavié uma das melhores maneiras. Este editor permite que você edite linhas no contexto com outras linhas no arquivo.

Uma versão melhorada do editor vi que é chamado de VIMtambém foi disponibilizado agora. Aqui, VIM significaVi IMprovado.

vi é geralmente considerado o padrão de fato nos editores Unix porque -

  • Geralmente está disponível em todos os tipos de sistema Unix.

  • Suas implementações são muito semelhantes em todas as áreas.

  • Requer muito poucos recursos.

  • É mais amigável do que outros editores, como o ed ou o ex.

Você pode usar o vieditor para editar um arquivo existente ou para criar um novo arquivo do zero. Você também pode usar este editor para apenas ler um arquivo de texto.

Iniciando o Editor vi

A tabela a seguir lista os comandos básicos para usar o editor vi -

Sr. Não. Comando e Descrição
1

vi filename

Cria um novo arquivo se já não existir; caso contrário, abre um arquivo existente.

2

vi -R filename

Abre um arquivo existente no modo somente leitura.

3

view filename

Abre um arquivo existente no modo somente leitura.

A seguir está um exemplo para criar um novo arquivo testfile se já não existir no diretório de trabalho atual -

$vi testfile

O comando acima irá gerar a seguinte saída -

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]

Você notará um tilde(~) em cada linha após o cursor. Um til representa uma linha não utilizada. Se uma linha não começa com um til e parece estar em branco, há um espaço, tabulação, nova linha ou algum outro caractere não visível presente.

Agora você tem um arquivo aberto para começar a trabalhar. Antes de prosseguirmos, vamos entender alguns conceitos importantes.

Modos de Operação

Ao trabalhar com o editor vi, geralmente encontramos os seguintes dois modos -

  • Command mode- Este modo permite que você execute tarefas administrativas como salvar os arquivos, executar os comandos, mover o cursor, cortar (puxar) e colar as linhas ou palavras, bem como localizar e substituir. Neste modo, tudo o que você digitar é interpretado como um comando.

  • Insert mode- Este modo permite inserir texto no arquivo. Tudo o que é digitado neste modo é interpretado como entrada e colocado no arquivo.

vi sempre começa no command mode. Para inserir texto, você deve estar no modo de inserção para o qual basta digitari. Para sair do modo de inserção, pressione oEsc , que o levará de volta ao modo de comando.

Hint- Se você não tiver certeza de qual modo está, pressione a tecla Esc duas vezes; isso o levará para o modo de comando. Você abre um arquivo usando o editor vi. Comece digitando alguns caracteres e depois vá para o modo de comando para entender a diferença.

Saindo do vi

O comando para sair do vi é :q. Uma vez no modo de comando, digite dois-pontos e 'q', seguido por return. Se o seu arquivo foi modificado de alguma forma, o editor irá avisá-lo e não permitirá que você saia. Para ignorar esta mensagem, o comando para sair do vi sem salvar é:q!. Isso permite que você saia do vi sem salvar nenhuma das alterações.

O comando para salvar o conteúdo do editor é :w. Você pode combinar o comando acima com o comando quit ou usar:wq e retorno.

A maneira mais fácil de save your changes and exit vié com o comando ZZ. Quando você estiver no modo de comando, digiteZZ. oZZ comando funciona da mesma maneira que o :wq comando.

Se você deseja especificar / declarar qualquer nome particular para o arquivo, você pode fazê-lo especificando-o após o :w. Por exemplo, se você quiser salvar o arquivo em que está trabalhando como outro nome de arquivo chamadofilename2, você digitaria :w filename2 e retorno.

Movendo dentro de um arquivo

Para se mover dentro de um arquivo sem afetar seu texto, você deve estar no modo de comando (pressione Esc duas vezes). A tabela a seguir lista alguns comandos que você pode usar para mover um caractere por vez -

Sr. Não. Comando e Descrição
1

k

Move o cursor uma linha para cima

2

j

Move o cursor uma linha para baixo

3

h

Move o cursor um caractere para a esquerda

4

l

Move o cursor para a posição de um caractere à direita

Os seguintes pontos precisam ser considerados para mover dentro de um arquivo -

  • vi diferencia maiúsculas de minúsculas. Você precisa prestar atenção à capitalização ao usar os comandos.

  • A maioria dos comandos no vi pode ser precedida pelo número de vezes que você deseja que a ação ocorra. Por exemplo,2j move o cursor duas linhas para baixo na localização do cursor.

Existem muitas outras maneiras de se mover dentro de um arquivo no vi. Lembre-se de que você deve estar no modo de comando (press Esc twice) A tabela a seguir lista alguns comandos para mover o arquivo -

Sr. Não. Comando e Descrição
1

0 or |

Posiciona o cursor no início de uma linha

2

$

Posiciona o cursor no final de uma linha

3

w

Posiciona o cursor para a próxima palavra

4

b

Posiciona o cursor na palavra anterior

5

(

Posiciona o cursor no início da frase atual

6

)

Posiciona o cursor no início da próxima frase

7

E

Vai para o final da palavra delimitada em branco

8

{

Move um parágrafo para trás

9

}

Avança um parágrafo

10

[[

Move uma seção para trás

11

]]

Avança uma seção

12

n|

Vai para a coluna n na linha atual

13

1G

Vai para a primeira linha do arquivo

14

G

Vai para a última linha do arquivo

15

nG

Vai para o nth linha do arquivo

16

:n

Vai para o nth linha do arquivo

17

fc

Avança para c

18

Fc

Volta para c

19

H

Vai para o topo da tela

20

nH

Vai para o nth linha do topo da tela

21

M

Vai para o meio da tela

22

L

Mover para a parte inferior da tela

23

nL

Vai para o nth linha da parte inferior da tela

24

:x

Dois pontos seguidos por um número posicionariam o cursor no número da linha representado por x

Comandos de controle

Os comandos a seguir podem ser usados ​​com a tecla de controle para executar funções conforme indicado na tabela abaixo -

Sr. Não. Comando e Descrição
1

CTRL+d

Avança 1/2 tela

2

CTRL+f

Avança uma tela inteira

3

CTRL+u

Retrocede 1/2 tela

4

CTRL+b

Retrocede uma tela inteira

5

CTRL+e

Move a tela uma linha para cima

6

CTRL+y

Move a tela uma linha para baixo

7

CTRL+u

Move a tela para cima 1/2 página

8

CTRL+d

Move a tela 1/2 página para baixo

9

CTRL+b

Move a tela uma página para cima

10

CTRL+f

Move a tela uma página para baixo

11

CTRL+I

Redesenha a tela

Editando Arquivos

Para editar o arquivo, você precisa estar no modo de inserção. Existem muitas maneiras de entrar no modo de inserção a partir do modo de comando -

Sr. Não. Comando e Descrição
1

i

Insere texto antes da localização atual do cursor

2

I

Insere texto no início da linha atual

3

a

Insere texto após a localização atual do cursor

4

A

Insere texto no final da linha atual

5

o

Cria uma nova linha para entrada de texto abaixo da localização do cursor

6

O

Cria uma nova linha para entrada de texto acima da localização do cursor

Excluindo Personagens

Aqui está uma lista de comandos importantes, que podem ser usados ​​para excluir caracteres e linhas em um arquivo aberto -

Sr. Não. Comando e Descrição
1

x

Exclui o caractere sob a localização do cursor

2

X

Exclui o caractere antes da localização do cursor

3

dw

Apaga da localização atual do cursor para a próxima palavra

4

d^

Exclui da posição atual do cursor até o início da linha

5

d$

Exclui da posição atual do cursor até o final da linha

6

D

Exclui da posição do cursor até o final da linha atual

7

dd

Exclui a linha em que o cursor está

Como mencionado acima, a maioria dos comandos no vi podem ser precedidos pelo número de vezes que você deseja que a ação ocorra. Por exemplo,2x exclui dois caracteres sob a localização do cursor e 2dd apaga duas linhas em que o cursor está.

Recomenda-se que os comandos sejam praticados antes de prosseguirmos.

Comandos de mudança

Você também pode alterar caracteres, palavras ou linhas no vi sem excluí-los. Aqui estão os comandos relevantes -

Sr. Não. Comando e Descrição
1

cc

Remove o conteúdo da linha, deixando você no modo de inserção.

2

cw

Muda a palavra em que o cursor está passando do cursor para a minúscula w fim da palavra.

3

r

Substitui o caractere sob o cursor. O vi retorna ao modo de comando após a substituição ser inserida.

4

R

Substitui vários caracteres começando com o caractere atualmente sob o cursor. Você deve usarEsc para parar a substituição.

5

s

Substitui o caractere atual pelo caractere digitado. Depois disso, você é deixado no modo de inserção.

6

S

Exclui a linha em que o cursor está e a substitui pelo novo texto. Depois que o novo texto é inserido, o vi permanece no modo de inserção.

Copiar e colar comandos

Você pode copiar linhas ou palavras de um lugar e depois colá-las em outro lugar usando os seguintes comandos -

Sr. Não. Comando e Descrição
1

yy

Copia a linha atual.

2

yw

Copia a palavra atual do caractere em que o cursor w minúsculo está, até o final da palavra.

3

p

Coloca o texto copiado após o cursor.

4

P

Coloca o texto puxado antes do cursor.

Comandos Avançados

Existem alguns comandos avançados que simplificam a edição do dia-a-dia e permitem o uso mais eficiente do vi -

Sr. Não. Comando e Descrição
1

J

Une a linha atual com a próxima. Uma contagem de comandos j junta muitas linhas.

2

<<

Desloca a linha atual para a esquerda em uma largura de deslocamento.

3

>>

Desloca a linha atual para a direita em uma largura de deslocamento.

4

~

Alterna o caso do caractere sob o cursor.

5

^G

Pressione as teclas Ctrl e G ao mesmo tempo para mostrar o nome do arquivo atual e o status.

6

U

Restaura a linha atual ao estado em que se encontrava antes de o cursor entrar na linha.

7

u

Isso ajuda a desfazer a última alteração feita no arquivo. Digitar 'u' novamente fará a alteração.

8

J

Une a linha atual com a próxima. Uma contagem junta tantas linhas.

9

:f

Exibe a posição atual no arquivo em% e o nome do arquivo, o número total do arquivo.

10

:f filename

Renomeia o arquivo atual para filename.

11

:w filename

Grava no arquivo filename.

12

:e filename

Abre outro arquivo com o nome do arquivo.

13

:cd dirname

Altera o diretório de trabalho atual para dirname.

14

:e #

Alterna entre dois arquivos abertos.

15

:n

No caso de você abrir vários arquivos usando o vi, use :n para ir para o próximo arquivo da série.

16

:p

No caso de você abrir vários arquivos usando o vi, use :p para ir para o arquivo anterior da série.

17

:N

No caso de você abrir vários arquivos usando o vi, use :N para ir para o arquivo anterior da série.

18

:r file

Lê o arquivo e o insere após a linha atual.

19

:nr file

Lê o arquivo e o insere após a linha n.

Pesquisa de palavras e caracteres

O editor vi tem dois tipos de pesquisa: string e character. Para uma pesquisa de string, o/ e ?comandos são usados. Ao iniciar esses comandos, o comando que acabou de ser digitado será mostrado na última linha da tela, onde você digita a string específica a procurar.

Esses dois comandos diferem apenas na direção em que a pesquisa ocorre -

  • o / comando pesquisa para a frente (para baixo) no arquivo.

  • o ? comando pesquisa para trás (para cima) no arquivo.

o n e Nos comandos repetem o comando de pesquisa anterior na mesma direção ou na direção oposta, respectivamente. Alguns caracteres têm significados especiais. Esses caracteres devem ser precedidos por uma barra invertida (\) para ser incluído como parte da expressão de pesquisa.

Sr. Não. Descrição do personagem
1

^

Pesquisa no início da linha (use no início de uma expressão de pesquisa).

2

.

Corresponde a um único caractere.

3

*

Corresponde a zero ou mais do caractere anterior.

4

$

Fim da linha (use no final da expressão de pesquisa).

5

[

Inicia um conjunto de expressões correspondentes ou não correspondentes.

6

<

Isso é colocado em uma expressão escapada com a barra invertida para localizar o final ou o início de uma palavra.

7

>

Isso ajuda a ver o '<'descrição do personagem acima.

A pesquisa de caractere pesquisa em uma linha para encontrar um caractere inserido após o comando. of e F os comandos procuram um caractere apenas na linha atual. f procura para a frente e F procura para trás e o cursor se move para a posição do caractere encontrado.

o t e T comandos procuram por um caractere apenas na linha atual, mas por t, o cursor se move para a posição antes do caractere, e T procura a linha de trás para a posição após o caractere.

Definir comandos

Você pode alterar a aparência da tela do vi usando o seguinte :setcomandos. Assim que estiver no modo de comando, digite:set seguido por qualquer um dos comandos a seguir.

Sr. Não. Comando e Descrição
1

:set ic

Ignora o caso ao pesquisar

2

:set ai

Define recuo automático

3

:set noai

Desfaz a indentação automática

4

:set nu

Exibe linhas com números de linha no lado esquerdo

5

:set sw

Define a largura de um tabstop de software. Por exemplo, você definiria uma largura de deslocamento de 4 com este comando -:set sw = 4

6

:set ws

Se wrapscan estiver definido e a palavra não for encontrada na parte inferior do arquivo, ele tentará pesquisá-la no início

7

:set wm

Se esta opção tiver um valor maior que zero, o editor fará automaticamente uma "quebra de linha". Por exemplo, para definir a margem de quebra para dois caracteres, você digitaria isto::set wm = 2

8

:set ro

Altera o tipo de arquivo para "somente leitura"

9

:set term

Tipo de terminal de impressão

10

:set bf

Descarta os caracteres de controle da entrada

Execução de comandos

O vi tem a capacidade de executar comandos de dentro do editor. Para executar um comando, você só precisa ir para o modo de comando e digitar:! comando.

Por exemplo, se você deseja verificar se existe um arquivo antes de tentar salvá-lo com esse nome, você pode digitar :! ls e você verá a saída de ls na tela.

Você pode pressionar qualquer tecla (ou a seqüência de escape do comando) para retornar à sua sessão de vi.

Substituindo Texto

O comando de substituição (:s/) permite que você substitua rapidamente palavras ou grupos de palavras em seus arquivos. A seguir está a sintaxe para substituir o texto -

:s/search/replace/g

o gsignifica globalmente. O resultado desse comando é que todas as ocorrências na linha do cursor são alteradas.

Pontos importantes a serem observados

Os seguintes pontos irão adicionar ao seu sucesso com o vi -

  • Você deve estar no modo de comando para usar os comandos. (Pressione Esc duas vezes a qualquer momento para garantir que você está no modo de comando.)

  • Você deve ter cuidado com os comandos. Eles são sensíveis a maiúsculas e minúsculas.

  • Você deve estar no modo de inserção para inserir texto.

UMA Shellfornece uma interface para o sistema Unix. Ele coleta informações suas e executa programas com base nessas informações. Quando um programa termina de ser executado, ele exibe a saída desse programa.

Shell é um ambiente no qual podemos executar nossos comandos, programas e scripts de shell. Existem diferentes sabores de shell, assim como existem diferentes sabores de sistemas operacionais. Cada tipo de shell tem seu próprio conjunto de comandos e funções reconhecidos.

Shell Prompt

O prompt, $, que é chamado de command prompt, é emitido pelo shell. Enquanto o prompt é exibido, você pode digitar um comando.

Shell lê sua entrada depois que você pressiona Enter. Ele determina o comando que você deseja executar observando a primeira palavra de sua entrada. Uma palavra é um conjunto ininterrupto de caracteres. Espaços e guias separam palavras.

A seguir está um exemplo simples do date comando, que exibe a data e hora atuais -

$date
Thu Jun 25 08:30:19 MST 2009

Você pode personalizar seu prompt de comando usando a variável de ambiente PS1 explicada no tutorial de ambiente.

Tipos de casca

No Unix, existem dois tipos principais de shells -

  • Bourne shell - Se você estiver usando um shell do tipo Bourne, o $ caractere é o prompt padrão.

  • C shell - Se você estiver usando um shell do tipo C, o caractere% é o prompt padrão.

O Bourne Shell possui as seguintes subcategorias -

  • Bourne shell (sh)
  • Shell Korn (ksh)
  • Shell Bourne Again (bash)
  • Shell POSIX (sh)

Os diferentes shells tipo C seguem -

  • C shell (csh)
  • Shell TENEX / TOPS C (tcsh)

O shell Unix original foi escrito em meados da década de 1970 por Stephen R. Bourne enquanto ele estava no AT&T Bell Labs em Nova Jersey.

Bourne shell foi o primeiro shell a aparecer em sistemas Unix, portanto, é conhecido como "o shell".

Bourne shell geralmente é instalado como /bin/shna maioria das versões do Unix. Por esse motivo, é o shell de escolha para escrever scripts que podem ser usados ​​em diferentes versões do Unix.

Neste capítulo, vamos cobrir a maioria dos conceitos da Shell que são baseados na Borne Shell.

Scripts Shell

O conceito básico de um script de shell é uma lista de comandos, listados na ordem de execução. Um bom script de shell terá comentários, precedidos por# assinar, descrevendo as etapas.

Existem testes condicionais, como o valor A é maior do que o valor B, loops que nos permitem percorrer grandes quantidades de dados, arquivos para ler e armazenar dados e variáveis ​​para ler e armazenar dados, e o script pode incluir funções.

Vamos escrever muitos scripts nas próximas seções. Seria um arquivo de texto simples no qual colocaríamos todos os nossos comandos e várias outras construções necessárias que informam ao ambiente do shell o que fazer e quando fazer.

Scripts e funções de shell são interpretados. Isso significa que eles não são compilados.

Script de exemplo

Suponha que criamos um test.shroteiro. Observe que todos os scripts teriam o.shextensão. Antes de adicionar qualquer coisa ao seu script, você precisa alertar o sistema de que um script de shell está sendo iniciado. Isso é feito usando oshebangconstruir. Por exemplo -

#!/bin/sh

Isso informa ao sistema que os comandos a seguir devem ser executados pelo shell Bourne. É chamado de shebang porque o#o símbolo é chamado de hash, e o! o símbolo é chamado de estrondo .

Para criar um script contendo esses comandos, você coloca a linha shebang primeiro e depois adiciona os comandos -

#!/bin/bash
pwd
ls

Comentários Shell

Você pode colocar seus comentários em seu script da seguinte maneira -

#!/bin/bash

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls

Salve o conteúdo acima e torne o script executável -

$chmod +x test.sh

O script de shell agora está pronto para ser executado -

$./test.sh

Após a execução, você receberá o seguinte resultado -

/home/amrood
index.htm  unix-basic_utilities.htm  unix-directories.htm  
test.sh    unix-communication.htm    unix-environment.htm

Note - Para executar um programa disponível no diretório atual, use ./program_name

Scripts de shell estendido

Os scripts de shell têm várias construções necessárias que informam ao ambiente de shell o que fazer e quando fazer. Obviamente, a maioria dos scripts é mais complexa do que o anterior.

Afinal, o shell é uma linguagem de programação real, completa com variáveis, estruturas de controle e assim por diante. Não importa o quão complicado um script se torne, ele ainda é apenas uma lista de comandos executados sequencialmente.

O seguinte script usa o read comando que pega a entrada do teclado e a atribui como o valor da variável PERSON e finalmente a imprime em STDOUT.

#!/bin/sh

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

Aqui está um exemplo de execução do script -

$./test.sh What is your name? Zara Ali Hello, Zara Ali $

Neste capítulo, aprenderemos como usar variáveis ​​Shell no Unix. Uma variável é uma cadeia de caracteres à qual atribuímos um valor. O valor atribuído pode ser um número, texto, nome do arquivo, dispositivo ou qualquer outro tipo de dados.

Uma variável nada mais é do que um ponteiro para os dados reais. O shell permite criar, atribuir e excluir variáveis.

Nomes de Variáveis

O nome de uma variável pode conter apenas letras (a a z ou A a Z), números (0 a 9) ou o caractere de sublinhado (_).

Por convenção, as variáveis ​​do shell Unix terão seus nomes em MAIÚSCULAS.

Os exemplos a seguir são nomes de variáveis ​​válidos -

_ALI
TOKEN_A
VAR_1
VAR_2

A seguir estão os exemplos de nomes de variáveis ​​inválidos -

2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

O motivo pelo qual você não pode usar outros caracteres, como !, *, ou - é que esses caracteres têm um significado especial para o shell.

Definindo Variáveis

As variáveis ​​são definidas da seguinte forma -

variable_name=variable_value

Por exemplo -

NAME="Zara Ali"

O exemplo acima define a variável NAME e atribui o valor "Zara Ali" a ela. Variáveis ​​deste tipo são chamadasscalar variables. Uma variável escalar pode conter apenas um valor de cada vez.

O Shell permite que você armazene qualquer valor que desejar em uma variável. Por exemplo -

VAR1="Zara Ali"
VAR2=100

Valores de acesso

Para acessar o valor armazenado em uma variável, prefixe seu nome com o cifrão ($) -

Por exemplo, o script a seguir acessará o valor da variável definida NAME e o imprimirá em STDOUT -

#!/bin/sh

NAME="Zara Ali"
echo $NAME

O script acima produzirá o seguinte valor -

Zara Ali

Variáveis ​​somente leitura

O shell fornece uma maneira de marcar variáveis ​​como somente leitura usando o comando somente leitura. Depois que uma variável é marcada como somente leitura, seu valor não pode ser alterado.

Por exemplo, o script a seguir gera um erro ao tentar alterar o valor de NAME -

#!/bin/sh

NAME="Zara Ali"
readonly NAME
NAME="Qadiri"

O script acima irá gerar o seguinte resultado -

/bin/sh: NAME: This variable is read only.

Variáveis ​​não configuradas

Remover ou deletar uma variável direciona o shell para remover a variável da lista de variáveis ​​que ele rastreia. Depois de remover a definição de uma variável, você não pode acessar o valor armazenado na variável.

A seguir está a sintaxe para cancelar a definição de uma variável usando o unset comando -

unset variable_name

O comando acima desfaz o valor de uma variável definida. Aqui está um exemplo simples que demonstra como o comando funciona -

#!/bin/sh

NAME="Zara Ali"
unset NAME
echo $NAME

O exemplo acima não imprime nada. Você não pode usar o comando unset paraunset variáveis ​​que são marcadas readonly.

Tipos de Variáveis

Quando um shell está em execução, três tipos principais de variáveis ​​estão presentes -

  • Local Variables- Uma variável local é uma variável que está presente na instância atual do shell. Não está disponível para programas iniciados pelo shell. Eles são definidos no prompt de comando.

  • Environment Variables- Uma variável de ambiente está disponível para qualquer processo filho do shell. Alguns programas precisam de variáveis ​​de ambiente para funcionar corretamente. Normalmente, um script de shell define apenas as variáveis ​​de ambiente necessárias para os programas que ele executa.

  • Shell Variables- Uma variável de shell é uma variável especial definida pelo shell e exigida por ele para funcionar corretamente. Algumas dessas variáveis ​​são variáveis ​​de ambiente, enquanto outras são variáveis ​​locais.

Neste capítulo, discutiremos em detalhes sobre variáveis ​​especiais no Unix. Em um de nossos capítulos anteriores, entendemos como ter cuidado ao usar certos caracteres não alfanuméricos em nomes de variáveis. Isso ocorre porque esses caracteres são usados ​​nos nomes de variáveis ​​especiais do Unix. Essas variáveis ​​são reservadas para funções específicas.

Por exemplo, o $ caractere representa o número de identificação do processo, ou PID, do shell atual -

$echo $$

O comando acima escreve o PID do shell atual -

29949

A tabela a seguir mostra uma série de variáveis ​​especiais que você pode usar em seus scripts de shell -

Sr. Não. Variável e Descrição
1

$0

O nome do arquivo do script atual.

2

$n

Essas variáveis ​​correspondem aos argumentos com os quais um script foi chamado. Aquin é um número decimal positivo correspondente à posição de um argumento (o primeiro argumento é $1, the second argument is $2 e assim por diante).

3

$#

O número de argumentos fornecidos a um script.

4

$*

Todos os argumentos estão entre aspas duplas. Se um script recebe dois argumentos,$* is equivalent to $1 $ 2.

5

$@

Todos os argumentos são individualmente aspas duplas. Se um script recebe dois argumentos,$@ is equivalent to $1 $ 2.

6

$?

O status de saída do último comando executado.

7

$$

O número do processo do shell atual. Para scripts de shell, este é o ID do processo sob o qual eles estão executando.

8

$!

O número do processo do último comando em segundo plano.

Argumentos de linha de comando

Os argumentos da linha de comando $1, $2, $3, ...$9 são parâmetros posicionais, com $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9 como os argumentos para o comando.

O seguinte script usa várias variáveis ​​especiais relacionadas à linha de comando -

#!/bin/sh

echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

Aqui está um exemplo de execução do script acima -

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

Parâmetros Especiais $* and $@

Existem parâmetros especiais que permitem acessar todos os argumentos da linha de comando de uma vez. $* e $@ ambos agirão da mesma forma, a menos que estejam entre aspas duplas, "".

Ambos os parâmetros especificam os argumentos da linha de comando. No entanto, o "$*" special parameter takes the entire list as one argument with spaces between and the "$@ "parâmetro especial pega a lista inteira e a separa em argumentos separados.

Podemos escrever o script de shell como mostrado abaixo para processar um número desconhecido de argumentos de linha de comando com o $* or $@ parâmetros especiais -

#!/bin/sh

for TOKEN in $* do echo $TOKEN
done

Aqui está um exemplo de execução do script acima -

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

Note - aqui do...done é um tipo de loop que será abordado em um tutorial subsequente.

Status de saída

o $? variável representa o status de saída do comando anterior.

O status de saída é um valor numérico retornado por cada comando após sua conclusão. Como regra, a maioria dos comandos retorna um status de saída 0 se foram bem-sucedidos e 1 se não tiveram êxito.

Alguns comandos retornam status de saída adicionais por motivos específicos. Por exemplo, alguns comandos diferenciam entre os tipos de erros e retornam vários valores de saída dependendo do tipo específico de falha.

A seguir está o exemplo de comando bem-sucedido -

$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $

Neste capítulo, discutiremos como usar matrizes de shell no Unix. Uma variável de shell é capaz o suficiente para conter um único valor. Essas variáveis ​​são chamadas de variáveis ​​escalares.

Shell suporta um tipo diferente de variável chamado de array variable. Isso pode conter vários valores ao mesmo tempo. Os arrays fornecem um método de agrupamento de um conjunto de variáveis. Em vez de criar um novo nome para cada variável necessária, você pode usar uma única variável de matriz que armazena todas as outras variáveis.

Todas as regras de nomenclatura discutidas para Variáveis ​​Shell seriam aplicáveis ​​ao nomear arrays.

Definindo Valores de Matriz

A diferença entre uma variável de array e uma variável escalar pode ser explicada como segue.

Suponha que você esteja tentando representar os nomes de vários alunos como um conjunto de variáveis. Cada uma das variáveis ​​individuais é uma variável escalar da seguinte forma -

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Podemos usar um único array para armazenar todos os nomes mencionados acima. A seguir está o método mais simples de criar uma variável de matriz. Isso ajuda a atribuir um valor a um de seus índices.

array_name[index]=value

Aqui array_name é o nome da matriz, índice é o índice do item na matriz que você deseja definir e valor é o valor que você deseja definir para esse item.

Como exemplo, os seguintes comandos -

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"

Se você estiver usando o ksh shell, aqui está a sintaxe de inicialização do array -

set -A array_name value1 value2 ... valuen

Se você estiver usando o bash shell, aqui está a sintaxe de inicialização do array -

array_name=(value1 ... valuen)

Acessando Valores de Matriz

Depois de definir qualquer variável de matriz, você a acessa da seguinte maneira -

${array_name[index]}

Aqui array_name é o nome do array e index é o índice do valor a ser acessado. A seguir está um exemplo para entender o conceito -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

O exemplo acima irá gerar o seguinte resultado -

$./test.sh
First Index: Zara
Second Index: Qadir

Você pode acessar todos os itens em uma matriz de uma das seguintes maneiras -

${array_name[*]} ${array_name[@]}

Aqui array_name é o nome da matriz em que você está interessado. O exemplo a seguir o ajudará a entender o conceito -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"

O exemplo acima irá gerar o seguinte resultado -

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

Existem vários operadores suportados por cada shell. Discutiremos em detalhes sobre o shell Bourne (shell padrão) neste capítulo.

Vamos agora discutir os seguintes operadores -

  • Operadores aritméticos
  • Operadores Relacionais
  • Operadores booleanos
  • Operadores de string
  • Operadores de teste de arquivo

O shell Bourne originalmente não tinha nenhum mecanismo para realizar operações aritméticas simples, mas também usa programas externos awk ou expr.

O exemplo a seguir mostra como adicionar dois números -

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

O script acima irá gerar o seguinte resultado -

Total value : 4

Os seguintes pontos devem ser considerados ao adicionar -

  • Deve haver espaços entre operadores e expressões. Por exemplo, 2 + 2 não está correto; deve ser escrito como 2 + 2.

  • A expressão completa deve ser colocada entre ‘ ‘, chamado de crase.

Operadores aritméticos

Os seguintes operadores aritméticos são suportados pelo Bourne Shell.

Assumir variável a contém 10 e variável b detém 20 então -

Mostrar exemplos

Operador Descrição Exemplo
+ (Adição) Adiciona valores em qualquer lado do operador `expr $a + $b` vai dar 30
- (Subtração) Subtrai o operando direito do operando esquerdo `expr $a - $b` dará -10
* (Multiplicação) Multiplica os valores em ambos os lados do operador `expr $a \* $b` dará 200
/ (Divisão) Divide operando esquerdo pelo operando direito `expr $b / $a` dará 2
% (Módulo) Divide operando esquerdo pelo operando direito e retorna o resto `expr $b % $a` dará 0
= (Atribuição) Atribui o operando direito no operando esquerdo a = $ b atribuiria o valor de b em a
== (Igualdade) Compara dois números, se ambos forem iguais, retorna verdadeiro. [$ a == $ b] retornaria falso.
! = (Não Igualdade) Compara dois números, se ambos forem diferentes, retorna verdadeiro. [$ a! = $ b] retornaria verdadeiro.

É muito importante entender que todas as expressões condicionais devem estar entre colchetes com espaços ao seu redor, por exemplo [ $a == $b ] está correto enquanto, [$a==$b] está incorreto.

Todos os cálculos aritméticos são feitos com números inteiros longos.

Operadores Relacionais

Bourne Shell oferece suporte aos seguintes operadores relacionais que são específicos para valores numéricos. Esses operadores não funcionam para valores de string, a menos que seu valor seja numérico.

Por exemplo, os operadores a seguir funcionarão para verificar uma relação entre 10 e 20, bem como entre "10" e "20", mas não entre "dez" e "vinte".

Assumir variável a contém 10 e variável b detém 20 então -

Mostrar exemplos

Operador Descrição Exemplo
-eq Verifica se os valores de dois operandos são iguais ou não; se sim, então a condição se torna verdadeira. [$ a -eq $ b] não é verdade.
-ne Verifica se os valores de dois operandos são iguais ou não; se os valores não forem iguais, a condição se torna verdadeira. [$ a -ne $ b] é verdade.
-gt Verifica se o valor do operando esquerdo é maior que o valor do operando direito; se sim, então a condição se torna verdadeira. [$ a -gt $ b] não é verdade.
-lt Verifica se o valor do operando esquerdo é menor que o valor do operando direito; se sim, então a condição se torna verdadeira. [$ a -lt $ b] é verdadeiro.
-ge Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito; se sim, então a condição se torna verdadeira. [$ a -ge $ b] não é verdade.
-le Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito; se sim, então a condição se torna verdadeira. [$ a -le $ b] é verdade.

É muito importante entender que todas as expressões condicionais devem ser colocadas dentro de colchetes com espaços ao redor. Por exemplo,[ $a <= $b ] está correto enquanto, [$a <= $b] está incorreto.

Operadores booleanos

Os seguintes operadores booleanos são suportados pelo Bourne Shell.

Assumir variável a contém 10 e variável b detém 20 então -

Mostrar exemplos

Operador Descrição Exemplo
! Esta é uma negação lógica. Isso inverte uma condição verdadeira em falsa e vice-versa. [! false] é verdadeiro.
-o Isso é lógico OR. Se um dos operandos for verdadeiro, a condição se torna verdadeira. [$ a -lt 20 -o $ b -gt 100] é verdade.
-a Isso é lógico AND. Se ambos os operandos forem verdadeiros, a condição se torna verdadeira, caso contrário, é falsa. [$ a -lt 20 -a $ b -gt 100] é falso.

Operadores de string

Os seguintes operadores de string são suportados pelo Bourne Shell.

Assumir variável a contém "abc" e variável b segura "efg" então -

Mostrar exemplos

Operador Descrição Exemplo
= Verifica se os valores de dois operandos são iguais ou não; se sim, então a condição se torna verdadeira. [$ a = $ b] não é verdade.
!= Verifica se os valores de dois operandos são iguais ou não; se os valores não forem iguais, a condição se torna verdadeira. [$ a! = $ b] é verdade.
-z Verifica se o tamanho do operando da string fornecido é zero; se tiver comprimento zero, ele retornará verdadeiro. [-z $ a] não é verdade.
-n Verifica se o tamanho do operando da string fornecido é diferente de zero; se o comprimento for diferente de zero, ele retornará verdadeiro. [-n $ a] não é falso.
str Verifica se strnão é a string vazia; se estiver vazio, ele retornará falso. [$ a] não é falso.

Operadores de teste de arquivo

Temos alguns operadores que podem ser usados ​​para testar várias propriedades associadas a um arquivo Unix.

Assuma uma variável file contém um nome de arquivo existente "teste", cujo tamanho é 100 bytes e tem read, write e execute permissão em -

Mostrar exemplos

Operador Descrição Exemplo
-b file Verifica se o arquivo é um arquivo especial de bloco; se sim, então a condição se torna verdadeira. [-b $ file] é falso.
-c file Verifica se o arquivo é um arquivo especial de caracteres; se sim, então a condição se torna verdadeira. [-c $ arquivo] é falso.
-d file Verifica se o arquivo é um diretório; se sim, então a condição se torna verdadeira. [-d $ file] não é verdade.
-f file Verifica se o arquivo é um arquivo comum em oposição a um diretório ou arquivo especial; se sim, então a condição se torna verdadeira. [-f $ file] é verdadeiro.
-g file Verifica se o arquivo tem seu conjunto de bits de ID de grupo (SGID) definido; se sim, então a condição se torna verdadeira. [-g $ arquivo] é falso.
-k file Verifica se o arquivo tem o bit sticky definido; se sim, então a condição se torna verdadeira. [-k $ file] é falso.
-p file Verifica se o arquivo é um canal nomeado; se sim, então a condição se torna verdadeira. [-p $ file] é falso.
-t file Verifica se o descritor de arquivo está aberto e associado a um terminal; se sim, então a condição se torna verdadeira. [-t $ file] é falso.
-u file Verifica se o arquivo tem seu conjunto de bits Set User ID (SUID); se sim, então a condição se torna verdadeira. [-u $ file] é falso.
-r file Verifica se o arquivo é legível; se sim, então a condição se torna verdadeira. [-r $ file] é verdadeiro.
-w file Verifica se o arquivo é gravável; se sim, então a condição se torna verdadeira. [-w $ file] é verdadeiro.
-x file Verifica se o arquivo é executável; se sim, então a condição se torna verdadeira. [-x $ file] é verdadeiro.
-s file Verifica se o tamanho do arquivo é maior que 0; se sim, então a condição se torna verdadeira. [-s $ file] é verdadeiro.
-e file Verifica se o arquivo existe; é verdadeiro mesmo se o arquivo for um diretório, mas existir. [-e $ file] é verdadeiro.

Operadores C Shell

O link a seguir lhe dará uma breve ideia sobre operadores C Shell -

Operadores C Shell

Operadores Korn Shell

O link a seguir ajuda a entender os Operadores Shell Korn -

Operadores Korn Shell

Neste capítulo, vamos entender a tomada de decisão do shell no Unix. Ao escrever um script de shell, pode haver uma situação em que você precise adotar um caminho entre os dois caminhos fornecidos. Portanto, você precisa fazer uso de instruções condicionais que permitem que seu programa tome decisões corretas e execute as ações corretas.

O Unix Shell oferece suporte a declarações condicionais que são usadas para realizar diferentes ações com base em diferentes condições. Agora vamos entender duas declarações de tomada de decisão aqui -

  • o if...else declaração

  • o case...esac declaração

As instruções if ... else

As instruções if else são instruções úteis para a tomada de decisões que podem ser usadas para selecionar uma opção de um determinado conjunto de opções.

Unix Shell suporta as seguintes formas de if…else declaração -

  • if ... declaração fi
  • if ... else ... declaração fi
  • if ... elif ... else ... declaração fi

A maioria das instruções if verifica as relações usando os operadores relacionais discutidos no capítulo anterior.

O caso ... Declaração esac

Você pode usar vários if...elifinstruções para realizar uma ramificação multiway. No entanto, nem sempre essa é a melhor solução, especialmente quando todos os ramos dependem do valor de uma única variável.

Suporta Unix Shell case...esac declaração que lida exatamente com esta situação, e o faz de forma mais eficiente do que repetida if...elif afirmações.

Existe apenas uma forma de case...esac declaração que foi descrita em detalhes aqui -

  • case ... declaração esac

o case...esac declaração no shell Unix é muito semelhante ao switch...case declaração que temos em outras linguagens de programação como C ou C++ e PERLetc.

Neste capítulo, discutiremos os loops de shell no Unix. Um loop é uma ferramenta de programação poderosa que permite executar um conjunto de comandos repetidamente. Neste capítulo, examinaremos os seguintes tipos de loops disponíveis para programadores de shell -

  • O loop while
  • O laço for
  • O loop até
  • O loop de seleção

Você usará loops diferentes com base na situação. Por exemplo, owhileo loop executa os comandos fornecidos até que a condição fornecida permaneça verdadeira; auntil o loop é executado até que uma determinada condição se torne verdadeira.

Depois de ter uma boa prática de programação, você ganhará a experiência e, portanto, começará a usar o loop apropriado com base na situação. Aqui,while e for loops estão disponíveis na maioria das outras linguagens de programação, como C, C++ e PERLetc.

Loops de aninhamento

Todos os loops suportam o conceito de aninhamento, o que significa que você pode colocar um loop dentro de outro semelhante ou em diferentes loops. Esse aninhamento pode ir até um número ilimitado de vezes com base em sua necessidade.

Aqui está um exemplo de aninhamento whileciclo. Os outros loops podem ser aninhados com base nos requisitos de programação de forma semelhante -

Aninhando enquanto Loops

É possível usar um loop while como parte do corpo de outro loop while.

Sintaxe

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true

   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done

   Statement(s) to be executed if command1 is true
done

Exemplo

Aqui está um exemplo simples de aninhamento de loop. Vamos adicionar outro loop de contagem regressiva dentro do loop que você costumava contar até nove -

#!/bin/sh

a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
   while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
      b=`expr $b - 1` done echo a=`expr $a + 1`
done

Isso produzirá o seguinte resultado. É importante notar comoecho -nfunciona aqui. Aqui-n a opção permite que o eco evite imprimir um novo caractere de linha.

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

Neste capítulo, discutiremos o controle de loop de shell no Unix. Até agora, você examinou a criação de loops e o trabalho com loops para realizar diferentes tarefas. Às vezes, você precisa interromper um loop ou pular as iterações do loop.

Neste capítulo, aprenderemos a seguir duas instruções que são usadas para controlar os loops de shell -

  • o break declaração

  • o continue declaração

O loop infinito

Todos os loops têm uma vida limitada e surgem quando a condição é falsa ou verdadeira, dependendo do loop.

Um loop pode continuar para sempre se a condição necessária não for atendida. Um loop que é executado para sempre sem terminar é executado um número infinito de vezes. Por esse motivo, esses loops são chamados de loops infinitos.

Exemplo

Aqui está um exemplo simples que usa o while loop para exibir os números de zero a nove -

#!/bin/sh

a=10

until [ $a -lt 10 ] do echo $a
   a=`expr $a + 1`
done

Este loop continua para sempre porque a é sempre greater than ou equal to 10 e nunca é inferior a 10.

A declaração de quebra

o breakinstrução é usada para encerrar a execução de todo o loop, após completar a execução de todas as linhas de código até a instrução break. Em seguida, ele desce para o código após o final do loop.

Sintaxe

Os seguintes break declaração é usada para sair de um loop -

break

O comando break também pode ser usado para sair de um loop aninhado usando este formato -

break n

Aqui n especifica o nth loop envolvente para a saída.

Exemplo

Aqui está um exemplo simples que mostra que o loop termina assim que a torna-se 5 -

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

Após a execução, você receberá o seguinte resultado -

0
1
2
3
4
5

Aqui está um exemplo simples de loop for aninhado. Este script sai de ambos os loops sevar1 equals 2 e var2 equals 0 -

#!/bin/sh

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
      fi
   done
done

Após a execução, você receberá o seguinte resultado. No loop interno, você tem um comando break com o argumento 2. Isso indica que, se uma condição for atendida, você deve sair do loop externo e, por fim, também do loop interno.

1 0
1 5

A declaração continue

o continue declaração é semelhante ao break , exceto que faz com que a iteração atual do loop saia, em vez de todo o loop.

Esta instrução é útil quando ocorre um erro, mas você deseja tentar executar a próxima iteração do loop.

Sintaxe

continue

Como com a instrução break, um argumento inteiro pode ser fornecido ao comando continue para pular comandos de loops aninhados.

continue n

Aqui n especifica o nth loop envolvente para continuar.

Exemplo

O loop a seguir faz uso do continue instrução que retorna da instrução continue e começa a processar a próxima instrução -

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
   Q=`expr $NUM % 2` if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

Após a execução, você receberá o seguinte resultado -

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number

O que é substituição?

O shell executa a substituição quando encontra uma expressão que contém um ou mais caracteres especiais.

Exemplo

Aqui, o valor de impressão da variável é substituído por seu valor. Mesmo tempo,"\n" é substituído por uma nova linha -

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

Você receberá o seguinte resultado. Aqui o-e opção permite a interpretação de escapes de barra invertida.

Value of a is 10

A seguir está o resultado sem -e opção -

Value of a is 10\n

Aqui estão as seguintes sequências de escape que podem ser usadas no comando echo -

Sr. Não. Escape e descrição
1

\\

barra invertida

2

\a

alerta (BEL)

3

\b

backspace

4

\c

suprimir nova linha final

5

\f

feed de formulário

6

\n

nova linha

7

\r

retorno de carruagem

8

\t

guia horizontal

9

\v

aba vertical

Você pode usar o -E opção para desativar a interpretação dos escapes de barra invertida (padrão).

Você pode usar o -n opção para desativar a inserção de uma nova linha.

Substituição de Comando

Substituição de comando é o mecanismo pelo qual o shell executa um determinado conjunto de comandos e, em seguida, substitui sua saída no lugar dos comandos.

Sintaxe

A substituição do comando é realizada quando um comando é dado como -

`command`

Ao realizar a substituição do comando, certifique-se de usar aspas, não o caractere de aspas simples.

Exemplo

A substituição de comando geralmente é usada para atribuir a saída de um comando a uma variável. Cada um dos exemplos a seguir demonstra a substituição do comando -

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"

Após a execução, você receberá o seguinte resultado -

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

Substituição de Variável

A substituição de variável permite que o programador de shell manipule o valor de uma variável com base em seu estado.

Aqui está a seguinte tabela para todas as substituições possíveis -

Sr. Não. Formulário e Descrição
1

${var}

Substitua o valor de var .

2

${var:-word}

Se var é nulo ou não definido, palavra é substituída porvar. O valor de var não muda.

3

${var:=word}

Se var é nulo ou não definido , var é definido com o valor deword.

4

${var:?message}

Se var for nulo ou não definido, a mensagem será impressa no erro padrão. Isso verifica se as variáveis ​​estão definidas corretamente.

5

${var:+word}

Se var for definido, palavra será substituída por var. O valor de var não muda.

Exemplo

A seguir está o exemplo para mostrar vários estados da substituição acima -

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

Após a execução, você receberá o seguinte resultado -

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix

Neste capítulo, discutiremos em detalhes sobre os mecanismos de cotação do Shell. Começaremos discutindo os metacaracteres.

Os Metacaracteres

O Unix Shell fornece vários metacaracteres que têm um significado especial ao usá-los em qualquer Shell Script e causa o encerramento de uma palavra, a menos que seja citada.

Por exemplo, ? corresponde a um único caractere enquanto lista os arquivos em um diretório e um *corresponde a mais de um caractere. Aqui está uma lista da maioria dos caracteres especiais do shell (também chamados de metacaracteres) -

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Um caractere pode ser citado (ou seja, feito para representar a si mesmo) precedendo-o com um \.

Exemplo

O exemplo a seguir mostra como imprimir um * ou um ? -

#!/bin/sh

echo Hello; Word

Após a execução, você receberá o seguinte resultado -

Hello
./test.sh: line 2: Word: command not found

shell returned 127

Vamos agora tentar usar um caractere citado -

#!/bin/sh

echo Hello\; Word

Após a execução, você receberá o seguinte resultado -

Hello; Word

o $ sinal é um dos metacaracteres, por isso deve ser colocado entre aspas para evitar tratamento especial pelo shell -

#!/bin/sh

echo "I have \$1200"

Após a execução, você receberá o seguinte resultado -

I have $1200

A tabela a seguir lista as quatro formas de citação -

Sr. Não. Citação e descrição
1

Single quote

Todos os caracteres especiais entre essas aspas perdem seu significado especial.

2

Double quote

A maioria dos caracteres especiais entre essas aspas perdem seu significado especial com essas exceções -

  • $
  • `
  • \$
  • \'
  • \"
  • \\
3

Backslash

Qualquer caractere imediatamente após a barra invertida perde seu significado especial.

4

Back quote

Qualquer coisa entre aspas invertidas seria tratada como um comando e seria executada.

As citações individuais

Considere um comando echo que contém muitos caracteres especiais de shell -

echo <-$1500.**>; (update?) [y|n]

Colocar uma barra invertida na frente de cada caractere especial é tedioso e torna a linha difícil de ler -

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

Existe uma maneira fácil de citar um grande grupo de caracteres. Coloque aspas simples (') no início e no final da string -

echo '<-$1500.**>; (update?) [y|n]'

Os caracteres entre aspas simples são citados como se uma barra invertida estivesse na frente de cada caractere. Com isso, o comando echo é exibido de maneira adequada.

Se uma aspa simples aparecer dentro de uma string a ser gerada, você não deve colocar toda a string entre aspas simples, em vez disso, você deve preceder usando uma barra invertida (\) da seguinte maneira -

echo 'It\'s Shell Programming

The Double Quotes

Tente executar o seguinte script de shell. Este script de shell usa aspas simples -

VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

Após a execução, você receberá o seguinte resultado -

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

Não era isso que precisava ser exibido. É óbvio que aspas simples evitam a substituição de variáveis. Se você quiser substituir os valores das variáveis ​​e fazer as vírgulas invertidas funcionarem conforme o esperado, você precisará colocar seus comandos entre aspas duplas da seguinte forma -

VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

Após a execução, você receberá o seguinte resultado -

ZARA owes <-$1500.**>; [ as of (07/02) ]

As aspas duplas eliminam o significado especial de todos os caracteres, exceto o seguinte -

  • $ para substituição de parâmetro

  • Backquotes para substituição de comando

  • \$ para habilitar cifrões literais

  • \` para habilitar crases literais

  • \" para habilitar aspas duplas incorporadas

  • \\ para habilitar barras invertidas incorporadas

  • Todos os outros \ os caracteres são literais (não especiais)

Os caracteres entre aspas simples são citados como se uma barra invertida estivesse na frente de cada caractere. Isso ajuda a exibir o comando echo corretamente.

Se uma aspa simples aparecer dentro de uma string a ser gerada, você não deve colocar toda a string entre aspas simples, em vez disso, você deve preceder usando uma barra invertida (\) da seguinte maneira -

echo 'It\'s Shell Programming'

As Backquotes

Colocar qualquer comando Shell entre backquotes executa o comando.

Sintaxe

Aqui está a sintaxe simples para colocar qualquer Shell command entre crases -

var=`command`

Exemplo

o date comando é executado no exemplo a seguir e o resultado produzido é armazenado na variável DATA.

DATE=`date`

echo "Current Date: $DATE"

Após a execução, você receberá o seguinte resultado -

Current Date: Thu Jul  2 05:28:45 MST 2009

Neste capítulo, discutiremos em detalhes sobre os redirecionamentos de entrada / saída do Shell. A maioria dos comandos do sistema Unix recebem entrada de seu terminal e enviam a saída resultante de volta para seu terminal. Um comando normalmente lê sua entrada a partir da entrada padrão, que é o seu terminal por padrão. Da mesma forma, um comando normalmente grava sua saída na saída padrão, que é novamente seu terminal por padrão.

Redirecionamento de saída

A saída de um comando normalmente destinado à saída padrão pode ser facilmente desviada para um arquivo. Esse recurso é conhecido como redirecionamento de saída.

Se a notação> arquivo for anexada a qualquer comando que normalmente grava sua saída na saída padrão, a saída desse comando será gravada no arquivo em vez de em seu terminal.

Verifique o seguinte who comando que redireciona a saída completa do comando no arquivo de usuários.

$ who > users

Observe que nenhuma saída aparece no terminal. Isso ocorre porque a saída foi redirecionada do dispositivo de saída padrão padrão (o terminal) para o arquivo especificado. Você pode verificar o arquivo de usuários para o conteúdo completo -

$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

Se um comando tiver sua saída redirecionada para um arquivo e o arquivo já contiver alguns dados, esses dados serão perdidos. Considere o seguinte exemplo -

$ echo line 1 > users
$ cat users line 1 $

Você pode usar o operador >> para anexar a saída em um arquivo existente da seguinte maneira -

$ echo line 2 >> users $ cat users
line 1
line 2
$

Redirecionamento de entrada

Assim como a saída de um comando pode ser redirecionada para um arquivo, a entrada de um comando pode ser redirecionada de um arquivo. Enquanto ogreater-than character > é usado para redirecionamento de saída, o less-than character < é usado para redirecionar a entrada de um comando.

Os comandos que normalmente obtêm sua entrada da entrada padrão podem ter sua entrada redirecionada de um arquivo dessa maneira. Por exemplo, para contar o número de linhas no arquivo gerado pelos usuários acima, você pode executar o comando da seguinte maneira -

$ wc -l users
2 users
$

Após a execução, você receberá a seguinte saída. Você pode contar o número de linhas no arquivo redirecionando a entrada padrão dowccomando dos usuários do arquivo -

$ wc -l < users
2
$

Observe que há uma diferença na saída produzida pelas duas formas do comando wc. No primeiro caso, o nome dos usuários do arquivo é listado com a contagem de linhas; no segundo caso, não é.

No primeiro caso, wc sabe que está lendo sua entrada dos usuários do arquivo. No segundo caso, ele apenas sabe que está lendo sua entrada da entrada padrão, portanto, não exibe o nome do arquivo.

Aqui Documento

UMA here document é usado para redirecionar a entrada para um script ou programa de shell interativo.

Podemos executar um programa interativo dentro de um script de shell sem ação do usuário, fornecendo a entrada necessária para o programa interativo, ou script de shell interativo.

A forma geral de um here documento é -

command << delimiter
document
delimiter

Aqui, o shell interpreta o <<operador como uma instrução para ler a entrada até encontrar uma linha contendo o delimitador especificado. Todas as linhas de entrada até a linha que contém o delimitador são alimentadas na entrada padrão do comando.

O delimitador diz ao shell que o heredocumento foi concluído. Sem ele, o shell continua a ler a entrada para sempre. O delimitador deve ser uma única palavra que não contenha espaços ou tabulações.

A seguir está a entrada para o comando wc -l para contar o número total de linhas -

$wc -l << EOF
   This is a simple lookup program 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

Você pode usar o here document para imprimir várias linhas usando seu script da seguinte forma -

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF

Após a execução, você receberá o seguinte resultado -

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

O seguinte script executa uma sessão com o vi editor de texto e salva a entrada no arquivo test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

Se você executar este script com o vim atuando como vi, provavelmente verá uma saída como a seguinte -

$ sh test.sh Vim: Warning: Input is not from a terminal $

Depois de executar o script, você deve ver o seguinte adicionado ao arquivo test.txt -

$ cat test.txt This file was created automatically from a shell script $

Descartar a saída

Às vezes, você precisará executar um comando, mas não deseja que a saída seja exibida na tela. Nesses casos, você pode descartar a saída redirecionando-a para o arquivo/dev/null -

$ command > /dev/null

Aqui, comando é o nome do comando que você deseja executar. O arquivo/dev/null é um arquivo especial que descarta automaticamente todas as suas entradas.

Para descartar a saída de um comando e sua saída de erro, use o redirecionamento padrão para redirecionar STDERR para STDOUT -

$ command > /dev/null 2>&1

Aqui 2 representa STDERR e 1 representa STDOUT. Você pode exibir uma mensagem em STDERR redirecionando STDOUT para STDERR da seguinte forma -

$ echo message 1>&2

Comandos de redirecionamento

A seguir está uma lista completa de comandos que você pode usar para redirecionamento -

Sr. Não. Comando e Descrição
1

pgm > file

A saída do pgm é redirecionada para o arquivo

2

pgm < file

O programa pgm lê sua entrada do arquivo

3

pgm >> file

A saída do pgm é anexada ao arquivo

4

n > file

Saída do fluxo com descritor n redirecionado para o arquivo

5

n >> file

Saída do fluxo com descritor n anexado ao arquivo

6

n >& m

Mescla a saída do fluxo n com fluxo m

7

n <& m

Mescla a entrada do fluxo n com fluxo m

8

<< tag

A entrada padrão vem daqui até a próxima tag no início da linha

9

|

Pega a saída de um programa ou processo e a envia para outro

Observe que o descritor de arquivo 0 normalmente é a entrada padrão (STDIN), 1 é a saída padrão (STDOUT), e 2 é a saída de erro padrão (STDERR).

Neste capítulo, discutiremos em detalhes sobre as funções do shell. As funções permitem que você divida a funcionalidade geral de um script em subseções lógicas menores, que podem então ser chamadas para realizar suas tarefas individuais quando necessário.

Usar funções para realizar tarefas repetitivas é uma excelente maneira de criar code reuse. Esta é uma parte importante dos princípios modernos de programação orientada a objetos.

As funções do shell são semelhantes a sub-rotinas, procedimentos e funções em outras linguagens de programação.

Criação de funções

Para declarar uma função, basta usar a seguinte sintaxe -

function_name () { 
   list of commands
}

O nome da sua função é function_name, e é isso que você usará para chamá-lo de qualquer lugar em seus scripts. O nome da função deve ser seguido por parênteses, seguido por uma lista de comandos entre colchetes.

Exemplo

O exemplo a seguir mostra o uso da função -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Após a execução, você receberá a seguinte saída -

$./test.sh
Hello World

Passe parâmetros para uma função

Você pode definir uma função que aceitará parâmetros ao chamar a função. Esses parâmetros seriam representados por$1, $2 e assim por diante.

A seguir está um exemplo onde passamos dois parâmetros Zara e Ali e depois capturamos e imprimimos esses parâmetros na função.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Após a execução, você receberá o seguinte resultado -

$./test.sh
Hello World Zara Ali

Retornando valores de funções

Se você executar um exit comando de dentro de uma função, seu efeito não é apenas encerrar a execução da função, mas também do programa shell que chamou a função.

Se, em vez disso, você deseja apenas encerrar a execução da função, existe uma maneira de sair de uma função definida.

Com base na situação, você pode retornar qualquer valor de sua função usando o return comando cuja sintaxe é a seguinte -

return code

Aqui code pode ser qualquer coisa que você escolher aqui, mas obviamente você deve escolher algo que seja significativo ou útil no contexto do seu script como um todo.

Exemplo

A função a seguir retorna um valor 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?

echo "Return value is $ret"

Após a execução, você receberá o seguinte resultado -

$./test.sh
Hello World Zara Ali
Return value is 10

Funções Aninhadas

Uma das características mais interessantes das funções é que elas podem chamar a si mesmas e também a outras funções. Uma função que chama a si mesma é conhecida comorecursive function.

O exemplo a seguir demonstra o aninhamento de duas funções -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Após a execução, você receberá o seguinte resultado -

This is the first function speaking...
This is now the second function speaking...

Chamada de função do prompt

Você pode colocar definições para funções comumente usadas dentro de seu .profile. Essas definições estarão disponíveis sempre que você efetuar login e você pode usá-las no prompt de comando.

Como alternativa, você pode agrupar as definições em um arquivo, digamos test.she, em seguida, execute o arquivo no shell atual digitando -

$. test.sh

Isso tem o efeito de causar funções definidas dentro test.sh para ser lido e definido para o shell atual da seguinte forma -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Para remover a definição de uma função do shell, use o comando unset com o .fopção. Este comando também é usado para remover a definição de uma variável do shell.

$ unset -f function_name

Todos os comandos Unix vêm com várias opções opcionais e obrigatórias. É muito comum esquecer a sintaxe completa desses comandos.

Como ninguém consegue se lembrar de cada comando Unix e de todas as suas opções, temos ajuda online disponível para mitigar isso desde quando o Unix estava em seu estágio de desenvolvimento.

Versão Unix de Help files são chamados man pages. Se houver um nome de comando e você não tiver certeza de como usá-lo, as páginas de manual o ajudarão em cada etapa.

Sintaxe

Aqui está o comando simples que o ajuda a obter os detalhes de qualquer comando Unix enquanto trabalha com o sistema -

$man command

Exemplo

Suponha que haja um comando que exija que você peça ajuda; suponha que você queira saber sobrepwd então você simplesmente precisa usar o seguinte comando -

$man pwd

O comando acima ajuda você com as informações completas sobre o pwdcomando. Tente você mesmo no prompt de comando para obter mais detalhes.

Você pode obter detalhes completos em man o próprio comando usando o seguinte comando -

$man man

Seções da página do homem

As páginas do manual geralmente são divididas em seções, que geralmente variam de acordo com a preferência do autor da página do manual. A tabela a seguir lista algumas seções comuns -

Sr. Não. Seção e descrição
1

NAME

Nome do comando

2

SYNOPSIS

Parâmetros gerais de uso do comando

3

DESCRIPTION

Descreve o que o comando faz

4

OPTIONS

Descreve todos os argumentos ou opções do comando

5

SEE ALSO

Lista outros comandos que estão diretamente relacionados ao comando na página de manual ou se parecem muito com sua funcionalidade

6

BUGS

Explica quaisquer problemas conhecidos ou bugs que existam com o comando ou sua saída

7

EXAMPLES

Exemplos de uso comuns que dão ao leitor uma ideia de como o comando pode ser usado

8

AUTHORS

O autor da página de manual / comando

Resumindo, as páginas de manual são um recurso vital e o primeiro meio de pesquisa quando você precisa de informações sobre comandos ou arquivos em um sistema Unix.

Comandos úteis de shell

O link a seguir fornece uma lista dos comandos Unix Shell mais importantes e usados ​​com freqüência.

Se você não sabe como usar nenhum comando, use a página de manual para obter detalhes completos sobre o comando.

Aqui está a lista de Unix Shell - Comandos Úteis

Neste capítulo, discutiremos em detalhes sobre as expressões regulares com SED no Unix.

Uma expressão regular é uma string que pode ser usada para descrever várias sequências de caracteres. Expressões regulares são usadas por vários comandos Unix diferentes, incluindoed, sed, awk, grep, e em uma extensão mais limitada, vi.

Aqui SED apoia samarração editor. Este editor orientado a stream foi criado exclusivamente para a execução de scripts. Assim, toda a entrada que você alimenta nele passa e vai para STDOUT e não altera o arquivo de entrada.

Invocando sed

Antes de começarmos, vamos garantir que temos uma cópia local do /etc/passwd arquivo de texto para trabalhar sed.

Conforme mencionado anteriormente, o sed pode ser invocado enviando dados por meio de um pipe para ele, como segue -

$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression = script
...............................

o cat comando despeja o conteúdo de /etc/passwd para sedatravés do tubo no espaço padrão do sed. O espaço padrão é o buffer de trabalho interno que o sed usa para suas operações.

Sintaxe geral do sed

A seguir está a sintaxe geral para sed -

/pattern/action

Aqui, pattern é uma expressão regular, e actioné um dos comandos fornecidos na tabela a seguir. E sepattern é omitido, action é executado para cada linha, como vimos acima.

O caractere de barra (/) que envolve o padrão é obrigatório porque é usado como delimitador.

Sr. Não. Alcance e descrição
1

p

Imprime a linha

2

d

Exclui a linha

3

s/pattern1/pattern2/

Substitui a primeira ocorrência de pattern1 por pattern2

Excluindo todas as linhas com sed

Agora vamos entender como deletar todas as linhas com sed. Invoque sed novamente; mas o sed agora deve usar oediting command delete line, denotado pela única letra d -

$ cat /etc/passwd | sed 'd' $

Em vez de invocar o sed enviando um arquivo para ele por meio de um pipe, o sed pode ser instruído a ler os dados de um arquivo, como no exemplo a seguir.

O comando a seguir faz exatamente o mesmo que no exemplo anterior, sem o comando cat -

$ sed -e 'd' /etc/passwd $

Os endereços sed

O sed também suporta endereços. Os endereços são locais específicos em um arquivo ou um intervalo onde um determinado comando de edição deve ser aplicado. Quando o sed não encontra nenhum endereço, ele executa suas operações em todas as linhas do arquivo.

O comando a seguir adiciona um endereço básico ao comando sed que você está usando -

$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

Observe que o número 1 é adicionado antes do delete editcomando. Isso instrui o sed a executar o comando de edição na primeira linha do arquivo. Neste exemplo, o sed excluirá a primeira linha de/etc/password e imprima o resto do arquivo.

Os intervalos de endereços sed

Agora vamos entender como trabalhar com the sed address ranges. E se você quiser remover mais de uma linha de um arquivo? Você pode especificar um intervalo de endereços com sed da seguinte forma -

$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

O comando acima será aplicado em todas as linhas, começando de 1 a 5. Isso exclui as primeiras cinco linhas.

Experimente os seguintes intervalos de endereços -

Sr. Não. Alcance e descrição
1

'4,10d'

As linhas que começam a partir da 4 th até a 10 th são eliminados

2

'10,4d'

Apenas 10 ª linha é excluído, porque o sed não funciona no sentido inverso

3

'4,+5d'

Isso corresponde à linha 4 no arquivo, exclui essa linha, continua a excluir as próximas cinco linhas e, em seguida, interrompe a exclusão e imprime o resto

4

'2,5!d'

Isso exclui tudo, exceto a partir de 2 nd até 5 ª linha

5

'1~3d'

Isso exclui a primeira linha, passa pelas próximas três linhas e, em seguida, exclui a quarta linha. O Sed continua a aplicar esse padrão até o final do arquivo.

6

'2~2d'

Isso diz ao sed para deletar a segunda linha, passar para a próxima linha, deletar a próxima linha e repetir até que o final do arquivo seja alcançado

7

'4,10p'

As linhas que começam a partir de 4 th até 10 th são impressas

8

'4,d'

Isso gera o erro de sintaxe

9

',10d'

Isso também geraria um erro de sintaxe

Note - Ao usar o p ação, você deve usar o -nopção para evitar a repetição de impressão de linha. Verifique a diferença entre os dois comandos a seguir -

$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'

O Comando de Substituição

O comando de substituição, denotado por s, substituirá qualquer string que você especificar por qualquer outra string que você especificar.

Para substituir uma string por outra, o sed precisa ter as informações sobre onde termina a primeira string e começa a string de substituição. Para isso, continuamos com a marcação das duas strings com a barra (/) personagem.

O seguinte comando substitui a primeira ocorrência em uma linha da string root com a corda amrood.

$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................

É muito importante observar que o sed substitui apenas a primeira ocorrência em uma linha. Se a raiz da string ocorrer mais de uma vez em uma linha, apenas a primeira correspondência será substituída.

Para o sed realizar uma substituição global, adicione a letra g ao final do comando da seguinte forma -

$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................

Bandeiras de substituição

Existem vários outros sinalizadores úteis que podem ser passados ​​além do g sinalizador e você pode especificar mais de um de cada vez.

Sr. Não. Sinalizador e descrição
1

g

Substitui todas as correspondências, não apenas a primeira

2

NUMBER

Substitui único número th jogo

3

p

Se a substituição foi feita, então imprime o espaço do padrão

4

w FILENAME

Se a substituição foi feita, então grava o resultado em FILENAME

5

I or i

Corresponde sem fazer distinção entre maiúsculas e minúsculas

6

M or m

Além do comportamento normal dos caracteres de expressão regular especial ^ e $, this flag causes ^ to match the empty string after a newline and $ para combinar com a string vazia antes de uma nova linha

Usando um Separador de String Alternativo

Suponha que você tenha que fazer uma substituição em uma string que inclui o caractere de barra. Neste caso, você pode especificar um separador diferente, fornecendo o caractere designado após os.

$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

No exemplo acima, usamos : Enquanto o delimiter em vez de barra / porque estávamos tentando pesquisar /root em vez da raiz simples.

Substituindo com Espaço Vazio

Use uma string de substituição vazia para excluir a string raiz do /etc/passwd arquivo inteiramente -

$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

Substituição de Endereço

Se você quiser substituir a string sh com a corda quiet apenas na linha 10, você pode especificá-lo da seguinte maneira -

$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet

Da mesma forma, para fazer uma substituição de intervalo de endereço, você poderia fazer algo como o seguinte -

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Como você pode ver na saída, as primeiras cinco linhas tinham a string sh mudou para quiet, mas o resto das linhas não foram alteradas.

O Comando de Correspondência

Você usaria o p opção junto com o -n opção de imprimir todas as linhas correspondentes da seguinte forma -

$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Usando Expressão Regular

Ao combinar padrões, você pode usar a expressão regular que fornece mais flexibilidade.

Verifique o exemplo a seguir que corresponde a todas as linhas começando com daemon e depois as apaga -

$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

A seguir está o exemplo que exclui todas as linhas que terminam com sh -

$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync

A tabela a seguir lista quatro caracteres especiais que são muito úteis em expressões regulares.

Sr. Não. Descrição do personagem
1

^

Corresponde ao início das linhas

2

$

Corresponde ao final das linhas

3

.

Corresponde a qualquer caractere único

4

*

Corresponde a zero ou mais ocorrências do caractere anterior

5

[chars]

Corresponde a qualquer um dos caracteres fornecidos em chars, onde chars é uma sequência de caracteres. Você pode usar o caractere - para indicar um intervalo de caracteres.

Personagens Combinando

Veja mais algumas expressões para demonstrar o uso de metacharacters. Por exemplo, o seguinte padrão -

Sr. Não. Expressão e Descrição
1

/a.c/

Corresponde a linhas que contêm strings como a+c, a-c, abc, match, e a3c

2

/a*c/

Corresponde às mesmas strings com strings como ace, yacc, e arctic

3

/[tT]he/

Corresponde à string The e the

4

/^$/

Corresponde a linhas em branco

5

/^.*$/

Corresponde a uma linha inteira, seja ela qual for

6

/ */

Corresponde a um ou mais espaços

7

/^$/

Partidas blank linhas

A tabela a seguir mostra alguns conjuntos de caracteres usados ​​com frequência -

Sr. Não. Definir & Descrição
1

[a-z]

Corresponde a uma única letra minúscula

2

[A-Z]

Corresponde a uma única letra maiúscula

3

[a-zA-Z]

Corresponde a uma única letra

4

[0-9]

Corresponde a um único número

5

[a-zA-Z0-9]

Corresponde a uma única letra ou número

Palavras-chave de classe de personagem

Algumas palavras-chave especiais estão comumente disponíveis para regexps, especialmente utilitários GNU que empregam regexps. Eles são muito úteis para expressões regulares do sed, pois simplificam as coisas e aumentam a legibilidade.

Por exemplo, os personagens a through z e os personagens A through Z, constituem uma classe de caracteres que tem a palavra-chave [[:alpha:]]

Usando a palavra-chave da classe de caracteres do alfabeto, este comando imprime apenas as linhas no /etc/syslog.conf arquivo que começa com uma letra do alfabeto -

$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*                           /var/log/boot.log

A tabela a seguir é uma lista completa das palavras-chave de classes de caracteres disponíveis no GNU sed.

Sr. Não. Classe e descrição do personagem
1

[[:alnum:]]

Alfanumérico [az AZ 0-9]

2

[[:alpha:]]

Alfabético [az AZ]

3

[[:blank:]]

Caracteres em branco (espaços ou tabulações)

4

[[:cntrl:]]

Personagens de controle

5

[[:digit:]]

Números [0-9]

6

[[:graph:]]

Quaisquer caracteres visíveis (exclui espaços em branco)

7

[[:lower:]]

Letras minúsculas [az]

8

[[:print:]]

Caracteres imprimíveis (caracteres sem controle)

9

[[:punct:]]

Caracteres de pontuação

10

[[:space:]]

Espaço em branco

11

[[:upper:]]

Letras maiúsculas [AZ]

12

[[:xdigit:]]

Dígitos hexadecimais [0-9 af AF]

Aampersand Referencing

o sed metacharacter &representa o conteúdo do padrão que foi correspondido. Por exemplo, digamos que você tenha um arquivo chamadophone.txt cheio de números de telefone, como os seguintes -

5555551212
5555551213
5555551214
6665551215
6665551216
7775551217

Você quer fazer o area code(os três primeiros dígitos) entre parênteses para facilitar a leitura. Para fazer isso, você pode usar o caractere e comercial de substituição -

$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215

(666)5551216
(777)5551217

Aqui na parte do padrão, você está combinando os primeiros 3 dígitos e, em seguida, usando & você está substituindo esses 3 dígitos pelos parentheses.

Usando vários comandos sed

Você pode usar vários comandos sed em um único comando sed da seguinte maneira -

$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

Aqui command1 através commandNsão comandos sed do tipo discutido anteriormente. Esses comandos são aplicados a cada uma das linhas na lista de arquivos fornecida por arquivos.

Usando o mesmo mecanismo, podemos escrever o exemplo de número de telefone acima da seguinte maneira -

$ sed -e 's/^[[:digit:]]\{3\}/(&)/g'  \ 
   -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt 
(555)555-1212 
(555)555-1213 
(555)555-1214 
(666)555-1215 
(666)555-1216 
(777)555-1217

Note - No exemplo acima, em vez de repetir a palavra-chave da classe de caracteres [[:digit:]] três vezes, nós o substituímos por \{3\}, o que significa que a expressão regular anterior é correspondida três vezes. Nós também usamos\ para fornecer quebra de linha e isso deve ser removido antes de o comando ser executado.

Referências anteriores

o ampersand metacharacteré útil, mas ainda mais útil é a capacidade de definir regiões específicas em expressões regulares. Essas regiões especiais podem ser usadas como referência em suas strings de substituição. Ao definir partes específicas de uma expressão regular, você pode então se referir a essas partes com um caractere de referência especial.

Façam back references, você deve primeiro definir uma região e depois se referir a essa região. Para definir uma região, você inserebackslashed parenthesesem torno de cada região de interesse. A primeira região que você cerca com barras invertidas é então referenciada por\1, a segunda região por \2, e assim por diante.

Assumindo phone.txt tem o seguinte texto -

(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

Tente o seguinte comando -

$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \ 
   code: \1 Second: \2 Third: \3/' 
Area code: (555) Second: 555- Third: 1212 
Area code: (555) Second: 555- Third: 1213 
Area code: (555) Second: 555- Third: 1214 
Area code: (666) Second: 555- Third: 1215 
Area code: (666) Second: 555- Third: 1216 
Area code: (777) Second: 555- Third: 1217

Note - No exemplo acima, cada expressão regular entre parênteses seria referenciada novamente por \1, \2e assim por diante. Nós usamos\para dar quebra de linha aqui. Isso deve ser removido antes de executar o comando.

Um sistema de arquivos é uma coleção lógica de arquivos em uma partição ou disco. Uma partição é um contêiner de informações e pode abranger um disco rígido inteiro, se desejado.

Seu disco rígido pode ter várias partições que geralmente contêm apenas um sistema de arquivos, como um sistema de arquivos que hospeda o /file system ou outro contendo o /home file system.

Um sistema de arquivos por partição permite a manutenção lógica e o gerenciamento de diferentes sistemas de arquivos.

Tudo no Unix é considerado um arquivo, incluindo dispositivos físicos como DVD-ROMs, dispositivos USB e unidades de disquete.

Estrutura de Diretório

O Unix usa uma estrutura de sistema de arquivos hierárquica, muito parecida com uma árvore de cabeça para baixo, com a raiz (/) na base do sistema de arquivos e todos os outros diretórios se espalhando a partir daí.

Um sistema de arquivos Unix é uma coleção de arquivos e diretórios que possui as seguintes propriedades -

  • Tem um diretório raiz (/) que contém outros arquivos e diretórios.

  • Cada arquivo ou diretório é identificado exclusivamente por seu nome, o diretório em que reside e um identificador exclusivo, normalmente chamado de inode.

  • Por convenção, o diretório raiz tem um inode número de 2 e a lost+found diretório tem um inode número de 3. Números de inode0 e 1não são usados. Números de inode de arquivo podem ser vistos especificando o-i option para ls command.

  • É independente. Não há dependências entre um sistema de arquivos e outro.

Os diretórios têm finalidades específicas e geralmente contêm os mesmos tipos de informações para localizar arquivos facilmente. A seguir estão os diretórios que existem nas principais versões do Unix -

Sr. Não. Diretório e descrição
1

/

Este é o diretório raiz que deve conter apenas os diretórios necessários no nível superior da estrutura do arquivo

2

/bin

É aqui que os arquivos executáveis ​​estão localizados. Esses arquivos estão disponíveis para todos os usuários

3

/dev

Estes são drivers de dispositivo

4

/etc

Comandos de diretório do supervisor, arquivos de configuração, arquivos de configuração de disco, listas de usuários válidas, grupos, ethernet, hosts, para onde enviar mensagens críticas

5

/lib

Contém arquivos de biblioteca compartilhada e às vezes outros arquivos relacionados ao kernel

6

/boot

Contém arquivos para inicializar o sistema

7

/home

Contém o diretório inicial para usuários e outras contas

8

/mnt

Usado para montar outros sistemas de arquivos temporários, como cdrom e floppy para o CD-ROM dirigir e floppy diskette drive, respectivamente

9

/proc

Contém todos os processos marcados como um arquivo por process number ou outras informações que são dinâmicas para o sistema

10

/tmp

Contém arquivos temporários usados ​​entre inicializações do sistema

11

/usr

Usado para diversos fins e pode ser usado por muitos usuários. Inclui comandos administrativos, arquivos compartilhados, arquivos de biblioteca e outros

12

/var

Normalmente contém arquivos de comprimento variável, como arquivos de registro e impressão e qualquer outro tipo de arquivo que pode conter uma quantidade variável de dados

13

/sbin

Contém arquivos binários (executáveis), geralmente para administração do sistema. Por exemplo,fdisk e ifconfig utilidades

14

/kernel

Contém arquivos de kernel

Navegando no sistema de arquivos

Agora que você entende os fundamentos do sistema de arquivos, pode começar a navegar até os arquivos de que precisa. Os seguintes comandos são usados ​​para navegar no sistema -

Sr. Não. Comando e Descrição
1

cat filename

Exibe um nome de arquivo

2

cd dirname

Move você para o diretório identificado

3

cp file1 file2

Copia um arquivo / diretório para o local especificado

4

file filename

Identifica o tipo de arquivo (binário, texto, etc)

5

find filename dir

Encontra um arquivo / diretório

6

head filename

Mostra o início de um arquivo

7

less filename

Navega por um arquivo do final ou do início

8

ls dirname

Mostra o conteúdo do diretório especificado

9

mkdir dirname

Cria o diretório especificado

10

more filename

Percorre um arquivo do início ao fim

11

mv file1 file2

Move a localização ou renomeia um arquivo / diretório

12

pwd

Mostra o diretório atual em que o usuário está

13

rm filename

Remove um arquivo

14

rmdir dirname

Remove um diretório

15

tail filename

Mostra o final de um arquivo

16

touch filename

Cria um arquivo em branco ou modifica um arquivo existente ou seus atributos

17

whereis filename

Mostra a localização de um arquivo

18

which filename

Mostra a localização de um arquivo se ele estiver em seu PATH

Você pode usar a Ajuda da página de manual para verificar a sintaxe completa de cada comando mencionado aqui.

O Comando df

A primeira maneira de gerenciar seu espaço de partição é com o df (disk free)comando. O comandodf -k (disk free) exibe o disk space usage in kilobytes, como mostrado abaixo -

$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $

Alguns dos diretórios, como /devices, mostra 0 nas colunas kbytes, usados ​​e disponibilidade, bem como 0% para a capacidade. Esses são sistemas de arquivos especiais (ou virtuais) e, embora residam no disco em /, por si só não consomem espaço em disco.

o df -ka saída é geralmente a mesma em todos os sistemas Unix. Aqui está o que geralmente inclui -

Sr. Não. Coluna e Descrição
1

Filesystem

O nome do sistema de arquivos físicos

2

kbytes

Total de kilobytes de espaço disponível no meio de armazenamento

3

used

Total de kilobytes de espaço usado (por arquivos)

4

avail

Total de kilobytes disponíveis para uso

5

capacity

Porcentagem do espaço total usado por arquivos

6

Mounted on

Em que o sistema de arquivos é montado

Você pode usar o -h (human readable) option para exibir a saída em um formato que mostra o tamanho em uma notação mais fácil de entender.

The du Command

o du (disk usage) command permite especificar diretórios para mostrar o uso de espaço em disco em um diretório específico.

Este comando é útil se você deseja determinar quanto espaço um diretório específico está ocupando. O comando a seguir exibe o número de blocos consumidos por cada diretório. Um único bloco pode levar 512 Bytes ou 1 Kilo Byte, dependendo do seu sistema.

$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $

o -h opção torna a saída mais fácil de compreender -

$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $

Montagem do sistema de arquivos

Um sistema de arquivos deve ser montado para ser utilizável pelo sistema. Para ver o que está atualmente montado (disponível para uso) em seu sistema, use o seguinte comando -

$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $

o /mntO diretório, pela convenção Unix, é onde as montagens temporárias (como unidades de CDROM, unidades de rede remotas e unidades de disquete) estão localizadas. Se você precisa montar um sistema de arquivos, pode usar o comando mount com a seguinte sintaxe -

mount -t file_system_type device_to_mount directory_to_mount_to

Por exemplo, se você deseja montar um CD-ROM para o diretório /mnt/cdrom, você pode digitar -

$ mount -t iso9660 /dev/cdrom /mnt/cdrom

Isso pressupõe que o seu dispositivo de CD-ROM é chamado /dev/cdrom e que você deseja montá-lo /mnt/cdrom. Consulte a página do manual da montagem para informações mais específicas ou tipo de montagem-h na linha de comando para obter informações de ajuda.

Após a montagem, você pode usar o comando cd para navegar no sistema de arquivos recentemente disponível através do ponto de montagem que você acabou de criar.

Desmontando o sistema de arquivos

Para desmontar (remover) o sistema de arquivos do seu sistema, use o umount comando identificando o ponto de montagem ou dispositivo.

Por exemplo, to unmount cdrom, use o seguinte comando -

$ umount /dev/cdrom

o mount command permite que você acesse seus sistemas de arquivos, mas na maioria dos sistemas Unix modernos, o automount function torna este processo invisível para o usuário e não requer intervenção.

Cotas de usuário e grupo

As cotas de usuário e grupo fornecem os mecanismos pelos quais a quantidade de espaço usada por um único usuário ou todos os usuários em um grupo específico pode ser limitada a um valor definido pelo administrador.

As cotas operam em torno de dois limites que permitem que o usuário execute alguma ação se a quantidade de espaço ou número de blocos de disco começar a exceder os limites definidos pelo administrador -

  • Soft Limit - Caso o usuário ultrapasse o limite definido, há um período de carência que permite ao usuário liberar espaço.

  • Hard Limit - Quando o limite rígido é atingido, independentemente do período de carência, nenhum arquivo ou bloco adicional pode ser alocado.

Existem vários comandos para administrar cotas -

Sr. Não. Comando e Descrição
1

quota

Exibe o uso do disco e limites para um usuário do grupo

2

edquota

Este é um editor de cotas. A cota de usuários ou grupos pode ser editada usando este comando

3

quotacheck

Verifica o uso de disco em um sistema de arquivos, cria, verifica e repara arquivos de cota

4

setquota

Este é um editor de cotas de linha de comando

5

quotaon

Isso anuncia ao sistema que as cotas de disco devem ser habilitadas em um ou mais sistemas de arquivos

6

quotaoff

Isso anuncia ao sistema que as cotas de disco devem ser desabilitadas para um ou mais sistemas de arquivos

7

repquota

Isso imprime um resumo do uso do disco e cotas para os sistemas de arquivos especificados

Você pode usar a Ajuda da página de manual para verificar a sintaxe completa de cada comando mencionado aqui.

Neste capítulo, discutiremos em detalhes sobre a administração de usuários no Unix.

Existem três tipos de contas em um sistema Unix -

Conta raiz

Isso também é chamado superusere teria controle total e irrestrito do sistema. Um superusuário pode executar qualquer comando sem qualquer restrição. Este usuário deve ser considerado um administrador do sistema.

Contas do sistema

Contas de sistema são aquelas necessárias para a operação de componentes específicos do sistema, por exemplo contas de e-mail e sshdcontas. Essas contas são geralmente necessárias para alguma função específica em seu sistema e quaisquer modificações nelas podem afetar adversamente o sistema.

Contas de usuário

As contas de usuário fornecem acesso interativo ao sistema para usuários e grupos de usuários. Os usuários gerais geralmente são atribuídos a essas contas e geralmente têm acesso limitado a arquivos e diretórios críticos do sistema.

O Unix suporta um conceito de Conta de Grupo que agrupa logicamente várias contas. Cada conta faria parte de outra conta de grupo. Um grupo Unix desempenha um papel importante no tratamento de permissões de arquivo e gerenciamento de processos.

Gerenciando usuários e grupos

Existem quatro arquivos principais de administração de usuário -

  • /etc/passwd- Mantém as informações da conta do usuário e senha. Este arquivo contém a maioria das informações sobre contas no sistema Unix.

  • /etc/shadow- Contém a senha criptografada da conta correspondente. Nem todos os sistemas suportam este arquivo.

  • /etc/group - Este arquivo contém as informações do grupo para cada conta.

  • /etc/gshadow - Este arquivo contém informações seguras da conta do grupo.

Verifique todos os arquivos acima usando o cat comando.

A tabela a seguir lista os comandos que estão disponíveis na maioria dos sistemas Unix para criar e gerenciar contas e grupos -

Sr. Não. Comando e Descrição
1

useradd

Adiciona contas ao sistema

2

usermod

Modifica os atributos da conta

3

userdel

Exclui contas do sistema

4

groupadd

Adiciona grupos ao sistema

5

groupmod

Modifica os atributos do grupo

6

groupdel

Remove grupos do sistema

Você pode usar a Ajuda da página de manual para verificar a sintaxe completa de cada comando mencionado aqui.

Crie um grupo

Agora vamos entender como criar um grupo. Para isso, precisamos criar grupos antes de criar qualquer conta, caso contrário, podemos fazer uso dos grupos existentes em nosso sistema. Temos todos os grupos listados em/etc/groups Arquivo.

Todos os grupos padrão são grupos específicos de contas do sistema e não é recomendado usá-los para contas comuns. Então, a seguir está a sintaxe para criar uma nova conta de grupo -

groupadd [-g gid [-o]] [-r] [-f] groupname

A tabela a seguir lista os parâmetros -

Sr. Não. Opção e descrição
1

-g GID

O valor numérico do ID do grupo

2

-o

Esta opção permite adicionar um grupo com GID não exclusivo

3

-r

Esta bandeira instrui groupadd adicionar uma conta de sistema

4

-f

Esta opção faz com que apenas saia com status de sucesso, se o grupo especificado já existir. Com -g, se o GID especificado já existir, outro GID (exclusivo) é escolhido

5

groupname

Nome real do grupo a ser criado

Se você não especificar nenhum parâmetro, o sistema usará os valores padrão.

O exemplo a seguir cria um grupo de desenvolvedores com valores padrão, o que é bastante aceitável para a maioria dos administradores.

$ groupadd developers

Modificar um Grupo

Para modificar um grupo, use o groupmod sintaxe -

$ groupmod -n new_modified_group_name old_group_name

Para alterar o nome do grupo developers_2 para desenvolvedor, digite -

$ groupmod -n developer developer_2

Aqui está como você mudará o GID financeiro para 545 -

$ groupmod -g 545 developer

Apagar um Grupo

Agora vamos entender como excluir um grupo. Para excluir um grupo existente, tudo que você precisa é ogroupdel command e a group name. Para excluir o grupo financeiro, o comando é -

$ groupdel developer

Isso remove apenas o grupo, não os arquivos associados a esse grupo. Os arquivos ainda podem ser acessados ​​por seus proprietários.

Crie a sua conta aqui

Vamos ver como criar uma nova conta em seu sistema Unix. A seguir está a sintaxe para criar uma conta de usuário -

useradd -d homedir -g groupname -m -s shell -u userid accountname

A tabela a seguir lista os parâmetros -

Sr. Não. Opção e descrição
1

-d homedir

Especifica o diretório inicial da conta

2

-g groupname

Especifica uma conta de grupo para esta conta

3

-m

Cria o diretório inicial se ele não existir

4

-s shell

Especifica o shell padrão para esta conta

5

-u userid

Você pode especificar um ID de usuário para esta conta

6

accountname

Nome da conta real a ser criada

Se você não especificar nenhum parâmetro, o sistema usará os valores padrão. ouseradd comando modifica o /etc/passwd, /etc/shadow, e /etc/group arquivos e cria um diretório inicial.

A seguir está o exemplo que cria uma conta mcmohd, definindo seu diretório inicial para /home/mcmohd e o grupo como developers. Este usuário teria Korn Shell atribuído a ele.

$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd

Antes de emitir o comando acima, certifique-se de já ter o grupo de desenvolvedores criado usando ogroupadd comando.

Depois que uma conta é criada, você pode definir sua senha usando o passwd comando da seguinte forma -

$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Quando você digita passwd accountname, ele oferece a opção de alterar a senha, desde que você seja um superusuário. Caso contrário, você pode alterar apenas sua senha usando o mesmo comando, mas sem especificar o nome da conta.

Modificar uma conta

o usermodcomando permite que você faça alterações em uma conta existente a partir da linha de comando. Ele usa os mesmos argumentos douseradd , mais o argumento -l, que permite alterar o nome da conta.

Por exemplo, para alterar o nome da conta mcmohd para mcmohd20 e para alterar o diretório inicial de acordo, você precisará emitir o seguinte comando -

$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20

Excluir uma conta

o userdelcomando pode ser usado para excluir um usuário existente. Este é um comando muito perigoso se não for usado com cuidado.

Existe apenas um argumento ou opção disponível para o comando .r, para remover o diretório inicial e o arquivo de mensagens da conta.

Por exemplo, para remover a conta mcmohd20 , emita o seguinte comando -

$ userdel -r mcmohd20

Se você quiser manter o diretório inicial para fins de backup, omita o -ropção. Você pode remover o diretório inicial conforme necessário posteriormente.

Neste capítulo, discutiremos em detalhes sobre o desempenho do sistema no Unix.

Apresentaremos algumas ferramentas gratuitas disponíveis para monitorar e gerenciar o desempenho em sistemas Unix. Essas ferramentas também fornecem orientações sobre como diagnosticar e corrigir problemas de desempenho no ambiente Unix.

O Unix tem os seguintes tipos de recursos principais que precisam ser monitorados e ajustados -

  • CPU

  • Memory

  • Disk space

  • Communications lines

  • I/O Time

  • Network Time

  • Applications programs

Componentes de Desempenho

A tabela a seguir lista cinco componentes principais que ocupam o tempo do sistema -

Sr. Não. Descrição do componente
1

User State CPU

A quantidade real de tempo que a CPU gasta executando o programa do usuário no estado do usuário. Inclui o tempo gasto na execução de chamadas de biblioteca, mas não inclui o tempo gasto no kernel em seu nome

2

System State CPU

Esta é a quantidade de tempo que a CPU gasta no estado do sistema em nome deste programa. TodosI/O routinesrequer serviços de kernel. O programador pode afetar este valor bloqueando as transferências de I / O

3

I/O Time and Network Time

Esta é a quantidade de tempo gasto movendo dados e atendendo a solicitações de I / O

4

Virtual Memory Performance

Isso inclui mudança e troca de contexto

5

Application Program

Tempo gasto executando outros programas - quando o sistema não está atendendo a este aplicativo porque outro aplicativo possui a CPU no momento

Ferramentas de Performance

O Unix fornece as seguintes ferramentas importantes para medir e ajustar o desempenho do sistema Unix -

Sr. Não. Comando e Descrição
1

nice/renice

Executa um programa com prioridade de agendamento modificada

2

netstat

Imprime conexões de rede, tabelas de roteamento, estatísticas de interface, conexões de máscara e associações multicast

3

time

Ajuda a cronometrar um comando simples ou permite o uso de recursos

4

uptime

Esta é a média de carga do sistema

5

ps

Relata um instantâneo dos processos atuais

6

vmstat

Relata estatísticas de memória virtual

7

gprof

Exibe dados de perfil de gráfico de chamadas

8

prof

Facilita a criação de perfis de processos

9

top

Mostra as tarefas do sistema

Você pode usar a Ajuda da página de manual para verificar a sintaxe completa de cada comando mencionado aqui.

Neste capítulo, discutiremos em detalhes sobre o registro do sistema no Unix.

Os sistemas Unix têm um sistema de registro muito flexível e poderoso, que permite registrar quase tudo que você possa imaginar e, em seguida, manipular os registros para recuperar as informações de que necessita.

Muitas versões do Unix fornecem um recurso de registro de propósito geral chamado syslog. Programas individuais que precisam ter informações registradas, enviam as informações para o syslog.

O syslog Unix é um recurso de registro de sistema uniforme e configurável por host. O sistema usa um processo de registro de sistema centralizado que executa o programa/etc/syslogd ou /etc/syslog.

A operação do registrador do sistema é bastante direta. Os programas enviam suas entradas de log para o syslogd , que consulta o arquivo de configuração/etc/syslogd.conf ou /etc/syslog e, quando uma correspondência for encontrada, grava a mensagem de log no arquivo de log desejado.

Existem quatro termos básicos do syslog que você deve entender -

Sr. Não. Termo e descrição
1

Facility

O identificador usado para descrever o aplicativo ou processo que enviou a mensagem de log. Por exemplo, mail, kernel e ftp.

2

Priority

Um indicador da importância da mensagem. Os níveis são definidos no syslog como diretrizes, desde informações de depuração até eventos críticos.

3

Selector

Uma combinação de uma ou mais instalações e níveis. Quando um evento de entrada corresponde a um seletor, uma ação é executada.

4

Action

O que acontece com uma mensagem recebida que corresponde a um seletor - as ações podem gravar a mensagem em um arquivo de log, ecoar a mensagem em um console ou outro dispositivo, gravar a mensagem para um usuário conectado ou enviar a mensagem para outro servidor syslog.

Instalações Syslog

Agora vamos entender sobre as facilidades do syslog. Aqui estão as facilidades disponíveis para o seletor. Nem todas as facilidades estão presentes em todas as versões do Unix.

Instalação Descrição
1

auth

Atividade relacionada à solicitação de nome e senha (getty, su, login)

2

authpriv

O mesmo que auth, mas conectado a um arquivo que só pode ser lido por usuários selecionados

3

console

Usado para capturar mensagens que geralmente são direcionadas ao console do sistema

4

cron

Mensagens do programador do sistema cron

5

daemon

Daemon do sistema pega-tudo

6

ftp

Mensagens relacionadas ao daemon ftp

7

kern

Mensagens de kernel

8

local0.local7

Instalações locais definidas por site

9

lpr

Mensagens do sistema de impressão de linha

10

mail

Mensagens relacionadas ao sistema de correio

11

mark

Pseudo-evento usado para gerar carimbos de data / hora em arquivos de log

12

news

Mensagens relacionadas ao protocolo de notícias da rede (nntp)

13

ntp

Mensagens relacionadas ao protocolo de tempo da rede

14

user

Processos regulares do usuário

15

uucp

Subsistema UUCP

Prioridades de Syslog

As prioridades do syslog são resumidas na tabela a seguir -

Sr. Não. Prioridade e descrição
1

emerg

Condição de emergência, como uma falha iminente do sistema, geralmente transmitida a todos os usuários

2

alert

Condição que deve ser corrigida imediatamente, como um banco de dados do sistema corrompido

3

crit

Condição crítica, como um erro de hardware

4

err

Erro comum

5

Warning

Atenção

6

notice

Condição que não é um erro, mas possivelmente deve ser tratada de uma maneira especial

7

info

Mensagem informativa

8

debug

Mensagens que são usadas ao depurar programas

9

none

Pseudo nível usado para especificar não registrar mensagens

A combinação de instalações e níveis permite que você tenha discernimento sobre o que é registrado e para onde essa informação vai.

À medida que cada programa envia suas mensagens obedientemente ao logger do sistema, o logger toma decisões sobre o que controlar e o que descartar com base nos níveis definidos no seletor.

Quando você especifica um nível, o sistema mantém o controle de tudo naquele nível e superior.

O arquivo /etc/syslog.conf

o /etc/syslog.confarquivo controla onde as mensagens são registradas. Um típicosyslog.conf arquivo pode ter a seguinte aparência -

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @prep.ai.mit.edu
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

Cada linha do arquivo contém duas partes -

  • UMA message selectorque especifica quais tipos de mensagens registrar. Por exemplo, todas as mensagens de erro ou todas as mensagens de depuração do kernel.

  • A action fieldisso diz o que deve ser feito com a mensagem. Por exemplo, coloque-o em um arquivo ou envie a mensagem para o terminal de um usuário.

A seguir estão os pontos notáveis ​​para a configuração acima -

  • Os seletores de mensagens têm duas partes: a facility e a priority. Por exemplo, kern.debug seleciona todas as mensagens de depuração (a prioridade) geradas pelo kernel (o recurso).

  • O seletor de mensagens kern.debug seleciona todas as prioridades maiores que a depuração.

  • Um asterisco no lugar da instalação ou da prioridade indica "todos". Por exemplo,*.debug significa todas as mensagens de depuração, enquanto kern.* significa todas as mensagens geradas pelo kernel.

  • Você também pode usar vírgulas para especificar várias instalações. Dois ou mais seletores podem ser agrupados usando um ponto-e-vírgula.

Ações de registro

O campo de ação especifica uma das cinco ações -

  • Registre a mensagem em um arquivo ou dispositivo. Por exemplo,/var/log/lpr.log ou /dev/console.

  • Envie uma mensagem a um usuário. Você pode especificar vários nomes de usuário, separando-os com vírgulas; por exemplo, root, amrood.

  • Envie uma mensagem a todos os usuários. Nesse caso, o campo de ação consiste em um asterisco; por exemplo, *.

  • Canalize a mensagem para um programa. Nesse caso, o programa é especificado após o símbolo de barra do Unix (|).

  • Envie a mensagem para o syslog em outro host. Nesse caso, o campo de ação consiste em um nome de host, precedido por uma arroba; por exemplo, @ tutorialspoint.com.

O comando logger

Unix fornece o loggercomando, que é um comando extremamente útil para lidar com o registro do sistema. ologger O comando envia mensagens de registro para o daemon syslogd e, conseqüentemente, provoca o registro do sistema.

Isso significa que podemos verificar na linha de comando a qualquer momento o syslogddaemon e sua configuração. O comando logger fornece um método para adicionar entradas de uma linha ao arquivo de log do sistema a partir da linha de comando.

O formato do comando é -

logger [-i] [-f file] [-p priority] [-t tag] [message]...

Aqui está o detalhe dos parâmetros -

Sr. Não. Opção e descrição
1

-f filename

Usa o conteúdo do arquivo filename como a mensagem a registrar.

2

-i

Registra a ID do processo do processo logger com cada linha.

3

-p priority

Entra na mensagem com a prioridade especificada (entrada do seletor especificada); a prioridade da mensagem pode ser especificada numericamente ou como um par facilidade.prioridade. A prioridade padrão é user.notice.

4

-t tag

Marca cada linha adicionada ao log com a tag especificada.

5

message

Os argumentos de string cujos conteúdos são concatenados na ordem especificada, separados por um espaço.

Você pode usar a Ajuda da página do manual para verificar a sintaxe completa desse comando.

Rotação de Log

Os arquivos de log têm a tendência de crescer muito rápido e consumir grande quantidade de espaço em disco. Para permitir rotações de log, a maioria das distribuições usa ferramentas comonewsyslog ou logrotate.

Essas ferramentas devem ser chamadas em um intervalo de tempo frequente usando o cron daemon. Verifique as páginas de manual de newsyslog ou logrotate para obter mais detalhes.

Locais de registro importantes

Todos os aplicativos do sistema criam seus arquivos de log em /var/loge seus subdiretórios. Aqui estão alguns aplicativos importantes e seus diretórios de registro correspondentes -

Inscrição Diretório
httpd / var / log / httpd
samba / var / log / samba
cron / var / log /
enviar / var / log /
mysql / var / log /

Neste capítulo, discutiremos em detalhes sobre sinais e armadilhas no Unix.

Os sinais são interrupções de software enviadas a um programa para indicar que ocorreu um evento importante. Os eventos podem variar de solicitações do usuário a erros de acesso ilegal à memória. Alguns sinais, como o sinal de interrupção, indicam que um usuário pediu ao programa para fazer algo que não está no fluxo normal de controle.

A tabela a seguir lista os sinais comuns que você pode encontrar e deseja usar em seus programas -

Nome do Sinal Número do Sinal Descrição
SIGHUP 1 Desligamento detectado no terminal de controle ou morte do processo de controle
SIGINT 2 Emitido se o usuário enviar um sinal de interrupção (Ctrl + C)
SIGQUIT 3 Emitido se o usuário enviar um sinal de saída (Ctrl + D)
SIGFPE 8 Emitido se uma operação matemática ilegal for tentada
SIGKILL 9 Se um processo receber este sinal, ele deve encerrar imediatamente e não realizará nenhuma operação de limpeza
SIGALRM 14 Sinal de despertador (usado para temporizadores)
SIGTERM 15 Sinal de terminação de software (enviado por kill por padrão)

Lista de Sinais

Existe uma maneira fácil de listar todos os sinais suportados pelo seu sistema. Basta emitir okill -l comando e exibiria todos os sinais suportados -

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

A lista real de sinais varia entre Solaris, HP-UX e Linux.

Ações padrão

Cada sinal tem uma ação padrão associada a ele. A ação padrão para um sinal é a ação que um script ou programa executa ao receber um sinal.

Algumas das possíveis ações padrão são -

  • Encerre o processo.

  • Ignore o sinal.

  • Dump core. Isso cria um arquivo chamadocore contendo a imagem de memória do processo ao receber o sinal.

  • Pare o processo.

  • Continue um processo interrompido.

Enviando sinais

Existem vários métodos de entrega de sinais a um programa ou script. Um dos mais comuns é o usuário digitarCONTROL-C ou o INTERRUPT key enquanto um script está sendo executado.

Quando você pressiona o Ctrl+C chave, um SIGINT é enviado para o script e, de acordo com a ação padrão definida, o script termina.

O outro método comum de entrega de sinais é usar o kill command, cuja sintaxe é a seguinte -

$ kill -signal pid

Aqui signal é o número ou nome do sinal a ser entregue e pidé o ID do processo para o qual o sinal deve ser enviado. Por exemplo -

$ kill -1 1001

O comando acima envia o HUP ou sinal de desligamento para o programa que está sendo executado com process ID 1001. Para enviar um sinal de eliminação para o mesmo processo, use o seguinte comando -

$ kill -9 1001

Isso mata o processo em execução com process ID 1001.

Trapping Signals

Quando você pressiona a tecla Ctrl + C ou Break no terminal durante a execução de um programa shell, normalmente esse programa é encerrado imediatamente e o prompt de comando retorna. Isso pode nem sempre ser desejável. Por exemplo, você pode acabar deixando um monte de arquivos temporários que não serão limpos.

Capturar esses sinais é muito fácil, e o comando trap tem a seguinte sintaxe -

$ trap commands signals

Aqui, o comando pode ser qualquer comando válido do Unix, ou mesmo uma função definida pelo usuário, e o sinal pode ser uma lista de qualquer número de sinais que você deseja capturar.

Existem dois usos comuns para trap em scripts de shell -

  • Limpe os arquivos temporários
  • Ignorar sinais

Limpando Arquivos Temporários

Como um exemplo do comando trap, o seguinte mostra como você pode remover alguns arquivos e sair se alguém tentar abortar o programa do terminal -

$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

Do ponto no programa de shell em que esta armadilha é executada, os dois arquivos work1$$ e dataout$$ será removido automaticamente se o sinal número 2 for recebido pelo programa.

Portanto, se o usuário interromper a execução do programa após a execução desse trap, você pode ter certeza de que esses dois arquivos serão limpos. oexit comando que segue o rm é necessário porque sem ele a execução continuaria no programa no ponto em que parou quando o sinal foi recebido.

O sinal número 1 é gerado para hangup. Alguém desliga intencionalmente a linha ou a linha é desconectada acidentalmente.

Você pode modificar a armadilha anterior para também remover os dois arquivos especificados, neste caso, adicionando o sinal número 1 à lista de sinais -

$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

Agora, esses arquivos serão removidos se a linha for desligada ou se a tecla Ctrl + C for pressionada.

Os comandos especificados para trap devem ser colocados entre aspas, se contiverem mais de um comando. Observe também que o shell varre a linha de comando no momento em que o comando trap é executado e também quando um dos sinais listados é recebido.

Assim, no exemplo anterior, o valor de WORKDIR e $$será substituído no momento em que o comando trap for executado. Se você quiser que essa substituição ocorra no momento em que o sinal 1 ou 2 foi recebido, você pode colocar os comandos entre aspas simples -

$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

Ignorando sinais

Se o comando listado para trap for nulo, o sinal especificado será ignorado quando recebido. Por exemplo, o comando -

$ trap '' 2

Isso especifica que o sinal de interrupção deve ser ignorado. Você pode querer ignorar certos sinais ao realizar uma operação que não deseja que seja interrompida. Você pode especificar vários sinais a serem ignorados da seguinte forma -

$ trap '' 1 2 3 15

Observe que o primeiro argumento deve ser especificado para que um sinal seja ignorado e não é equivalente a escrever o seguinte, que tem um significado separado próprio -

$ trap  2

Se você ignorar um sinal, todos os subshells também ignoram esse sinal. No entanto, se você especificar uma ação a ser executada no recebimento de um sinal, todos os subshells ainda realizarão a ação padrão no recebimento desse sinal.

Redefinindo armadilhas

Depois de alterar a ação padrão a ser executada ao receber um sinal, você pode alterá-la novamente com a armadilha se simplesmente omitir o primeiro argumento; então -

$ trap 1 2

Isso restaura a ação a ser tomada no recebimento dos sinais 1 ou 2 de volta ao padrão.