Mostrando postagens com marcador LINUX. Mostrar todas as postagens
Mostrando postagens com marcador LINUX. Mostrar todas as postagens

sábado, 8 de maio de 2021

O Mínimo de VI

 Sendo o Vi o editor padrão do LINUX, não tem como o mesmo. Sendo assim, a proposta deste Post é expor o básico em relação ao assunto.

Geralmente, o que fazemos em um editor de textos? Abrimos um arquivo para edição, inserimos texto, substituímos, recortamos e colamos texto, salvamos arquivos.

É importante entender que o VI trabalha com dois modos de execução: o modo COMMAND e o modo INSERT. O Insert é utilizado para editar o arquivo e o modo Command é usado para os executar os demais comandos do VI.  Para alternar entre os modos, clicar na tecla ESC

Abrir o editor de texto: VI

Abrir arquivo com o editor vi NOME_ARQUIVO.txt

Comandos básicos:

:wq - Salva o arquivo e sai do editor

:w nome_do_arquivo - Salva o arquivo corrente com o nome especificado

:w! nome_do_arquivo - Salva o arquivo corrente no arquivo especificado

:q - Sai do editor

:q! - Sai do editor sem salvar as alterações realizadas

Comandos de inserção:

i - Insere texto antes do cursor

a - Insere texto depois do cursor

r - Insere texto no início da linha onde se encontra o cursor

A - Insere texto no final da linha onde se encontra o cursor

o - Adiciona linha abaixo da linha atual

O - Adiciona linha acima da linha atual


Comandos de movimentação:

Ctrl+f - Move o cursor para a próxima tela

Ctrl+b - Move o cursor para a tela anterior

H - Move o cursor para a primeira linha da tela

M - Move o cursor para o meio da tela

L - Move o cursor para a última linha da tela

h - Move o cursor um caractere a esquerda

j - Move o cursor para a próxima linha

k - Move o cursor para linha anterior

l - Move o cursor um caractere a direita

w - Move o cursor para o início da próxima palavra (Ignora a pontuação)

W - Move o cursor para o início da próxima palavra (Não ignora a pontuação)

b - Move o cursor para o início da palavra anterior (Ignora a pontuação)

B - Move o cursor para o início da palavra anterior (Não ignora a pontuação)

0 - Move o cursor para o início da linha atual

^ - Move o cursor para o primeiro caractere não branco da linha atual

$ - Move o cursor para o final da linha atual

nG - Move o cursor para a linha n

G - Move o cursor para a última linha do arquivo


Comandos de busca:

/palavra - Busca pela palavra ou caractere em todo o texto

?palavra - Move o cursor para a ocorrência anterior da palavra

n - Repete o último comando / ou ?

N - Repete o último comando / ou ? , na direção reversa

Ctrl+g - Mostra o nome do arquivo, o número da linha corrente e o total de linhas


Comandos de substituição e deleção:

x - Deleta o caractere que esta sob o cursor

dw - Deleta a palavra, da posição atual do cursor ate o final

dd - Deleta a linha atual

D - Deleta a linha a partir da posição atual do cursor ate o final

rx - Substitui o caractere sob o cursor pelo especificado em x(é opcional indicar o caractere)

Rx - Substitui a palavra sob o cursor pela palavra indicada em x

u - Desfaz a última modificação

U - Desfaz todas as modificações feitas na linha atual

J - Une a linha corrente a próxima

s:/Linux/Unix - Substitui a primeira ocorrência de "Linux" por "Unix"

s:/Linux/Unix/g - Substitui a ocorrência de "Linux" por "Unix" em todo arquivo

Selecionar, copiar, recortar, colar

1.Posicione o cursor no início do texto que você quer copiar ou recortar, para isso pode usar as teclas direcionais ou as tradicionais "h", "j", "k" e "l".

2. Digite "v" minúsculo.

3. Novamente usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l", marque o texto a ser copiado ou recortado.

4. Neste passo é que vem a diferença entre copiar e recortar.

a. Caso deseje copiar, digite "y" minúsculo.

b. Mas se seu desejo é de recortar, digite "d" minúsculo.

6. Posicione o cursor no ponto onde deseja colar o texto usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l".

7. Para colar digite "p" minúsculo.

Com isso, já dá para se virar com o editor.

Valeu!!!


sexta-feira, 7 de maio de 2021

Automatizando tarefas com Shell Script

Shell script é o nome dado a um arquivo que será interpretado por algum programa tipo Shell. Atualmente existem vários programas tipo Shell. Além dos principais - sh e bash -, existem também, kshzshcsh e tcsh. Um Shell script (ou script em Shell) necessita basicamente do interpretador Shell.

Algumas operações típicas executadas por linguagens de script em Shell incluem; manipulação de arquivos, execução de programas e impressão de texto. Sendo assim é muito comum que scripts sejam utilizados para automatização de tarefas - como configurar o ambiente, executar um programa e fazer qualquer limpeza, registro, etc. 


A ideia deste post é fazer um apanhado geral para criação de scripts.


Nome dos arquivos

Apesar do Linux não exigir que você coloque extensão nos arquivos, é comum utilizar a extensão .sh o que visualmente facilita o reconhecimento de um script. Exemplo: script_x.sh


Estrutura de um script

#!/bin/bash 

# ou #!/bin/sh (dependendo do shell que você estiver utilizando). 

# Todo script deve começar com a linha acima (# é usada para definir comentários)

cd /

ls -l

#Para definir uma variável, basta usar o sinal de igual "=" e

#para ver seu valor, usa-se o "echo":

#Não podem haver espaços ao redor do igual "=" no valores das variáveis

NOME_VARIAVEL=Hugo

echo $NOME_VARIAVEL

#Repare que para exibir o conteúdo da variável foi utilizado o caractere $

#Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés #de aspas, o comando deve ser colocado com o caractere "$()", vejam:

HOJE=$(date)

echo $HOJE

#O comando read é para ler informações digitadas pelo usuário e criar variáveis

#O parâmetro –n é apenas para ficar na mesma linha

echo -n "Digite um número:"

read NUMERO1

echo -n "Digite outro número:"

read NUMERO2

# A construção usada para indicar uma expressão aritmética é

# "$((...))", com dois parênteses.

echo "A soma entre os dois número é" $((NUMERO1 + NUMERO2))

#Os scripts que usam estruturas condicionais possibilitam criar duas ou mais #respostas para a condição exposta. Assim como qualquer outra linguagem de #programação, o shell também tem estruturas de condição e repetição. As mais usadas #são if, for e while.

#estruturas de condição

IDADE=18

if [ IDADE -eq 18 ] then

    echo "É maior de idade"

else

    echo "É menor de idade"

fi


#Operadores aritméticos + - * / % **

#Operadores relacionais -eq(igual) -ne(diferente) -lt(menor) -le(menor ou igual) 

# -gt(maior) -ge(maior ou igual)

#Operadores lógicos || &&

#teste em arquivos


if [ -f /tmp/teste.txt ] then

    echo "arquivo existe"

else

   echo  "arquivo inexistente"

fi

#CASE

echo "Digite 1 ou 2"

read opcao

case $opcao in

"1") echo "você digitou 1";;

"2") echo "você digitou 2;;

  *) echo "opção inválida";;

esac

exit

#estrutura de repetição

#while

i=1

while [$i -le 100]

do

 echo $i

i=$(($i+1))

done


#for

for passo in $(seq 10)

do

  echo passo

done


#FUNÇÕES

IDADE=18

CALCULARIDADE()

{

  if [ $IDADE -eq 18 ] then

        echo "Maior de 18"

}

CALCULARIDADE


#funcoes podem receber parâmetros

echo "Nome do script: $0"

echo "Número total de parâmetros: $#"

echo "Primeiro parâmetro: $1"

echo "Segundo parâmetro: $2"

echo "Décimo quinto parâmetro: ${15}"

echo "Todos os parâmetros: $*”



Passos a serem realizados para execução de um script

  1. Criar um arquivo com a extensão .sh
  2. Iniciar com a tag e o Shell a ser utilizado.
  3. Digitar os comandos do script e salvar o arquivo
  4. Dar permissão de execução para o script
  5. executar o script com "./"

Bom é isso aí! Até a próxima.

sábado, 12 de setembro de 2009

Processos no linux

Um programa em execução é considerado um processo em qualquer sistema operacional. São os processos que consomem os recursos do computador (processador, memória e etc).

É o processador que fica responsável pela priorização da execução desses processos, porém existem programas que possibilitam a manipulação e o gerenciamento de processos.

O sistema operacional lida com uma infinidade de processos e, por isso, é necessário ter meios que permitam controlá-los. Para isso, os processos contam com um conjunto de características, dentre as quais:

- Proprietário do processo;
- Estado do processo (em espera, em execução, etc);
- Prioridade de execução;
- Recursos de memória.

PID e PPID

Um PID (Process Identifier) é um número de identificação que o sistema dá a cada processo. Para cada novo processo, um novo número deve ser atribuído, ou seja, não se pode ter um único PID para dois ou mais processos ao mesmo tempo.

Os sistemas baseados em Unix precisam que um processo já existente se duplique para que a cópia possa ser atribuída a uma tarefa nova. Quando isso ocorre, o processo "copiado" recebe o nome de "processo pai", enquanto que o novo é denominado "processo filho". É nesse ponto que o PPID (Parent Process Identifier) passa a ser usado: o PPID de um processo nada mais é do que o PID de seu processo pai.


UID e GID

Conforme já mencionado, cada processo precisa de um proprietário, um usuário que seja considerado seu dono. A partir daí, o sistema saberá, através das permissões fornecidas pelo proprietário, quem pode e quem não pode executar o processo em questão. Para lidar com os donos, o sistema usa os números UID e GID.

O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User Identifier) e GID (Group Identifier).

Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usuário root, esses valores são sempre 0 (zero). Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que seu GID seja 0.

Sinais de processos

Os sinais são meios usados para que os processos possam se comunicar e para que o sistema possa interferir em seu funcionamento. Por exemplo, se o usuário executar o comando kill para interromper um processo, isso será feito por meio de um sinal.

Quando um processo recebe um determinado sinal e conta com instruções sobre o que fazer com ele, tal ação é colocada em prática. Se não houver instruções pré-programadas, o próprio Linux pode executar a ação de acordo com suas rotinas.

Entre os sinais existentes, tem-se os seguintes exemplos:

  • STOP - esse sinal tem a função de interromper a execução de um processo e só reativá-lo após o recebimento do sinal CONT;
  • CONT - esse sinal tem a função de instruir a execução de um processo após este ter sido interrompido;
  • SEGV - esse sinal informa erros de endereços de memória;
  • TERM - esse sinal tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
  • ILL - esse sinal informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero;
  • KILL - esse sinal tem a função de "matar" um processo e é usado em momentos de criticidade.

O kill também é um comando que o usuário pode usar para enviar qualquer sinal, porém, se ele for usado de maneira isolada, ou seja, sem o parâmetro de um sinal, o kill por padrão executa o sinal TERM.

A sintaxe para a utilização do comando kill é a seguinte:

kill -SINAL PID

Como exemplo, vamos supor que você deseja interromper temporariamente a execução do processo de PID 4220. Para isso, pode-se usar o seguinte comando:

kill -STOP 4220

Para que o processo 4220 volte a ser executado, basta usar o comando:

kill -CONT 4220

Se o sinal precisa ser enviado a todos os processos, pode-se usar o número -1 no lugar do PID. Por exemplo:

kill -STOP -1

Como já dito, usar o comando kill isoladamente - por exemplo, kill 4220 - faz com que este use o sinal TERM por padrão. Esse sinal, no entanto, pode ser ignorado pelos processos. É por isso que é boa prática usar o comando "kill -9 PID" para "matar" um processo, pois o número nove representa o sinal kill e este não pode ser ignorado. Isso deixa claro que se você conhecer o número que é atribuído a um sinal, você pode usá-lo no lugar de seu nome. Com exceção de alguns sinais, a numeração de cada um pode mudar de acordo com a distribuição ou com a versão do kernel.

Também é comum usar o kill da seguinte forma: kill -l PID. A opção "-l" (letra L minúscula) é usada para listar os processos que aceitaram o kill.

Agora, imagine que você não saiba qual o PID de um processo e tenha se esquecido que o comando ps (visto mais à frente) descobre tal informação. Neste caso, pode-se usar o comando killall, desde que você saiba o nome do processo. A sintaxe é:

killall -SINAL processo

Por exemplo:

killall -STOP vi

Estado dos processos

Quando um processo é criado, isso não significa que ele será imediatamente executado. Além disso, determinados processos podem ser temporariamente paralisados para que o processador possa executar um processo prioritário. Isso quer dizer que os processos, em certos momentos, podem estar em situações de execução diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados:

  • Executável: o processo pode ser executado imediatamente;
  • Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois dessa "coisa" acontecer é que ele passa para o estado executável;
  • Zumbi: o processo é considerado "morto", mas, por alguma razão, ainda existe;
  • Parado: o processo está "congelado", ou seja, não pode ser executado.

Comandos nice e renice

Ao abordarmos os comandos nice e renice é necessário entender o conceito de gentileza. Um processo pode ter prioridade em relação a outros em sua execução. Quando um processo é gentil, significa que ele "oferece a gentileza" de permitir que um processo com prioridade maior que a sua seja executado antes dele. Os níveis de gentileza, também chamados de nice, são determinados através de números. Quanto mais alto for o valor nice, mais gentil é o processo. Geralmente, o intervalo de números usados no nice são os inteiros entre -19 e 19.

Embora determinar a prioridade de um processo não seja uma prática comum, afinal, o próprio Linux faz muito bem essa tarefa, isso pode ser necessário em alguma situação. Para isso, utiliza-se um comando que recebe o mesmo nome do conceito: nice. A sintaxe é:

nice -n prioridade processo

Por exemplo:

nice -n -5 ntpd

No exemplo, o ntpd recebe prioridade -5. Trata-se de uma prioridade alta, afinal, como já dito, quanto menor o número menor sua gentileza.

Se um determinado processo está em execução, isso acontece com uma prioridade já definida. Para alterar um processo nessa condição, usa-se o comando renice, cuja sintaxe é:

renice prioridade opção processo/destino

As opções do renice são:

-u - a alteração ocorrerá nos processos do usuário informado;
-g - a alteração ocorrerá nos processos do grupo indicado;
-p - a alteração ocorrerá no processo cujo PID for informado.

Um exemplo:

renice +19 1000 -u infowester

Neste caso, o comando renice alterou a prioridade do processo 1000, assim como a prioridade dos processos do usuário infowester.

Verificando processos com o ps

O ps é um comando de extrema importância para o gerenciamento de processos. Por ele, é possível saber quais os processos em execução atualmente, quais os UIDs e PIDs correspondentes, entre outros.

Se somente ps for digitado na linha de comando, geralmente o sistema mostra quais os processos do usuário. É preciso usar uma combinação de opções para obter mais detalhes.

As opções mais importantes são os seguintes:

  • a - mostra todos os processos existentes;
  • e - exibe as variáveis de ambiente relacionadas aos processos;
  • f - exibe a árvore de execução dos processos;
  • l - exibe mais campos no resultado;
  • m - mostra a quantidade de memória ocupada por cada processo;
  • u - exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
  • x - exibe os processos que não estão associados a terminais;
  • w - se o resultado de processo não couber em uma linha, essa opção faz com que o restante seja exibido na linha seguinte.

Das opções acima, a combinação mais usada é aux:

ps aux

Usando a combinação lax, o resultado mostra mais detalhes:

ps lax

Essa combinação de comandos mostra uma série de informações sobre os processos, segue a descrição dos campos mostrados anteriormente e alguns que só são mostrados com a combinação lax:

  • USER - nome do usuário dono do processo;
  • UID - número de identificação do usuário dono do processo;
  • PID - número de identificação do processo;
  • PPID - número de identificação do processo pai;
  • %CPU - porcentagem do processamento usado;
  • %MEM - porcentagem da memória usada;
  • VSZ - indica o tamanho virtual do processo;
  • RSS - sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
  • TTY - indica o identificador do terminal do processo;
  • START - hora em que o processo foi iniciado;
  • TIME - tempo de processamento já consumido pelo processo;
  • COMMAND - nome do comando que executa aquele processo;
  • PRI - valor da prioridade do processo;
  • NI - valor preciso da prioridade (geralmente igual aos valores de PRI);
  • WCHAN - mostra a função do kernel onde o processo se encontra em modo suspenso;
  • STAT - indica o estado atual do processo, sendo representado por uma letra: R - executável; D - em espera no disco; S - Suspenso; T - interrompido; Z - Zumbi. Essas letras podem ser combinadas e ainda acrescidas de: W - processo paginado em disco; < - processo com prioridade maior que o convencional; N - processo com prioridade menor que o convencional; L - processo com alguns recursos bloqueados no kernel.

Verificando processos com o top

O comando ps trabalha como se tirasse uma fotografia da situação dos processos naquele momento. O comando top, por sua vez, coleta as informações, mas as atualiza regularmente. Geralmente essa atualização ocorre a cada 10 segundos.

A sintaxe do comando top é a seguinte:

top -opção

Entre as opções, tem-se as que se seguem:

-d - atualiza o top após um determinado período de tempo (em segundos). Para isso, informe a quantidade de segundos após a letra d. Por exemplo: top -d 30;
-c - exibe a linha de comando ao invés do nome do processo;
-i - faz o top ignorar processos em estado zumbi;
-s - executa o top em modo seguro.

É possível manipular alguns recursos do comando top através de teclas de atalho. Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla de espaço. Se pressionar a tecla q, o top é finalizado. Pressione a tecla h enquanto estiver utilizando o top para ver a lista completa de opções e teclas de atalho.

Os recursos jobs, fg e bg, fuser, pstree, nohup

Para ter ainda mais controle sobre os processos executados no Linux, pode-se utilizar os seguintes comandos: jobs, fg e bg, fuser, pstree, nohup. Cada um é descrito a seguir:

jobs - serve para visualizar os processos que estão parados ou executando em segundo plano (background). Quando um processo está nessa condição, significa sua execução é feita pelo kernel sem que esteja vinculada a um terminal. Em outras palavras, um processo em segundo plano é aquele que é executado enquanto o usuário faz outra coisa no sistema. Uma dica para saber se o processo está em background é verificar a existência do caractere & no final da linha. Se o processo estiver parado, geralmente a palavra "stopped" aparece na linha, do contrário, a palavra "running" é exibida. A sintaxe do jobs é:

jobs -opção

As opções disponíveis são:

  • -l - lista os processos através do PID;
  • -r - lista apenas os processos em execução;
  • -s - lista apenas os processos parados.

Se na linha de um processo aparecer o sinal positivo (+), significa que este é o processo mais recente a ser paralisado ou a estar em segundo plano. Se o sinal for negativo (-), o processo foi o penúltimo. Note também que no início da linha um número é mostrado entre colchetes. Muitos confundem esse valor com o PID do processo, mas, na verdade, trata-se do número de ordem usado pelo jobs.

fg e bg: o fg é um comando que permite a um processo em segundo plano (ou parado) passar para o primeiro (foreground), enquanto que o bg passa um processo do primeiro plano para o segundo. Para usar o bg, deve-se paralisar o processo. Isso pode ser feito pressionando-se as teclas Ctrl + Z no teclado. Em seguida, digita-se o comando da seguinte forma:

bg +número

O número mencionado corresponde ao valor de ordem informado no início da linha quando o comando jobs é usado.

Quanto ao comando fg, a sintaxe é a mesma:

fg +número


fuser: o comando fuser mostra qual processo faz uso de um determinado arquivo ou diretório. Sua sintaxe é:

fuser -opção caminho (do arquivo ou diretório)

Entre as opções, tem-se:

  • -k - finaliza o processo que utiliza o arquivo/diretório em questão;
  • -i - deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
  • -u - mostra o proprietário do processo;
  • -v - o resultado é mostrado em um padrão de exibição semelhante ao comando ps.

pstree: esse comando mostra processos relacionados em formato de árvore. Sua sintaxe é:

pstree -opção PID


Entre as opções, tem-se:

  • -u - mostra o proprietário do processo;
  • -p - exibe o PID após o nome do processo;
  • -c - mostra a relação de processos ativos;
  • -G - usa determinados caracteres para exibir o resultado em um formato gráfico.

Um detalhe importante: se ao digitar o comando pstree o PID não for informado, todos os processos serão listados.

nohup: o comando nohup possibilita ao processo ficar ativo mesmo quando o usuário faz logout. É da natureza dos sistemas baseados em Unix interromper processos caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil. Sua sintaxe é:

nohup comando

Aparentemente, não utilizamos com muita frequência os comandos descritos aqui e caso o computador trave podemos utilizar ferramentas gráficas como o xkill, entretanto fiz questão de pesquisar o assunto e compartilho com vocês essa pesquisa.

Tchau!

quinta-feira, 10 de setembro de 2009

Permissões de acesso a arquivos e diretórios

A permissão de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas não autorizados.

Donos, grupos e outros usuários

O princípio da segurança no sistema de arquivos do Linux é definir o acesso aos arquivos por donos, grupos e outros usuários.

O Dono é a pessoa que criou o arquivo ou o diretório. O nome do dono do arquivo/diretório é o mesmo do usuário usado para entrar no sistema. Somente o dono pode modificar as permissões de acesso do arquivo. As permissões de acesso do dono de um arquivo somente se aplicam ao dono do arquivo/diretório. A identificação do dono também é chamada de user id (UID).

A identificação de usuário e o nome do grupo que pertence são armazenadas respectivamente nos arquivos /etc/passwd e /etc/group.

Estes são arquivos textos comuns e podem ser editados em qualquer editor de texto, mas tenha cuidado para não modificar o campo que contém a senha do usuário encriptada (que pode estar armazenada neste arquivo caso não estiver usando senhas ocultas).

O grupo serve para permitir que vários usuários diferentes tenham acesso a um mesmo arquivo (já que somente o dono poderia ter acesso ao arquivo).

Outros é a categoria de usuários que não são donos ou não pertencem ao grupo do arquivo.

Um usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono).

Permissões de acesso a arquivos e diretórios

Cada um dos tipos acima possuem três tipos básicos de permissões de acesso:

  • r - Permissão de leitura para arquivos. Caso for um diretório, permite listar seu conteúdo (através do comando ls, por exemplo).
  • w - Permissão de gravação para arquivos. Caso for um diretório, permite a gravação de arquivos ou outros diretórios dentro dele. Para que um arquivo/diretório possa ser apagado, é necessário o acesso a gravação.
  • x - Permite executar um arquivo (caso seja um programa executável). Caso seja um diretório, permite que seja acessado através do comando cd.

As permissões de acesso a um arquivo/diretório podem ser visualizadas com o uso do comando ls -la.

As 3 letras (rwx) são agrupadas da seguinte forma:

-rwxrwxrwx gleydson users teste

A seguir uma explicação das 10 letras da esquerda para a direita:

A primeira letra diz qual é o tipo do arquivo. Caso tiver um “d” é um diretório, um “l” um link a um arquivo no sistema (veja ‘ln’ on page 70 para detalhes) , um “-” quer dizer que é um arquivo comum, etc.

  • O primeiro grupo(rwx) refere-se a permissão de acesso ao dono do arquivo.
  • O segundo grupo(rwx) refere-se as permissões de acesso ao grupo do arquivo.
  • O terceiro grupo(rwx) diz qual é a permissão de acesso para os outros usuários.
  • gleydson é o dono do arquivo.
  • users é o grupo do arquivo.
  • e teste é o nome do arquivo


OBSERVAÇÕES:

Para listar os arquivos, permissões e respectivos grupo e dono use o comando ls -la

O usuário root não tem nenhuma restrição de acesso ao sistema.

Se você tem permissões de gravação no diretório e tentar apagar um arquivo que você não tem permissão de gravação, o sistema perguntará se você confirma a exclusão do arquivo apesar do modo leitura. Caso você tenha permissões de gravação no arquivo, o arquivo será apagado por padrão sem mostrar nenhuma mensagem de erro (a não ser que seja especificada a opção -i com o comando rm).

Por outro lado, mesmo que você tenha permissões de gravação em um arquivo mas não tenha permissões de gravação em um diretório, a exclusão do arquivo será negada.

Isto mostra que é levado mais em consideração a permissão de acesso do diretório do que as permissões dos arquivos e sub-diretórios que ele contém. Este ponto é muitas vezes ignorado por muitas pessoas e expõem seu sistema a riscos de segurança. Imagine o problema que algum usuário que não tenha permissão de gravação em um arquivo mas que a tenha no diretório pode causar em um sistema mal administrado.


Comandos chmod,chgrp,chown e unmask


chmod (muda a permissão de acesso)

Muda a permissão de acesso a um arquivo ou diretório. Com este comando você pode escolher se usuário ou grupo terá permissões para ler, gravar, executar um arquivo ou arquivos. Sempre que um arquivo é criado, seu dono é o usuário que o criou e seu grupo é o grupo do usuário.


chmod [opções] [permissões] [diretório/arquivo]

Onde:

diretório/arquivo Diretório ou arquivo que terá sua permissão mudada.

opções

-v, –verbose Mostra todos os arquivos que estão sendo processados.

-f, –silent Não mostra a maior parte das mensagens de erro.

-c, –change Semelhante a opção -v, mas só mostra os arquivos que tiveram as permissões alteradas.

-R, –recursive Muda permissões de acesso do diretório/arquivo no diretório atual e subdiretórios.

ugoa+-=rwxXst • ugoa - Controla que nível de acesso será mudado. Especificam, em ordem, usuário (u), grupo (g), outros (o), todos (a).

• +-= - + coloca a permissão, - retira a permissão do arquivo e  define a permissão exatamente como especificado.

• rwx - r permissão de leitura do arquivo. w permissão de gravação. x permissão de execução (ou acesso a diretórios).

chmod não muda permissões de links simbólicos, as permissões devem ser mudadas no arquivo alvo do link.

Exemplos de permissões de acesso:

  • chmod g+r * Permite que todos os usuários que pertençam ao grupo dos arquivos (g) tenham (+) permissões de leitura (r) em todos os arquivos do diretório atual.
  • chmod o-r teste.txt Retira (-) a permissão de leitura (r) do arquivo teste.txt para os outros usuários (usuários que não são donos e não pertencem ao grupo do arquivo. teste.txt.
  • chmod uo+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono e outros usuários do arquivo.
  • chmod a+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono, grupo e outros usuários.


chgrp (muda o grupo)

Muda o grupo de um arquivo/diretório.

chgrp [opções] [grupo] [arquivo/diretório]

Onde:

  • grupo Novo grupo do arquivo/diretório.
  • arquivo/diretório Arquivo/diretório que terá o grupo alterado.

opções

-c, –changes Somente mostra os arquivos/grupos que forem alterados.

-f, –silent Não mostra mensagens de erro para arquivos/diretórios que não puderam ser alterados.

-v, –verbose Mostra todas as mensagens e arquivos sendo modificados.

-R, –recursive Altera os grupos de arquivos/sub-diretórios do diretório atual.



chown (muda o dono)

Muda dono de um arquivo/diretório. Opcionalmente pode também ser usado para mudar o grupo.

chown [opções] [dono.grupo] [diretório/arquivo]

onde:

  • dono.grupo Nome do dono.grupo que será atribuído ao diretório/arquivo. O grupo é opcional.
  • diretório/arquivo Diretório/arquivo que o dono.grupo será modificado.

opções

-v, –verbose Mostra os arquivos enquanto são alterados.

-f, –supress Não mostra mensagens de erro durante a execução do programa.

-c, –changes Mostra somente arquivos que forem alterados.

-R, –recursive Altera dono e grupo de arquivos no diretório atual e sub-diretórios.



O dono.grupo pode ser especificado usando o nome de grupo ou o código numérico correspondente ao grupo (GID).

Você deve ter permissões de gravação no diretório/arquivo para alterar seu dono/grupo.

Exemplos:

  • chown joao teste.txt - Muda o dono do arquivo teste.txt para joao.
  • chown joao.users teste.txt - Muda o dono do arquivo teste.txt para joao e seu grupo para users.
  • chown -R joao.users * - Muda o dono/grupo dos arquivos do diretório atual e subdiretórios para joao/users (desde que você tenha permissões de gravação no diretórios e sub-diretórios).



Modo de permissão octal

Ao invés de utilizar os modos de permissão +r, -r, etc, pode ser usado o modo octal para se alterar a permissão de acesso a um arquivo. O modo octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.

É mais flexível gerenciar permissões de acesso usando o modo octal ao invés do comum, pois você especifica diretamente a permissão do dono, grupo, outros ao invés de gerenciar as permissões de cada um separadamente.

O uso de um deste números define a permissão de acesso do dono, grupo ou outros usuários. Um modo fácil de entender como as permissões de acesso octais funcionam, é através da seguinte tabela:

  • 0 = Nenhuma permissão de acesso
  • 1 = Executar
  • 2 = Gravar
  • 4 = Ler
Para Dono e Grupo, multiplique as permissões acima por x100 e x10.

Basta agora fazer o seguinte:

  • Somente permissão de execução, use 1.
  • Somente a permissão de leitura, use 4.
  • Somente permissão de gravação, use 2.
  • Permissão de leitura/gravação, use 6 (equivale a 2+4 / Gravar+Ler).
  • Permissão de leitura/execução, use 5 (equivale a 1+4 / Executar+Ler).
  • Permissão de execução/gravação, use 3 (equivale a 1+2 / Executar+Gravar).
  • Permissão de leitura/gravação/execução, use 7 (equivale a 1+2+4 / Executar+Gravar+Ler).

Exemplos: chmod ogd

"chmod 764 teste"

Os números são interpretados da direita para a esquerda como permissão de acesso aos outros usuários (4), grupo (6), e dono (7). O exemplo acima faz os outros usuários (4) terem acesso somente leitura (r) ao arquivo teste, o grupo (6) ter a permissão de leitura e gravação (w), e o dono (7) ter permissão de leitura, gravação e execução (rwx) ao arquivo teste.

"chmod 40 teste"

O exemplo acima define a permissão de acesso dos outros usuários (0) como nenhuma, e define a permissão de acesso do grupo (4) como somente leitura (r). Note usei somente dois números e então a permissão de acesso do dono do arquivo não é modificada.

"chmod 751 teste"

O exemplo acima define a permissão de acesso dos outros usuários (1) para somente execução (x), o acesso do grupo (5) como leitura e execução (rx) e o acesso do dono (7) como leitura, gravação e execução (rwx).

Umask

A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado. Digite umask sem parâmetros para retornar o valor de sua umask atual.

A umask tem efeitos diferentes caso o arquivo que estiver sendo criado for binário (um programa executável) ou texto (‘Arquivo texto e binário’ on page 23) .

Um arquivo texto criado com o comando umask 012;touch texto.txt receberá as permissões -rw-rw-r--, pois 0 (dono) terá permissões rw-, 1 (grupo), terá permissões rwe 2 (outros usuários) terão permissões r--. Um arquivo binário copiado com o comando umask 012;cp /bin/ls /tmp/ls receberá as permissões -r-xr--r-x

Por este motivo é preciso um pouco de atenção antes de escolher a umask, um valor mal escolhido poderia causar problemas de acesso a arquivos, diretórios ou programas não sendo executados. O valor padrão da umask na maioria das distribuições atuais é 022. A umask padrão no sistema Debian é a 022 .

A umask é de grande utilidade para programas que criam arquivos/diretórios temporários, desta forma pode-se bloquear o acesso de outros usuários desde a criação do arquivo, evitando recorrer ao chmod.

Aqui listamos os comandos relativo a permissionamento de arquivos no Linux no próximo post falaremos sobre os comandos relacionados a processos.

Um abraço!

quarta-feira, 9 de setembro de 2009

Administrando usuários e grupos no linux

Dando continuidade aos estudos de linux, veremos aqui os comandos para administração de usuários e grupos nesse sistema operacional.

Como no Windows, os usuários no Linux são organizados em grupos.

Para criar um grupo digite o comando:

  • groupadd novo_grupo

para alterar o nome de um grupo ja criado:

  • groupmod novo_nome nome_antigo
para deletar um grupo

  • groupdel nome_grupo 

Como tudo que se cria no linux é gravado em arquvos de configuração, o arquivo de configuração dos grupos fica em /etc/group.

Grupo criado, iremos agora ver como criar e deletar usuários do sistema.

Para criar um usuário de modo simples no Linux utilizamos os seguintes comandos:

  • adduser usuarioX - cria o usuário
  • passwd  usuarioX - cria a senha do usuário

Assim o usuário usuarioX será criado, e por padrão ja que não especificamos o diretório home, o shell, e nem o ID, esse usuário ficará em /home/usuarioX, o seu shell será o /bin/bash e um ID disponível foi criado para ele.Mas nós podemos específicar todos esses parametros com o seguinte comando:

  • adduser -m -c 'usuarioX da Silva' -d /home/usuarioX -s '/bin/sh' usuarioX -g usuários

Assim, estamos dizendo que o diretório home de usuarioX será em /home/usuarioX,com o parâmetro -d, que o shell padrão para esse usuário será o /bin/sh,com o parâmetro -s, e que ele será criado no grupo usuários, com o parâmetro -g.

Para deletarmos um usuário utilizamos o seguinte comando:
  • userdel usuarioX- deleta o usuário
  • userdel -r usuarioX - deleta o usuário  junto com o diretório home.

Modificando uma conta de usuário

Para você modificar uma conta você tem que editar o arquivo /etc/passwd

Original (nome da conta = usuarioX)

usuarioX:x:591:502:usuarioX:/home/usuarioX:/bin/bash

Modificar para: (nome da conta = usuarioX)

usuarioX:x:591:502:Joao Carlos:/home/usuarioX:/bin/bash

usuarioX é o nome da conta
x indica que está sendo utilizado o método shadow de encriptação de senhas
591 é o ID do usuário (UID = user identification)
502 é o ID do grupo (GID = group identification)
Joao carlos é o nome completo
/home/usuarioX é o diretório home do usuário usuarioX
/bin/bash  é o shell padrão do usuário usuarioX

Listando os usuários de um grupo

  • cat /etc/group

Exemplo de retorno
...
firebird:x:1001:
bind:x:104:
administrativo:x:1002:angelica,paul o,luizosni
fotos:x:1003:angelica,paulo,luizosn i,joyce,rafael
dados:x:1004:angelica,paulo,luizosn i,joyce
...

Ou se preferir você pode fazer:

  • egrep "nome_do_grupo" /etc/group

vai retornar somente o grupo escolhido.

Aqui mostramos os comandos para administração de usuários e grupos no Linux.

Inté!!!

segunda-feira, 7 de setembro de 2009

Comandos do Linux

Sempre tive o linux e o Windows instalado no meu note, porém nunca usava o Linux até ter um problema com a partição que continha o Windows.

Por conta da preguiça de reinstalar o windows, e devido a estudar para um concurso no qual vai cair o referido assunto, resolvi que ia começar a aprender um pouco mais sobre o maldito sistema operacional. Que fique bem claro que não tenho nada contra o Linux. Não usava esse sistema operacional por falta de costume.

Aqui eu vou listar os comandos que vão permitir a um usuário "se virar" com o sistema.

Interpretador de comandos

Também conhecido como shell. É o programa responsável em interpretar as instruções enviadas pelo usuário e seus programas ao sistema operacional (o kernel). Ele que executa comandos lidos do dispositivo de entrada padrão (teclado) ou de um arquivo executável.

O Linux possui diversos tipos de interpretadores de comandos, entre eles posso destacar o bash, ash, csh, tcsh, sh, etc. Entre eles o mais usado é o bash.

O interpretador de comandos do DOS é o command.com.


Entendendo os diretórios

No linux, não existe o conceito de unidades que temos no Windows (Ex. C:.D:, etc.). Existe na verdade um diretório raiz ("/") no qual constam uma série de outros subdiretórios sobre os quais explanamos abaixo:

/bin - Armazena os executáveis de alguns comandos básicos do sistema (su, tar,cat, rm, pwd, etc)

/usr - É onde fica o grosso dos programas instalados. O subdiretório /usr/bin é o diretório mais populado (cerca de 2000 programas), ou seja, se você não souber aonde encontrar um programa, use esse subdiretório como ponto de partida para a procura.

/usr/lib -  contem as bibliotecas (parecidas com as dlls do Windows) utilizadas pelos programas. Existem dois tipos de bibliotecas: As utilizadas por um programa apenas (extensão .a) e as que são compartilhadas por vários programas (extensão .so).

/dev - contem os devices (links para os dispositivos do sistema CD, HD, Floppydisks, etc)

/etc - concentra os arquivos de configuração do sistema (é como se fosse o registry do Windows).

/mnt - é o subdiretório que serve de ponto de montagem para os dispositivos.

/home - é a pasta meus documentos do linux. Esse subdiretório é criado para cada usuário do sistema, visto que o linux é multiusuário. Para usuários que não seja o root, o linux só permite a escrita em arquivos que estão dentro desse subdiretório.

Utilizando o terminal (o modo console do Linux)

O teminal no linux é equivalente ao modo console do Windows (executar > cmd), mas antes de explanarmos sobre o uso do terminal é importante listarmos fazermos algumas ponderações.

O Linux é Case Sensitive ou seja, ele diferencia letras maiúsculas e minúsculas nos arquivos.

O arquivo "historia" é completamente diferente de "Historia". Esta regra também é válido para os comandos e diretórios. Prefira, sempre que possível, usar letras minúsculas para identificar seus arquivos, pois quase todos os comandos do sistema estão em minúsculas.

Um arquivo oculto no Linux é identificado por um “.” no início do nome (por exemplo,.bashrc). Arquivos ocultos não aparecem em listagens normais de diretórios. Para listar esses arquivos use o comando ls -a.

Existem duas formas de se chamar o terminal:
  • CTRL + ALT + F1 - abre um terminal puro
  • ALT + Fn - alterna entre terminais
Quando abrimos um terminal, o prompt se apresenta com um $ a partir do qual podemos digitar os comandos.

O aviso de comando do usuário root é identificado por uma # (tralha), e o aviso de comando de usuários é identificado pelo símbolo $. Isto é padrão em sistemas UNIX. Para alternar entre esses usuários digite o comando su ou sudo su.

O comando gimp imagem.jpg abre o programa gimp que é um editor de imagens com o arquivo imagem.jpg carregado.

Digitar comandos é um saco, porém o linux possui um recurso do tipo auto-completar. Para fazer uso deste recurso devemos digitar parte do nome do comando e pressionar a tecla TAB.

Alguns atalhos úteis

Você pode retornar comandos já digitados pressionando as teclas Seta para cima / Seta para baixo.

A tela pode ser rolada para baixo ou para cima segurando a tecla SHIFT e pressionando PGUP ou PGDOWN. Isto é útil para ver textos que rolaram rapidamente para cima.

Abaixo algumas dicas sobre a edição da linha de comandos (não é necessário se preocupar em decora-los):

  • Pressione a tecla Back Space (<--) para apagar um caracter à esquerda do cursor.
  • Pressione a tecla Del para apagar o caracter acima do cursor.
  • Pressione CTRL+A para mover o cursor para o inicio da linha de comandos.
  • Pressione CTRL+E para mover o cursor para o fim da linha de comandos.
  • Pressione CTRL+U para apagar o que estiver à esquerda do cursor. O conteúdo apagado
  • é copiado para uso com CTRL+y.
  • Pressione CTRL+K para apagar o que estiver à direita do cursor. O conteúdo apagado é
  • copiado para uso com CTRL+y.
  • Pressione CTRL+L para limpar a tela

Extensão dos  arquivos

A extensão serve para identificar o tipo do arquivo. A extensão são as letras após um “.” no nome de um arquivo, explicando melhor:

  •  relatório.txt - O .txt indica que o conteúdo é um arquivo texto. script.sh - Arquivo de Script (interpretado por /bin/sh).
  • system.log - Registro de algum programa no sistema.
  • arquivo.gz - Arquivo compactado pelo utilitário gzip.
  • index.html - Página de Internet (formato Hypertexto). 
A extensão de um arquivo também ajuda a saber o que precisamos fazer para abri-lo. Por exemplo, o arquivo relatório.txt é um texto simples e podemos ver seu conteúdo através de um editor de textos kedit, já o arquivo index.html contém uma página de Internet e precisaremos de um navegador para poder visualiza-lo (como o lynx, Firefox ou o Konqueror).

A extensão (na maioria dos casos) não é requerida pelo Linux, mas é conveniente o seu uso para determinarmos facilmente o tipo de arquivo e que programa precisaremos usar para abri-lo.

Navegando entre os diretórios


Quando se utiliza um sistema operacional, essencialmente navega-se entre os diretórios e subdiretórios, edita-se arquivos e abre-se programas. Abaixo vamos falar sobre os comandos que nos permite realizar essas atividades.

  • pwd - para saber em que diretório o usuário se encontra;
  • cd (change diretory) - utilizado para navegar entre diretórios;
  • ls ou dir - permite listar os arquivos que constam em um diretório;
  • cp - permite copiar arquivos de um diretório para outro;
  • mv - move arquivos de um diretório para outro; o mv também é utilizado para renomear arquivos (na verdade o Linux move) um arquivo para outro.
  • rm - serve para remover um arquivo;
  • mkdir - permite criar um diretório;
  • rmdir - remove diretórios;
  • locate - busca em base de dados por um arquivo ou diretório (updatedb é utilizado para atualizar a base);
  • find - também utilizado para buscar arquivos ou diretórios. Só que desta vez no sistema de arquivos;
Todos esses comandos podem ser executados em sequência utilizando-se o ";" entre os comandos.

Outra observação importante a ser feita é que os comandos podem vir seguido s de argumentose/ou parâmetros  que mudam o comportamento dos mesmos.

O comando CAT permite visualizar o conteúdo de um arquivo: cat nome_arquivo 

Utiliza-se o pipe "|"  para combinar comandos. Exemplo: (comando1|comando2 > arquivo.txt  ) neste caso o resultado dos comandos 1 e 2 estão sendo redirecionados para um arquivo.

O Comando grep permite filtrar a saída de um comando. Por exemplo: O Linux mantem um histórico dos últimos 500 comandos digitados. Caso você queira visualizar apenas os comandos cp digitados nesta lista, basta digitar history | grep cp para mostrar todas as entradas onde foi usado o comando cp.

Criando links  (atalhos do windows)

Existem dois tipos de atalho no Linux: os hard links e o links simbólicos.

A diferença entre eles é que se o arquivo muda de lugar o link simbólico fica quebrado. Já o hard link não, este continua funcionando. Os dois links são criados através do comando ln:

  • hard link - ln /home diretorioHome
  • link simbólico - ln -s  /home diretorioHome (note que a diferença tá no argumento -s)
Você pode ainda criar links que podem ser evocados a partir de qualquer diretório. Basta que esse seja criado no diretório /usr/bin. No windows fazemos isso editando a variável PATH.

Reiniciando e desligando o micro

Existem comandos para desligar ou reiniciar o micro, mas por uma questão de segurança é necessário estar logado como root para que esses comandos funcionem. Para isso use o comando su ou sudo (a diferença entre os dois é que o primeiro pede senha e o segundo não).
  • reboot - reinicia o micro;
  • halt - desliga o micro;
  • shutdown -h now - permite um desligamento programado idêntico a um timer.


Os comandos mencionados aqui estão relacionados a manipulação de arquivos e diretórios. Em outro post falarei sobre outros comandos.

Até lá!