sexta-feira, 10 de janeiro de 2020

Help Management Linux-2

#################SHELLS, SCRIPTING_E_GERENCIA_DE_DADOS_TOPICO_105################
105.1- comando source - # source Script_Variavel.sh - roda o script no bash local, sem necessidade do comando 'export', # . Script_Variavel.sh - o ponto espaco tbm roda no bash local o script. # alias dt="date +%H:%M" - criando alias dt q mostra hora e minuto
# function funcao1 { Criando funcao
> date; Comandos
> uptime; Comandos
> uname -a; Comandos
> echo "fim da funcao"; Comandos
> } Fechando funcao
# function funcao2 { date; uptime; } - criando funcao2 q roda date; e uptime; para rodar a funcao é só chamar com #funcao2 , # funcao3 () { uptime; uname -v; hostname; } - terceiro modo de criar funcao. , (essas funcoes estao somente nesse bash, se abir outro bash nao funcionam essas funcoes)
lists - #lista=(valor1 valor2 valor3 valor4) - # set | grep lista (saida lista=([0]="valor1" [1]="valor2" [2]="valor3" [3]="valor4") ) , # echo ${lista[2]} - mostra o campo da lista criada, nesse caso saira o valor3 pq o primeiro campo comeca com 0. # array=(A B C D) , # echo ${array[3]} , a saida é D
Apagar as funcoes e lists é #unset funcao1 , #unset lista

105.1-###ARQUIVOS_DE_CONFIGURACAO######
Arquivos q definem configuracoes a todos users # /etc/profile - quando qualquer user faz procedimento de login, ja  e o # /etc/bash.bashrc - quando se abre uma nova sessao de shell (bash). No /etc/profile - é um novo login , # vi /etc/bash.bashrc - nesse arquivo podemos criar uma variavel ETCBASHTESTE=valor2
ao procurar a variavel $ETCBASHTESTE nao aparece , mas usando o comando 'bash' a variavel aparece. Para configurações de UM SÓ usuario podem ter 3 arquivos dentro do /home de cada user, #/.bash_profile #/.bash_login #/.profile  - no meu linux só tem o .profile para configurar meu usuario sempre que logo. E tem o .bashrc que é para novos bash abertos.
dentro desses arquivos podemos criar alias, variaveis sempre que fazemos login ou iniciamos novo bash. #.bash_logout - sempre que faço logout podemos dar comandos. #/etc/inputrc - para definicoes de terminal, criar opcoes se clico na seta pra cima, pra baixo etc. #/etc/skel - tudo q tiver dentro do skel sera criado
dentro do /home dos novos usuarios criados. O #chsh serve simplesmente para alterar o shell utilizado pelo usuário

##########105.2_CRIACAO_SCRIPTS_INTRODUCAO_SCRIPTS###########################
############CUSTOMIZAÇÃO_CRIACAO_SCRIPT_PARAMETROS_ARQGUMENTOS###############
#!/bin/bash
clear
VAR2="Curso LPI1"
VAR3=99
VAR4=`cat /etc/passwd| wc -l`
VAR5=$(date +%H)
echo "=====================Meu primeiro Script========================"
echo ""
echo "O meu script se chama $0"
echo ""
echo "Esse script tem $# parametros que sao: $1 $2" #retorna quantos parametros tem no meu script
echo ""
echo -n "Por favor, digite um numero de 0 a 10:"
read VAR1
echo "O valor digitado foi $VAR1"
echo ""
uptime
free -m
echo ""
echo "O arquivo /etc/passwd possui $VAR4 linhas. A hora atual é $VAR5"
echo ""
echo "Fim do Script"

A Saida dele fica :

=====================Meu primeiro Script========================


O meu script se chama ./Primeiro_Script.sh

Esse script tem 2 parametros que sao: 10 Paulo

Por favor, digite um numero de 0 a 10:3
O valor digitado foi 3

 13:06:24 up 4 days, 11:47,  1 user,  load average: 0,00, 0,00, 0,00
              total        used        free      shared  buff/cache   available
Mem:           2000         108        1211           7         680        1705
Swap:          2045           0        2045

O arquivo /etc/passwd possui 38 linhas. A hora atual é 13    (saida da $VAR4 e da $VAR5)

Fim do Script

vi PrimeiroScript.sh - # exec ./PrimeiroScript.sh - executa e sai do usuario. Meu script ta em /home/paulo/Scripts , entao adiciono esse caminho na variavel PATH para que rode o Script sem colocar ./ , source ou . #She-bang - sinalizacao de qual vai ser o programa usado. Normalmente usado o #!/bin/bash
 [ -f /etc/bash.bashrc ]; then (-f faz um teste pra ver se o arquivo /etc/bash.bashrc existe)(pode ser feito tbm com ' test -f /etc/bash.bashrc')
. /etc/bash.bashrc

 if [ "`id -u`" -eq 0 ]; then (se id -u for igual a 0 'se o usuario for root')
      PS1='# '
    else
      PS1='$ '
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then  (-z quer saber se o tamanho dessa string é zero && '-r' e se esse arquivo /etc/debian_chroot tem permissao de leitura )

###TESTE_DO_CASE#############


echo ""
case $VAR1 in
        0)
                echo "Valor digitado foi 0"
        ;;
        1|2|3|4|5)
                echo "O valor digitado foi entre 1 e 5"
                sleep 3
        ;;
        *)              # o sinal * é como se forsse else
                echo "O valor digitado foi maior que 5"
esac

Análises de Arquivos e Diretórios: -f Arquivo : Verifica se o arquivo indicado existe e é um arquivo regular, -d Arquivo : Verifica se o caminho indicado é um diretório existente :-r Arquivo : Verificar se há permissão de leitura
-w Arquivo : Verificar se há permissão de escrita , -x Arquivo : Verificar se há permissão de execução , -s Arquivo : Verifica se o tamanho do arquivo é maior que 0
####Comparação de Strings#####

-n $VAR1 : Usado com variáveis, verifica se o tamanho do conteúdo da variável é diferente de zero (nonzero) , -z $VAR1 : Usado com variáveis, verifica se o tamanho do conteúdo da variável é zero , $VAR1 : Usado com variáveis, indica verdadeiro se $VAR1 não for nulo
String1 = String2 : Compara se as duas strings são iguais , String1 != String2 : Verifica se as duas strings são diferentes
#####Comparação de Valores Numéricos##########
Valor1 -eq Valor2 : Verdadeiro se os 2 valores forem iguais (equal) , Valor1 -ne Valor2 : Verdadeiro se os 2 valores forem diferentes (not equal) , Valor1 -gt Valor2 : Verdadeiro se o Valor1 for maior que Valor2 (greater than) , Valor1 -ge Valor2 : Verdadeiro se o Valor1 for maior ou igual que Valor2 (greater or equal)
Valor1 -lt Valor2 : Verdadeiro se o Valor1 for menor que Valor2 (less than) , Valor1 -le Valor2 : Verdadeiro se o Valor1 for menor ou igual que Valor2 (less or equal)

##################FOR_WHILE_UNTIL##################
expr 1 + 2 - saida e 3  ,


#############MYSQL################
> select * from employees where hire_date > "1999-01-01" and gender="F" and first_name like "S%";
> select * from employees where hire_date between "1999-01-01" and "2000-01-01" and gender="F" and first_name like "S%";
# mysqlshow - ver os bancos que tem, # mysql employees - entrando no banco employees , #show tables,  select gender, count(*) from employees group by gender; - contando quantos homens e mulheres
#select employees.first_name, employees.last_name, salaries.salary, salaries.to_date from employees join salaries on employees.emp_no=salaries.emp_no where salaries.salary > 150000 order by to_date; - Buscando pelo nome e sobrenome e salarios acima de 150000
# insert into departments (dept_no, dept_name) values ("d101","Support Technical") - inserindo valores na tabela , > #insert into departments set dept_no="d103", dept_name="Deployment"; - outra forma de inserir dados na table ,
# update departments set dept_name="Dev Ops Novo" where dept_no="d100" - atualizando um campo  - #delete from departments where dept_no="d104";


#########INTERFACES_USUARIOS_DESKTOPS_TOPICO_106########
106.1 - Configurar X11, ambiente ,comandos e configuracoes - x11 é onde tem o controle movimento do mouse, controle de janelas, monitores, graficos, cores, trabalha como cliente x servidor, mozilla é um cliente do servidor X, Arquivo Xorg.conf - (interface roda normalmente no terminal 7 tty7) , ## systemctl isolated.multi-user.target - para alterar o target padrao de 5 que é grafical para multiuser, que é 2 3 e 4.
Agoraa podemos gerar arquivo de configuracao xorg.conf para configurar o servidor x . # Xorg -configure - comando para criar o /root/xorg.conf.new , Apos copiar o arquivo xorg.conf.new e criando o /etc/X11/xorg.conf - # cp xorg.conf.new /etc/X11/xorg.conf - copiando e criando o xorg.conf, #startx - inicia novamente a interface gráfica. Servidor xfs - é o servidor de fontes , podemos adicionar servidores de fontes
dentro do arquivo /etc/X11/xorg.conf adicionamos FontPath "unix:/7100" e FontPath "tcp/fonts.server.com:7100" , dentro do xorg.conf é separado por sessoes onde cada sessao tem seu identifier , mouse, teclado, monitor, sessao da placa de video, sessap tela, sessao das fontes.  #xdpyinfo - informacoes da interface X e da tela. #xwininfo - mostra informacoes de uma janela, apos dar o comando, selecionamos a janela
que queremos verificar as informacoes de posicao, tamanho etc. #xvinfo - comando para ver capacidade dos adaptadores de video, profundidade de cor, tamanho maximo de imagens etc.
#########ACESSIBILIDADE###########
106.3- Sticky Keys - evita que seja necessário ficar segurando teclas pra fazer comandos exemplo: Pra fazer letras maiusculas, tem opcao de desabilitar o sticky keys se o sistema perceber q vc consegue digitar duas teclas.
Slow keys - funciona somente se eu segurar a tecla , se apertar rapido nao digita.  Bounce Keys - se eu apertar 2x a mesma tecla so funciona a primeira apertada.
Mouse emulation - usa as teclas numericas como mouse 8 pra cima , 2 pra baixo , 4 esquerda, 6 direita etc.
Onboard Keyboard - GOK - Gnbome onboard Keyboard. Digitando Appearance no menu iniciar - tem as opcoes de aparencia - TEm a opcao High Contrast - pessoas com problemas em ver cores. POdemos aumentar as fontes  em Fonts
Screen Magnifier - KMAG - da zoom no local onde estou com o mouse, como se fosse uma lupa. Screen Reader - Leitores de tela - ORCA e emacspeak, o principal é o Orca. brltty - para utilizar o braille display.

####FONTES####
Dentro do arquivo /etc/X11/xorg.conf - na sessao Files que é onde tem as fontes mostra os caminhos de onde estao
as fontes /usr/share/fonts/X11/ - dentro desse arquivo onde tem as fontes por exemplo Type1 ,
deve ter 2 arquivos principais 'fonts.scale e fonts.dir', para criar esses arquivos primeiro #mkfontscale depois
#mkfontdir , Quando tiver servidor de fontes local vai estar no /etc/X11/xorg.conf a linha na
sessao Files - FontPath "unix:/7100" ou pode ter um xfs(x font server) se tiver a linha FontPath "tcp/font.server.com:7100"



######CCONFIGURAR_X11_VARIAVEL_DISPLAY###############
Consigo rodar um programa em uma maquina e a imagem ser mostrada em outra maquina com o servidor X.
echo $DISPLAY - Criando a variavel DISPLAY que infomrara quem devera exibir as janelas, se é o servidor X local ou de outra maquina. Por padrao a config é :0.0 -
quando nao tem nada antes do : significa que é localhost (Servidor X local), depos do : é a informacao do display , monitor 0 e entrada 0.
Para mostrar a informacao na outra maquina usamos o comando #export DISPLAY="192.168.0.26:0.0 -
depois de rodar esse comando ainda nao conseguimos exibir o programa em outra maquina pq existe uma protecao(Lista de controle) na outra maquina,
para liberar o acesso para uma maquina é com o , # xhost +10.0.0.105 - agora podemos mostrar a tela de um programa aberto por outro pc.
#xhost + - desabilita o controle de acessos e deixa aberto pra todos acessar, mesmo assim o pc destino nao libera abrir programas por conta do 'Display Manager' -
q é o programa q controla os logins dentro da interface X. Para fazer isso devemos desabilitar o '-nolistem tcp'
(podemos ver isso rodando com o comando ps -aux | grep X) , Para desabilitar é dentro de '/usr/share/lightdm/lightdm.conf.d/, editamos o
# vi 50-xserver-command.conf - inserimos a linha 'xserver-allow-tcp=true' , salvamos e depois restarta o lightdm
com #systemctl restart lightdm - depois logamos novamente, agora o nolistem sumiu, agora dar
o comando xhost + (na maquina destino) novamente para liberar acesso geral apos reiniciar. Usando o comando xcalc vai abrir a calculadora na outra maquina
'################DISPLAY_MANAGER#####
Gerenciador de login - lightdm , xdm, gdm, kdm, xdmcp -
arquivo para trocar os Display manager é /etc/X11/default-display-manager ,
para instalar o xdm pode ser apt-get install xdm , dentro do arquivo 'default-display-manager',
colocar o caminnho de onde esta o display manager, (usar o whereis para econtrar o caminho.)
coloquei /usr/sbin/lightdm dentro do arquivo default-display-manager e resetei a maquina para subir
com o nomvo display manager. Os arquivos de configuracao do lightdm sao /etc/lightdm/lightdm.conf  - configuracoes gerais, (as vezes nao existe esse arquivo)
no /etc/lightdm/lightdm.gtk-greeter.conf - configurar a tela inicial letras, tela de fundo icones, botoes, aparencia do display manager,
tbm pode ser editado o arquivo  usr/share/60-lightdm-gtk-greeter.conf ,
Para funcionar como cliente x servidor onde eu doderia usar de outra maquina o lightdm ,
pra isso edito o /etc/lightdm/lightdm.conf - inserindo o seguinte: [XDMCPServer] enable=true (X Display Manager Control Protocol) ,
reiniciar com systemctl restart lightdm , Usando do modo servidor x cliente, no display manager é diferente do metodo da variavel $DISPLAY,
agora é como se tivessemos logando na outra maquina,

SESSAO-10-###############TAREFAS_ADMINISTRATIVAS###############
107.1-GERENCIAMENTO DE USUARIOS - passwd, shadow, group - o arquivo /etc/passwd - contem todas as infos dos users, o 3º campo é o UID id do user, GID é o id do grupo, root sempre tem o ID 0 e GID 0 tbm.
Usuarios criados por nos por padrao começam o UID e GID sempre a partir de 1000.
Campos do passwd - 1 - nome do user letras min, 2- senha o user (x), 3 - UID e GID, 4 - comentario(nome do user, programa)
5 - home do user em caso de pessoas, ou diretorio padrao de programas em caso de user de sistemas
6- shell padrao do usuario (normalmente é o ; /bin/bash e user de sistemas /bin/false ou /bin/nologin).Posso ter 2 user com o mesmo UID
/etc/shadow - campo 1 - nome o user , campo 2 - senha transformada com RASH
/etc/group - campo 1 - nome do grupo , campo 2 - senha do grupo , campo 3 - id do grupo, 4 - usuarios do grupo , /etc/gshadow - local onde tem as senhas do grupo -
/etc/login.defs - definicoes de controle de login do users , consigo setar onde começa os UIDs dos users e onde termina os UIDs

#####USERDD_USERDELL_USERMOD#############
useradd usuario2 - criando o usuario2 , com o useradd nao cria a senha e fica com ! no campo da senha em /etc/shadow e cria no /etc/group o usuario2 com o seu GID,
# useradd -c "Nome do usuario" -s /bin/bash usuario3 - comando cria o usuario com -c - comentario do usuario (4º campo do /etc/passwd), com -s - informar o shell padrao (6º campo do /passwd/) e o nome do user usuario3 ,
# useradd -m -s /bin/bash usuario4 - com o -m cria o /home do usuario4 (pq com o useradd nao esta criando automaticamente) se usar o -d é pra criar um /home/dir diferente do padrao, -g - define grupo padrao do usuario -G - para outros grupos suplementares.
-M - nao cria o /home , -p para inserir a senha ja em hash gerada por outro comando , -u definir qual o UID quero,
#userdel - remover usuarios - apaga do /shadow /passwd e /group mas nao apaga o /home/usuario4(isso é para segurança)
#userdel -r usuario2 - remove diretorios do /home tbm. #usermod - altera informacoes do user , defini comentário, muda o /home, o shell.  # usermod -c "Nome do ususario " usuario3 - altera o comentario do /passwd
#passwd - definir senhas do usuario - passwd usuario5, se digitar só passwd - ele pede pra trocar mnha propria senha ,
su usuario3 - para trocar de um user para o usuario3, se eu der o passwd paulo do usuario3, nao é permitido, somente o root poderá trocar de outros users.
#adduser - script pronto q cria grupos, solicita senha, e pede diversas informacoes.
# /etc/group - campo 1 usuario, campo 2 senha e campo 3 GID . #groupadd, #groupdel , #groupmod - groupadd suporte - só cria o grupo suporte(nao cria users)
# groupadd -g 2000 teste_team - com o -g cria o grupo escolhendo o GID 2000, # groupmod -n devops suporte - modifica o nome do grupo suporte para devops ,
## usermod -G qateam usuario2 - alterar usuario2 para o grupo qateam , mas ele sai do grupo q estava e so fica no qateam, para permanecer nos dois é # usermod -a -G qateam usuario2 - adiciona com -a -G em outro grupo.
#newgrp - faz com o que o usuario assuma um novo grupo do qual ele ja faz parte , exemplo estou logado como usuario3 #newgrp devops - assumo(usuario3) as informacoes do grupo devops direto ,
#gpasswd dev - criando senha para o grupo dev - podemos ver q tem senha no grupo em /etc/gshadow - aparece o hash da senha no grupo. com o usuario3 damos o comando #newgrp dev - e logamos com a senha no grupo dev
# id - comando id mostra meu UID e GID do meu user,  # id usuario3 - mostra do que escolho, #groups - mostra os grupos do meu user, #groups usuario3 - mostra do user que escolho.
#getent passwd usuario2 - pega informacoes do arquivo passwd somente do usuario2 , #getent group
# chage -l usuario3 - mostra informacoes sobre usuario, quando a senha foi alterada, quando expira, quando a conta expira, maximo de dias q pode ficar sem trocar senha, minimo de dias q pode trocar a senha e quando dias antes de expirar a senha mando alertas ,
#chage -M 10 - troca o maximo de dias que o usuario pode ficar com a mesma senha.  # chage -d 2017-01-01 usuario3 - troca manualmente a data da ultima alteracao de senha. # chage -W 10 usuario3 - altera o tempo em q começa a gerar alerta para 10 dias antes de expirar a senha.
As alteracoes feitas pelo #chage podem ser vistas com # grep usuario3 /etc/shadow - dentro do shadow, após o hash da senha .
# chage -E -1 usuario3 - remove a data de expiração da conta com o -1 , #chage -d 0 usuario3 - pede para mudar a senha no proximo login .



############AGENDADOR DE TAREFAS 107.2_###################
Processo Cron e agendamentos - A cron é um daemon porque semrpe tem que estar rodando no sistema. ## vi /etc/crontab - dentro da cron os 5 primeiros itens sao de
agendamento '17 *    * * *' - 1º campo é o minuto , 2º é hora, se tem * significa toda hora, 3º dia do mês(1 ate 31), 4º camppo é o mes (1 ate 12), 5º campo (dia da semana) vai de 0 ate 7 (0=domingo e 7=domingo tbm)
6º campo é o usuario que vai rodar, 7º campo são os comandos, ou sequencia de comandos ou scrpts que é o mais comum. Arquivos que configuram por hora /etc/cron.hourly,  por dia  /etc/cron.daily,
por semana /etc/cron.weekly , por mes /etc/cron.monthly, # /etc/cron.d - arquivo com agendamentos, como no arquivo /etc/crontab
#############107.2_AGENDAMENTO_TAREFAS_COMANDO_CRONTAB_ARQUIVOS_CONTROLE#############
#crontab - #crontab -l - listar os agendamentos ativos , # crontab -l -u paulo - lista os agendamentos do user paulo, mas se nao for root, nao consegue ver os agendamentos de outros users.
# crontab -e - entra em modo de edicao,

# m h dom mon dow user  command
15 13 1,10,20,30 * 1-5  cd / && run-parts --report /etc/cron.hourly   =  no minuto 15 de das 13h de todo dia 1,10,20,30 dos meses de out
*/10 * * *  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )  = */10 significa a cada 10 minutos
0 0 1 1 *  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) - em cada minuto 0 das 0 horas dos dias 1 do mes 1 de todas as horas , dias, meses, de todos dias da semana
20 9-18 * * 1-5 test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) - 9-18 - de 9 até 18 horas (roda as 9:20, 10:20, 11:20 ...)

#crontab -r - remove a crontab do usuario q vc esta logado. (cada usuario tem sua crontab, consigo apagar a crontab de todos os users somente com o root).

#crontab exemplo-cron - importa os dados do arquivo exemplo-cron para dentro da crontab do usuario q estou logado.
# cd /var/spool/cron/crontabs/ - local onde estão armazenadas as crons de todos users;
#/etc/cron.allow ou #/etc/cron.deny (arquivos devem ser criados nao existem por padrao) - servem para controlar quem deve ou não ter opção de usar crontab;


# m h dom mon dow user  command
15 13 1,10,20,30 * 1-5  cd / && run-parts --report /etc/cron.hourly
*/10 * * *  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
0 0 1 1 *  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
20 9-18 * * 1-5 test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


#cd /var/spool/cron/crontabs -
Por padrao todos users podem ter crontab, mas posso controlar quem pode e quem nao pode com os arquivos /etc/cron.allow e /etc/cron.deny , se eu colocar user no
/etc/cron.allow - somente os users desse arquivo poderao ter crontab, e os que estao na cron.deny, serao proibidos os que forem listados nesse arquivo.
se o mesmo user estiver nos dois arquivos , o allow tem prioridade.
anacron - Se a maquina estiver desligada no momento q a cron estiver programada ja era, perdeu! Somente se tiver o #anacron - executa no inicio do sistema, e conforme programado.
# vi /etc/anacrontab -
1 5 cron.dayly run-parts --reports /etc/cron.daily o 1 é de a cada 1 dia  depois q passou 1 dia roda 5 minutos depois 'cron.daily' é o identificador.
7 10 cron.weekly run-parts --reports /etc/cron.weekly roda a cada 7 dias com delay de 10 minutos após esses 7 dias.
@monthly 15 cron.monthly run-parts --reports /etc/cron.monthly     @monthly é o outro jeito que pode ser informado , tbm podemos colocar @daily, @weekly

Dentro do /etc/crontab prestar atencao que mostra uma mensao do anacron
test -x /usr/sbin/anacron' || cd / && run-parts --report /etc/cron.daily) - essa linha informa que se rodar o anacron nao roda o cron.daily.
#at - para agendar um job 1x só, em uma hora especifica - #at now +2hours - (conte duas horas a partir de agora) - o prompt fica at> e podemos digitar os comandos
at> echo "hora do café" at> clear , pra encerrar o at é com ctrl+d (com isso é criado um job)  - ou seja daqui a 2 horas vai rodar o comando mostrando "hora do café" e clear
#atq - mostra os jobs que foram criados com o comando #at , mostrando quando que vai rodar a saida fica  (1       Wed Aug  7 00:38:00 2019 a root), #at - l - =e o mesmo resultado q #atq
#at 22:00 - roda as 22:00 , caso ja tenha passado do horario , ele agenda para o proximo dia. #at midnight - #at teatime , # at 02:20pm 20012018 - agendmento com horario e dia certo.
#atrm 2 - remove o job 2 , vi /etc/at.deny - (ja vem no sistema) , /etc/at.allow - tem que criar, (se nao tiver nenhum dos arquivos, so o root pode usar o at)


#########107.3_LOCALIZACAO_INTERNACIONALIZAÇAO############
#timedatectl - traz informacoes de Universal time (hora em greenwitch) #cd /usr/share/zoneinfo/ - arquivos com diversos locais como do mundo
#ls -l /etc/localtime - /etc/localtime -> /usr/share/zoneinfo/America/Sao_Paulo (onde mostra o link do timezone do meu sistema) # vi /etc/timezone - mostra o timezone usado no momento.
#tzselect - auxilia a selecionar o timezone correto , podemos escolher os numeros do local no caso 2) para americas 49) EUA. FInalizando ele muda o /etc/timezone
#export TZ=America/Chicago - muda o horario do sitema inserindo o local na variavel TZ. O TZ altera o timezone somente em uma sessao bash.
A variavel TZ sobescreve o que tem no /etc/localtime  - a variavel TZ pesa mais que o link /etc/localtime
Mudando pelo /etc/localtime - ir para cd /usr/share/zoneinfo/ - escolhi Asia/Bankok - primeiro removemos o link /etc/localtime ->  /usr/share/zoneinfo/America/Sao_Paulo
removendo - rm -f /etc/localtime , depois criamos novamente com o novo link para Bangkok  # ln -s /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
COm o comando #timedatectl podemos ver q ja trocou para o horario de bangkok,

107.3########CONFIGURACAO_HORARIO_FUSO########
Variavel TZ - TZ=America/Sao_Paulo - configurando outro time zone somente em uma sessao, podemos configurar por perfil de user, dentro de .bashrc


107_3#############IDIOMA_LINGUAGEM_CODIFICACAO#######
#locale - Mostra informacoes de  linguagem, configuracao de teclado com a liguagem e localizacao, saida ( LC_CTYPE="C.UTF-8"   LC_NUMERIC="C.UTF-8" e LC_TIME="C.UTF-8"

#locale -a - mostra as linguagens disponiveis . Caso tenha algum usuario q fala english, configuramos o locale no .bashrc dele como linguagem ingles ,
#iconv -f ISO-8859-1 -t UTF08 arquivo-teste-win.txt > novo_arquivo-teste - converte um formato de arquivo em outro , necessário jogar a conversao em outro arquivo.
#LANG=C - para deixar as configuracoes padroes para os scripts, e nao produzam resultados diferentes por conta de linguagem de outro pais.


108.1#####MANUTENCAO_HORA_RELOGIOS##########
O linux possui o relogio da bios(hardware) e do sistema - #date (Qua Ago  7 23:04:02 CEST 2019) e #hwclock - (Qua 07 Ago 2019 23:03:37 CEST  .048919 seconds) - nao tem sincronia entre eles
#date -u - horario universal , # date +%Y - mostra ano 2019 # date +%y - mostra ano 19 , # date +%H:%M - mostra hora:minuto ,  #date +%T - mostra hora min e segundo
#date 120112002018 - mudar o horario e data para 01/12/2018 as 12:00
#hwclock - mostra horario da bios, hwclock -w (--systohc) - sincroniza a hora do sistema com hora do hardware (tbm pode ser hwclock) , #hwclock -s - pega hora do hardware e coloca no do linux
#hwclock --set --date "12/01/2017 14:00" - defino o horario do hardware
108.1####NTP##########
Network Time Protocol - servidor que sincroniza todos computadores, Precisa ser instalado e roda pelo daemon '/usr/sbin/ntpd' , ntp roda com udp ,tcp na porta 123.
# vi /etc/ntp.conf - arquivo de confguracao do ntp - contem driftfile- arquvio de log , contem: pool 0.ubuntu.pool.ntp.org,pool  1.ubuntu.pool.ntp.org ,pool  2.ubuntu.pool.ntp.org, pool  3.ubuntu.pool.ntp.org - que sao servidores que consultam o horario,
 pode aparecer como server ao inves de pool o nome deles. Os servidores pool sao encontrado no site pool.ntp.org/pt - que sao servidores ntp confiáveis para qualquer pessoa usar.
#vi /etc/ntp.conf - o campo restrict - libera ou bloqueia para usarem o meu pc como ntp server,
## ntpq -p - mostra os servidores ntp que estou usando, estatisticas deles , ## ntpq -pn - remove a resolucao de nomes dos servers ntp
#ntpdate - para meu sistema fazer consultas manualmente sem o daemon 'ntpd' , #ntpdate 0.europe.pool.ntp.org - vai ate o servidor e consulta o horario que ta nesse servidor
#ntpdate -q - consulta se o servidor esta OK.

108.2  ######GERENCIAMENTO_DE_LOGS#############
Principal processo é o syslogd , mas exsitem o syslog, rsyslog, syslog-ng , #vi /var/log/ - principal diretorio de logs; dentro terão o /messages , /syslog, /secure
#vi /etc/syslog.conf - principal arquivo de CONFIGURACAO - cada registro é separado por:
- facility = criador da mensagem alguns sao (auth, authpriv, cron, daemon , kern, mail, mark , news, syslog, user, uucp, local0, local7 ) ,
- priority = nivel da mensagem, (debug, info, notice, warning(warn) , err(error), crit, alert, emerg(panic))
- action  = destino da mensagem , os destinos sao (arquivo de log, tela de usuario, servidor de log remoto) Exemplo de linha do arquivo 'daemon.*    -/var/log/daemon.log' - o traço - quer dizer que assim que for criado o log ele nao sera enviado na mesma hora pro arquivo, por questoes de desempenho.
mail.*      -/var/log/mail.log - facility é o mail o * informa que é qualquer priority, vai mantar pro /var/log/mail.log ;
auth,authpriv.*   /var/log/auth.log - quando tem dois facility é separado por virgula.
*.*;auth,authpriv.none   -/var/log/syslog - nessa linha é qualquer facility, qualquer priority, o ; para colocar outra regra, no caso .none que é onde nao tenha auth,authpriv
mail.info    -/var/log/mail.info - tudo que vier como mail e tiver A PARTIR DO priority info, vai para mail.log .
mail.warn    -/var/log/mail.warn - tudo que vier como mail e tiver A PARTIR DO nivel priority warn vai para mail.warn
mail.=alert - -/var/log/mail.alert - tudo que vier como mail e for = o priority alert vai para mail.alert
mail.debug     @10.0.0.100 - para jogar log em um servidor externo
mail.emerg     paulo, aluno1 - sempre que tem emerg como priority, ele envia para tela dos usuarios as mensagens no exemplo só manda para paulo e aluno1, pra mandar pra todos users é com *
Apos adicionar uma linha de log temos que reiniciar o arquivo syslog.conf com o comando '/etc/init.d/inetutils-syslogd stop' depois '/etc/init.d/inetutils-syslogd start'
#logger - comando para forçar a geracao de log, #logger -p local0.debug "log de debuf de teste" #logger -p local0.crit -t [testes-lpi] "teste de mensagem critica" - o -p é informar a priority o -t é pra inserir uma TAG, (nos logs normalmente aparece essa tag) - o comando joga um log para teste.err
# cd /etc/syslog.d - outro arquivo que pode contem logs. #  vi /etc/default/inetutils-syslogd - dentro desse arquivo podemos habilitar q um servidor receba logs remotos , nessa linha 'SYSLOGD_OPTS="--no-forward"' remover o '--no-forward' e colocar -r
## vi /etc/rsyslog.conf - bem parecido com syslog.conf #klogd - kernel log - pega os logs do kernel, logs internos, normalmente nao é mais usado
###logrotate - faz o rotacionamento dos logs gerados pelo syslogd,  Dentro de #vi /var/log - contem varios arquivos syslog de 1 a 7 , eles vao rotacionando o log de hoje que é o arquivo 'syslog' amanha vira o syslog.1, depois vira o syslog.3 ate virar o syslog.7 no proximo dia será excluido.
/etc/logrotate.conf - é onde tem as configuracoes genericas de quanto tempo quero que os arquivos rotacionem , quandos dias armazenam ate trocar para o proximo arquivo. O arquivo principal é  cd /etc/logrotate.d/ #cd /etc/cron.daily - onde tem o script logrotate para rodar
#systemd-journal - gerenciador de logs do systemd - o journal ,  vi /etc/systemd/journal.conf- arquivo de configuracao do journal, configuro quanto quero de espaco de uso em logs e outras informacoes,
/var/log/journal - para onde os logs sao encaminhados, no caso de nao existir esse arquivo , ele envia para /run/log/journal# - dentro desse arquivo nao conseguimos ler as informacoes, somente com o comando #journalctl - mostra os logs do sistema em geral - #journalctl -n10 - ultimos registros , #systelctl -b - somente log relacionado ao boot
#journalctl _TRANSPORT=kernel - insformacoes que vieram atraves do kernel. # journalctl --since "today" - só os logs de hoje , # journalctl --since "1 day ago", um dia atras , journalctl --since "1 hour ago" - uma hora atras

108.3###########MTA_SMTP_MTA############
MTA- Servidor de email ,responsavel pelo envio e recebimento de emails. SENDMAIL e POSTFIX - apt-get install mailutils - ele instala o postfix, # mail -s "Mensagem de testes" paulo  ao apertar enter aparece Cc: (Com copia) depois escrevemos a msg do email e para centerrar é ctrl+d
Para ver os emails da caixa é com o comando #mail  # mail - mostra em forma de lista os assuntos das mensagens e para escolher a mensagem é apertando o numero da mensagem conforme mostrado na lista.
Para sair é com #q - e ele salva as mensagem no /home/lpi1/mbox , se der #mail novamente nao aparece mais as msgs. #echo" essa é o corpo da mensagem " | mail -s "Esse e o titulo da mensagem do echo" paulo - enviado para usuario paulo
#cat arquivolongo.txt | mail -s "mensagem enviada pelo CAT " paulo - enviar email usando o cat . Salva nos arquivos #/var/spool/mail/ , #/var/mail/ e /home/paulo/mbox
#vi /etc/aliases - arquivo para redirecinamento de mensagens entre os users, dentro do arquivo tem aliases, atalhos, apelidos. 'webmaster:     root', webpostmaster:  root - redireciona de webpostmater para o user root, webmaster:   root - direciona do usuario webmaster para root ,  admin:  paulo - redireciona de admin para user paulo
#newaliases - comando para atualizar o arquivo aliases apos alteracoes. # vi /home/paulo/.forward - dentro de .forward tem os nomes dos usuarios que vao receber os emails direcionados a mim
#mailq - mostra a fila de emails que estao esperando para ser enviados , saida (-ID da fila-  --tamanho-- ---Arrival Time-- -remetente/destinatario-----) , # sendmail -bp - mesmo que mailq, # sendmail -q - tenta renviar os emails da fila , # postqueue -f - força tbm o reenvio dos emails da fila ,

108.4 ######IMPRESSORAS_CUPS_VIA_WEB################
lsusb - para listar dispositivos usbs e um deles é impressora , /usr/sbin/cupsd - servico daemon que fica rodando - Adicionar impressora pelo cups -  Logar no cups via web é 127.0.0.1:631 ,  add printer , colocar nome , descricao , compartilhar na rede, selecionar driver, opcoes de impressora, config de cor, tamanho de folha etc. e finalizou.
## vi /etc/cups/cupsd.conf - arquivo de configuracoes gerais, config de compartilhamento, porta de escuta , vi /etc/cups/printers - onde aparecem as impressoras configuradas pela interface web do cups. cd /etc/cups/ppd - onde tem os drivers
#lpinfo - lista dispositivos de impressao e drivers de impressao , #lpinfo - v - mostra dispositvos encontrados, impressoras configuradas, #lpinfo -m - mostra os drivers das impressoras (foomatic = é normalmente a fonte dos drivers q aparece na saida do comando)
###IMPRIMIR######
#lpr - #lpr /etc/passwd -P Impressora2 - imprime o arquivo passwd na impressora2 , #grep paulo /etc/passwd | lpr - imprime o passwd pela saida do grep,  #lpq - mostra fila de impressao , #lpq -l - mostra fila com mais detalhes. #cd /var/spool/cups - local onde ficam os emails enviados, que estao esperando para enviar,
#lprm -  Limpa todas impressoes do meu usuario , lprm -P Impressora2 , #lprm - - remove tudo de toda as impr do user q estou, # cd /var/log/cups/ - arquivos de logs das impressoes armazenados,
/var/log/cups# tail -f access_log - log das impressoes , # vi /etc/cups/cupsd.conf - arquivo de configuracao geral
#lpstat - a - informa o status das impressoras configuradas, #lpstat -t mostra mais informacoes (device, status,) , #lpq - mostra as filas de impressao - lpq -P Impressora1 - mostra fila da impressora1
Adicionar impressora manualmente, primeiro procurar pelo driver da impressora - #lpinfo -m | grep Nome_da_impressora
#lpadmin -P Nome_Impressora -E -v "Dispositivo_que_pode_ser_visto_no_comando_lpinfo -v" -m driver_encontrado_da_impressora - esse comando instala impressora por comando, -P colocar nome na impr, -E é obrigatorio para add a impressora, -v colocar o dispositivo encontrado pelo sistema,  -m é para listar o driver da impr ,
#lpadmin -x Nome_Impressora - exclui a impr. #lpoptions - ver informacoes e alterar dados de impressoras configuradas , lpoptions -p nome_impressora - mostra informacao da impressora escolhida, lpoptions -d nome_impressora - seleciona impressora como default , #cat /etc/cups/lpoptions - mostra qual impr é a default .


109.1############FUNDAMENTOS_TCP_IP#############
IPV6 - tem 128 bits divididos em 8 grupos de 16 bits , separados por dois pontos : , exemp : 2001:0db8:85a3:0000:0000:0000:0000:7344 , podemos abreviar os 0000:0000: e deixar sómente um 0:0 . e se tem sequencias de 0:0:0:0 ficara somente os ::, caso so tenha um :0000: ficará somene o :0: mas nao podera ficar ::
Enderecos unicast: identifica uma unica interface, Multicast: identifica um conjunto de interfaces e pacote e enviado para cada interface. Anycast: identifica um conjunto de interfaces e pacote e enviado para uma unica interface, normalmente a mais proxima
TCP - orientado a conexoes , garante entrega dos pacotes em ordem correta, retransmite em caso de erros, os servicos sao FTP, SMTP, HTTP
UDP - Nao é orientado a conexoes, sem garantia de entrega, melhor performance na transmissao d dados, alguns servicoes, DNS, NFS, NTP.
ICMP - controle de volume de trafego, detecção de destinos nao atingiveis, redireciona rota, verifica status de hosts remotos, PING, traceroute etc.
portas - as primeiras 1024 sao reservadas a servicos conhecidos, portas possuem 16 bits, q da no maximo 65535 . As demais portas apos 1024 sao de servicos especificos ou para a porta de socket(cliente)
quando tem ipv6 com porta fica [2001:0db8:85a3:0000:0000:0000:0000:7344]:25 - porta 25 SMTP , Principais portas: SMTP 25 e SMTPS 465, dhcp 67 e 68, https 443, pop 110 e pop3s 995, ntp 123, netbios 139,
imaps 143 e imaps 993, snmp 161 e 162, LDAP 386 e LDAPS 636.
Respostas exer> 1 - 192.168.100.0 , 2 - 192.168.0.255 , 3-classe C , 4-254 , 5- /24 6- /25   - 2) - hosts b e c , hosts d e E , hosts g e h

225.109.2 ###################CONFIG.REDES._/ETC/HOSTNAME_HOSTS,NETWORKS,NSSWITCH######################
vi /etc/services - mostra as portas e todos os serviços , # vi /etc/hostname - tem o nome da maquina,  #vi /etc/hosts/ - contem '127.0.0.1       localhost' , # vi /etc/networks - local para criar rotas
#vi /etc/nsswitch.conf - onde que o sistema deve procurar as informacoes de rede e de autenticacao, onde autentica hosts, usuarios, informacoes de login centalizadas.
Dentro do arquivo /etc/nsswitch.conf tem a linha   'hosts:   files mdns4_minimal [NOTFOUND=return] dns' - onde quando procura pelos hosts, primeiro pelo files(arquivos locais) depois dns(servidores dns)
#ifconfig - mostra informacoes das interfaces de rede , #ifconfig -a - mostra tudo q tem ativo nas interfaces , #ifconfig enp0s3 - mostra somente dessa interface , ifconfig enp0s3 10.0.0.222 up - sobe interface enp0s3 com o ip informado.
#ifconfig enp0s3 down - derruba a interface , ifconfig enp0s8 192.168.10.222 netmask 255.255.255.0 up - configurando a outra interface em outra range de IP.
#route -n - mostra informacoes de rota sem resolver nomes. #route add default gw 10.9.1.1 dev enp0s3 - adicionando rota default , #route add -net 172.16.10.0/24 gw 192.168.10.50 - informa que tudo q tiver destino para 172.16.10.0 passará por 192.168.10.50 ,
# ip link show - mostra informacoes do link da interface se ta UP ou DOWN #ip address show - mostra interfaces com os ips configurados, # ip route show - mostra as rotas (parecido com o comando route -n)
#ip addr add 192.168.10.223/24 dev enp0s8 - adiciona ip na interface , # ip neigh show - ips que estao na vizinhança conectados, conversando. #dhclient - pegar ip do servidor DHCP. -- as configuracoes setadas com esses comando sao temporarias, se reinciar maquina , some tudo.
Configurando interface manualmente : auto lo, enp0s3, enp0s8 - subir interface automaticamente no boot, iface lo inet loopback - identificacao da interface loopback, iface enp0s3 inet static , address 10.0.0.222, netmask 255.255.255.0 gateway 10.0.0.1
Configuracao no Fedora- vi network-scripts/ifcfg-enp0s3 - DEVICE=enp0s3 , HWADDR=mac-address, BOOTPROTO=static , IPADDR=10.0.0.144, NETMASK=255.255.255.0, ONBOOT=yes , #ifup enp0s3 - subindo interface . vi network-scripts/network - NETWORKING=yes , GATEWAY=10.0.0.1  - no fedora é diferente o local pra config do gw.
109.3_#######_PING_TRACEROUTE_HOST_NSLOOKUP_DIG#######################
#ping6 - pinga para ips ipv6 , host ipv6.google.com - retorna o ipv6do google, traceroute www.google.com - da comandos icmps em todos os roteadores do caminho. #tracepath www.google.com - mesmo que o traceroute, #traceroute6 - para ipv6
#host - comando que consulta o servidor dns e retorna o ip ,  # host 200.17.202.197 - faz o dns reverso, consulta o ip para achar o nome  #/etc/resolv.conf - onde se encontram meus servidores dns que fazem consultas solicitadas pelo comando #host .
#nslookup debian.org - mostra o servidor dns que respondeu minha solicitacao, e da as respostas de quem é responsavel pelo www.debian.org, # nslookup -query=MX debian.org - verifica quem é o servidor de e-mail(MX) que é responde pelo debian.org , # nslookup -query=any debian.org - retornar muitaa informacao sobre o debian.org
# nslookup debian.org 8.8.4.4 - forçando o uso da consulta pelo 8.8.4.4 , # dig ubuntu.com - consulta o dns tbm, mostra quando foi consultado, o tempo da requisicao, qual servidor respondeu etc. # dig ubuntu.com MX - retorna com informacoes dos servidores MX. # dig ubuntu.com mx +noall +answer - retorna com menos informacoes,
# dig -x 91.189.89.110 +short - saida 'www-ubuntu-com.nuno.canonical.com.' , com o -x mostra o dns reverso . Se eu remover os dados do resolv.conf e dar o comando nslookup lpi.org 8.8.8.8 - ele resolve mesmo assim pq eu forcei a busca pelo 8.8.8.8
234.109.3 ###############NETSTAT_TELNET_NETCAT_TCPDUMP################
## netstat -nalpt - programa mostra portas que estao abertas ,em escuta etc, -n - nao resolve nomes , -a - todas portas , -l - em lista , -p - processos que estao abrindo as portas, -t - mostra só conexoes tcp #netstat -rn - mostra rotas com -r, #telnet 127.0.0.1 25 - para testar se porta 25 está escutando , telnet testa portas em um host especifico.
#netcat - testar conexão via portas em um host(mesmo que telnet) #netcat 127.0.0.1 25,  # nc 127.0.0.1 25 - mesmo que o netcat , #nc -l -p 12345 - deixando a porta 12345 aberta em listen , #netcat -l -p 12345 - deixa a porta 12345 aberta em listen, para outros hosts se conectar nela e testar.
#tcpdump - monitorar uma maquina especifica, ou porta , ou protocolo especifico,
#######CLIENTE_DNS_/ETC/RESOLV.CONF_NSSWITCH.CONF_HOSTS############$
#getent hosts www.uol.com.br - consultar arquivo hosts , #nsswitch.conf - informa onde deve se procurar as informacoes, se é nos arquivos(hosts) ou no dns a ordem padrao é primeiro nos arquivos(hosts) , se nao achar procura no dns.

110.1####SU_SUDO############
# su - mudar de um usuario a outro , #su - para logar com o root, #su paulo - loga com o usuario exatamente onde o outro user estava, nao carregando um login novo, com as variaveis que tem no .profile etc e ou /etc/profile. #su - paulo - loga com o paulo inicando um novo login , carregando as variaveis dos arquivos .profile e /etc/profile
paulo#su -c "fdisk -l" - executa o comando como root e retorna como usuario normal depois de executar o comando , # sudo su - da a permissao para o usuario fazer as tarefas, somente se tiver listado no sudoers. #vi /etc/sudoers - onde inserimos as permissoes do q cada usuario pode fazer, dentro do arquivo sudoers é configurado com grupos
/etc/sudoers - %sudo   ALL=(ALL:ALL) ALL - essa linha informa que grupo(%sudo) sudo em qualquer terminal(ALL), e qualquer usuario do grupo sudo pode executar qualquer programa , 'paulo   ALL=/sbin/poweroff' - nessa linha informa que o user paulo pode em qualquer terminal executar o poweroff. POdemos criar um ALIAS_de_comando onde ele recebe alguns comandos e podemos inserir a permissao
para um usuario de executar de qualquer terminal executar o que tiver nesse alias, exemplo: Cmnd Alias TESTE = /sbin/fdisk, /sbin/parted - criando o alias de comando, 'user1 ALL=TESTE' - o user1 de qualquer terminar pode executar o que tem no alias de comando. agora se der o comando sudo user1 fdisk ele aceita. #visudo - entra direto no /etc/sudoers para edicao
# who - mostra usuarios logados, separando por termiais , a saida fica 'paulo   tty7   2019-08-05 11:13 (:0)  ,  paulo   pts/1   2019-08-13 09:47 (10.9.1.114), # who -aH - mostra mais informacoes, -H adiciona cabecalho(header). # w - mostra quem está logado e o que ta fazendo, uso da CPU, #last - historico de login , com informacoes da data de quando logou, quanto tempo ficou logado, quem logou .
#lastb - usuarios q tentaram logar mas nao conseguiram . As informacoes que o comando #last usa sao armazenadas em /var/log/wtmp e wtmp.1 que é o mais antigo, para ler o que tem nos arquivos wtmp é #last -f wtmp.1 .
as informacoes que o comando #lastb usa  sao armazenadas em /var/log/btmp e btmp.1 que é o mais antigo, para ler o que tem nos arquivos btmp é #last -f btmp.1 - le os arquivos antigos do lastb.
#lastlog - pega todos usuarios do sistema e mostra quando o usuario fez login pela ultima vez , # lastlog -u  paulo - mostra o ultimo login do user paulo , #last paulo - mostra os ultimos logins do user paulo
#passwd -S aluno1 - mostra o status do aluno1 - s tem um P quer dizer q tem passwod, se tem um NP quer dizer que nao tem password, se tem L quer dizer que ta locked. #passwd -x 30 aluno1 - altera o maximo de dias para senha expirar , o mesmo que '#chage -M  aluno1'. #passwd -n2 aluno1 - defino o minimo de dias q o user pode trocar a senha (nesse caso é de 2 em 2 dias)
# passwd -w5 aluno1 - altera o tempo em que o usuario começa a receber alertas de expiracao da senha (5 dias). #passwd -i10 aluno1 - tempo que o user tem para alterar a senha apos expiracao da senha, caos contrario a conta é desativada. #passwd -l aluno1 - bloquear(lock) usuario , #passwd -u aluno1 - desbloqueia (unlock)
#usermod -L aluno2 - lock no aluno2 #usermod -U aluno2 - unlock no aluno2, #chage -d aluno1 - altera a data de expiracao da senha -E - data de expiracao da conta , -I tempo que tem para trocar senha antes de expirar conta , -m - tempo minimo q pode trocar senha -M -tempo maximo para trocar senha , -W - dias q começa a mandar warnings para o user ate data de expiracao de senha.



250.110.1#####FIND,ULIMIT,LIMITS.CONF################
#ulimit - criar limites de uso dos recursos da maquina, prtege contra uso indevido , #ulimit -a - mostra os numeros dos limites com indice para escolher as informacoes , o ulimit atinge somente a sessao aberta , se abrir outras sessoes, nao vai impactar, a nao ser que configure no /etc/profile,
numeros de arquivos abertos simultaneamente, memoria virtual, tamanho de arquivos, etc, para ver qual valor queremos limitar , temos que verificar pelo #ulimit -a .
Tipos de definicoes: Valor Hard(H) e valor Soft(S) , exemplo: #ulimit -Hu1000 - define o valor maximo de u(ver na lista com #ulimit -a) , para definir o valor soft #ulimit -Su 400 - define o menor valor , se tentar colocar o valor soft como 100000 nao vai permitir pq o hard é 1000
#/etc/security/limits.conf - arquivo para configurar o ulimit de forma definitiva, as linhas ficam exemplo:  'aluno1    soft  nofile    1000' essa linha define o minimo de arquivos abertos, e essa 'aluno1   hard    nofile    2000' - define o maximo de arquivos abertos.
250.110.1######FIND_ULIMIT_LIMIT.CONF#################
Lembrando que o SUID é o bit que faz que qualquer script seja rodado por qualquer usuário mesmo a permissão de execução esteja somente com o root. Isso é perigoso pro sistema, e para encontrar quais arquvios tem esse SUID é com o comando #find
Encontrar arquivos com o bit SUID - #find / -perm -4000 -ls - encontra so os arquivo com permissao SUID , find / -perm -2000 -ls , #find / \( -perm -4000 -o -perm -2000 \) -ls  - para verificar os SUID e GUID .
#find / -path /proc -prune -o -nouser


251.110.1########NETSTAT_NMAP_LSOF_FUSER###########
#netstat -anpt - -a - all , -n - nao resolve nomes , -p - mostra pid e programas, -t- so mostra tcp, -u - mostra udp - o netstat mostra processos abertos em listen e established no status,
#lsof - lista arquivos abertos , # lsof -u paulo - mostra tudo que ta aberto pelo user paulo, # lsof -i:mysql - mostra informacoes sobre portas abertas , # lsof -i :3306 - procura por porta especifica.
#nmap - escaneamento de servicos e portas abertas, # nmap localhost - procura na minha maquina os servicos e portas abertas, # nmap 192.168.0.1 - procurando no meu modem net, # nmap 192.168.0.1/24 - scaneia todas maquina da rede /24, # nmap -O localhost - mostra detalhes do sistema operacional,
# nmap -sT localhost - somente portas tcp , # nmap -sU localhost - somente portas UDP,
# fuser 25/tcp - mostra o processo q ta usando a porta que escolhi. # fuser -u 25/tcp - o -u informa o dono do processo, # fuser -uv 25/tcp - mostra mais detalhes do nome do processo, PID e comando rodando,

253.110.2#############SHADOW,NOLOGIN,DESABILITAR_SERVICOS###############
#pwconv - converte a senha do /etc/passwd para /etc/shadow - Caso não tivesse o arquivo shadow das senhas, e somente tivesse no /passwd, seria perigoso, o comando pwconv , converte para o shadow a senha.
/etc/passwd - no final das linhas se tem bin/bash consegue logar no bash, se tem usr/bin/nologin ou /bin/false nao conseguem logar, Se eu crirar o arquivo vi /etc/nologin - so o user root vai conseguir logar,
#systemctl disable cups-browsed - desativa serviços inuteis, e após reiniciar ele permanece desativado. Outra forma é entrar nos arquivos rc0.d ate rc6.d e desfazer os links simbolicos , ou até mesmo colocar um K no lugar do S em cada serviço. Fazendo ele rodar com Kill ao inves de Start.
Também posso tirar a permissão de execução do scritp que some o serviço usando o chmod -x Script.sh , quando o init tentar subir , nao vai conseguir por falta de permissao.

254.110.2####INETD_TCP_WRAPPER##############
# apt-get install ftpd telnetd inetutils-inetd - instalar o ftp, telnet e inetd, TCP Wrapper - coloca um processo dentro do outro, dentro do arquivo #/etc/inetd.conf tem a linha TCP Wrapper ' /etc/sbin/tcpd ' que protege o processo do telnet(in.telnetd) e do FTP(in.ftpd)
/etc/sbin/tcpd - chama o processo do telnet e tbm o ftp ; Para ver isso , com o comando # lsof -i:21 - mostra o ftp rodando mas quem ta provendo o servico é o inetutils e pelo comando , # netstat -naltp | grep inetutils - mostra o telnet e ftp rodando pelo processo inetutils
O inetd valida primeiro se a conexão é valida e depois passa para o telnet e FTP. Se abrir uma conexão ftp por exemplo com #ftp localhost , o servico fica em established mas já como ftp, ou seja antes de estabelecer a conexão , quem fica ouvindo o ftp e telnet é o inetutils, e quem conecta é o ftp e telnet.
TCP Wrapper - protege o servico , implementa elementos de segurança que estão nos arquivos /et/hosts.allow e /etc/hosts.deny , dizendo os host,ips, redes, maquinas que podem usar os servicos protegidos pelo tcp Wrappers,
# vi /etc/hosts.allow - eu inseri a linha 'ALL: 10.0.0.* EXCEPT 10.0.0.1' que informa que todos de dentro da rede 10.0.0.* pode usar todos os servicos (ALL:) exceto o IP 10.0.0.1 ,  e tbm 'ALL: 127.0.0.1:' que significa  que o localhost pode usar qualquer serviço(ALL:) tbm.
# vi /etc/hosts.deny - normalmente se tem tudo bloqueado nesse arquivo pq primeiro o hosts.allow é lido , conforme a linha 'ALL: ALL' todos nao acessam nada - isso pq no hosts.allow estará o que deve ser liberado e no hosts.deny bloquear todo resto.

255.110.2####_XINETD_###############
## apt-get install xinetd - para instalar o xinetd , isso desabilita o inetd, e ativa o xinetd , o xinetd usa a biblioteca do Wrapper e por isso vai usar tbm o /etc/sbin/tcpd
vi /etc/xinetd.conf - que contem configuracoes gerais e genericas e vi /etc/xinetd.d - nesse diretorio tem arquivos de configuracao onde podemos acessar as configs dos servicos telnet , ftp (as mesmas do inetd no hosts.allow e deny mas em outro formato) , podemos desabilitar os servicos e filtrar quem eu quero liberar ou bloquear
nas linhas: 'access_only =' quem eu quero liberar e 'no_access = 'quem eu quero bloquear, o xinetd usa tbm os arquivo /etc/hosts.allow e /etc/hosts.deny ,
primeiro ele verifica as regras desses arquivos e depois verifica no /etc/xinet.d/servico, ou seja, se ele encotrar uma regra de negacao no hosts.deny ele nem verifica o arquivo dentro de xinetd.d , se encontrar regra liberando no hosts.allow, ele libera pelo hosts.allow e depois verifica as regras do arquivo dentro de /etc/xinetd.d , Lembrar que se mudar algo no xinetd.d deve reiniciar o servico.
Se olhar com o comando: # netstat -naltp | grep 23 , a saida mostra o xinetd ouvindo a porta 23 e se estabelecer conexão telnet, o telnet assume a porta 23

258.110.#####_CONCEITOS_DE_CRIPTOGRAFIA_SSH##############
Objetivos da criptografia - Autenticidade, confidencialidade, integridade, irretratabilidade, SSH= protocolo de criptografica , é canal seguro entre 2 hosts, um cliente e servidor, utiliza chaves assimetricas publicas e privadas, o openssh é o mais comum. Sempre terá chave publica e privada, a chave publica é compartilhada com o remetente que usará para criptografar a mensagem antes de envia-la
Chave privada= é usada pelo destinatário para descriptografar os dados recebidos.
Nas maquinas clientes tem o openssh-client rodando , e também possui o arquivo /etc/ssh/ssh_config , que é o arquivo de configuracoes gerais do cliente , o  /usr/sbin/sshd é o daemon que fica rodando sempre . Para ter o servidor deve instalar apt-get install openssh-server, após isso vai aparecer os arquivos sshd_config e as chaves .pub e privadas ,
# ssh aluno1@nome_da_maquina - quando eu acesso o server, primeiro eles trocam informacoes de algoritmo e entram em acordo, em seguida o servidor envia a chave publica para o cliente, com essa chave publica o cliente pode enviar a mensagem criptografada, #ssh -l aluno1 ip_maquina - com essa sintaxe tbm se consegue acessar.
Se eu nao colocar o usuario para tentar conectar via ssh, ele tenta acessar com o usuario que estou logado no cliente. Dentro dos /home/ tem o arquivo .ssh/known_hosts - local onde ficam as chaves publicas, sempre que fizer conexao no mesmo servidor ele ja vai ver nesse arquivo q ja tem a chave publica dele, caso nao tenha, ele adiciona nesse 'known_hosts' , caso tenha mudado a chave publica, ao tentar
conectar novamrnte, vai dar erro, por isso temos que limpar o known_hosts se der erro, e tentamos conectar novamente.

259.110.3##############_CONEXAO_SSH_CHAVE_PUBLICA_#################
#ssh-keygen -t rsa -b 1024 - criando chave criptografada no cliente -t tipo de chave rsa e -b - o tamanho em bytes da chave. Agora aparece os arquivos id_rsa e id_rsa.pub que são as chaves publica e privada criadas , copiamos a chave publica e colamos no servidor no arquivo /.ssh/authorized_keys, esse arquivo tem que ter chmod 600 , leitura e escrita somente para o usuario dono,
Usando passphrase - #ssh-keygen -t rsa -b 1024 - gero novamente as chaves, em seguida digito uma passphrase(antes nao foi feito) , novamente tenho que colar la no servidor em /.ssh/authorized_keys a chave publica do cliente, agora no cliente digitar #ssh-agent - esse programa monitora as senhas das minhas chaves , e entao para o cliente conectar digita #ssh-add , ele vai pedir a chave passphrase, depois
ele conecta diretamente sem pedir a senha do servidor. Depois sempre que quiser conectar no servidor, só dar o comando #ssh user@servidor e conecta direto.

261.110.3#######_TUNEL_SSH_SCP_#####################
Para criar o tunel 'cliente:2323<-----> 23:servidor' usamos o comando #ssh -N -f -L porta_local:ip_remoto:porta_do_servico_da_outra_maquina user@ip_remoto - exemplo: ssh -N -f -L 2323:10.0.0.112:23 paulo@10.0.0.112  - a porta 2323 é da minha maquina cliente local e a maquina remota tem o IP 10.0.0.112 e a porta 23 , se verificar com o comando #netstat -naltp | grep 2323 - mostra a porta 2323 escutando(LISTEN)
então mesmo que não tenha o serviço telnet rodando na minha maquina cliente, se eu tentar conectar usando #telnet localhost 2323 , vai conectar com o a maquina remota atrávez desse acesso 2323 , ou seja essa conexão é de telnet mas dentro de um TUNEL SSH.
Conexão remota no servidorX por ssh - #ssh -X paulo@10.0.0.112 "gnome-calculator" - esse comando entra no servidor e abre a calculadora na minha maquina cliente, e o servico q fica aberto é ssh pelo comando #ps- aux | grep calculator  , no servidor vai aparecer com ps -axu |grep calculator o servico da calculadora aberto mas nao aparece o programa aberto.
Outro modo de entrar com o servidorX #ssh -X paulo@10.0.0.112 - entra na maquina e depois da o comando 'firefox' - vai abrir o brower no cliente e nao no servidor remoto.
#ssh paulo@10.0.0.112 "ls -l /tmp; free" - entra na maquina remota e roda os comandos , depois volta pra minha maquina. #scp nohup.out paulo@10.0.0.112:~/tmp - envia o arquivo nohup.out para o equipamento remoto no diretorio /tmp , #scp paulo@10.0.0.112:~/arquivoteste.tgz . - busca o arquivoteste.tgz do servidor remoto e larga no diretorio q estou(.)

262.110.3_############_GPG_###################
Criptografar arquivos, emails, mensagnens ,assinar arquivos, assinar emails - GNU PRIVACY GUARD , dpkg -l | grep gnupg - gnupg é o pacote q instala o gpg,
Primeiro tem que gerar chaves com o comando # gpg --gen-key , vai pedir informacoes e nome completo, email etc,  apos gerar a chave , para listar a chave é #gpg --list-keys , O arquivo #cd .gnupg/  (lista os arquivos que tem as chaves , o mesmo que .ssh). O contrario do ssh é que quem envia a chave publica é o mesmo que quer enviar a mensagem,
o comando que exporta a chave publica é #gpg --export "Paulo Fernando Britz" > chave-paulo.pub (quando listado com #gpg --list-keys aparece o nome que vc digitou ao criar a chave coloquei meu nome completo)
#gpg --output nova-chave.pub --export "Paulo Fernando Britz" - outro modo de criar a chave publica
#gpg --output nova-chave2.pub --armor --export "Paulo Fernando Britz" - com o --armor ele mostra o arquivo em texto , podendo copiar e enviar la na outra maquina.
Exportando chave para um servidor de chaves # gpg --keyserver keys.gnupg.net --send-keys ID_chave_publica , #gpg --keyserver keys.gnupg.net --gen-revoke ID_chave_publica - esse comando cancela a validade da chave .
Agora na maquina que recebe as chaves enviadas - crio um arquivo paulo.pub e colo as informacoes da chave se for o caso do tipo texto. depois rodar o comando #gpg --import paulo.pub - agora ja aparece os id_chave_publica com os dados criados do outro PC.
Importando de um servidor de chaves - gpg --keyserver key.gnupg.net --recv-keys ID_chave_publica (esse id_chave_publica seria informado pelo outro colega para vc conseguir baixar do servidor corretamente)

263.110.3#############CRIPTOGRAFAR_DESCRIPTOGRAFAR_ASSINAR################
Criando uma mensagem criptografada para outra maquina após a troca das chaves_publicas - gpg --recipient "Paulo Fernando Britz" --output arquivo-criado.gpg --encrypt arquivo-para-criptografar.txt - isso cria o arquivo em binario que nao da pra ler. somente se desse o comando --armor
buscando a mensagem criptografada para minha maquina - scp paulo@10.0.0.113:~/arquivo-criado.gpg  - agora o arquivo-criado.gpg está na minha maquina posso descriptografar usando minha chave privada, #gpg --output arquivo-descriptografado.txt --decrypt arquivo-criado.gpg
Assinando um arquivo - A mensagem é assinada com a chave privada , o dono da msg assina com a chave privada e quem recebe usa chave publica desse usuario para descriptografar , para assinar a mensagem é #gpg --sign primeiroScript.sh.copia - ele cria um arquivo assinado 'primeiroScript.sh.copia .gpg'
Mandar para destino o arquivo criptografado - scp primeiroScript.sh.copia.gpg paulo@10.0.0.112:~/ - apos enviar o arquivo, entramos no destino e usamos #gpg --verify primeiroScript.sh.copia.gpg , ou se usar #gpg --decrypt primeiroScript.sh.copia.gpg - mostra o conteudo do arquivo e a assinatura , dessa forma o arquivo nao fica criptografado somente assinado,
se for enviado para outro usuario q nao tem a chave publica do usuario que enviou o arquivo, ele consegue ler o conteudo mas nao consegue ver a assinatura.


Help Management Linux-1

######CERTIFY LPIC-1 E COMPTIA LINUX####

103.1
em variaveis de ambientes

#NOME_VARIAVEL=valor
#echo $NOME_VARIAVEL
valor

#bash
echo $NOME_VARIAVEL
(nao aparece nada pq após dar o comando 'bash' a variavel não é reconhecida)
para reconhecer a variavel em outros bash, tem que dar o comando 'export NOME_VARIAVEL'
export LINUX=lubuntu (criando a variavel ja exportada)
#set | less (comando set mostra todas as variaveis iniciadas automaticamente pelo sistema)
#env | less (comando env mostra as variaveis globais que foram exportadas) (less recebe a saida do comando env e mostra de forma paginada pra nao ficar uma tripa na tela de informacao)
env TESTE=Windows ./Exercicios/Script_Variavel.sh (o env transforma a variavel TESTE em Windows somente nessa execucao )
 unset TESTE (remove a variavel)
Variaveis diferentes que tem no set:
 HISTCONTROL=ignoredups:ignorespace
HISTFILE=/root/.bash_history (Arquivo do histórico de comandos)
HISTFILESIZE=2000 (Quantidade de linhas/comandos armazenados no arquivo de histórico)
HISTSIZE=1000
 echo $$ (mostra o PID do shell que ta rodando)
 echo $? (informa o resultado do ultimo processo executado, no caso 0 é sucesso)
0
####COMANDOS EM SEQUENCIA##########
 cd home/paulo/ ; cd Exercicios/ ; TESTE=Linux ; export TESTE;  ./Script_Variavel.sh (entra no home do paulo ; entra no Exercicios ; faz variavel TESTE receber Linux, exporta variavel TESTE, roda scritp variavel)
cd home/paulo/ && cd Exercicios/ && TESTE=Linux && export TESTE &&  ./Script_Variavel.sh (com o && o comando seguinte so executa se nao der erro)
ls /tmp/ || echo Linux (com o || o comando seguinte so funciona se o primeiro der erro)
o comando !! repete o ultimo comando executado
comando 'history' mostra os comandos executados e seus numeros ao lado, com o comando !18 por exemplo ele executa o comando que contem o numero 18 da lista mostrada
NOME_VARIAVEL=valor
#history -c (apaga o arquivo history) todo o usuário tem um .bash_history. esse arquivo é onde ficam os comandos usados salvos, somente o user root tem acesso a todos os .bash_history de todos usuarios. .bash_history é atualizando sempre que fecho o terminal.
apertando ctrl+r no terminal, vc digita o comando e ele busca o comando no histoy.

####USO_DO_BUSCADORES##########
- Quando o comando é interno ele nao tem manual exemplo: comando type é externo por isso nao tem manual.
~$ man -k "system information" -k e palavra que estamos buscando, serve para buscar em algum manual comandos onde tem a palavra buscada. exemplo $ man -k "update system"  retona o uname que mostra informacoes do sistema "system information no caso"
# whatis tar (whatis busca por informacao do comando , nesse exemplo foi buscado o tar)
tar (1)              - The GNU version of the tar archiving utility
#whatis ifconfig (saida ficou 'ifconfig (8)         - configura uma interface de rede')
comando apropos - faz a busca baseado na palavra tbm.
#uname mostra informacoes de sistema, -a, -n -m, -p, --help, -r (varias opcoes de informacoes do sistema)
#alias (comando alias mostra informacoes de quantos alias tem no sistema. são atalhos para os comandos )

###############103.2###################
#######FILTROS_A_TEXTOS_E_ARQUIVOS####################CAT_HEAD_TAIL_SORT_LESS
#cat -n - alunos.txt -n mostra linhas numeradas, -b linhas em branco nao numera, -s quando tem mais de uma linha em branco, coloca so uma linha em branco, -A mostra caracteres especiais (TAB, ENTER, ESPACO)
#tac - mostra o arquivo ao contrario
#head -  mostra as 10 primeiras linhas, -2 mostra as 2 primeiras linhas, -c50 mostra os primeiros 50 bites
#tail - mostra as ultimas linhas com os mesmos parametros do head, com o -f o arquivio abre e ainda fica esperando vc digitar mais linhas no arquivo.
#$ echo Paulo >> alunos.txt (redireciona a informacao Paulo para dentro do arquivo alunos.txt)
#tail -n5 -f alunos.txt -n5 mostra as ultimas 5 linhas   -f fica parado aguardando alguma coisa ser digitada ou preenchida , por isso é bom usar em logs pq fica parado esperando os proximos logs ocorrer. exemplo: tail -f /var/log/syslog
#less arquivo.txt mostra o arquivo.txt paginado, podemos navegar dentro do arquivo. se digitar /brazilian ele procura por brazilian no arquivo. ctrl + g ele mostra o status do arquivo, quantdade de bytes, quandos % do arquivo eu to lendo
# cat arquivo.txt | less o less controla a saida do cat, deixando a saida paginada pq o cat nao faz paginamento
# wc alunos.txt Mostra a quantidade de  linhas, palavras e caracteres (saida fica '15  26 197 alunos.txt') wc -c mostra quantos caracteres tm no arquivo, wc -w mostra qtas palavras tem , e wc -l quantas linhas. Se deremos wc * ele conta todos os arquivos que estao dentro do diretorio.
# nl alunos.txt é bem parecido com o cat -b não numera as linhas em branco nl= numero de linhas
#sort- sort alunos.txt ordena em ordem alfabetica os dados do arquivo. Se colocar -r ele inverte a ordem, -k(Nº campo) ordena pelo segundo campo sort -k2 ordena pelo segundo campo sort
* No comando sort, o –t define o delimitador, o –k o campo referência para o ordenamento, e o –g ordena como números ao invés de como caracteres

######UNIQ, PASTE, EXPAND, UNEXPAND,OD, JOIN########
#uniq - alunos2.txt  o que tem de palavra repetida ele só deixa uma.  -c ele conta quantas vezes repete cada palavra, -d ele mostra somente as palavras que repetem. o sort normalmente é usado pq quando tem linhas separadas,
o uniq nao entende quando repetem as palavras por isso primeiro junta tudo com o comando sort e depois aplica o uniq exemplo (sort alunos2.txt | uniq -c)
#expand - converte o TAB por Espaco , exemplo  #expand alunos.txt | cat -A  ele troca os tabs do alunos.txt e mostra pelo cat -A que foi trocado mesmo
#unexpand - converte o Espaco por TAB mas deve ser usado com -a pq se nao ele nao verifica todos os locais do texto.
#od - o comando od mostra textos em formato octal ( #od -tx alunos.txt) tx mostra em exadecimal
#join - comando junta dois arquivos, se tivermos um arquivo de alunos e outro so de notas dos alunos, com o join juntamos os alunos e suas notas. Usando -j2 indicamos que o indice será o campo 2 dos arquivos. As linhas dos arquivos devem estar na mesma ordem.
#paste - imprime na saida as linhas dos arquivos, juntando os dois arquivos.
#slit - divide um arquivo, exemplo (slit -l20 arquivolongo.txt) , esse comando separa o arquivolongo.txt em varios arquivos com 20 linhas
#slit -l10 arquivolongo.txt novo_arquivo separa em varios arquivos de 10 linhas com o nome novo_arquivo em todos. podemos contar depois todos os arquivos usando o wc -l xa*
#split -b100 arquivolongo.txt novo_arquivo2 (nesse comando o split divide o arquivo em varios novo_arquivo2 de 100 bytes) podemos validar isso olhando pelo wc -c novo_arquivo2, usando -l , exemp. #split -30 arquivolongo.txt novo_teste ele divide o arquivo por arquivos de 30 linhas
tr - transforma um caracter em outro caracter qualquer exemplo: (# cat alunos.txt | tr a-z A-Z) transforma tudo de a ate z minusculo em Maiusculo. O comando tr so pode ser usado recebendo uma saida de outro comando; Nesse exemplo transforma ei minusculo em EI maisuculo (# cat alunos.txt | tr ei EI), tr tbm pode ser usado para deletar ,
#cat alunos.txt | tr -d A (deletar todos os A's), deletar linhas em branco (#cat alunos.txt | tr -d [:blank:])
fmt - diminuir o tamanho das linhas do arquivo. exemplo (fmt -w 50 arquivolongo.txt) nesse exemplo ele diminui para 50 caracteres cada linha
pr - preparar arquivos para impressao, (#pr arquivolongo.txt) Ele cria um cabeçalho no arquivo para imprimir junto. Exemplo para dividir por paginas de 30 linhas para imprimir (#pr -l30 arquivolongo.txt)
cut - recorta partes do texto. Cortar caracter 1,2,5  do arquivo alunos (#cut -c1,2,5 alunos.txt). Cortando do 1 ate o caractere 6 (#cut -c-6 alunos.txt). No exemplo (cut -d" " -f1 alunos.txt) foi informado pelo -d"" que o delimitador de campos é o espaço em branco, e -f1 o campo 1 sera cortado para mostrar no resultado.
sed - procurar um conteudo e substituir e deletar uma parte do arquivo. Exemplo alterar nomes Silva por Souza (# sed s/Silva/Souza/ alunos.txt) o s/ é substituir. Ele substitui a primeira ocorrencia da linha,
se tiver 2x o nome na mesma linha, so troca o primeiro, pra substituir tudo da linha usa-se (# sed s/Silva/Souza/g alunos.txt), o /g depois dos nomes. Apagar linha se tiver a palavra (sed /Claudia/d alunos.txt), nesse comando quando tiver Claudia na linha, ele apaga essa linha.

############103.3#################
#cd - - o traco volta pro diretorio anterior que eu estava
#cd ~ - o ~ vai para o home do usuario
#la -a - mostra os arquivos ocultos (arquivos que comecam com ponto)
#ls -lR - entra dentro do diretorio e mostra os arquivos ( R = recursivo),  #ls -l Aula1? - com ? ocorre o mesmo que com *.  #ls -l Aula?0 - esse comando mostra todos arquivos aula que acabam com 0
#ls -l Aula[123] - podemos escolher os caracteres que vao aparecer na consulta, (quero so o Aula1 o Aula2 e Aula3). Usamos tbm # ls -l Aula[1-6] com range. # ls -l Aula[1-6]? Nesse caso ele pega de os arquivos que tem  Aula1 ao Aula6 mas tbm tenha outro caracter depois.
# ls -l Aula[!123] - com ! ao contrario do de cima, são os que eu nao quero que apareça.  #ls -l A{ula,ULA}1  para encontrar arquivos Aula1 e AULA1
#file aluno.txt - verificar tipo de arquivo, informacoes do arquivo. Exemplo : # file Script_* (Script_Exemplo.sh:  Bourne-Again shell script, UTF-8 Unicode text executable)
#cp -v alunos* /tmp/ - copia todos os arquivos que comecem com alunos para /tmp, usando o -v mostra as inforacoes da copia. Usando -i pergunta se quer sobrescrever o arquivo. #cp -r arquivo.txt para copiar recursivamente. Usando -p a copia preserva caracteristicas do arquivo, nao altera data, hora, dono grupo.
cp Aula1 Curso1 copia o Aula1 alterando o nome do arquivo
#mv - muito parecido com cp mas nao tem -p , -R e -r
#touch - criar arquivo em branco, usado para atualizar a hora que foi alterado, -a altera data do ultmo acesso, -m hora da modificacao alterada, -t modidicar data e hora que eu quiser.
#rm - remover aquivos, -i me pergunta se quero remover, -v mostra os arquivos remvidos, -r recursivo serve para remover diretorios.
#rmdir - remover diretorios vazios #rmdir -p remove estrutura de diretorios em sequencia(desde que estejam vazios). #mkdir - criar diretorios, para criar estrutura de pastas sem elas existir ainda exemplo #mkdir -p /windows/xp/v32/user, rm --parents tbm cria uma estrutura de pastas
# find - find /etc/ -name interface, procurando pelo nome interface, #find /home/paulo/Exemplos/ -user paulo -name Aula8, nesse caso ele procura pelo arquivo Aula8 e o usuario tem que ser paulo. #find ./  -ctime -1 busca pelos arquivos que forma mudados desde o ultimo dia.
# find /home/paulo/Exercicios/ -size 2k buscar arquivos dentro de exercicios que tenham 2k (Exemplo: # find /var -name “*gz” -mtime -2 = encontrar no /var o nome dos arquivos que terminem com gz e foram mudados nos ultimos 2 dias(48hras))
######CRIAR_ARQUIVO_DE_BACKUP_COMPRIMIR_EXTRAIR_ARQUIVOS######
tar - Para criar um arquivo de backup #tar c criar arquivo backup, x extrair arquivo de bkp, -t listar arquivos q estao compactados, tar -f mostrar, . #tar cpvf backup.tar novo* (c =cria, p=  preserva, v= verbose,  f= colocar nome no file backup.tar, ele vai agrupar todos os arquivos que comecam com novo* )
#gizp - compactar arquivo , #gzip backup.tar #gunzip para descompacta #gzip -d também descomprime. gzip -k mantem o arquivo origif
#tar cvpf  backup.tar novo* cria o backup.tar agrupando os arquivos q comecam com novo*.  Para compactar com tar direto usando os compactadores: usando gzip fica #tar zcvpf. Compactar com bzip2 fica #tar jcvpf. Compactar com xz fica #tar Jcvpf. Exemplo: # tar zcvpf backup2.tgz novo*, cria uma arquivo agrupado backup2.tar comprimindo os arquivos em gzip que começam com novo*
## tar jcvpf backup2.tbz novo* com j ele compacta usando o bzip e é .tbz. ##tar Jcvpf backup2.tbz novo*, com J o programa usado pelo tar é o xz. Podemos usar o comando 'file' para verificar o tipo de compactacao do arquivo ex: #file backup.tar.bz2: bzip2 compressed data, block size = 900k
Para descompactar podemos fazer ex:tar zxvf backup2.tgz (z descompacta , x extrai os arquivos agrupados, v verbose, f indicar nome do arquivo)
cpio -  Outro agrupador que nem o tar é o cpio #cpio - find ./ -name "novo*" | cpio -o > backup.cpio   - Primeiro o find ./ -name "novo*" criar uma lista de arquivos e direcionar pra cpio -o que é onde cria o arquivo, direcionando para backup.cpio
para compactar junto com o agrupamento cpio fazemos: #find ./ -name "novo*" | cpio -o | gzip > backup.cpio.gz . Descompactar com cpio é: # cpio -i < backup.cpio  (o direcionamento é o contrário <) Descompactar com gzip no cpio : gunzip -c backup.cpio.gz | cpio -i
dd - Copia conteudo de uma particao inteira e cria uma imagem .img, .iso etc. exemplo: dd if=/dev/sr0 of=imagem.img (esse processo de copia é bite a bite)

103.4_##############REDIRECIONAMENTO_ENTRADA_SAIDA_PIPES#####################4 QUESTOES NA PROVA CERTIFICACAO
> - echo Linux > saidaecho - manda a saida do echo para dentro do arquivo saidaecho, sobrescrevendo os dados de saidaecho, se fosse com >> ele adiciona o dado ao saidaecho. o comando completo é 1> e 1>> , o numero 1 é omitido, ele é na verdade o codigo do stdout
Nesse caso a saida é para o stderror  #ls -l /tmp/arquivo-inexistente > saida_ls  (ls: não é possível acessar '/tmp/arquivo-inexistente': Arquivo ou diretório não encontrado). Redirecionar erros é conforme o exemplo :  #ls -l /tmp/arquivo-inexistente 2> saida_ls, tem que colocar 2> ou 2>>
Exemplo com duas saidas, uma para saida e outra para o erro: # ls -l {Aula,AULA}4 1>> saida_ls.out 2>> saida_ls_error.out (o Aula4 existe entao ele vai para o arquivo saida_ls.out, o arquivo AULA4 nao existe e da erro, por isso vai para o arquivo saida_ls_error.out.)
ls -l {Aula,AULA}4 > saida_ls.out 2>&1   - esse comando ele manda a saida de erro para a saida normal 2>&1  . Redirecionamento de entrada : # tr 'a-z' 'A-Z' < alunos.txt   se usa o < . Outra exemplo é o comando #mail -s  "Assunto" usuario < alunos.txt    (esse comando diz que o conteudo do alunos.txt vai ser uma entrada pro comando mail)
Outra tipo de redirecionador é <<  onde eu informo o fim, exemplo $ tr a-z A-Z << final, aqui ele faz a mudança dos caracteres a-z para A-Z ate que chegue na palavra fim do arquivo.
tee - o comando tee escreve em um arquivo e mostra o arquivo na tela pronto - #sort alunos2.txt | uniq | tee alunos_rascunho.out 
xargs - o xargs aplica outro comando na saida do comando q ja foi dado, normalmente usado com o find, exemplo : #find /home/ -name "AULA1*" | xargs ls -l  a saida do comando find (/home/paulo/Exemplos/AULA10) e o xargas aplica o ls -l no '-rw-rw-r-- 1 paulo paulo 0 Mai 18  2017/home/paulo/Exemplos/AULA10'
Um subcomando é `comando` - comando entre crazes - joga a saida do comando para o echo , por exemplo: echo "A versao do kernel é : " `uname -r` (A versao do kernel é :  4.4.0-31-generic)
Outro subcomando é colocar $(comando) exemplo:  # echo "o hostname é : " $(hostname)

#####EXERCICIO#########
# find /var/ -name "*config*" -type d | xargs ls -ld | tee diretorios-config.out    (o find busca dentro do /var/ arquivos que tenham *config* no nome do tipo diretorio (- type d)) | o xargs pega esse resultado do find e faz um ls -ld listando em forma de lista somente os diretorios sem ser recursivo | o tee criou o arquivo diretorios-config.out e jogou na tela.

###########MONITORAR_ENCERRAR_PROCESSOS#################
ps - mostra os processos rodando no meu terminal. #ps -u mostra mais detalhes desses processos do meu terminal, com informacoes de memoria, usuarios,hora de inicio do processo, quanto de cpu foi usado. #ps -x mostra outros processos q nao tem ligacao com meu terminal tbm, exe, processos da interface grafica, de funcionamento do sistema, #ps -a mostra
#ps u -C VBoxClient - Mostra processos de programas expecificos. #pstree - mostra os processos em formato de arvore. #~# pstree -p - mostra em arvora com o ID do processo. #pgrep bash - mostra o numero do ID do bash. #pgrep -u paulo - mostra apenas o ID do processo bash do user paulo

top - mostra os processos dinamicamente #top -b -d2 -n5 > process-linux.out esse exemplo roda o top -b para gerar relatório e mandar pra arquivos, e -d2 serve para atualizar de 2 em 2 segundos e so atualizará 5 vezes com o -n5.
kill - # kill -l -mostra a lista de comandos que podemos usar no com KILL, ~# ps -axu | grep firefox verificar qual o ID do processo do firefox, #pgrep firefox '15502', descobrindo o processo, # kill 15502 matando o processo do firefox, kill -s SIGKILL 4500 matando processo via nome do comando, kill  -9 4500  matando o processo via o codigo do comando.
# killall firefox - mata todos os processos que tennha nome firefox, #pkill firefox o mesmo que o killall, pkill -1 firefox -u paulo matando o firefox do user paulo, #kill -15 firefox solicita matar o processo (é o padrao usando somente o comando kill sem numeros), nao é tao direto como o -9, kill -2 interrompe o processo (ctrl -c), #kill -3 so fecha um processo 'quit'.
uptime - #uptime , quanto tempo o servidor ta ligado, quando tem de consumo medio de processos. horarios. #free - quantidade de memoria e swap. #free -m, #free -
screen - abrir e trabalhar em várias abas. Instalar o screen com apt-get, o comando #screen ele entra em uma tela do screen. ctrl+A + n troca tela (next) ctrl+A+c cria nova aba (create) , ctrl+a+d (detached)
# screen -ls Mostra quantos screens eu tenho ativos no momento, mas q nao estou usando. #sreen top - abre o screen rodando o top ao mesmo tempo .
There are screens on:
        17579.pts-0.lubuntu-server      (26/02/2019 17:55:31)   (Detached)
        16374.pts-0.lubuntu-server      (25/02/2019 15:10:49)   (Detached)

#####103.5###############MONITORAR_ENCERRAR_PROCESSOS_JOBS,BG,FG,NOHUP#################
firefox & iniciando firefox em background, #jobs -l mostra os programas rodando em background (em background eu consigo usar o terminal ainda, mas se eu rodo o comando em foregrond , não consigo rodar mais comando no terminal so se eu der ctrl+z para parar o programa)
para colocar o ultimo processo que rodei em foreground em background, digitar #fg. Para voltar em foreground digito #fg
#jobs
[1]   Executando              firefox &
[2]   Executando              galculator &
[3]+  Parado                  top | grep --color=auto galc*
[4]-  Executando              galculator &
#bg 3 - chamo o job de ID 3 para background que nesse caso é o top e libera o terminal novamente. #jobs -l mostra os processos rodando com o ID, e damos o comando #kill 'id' matamos o processo
nohup - #nohup firefox & - coloca o firefox em background e caso encerre o terminal(sessao), o programa continua rodando. nohup Evita que o programa q esta em backgroud envie saida para a tela.
Exercicio - top -b -d10 > resultado-top.out & (comando top -b para jogar informacoes para arquivos -d10 de 10 em 10 segundos e joga para o arquivo resultado-top.out em background &)
########103.6_MODIFICAR_PRIORIDADE DE_EXECUCAO_PROCESSOS#########
dentro do comando top o campo NI (nice) informa o quando o processo pode ser priorizado pelo usuario. o nice vai do -20 maior prioridade e ate +19 é a menor prioridade. Somente o root pode aumentar a prioridade do processo, e usuarios comuns podem diminuir a prioridade do processo.
#nice -n 15 firefox & Inicia o firefox em backgound com a prioridade 15 . #sudo su -  (loga com o usuario root). #nice -n -15 galculator &  . Com o usuario root conseguimos iniciar o galculator com prioridade mais alta de  -15. Omitindo o -n ficaria #nice --15 galculator &
renice-  depois que o processo ja esta em execucao para mudar a prioridade dele usamos renice, verificamos o PID do processo com #ls -la e depois #renice -n 8 'PID_do_processo' (vai mostrar old priority e new priority) (no renice nao tem -n entao ficara diferente, para colocar um valor negativo, exemplo #renice -7 20509 , coloca a prioridade para -7, e #renice 7 20509, colocar pra 7 a prioridade).
#renice -u paulo -n 5 , modifica todos os processos do usuario paulo para o valor 5, #renice -g LPI1 -n 5 , altera para 5 a prioridade dos processos do grupo LPI1.  O padrao de valor de prioridade do nice se nao for informado nada, é 10 . #nice firefox & , fica 10 a prioridade do firefox.
#############103.7_BUSCAS_EM_ARQUIVOS_TEXTO_COM_EXPRESSOES_REGULARES################ - regex = regular expression
grep - #grep -c Linux texto.txt, conta quantas ocorrencias do nome Linux tem no arquivo texto.txt, # grep -i Linux texto.txt , -i busca ignorando o case sensitive, # grep -r Linux t*, busca tudo que tem no diretorio atual q começa com t e tbm busca dentro dos diretorios q estao no diretorio atual (recursivo).
# grep -E Linux, -E expande as expressoes regulares, o mesmo que egrep . fgrep remove expressoes regulares, grep -v Linux texto.txt , busca todas as linhas que nao contem a palavra Linux.
egrep - #egrep b[aei]g texto.txt, busca dentro de texto.txt a ocorrencia de bag, beg big, #egrep b[a-u]g texto.txt busca dentro de texto.txt ocorrencia de bag,beg,big,bog,bug. #egrep "^Linux" busca as linhas que começam com Linux o caracter ^ é inicio de linha. Para o final de linha o sinal é $
#egrep "Linux$" texto.txt busca o que tem linux no final da linha, egrep "^#" texto.txt , mostra somente comentários, #egrep "^$" texto.txt, mostrar linhas em branco . #egrep -v "^$" texto.txt, nao mostra linhas em branco. #egrep "b[a-i]g*" texto.txt, o * interfere no ultimo caractere, caracter anterior nao é exigido, pode aparecer nenhuma ou varias vezes. #egrep "b[a-i]g*e" texto.txt com o * busca quanto repete o g e depois tem um e , #egrep "b[a-i]g." com o . depois do g significa qualquer caracter.
#egrep "b[a-i]g+" texto.txt exige que o caracter anterior ao + apareca uma ou mais vezes #egrep "b[a-i]g?" texto.txt  o ? exige que o caracter anterior apareca nenhuma ou 1 vez #egrep "b[a-i]g..." texto.txt busca onde tem bag beg big e mais 3 caracteres qualquer. #egrep "O.Linux" texto.txt  Mostra onde tem O'um caracter qualquer'Linux
Resumo: * nenhuma ou varias ocorrencias, + é uma ou mais ocorrencias, ? é nenhuma ou uma ocorrencia, .* exige o caracter anterior e . que é um caracter qualquer. [] faz uma lista , ^ inicio de linha e $ para final de linha
sed - para substituir uma palavra por outra ou deletar uma palavra. #sed '/Linux/d' texto.txt, # sed '/^#/d' texto.txt apaga a linha que começar com #. #sed 's/[Ll]inux/Windows/' texto.txt  Linux e linux sao substituidos por Windows. #egrep -i "linux\." texto.txt identifica o . como ponto em formato texto, o mesmo vale para \? e \#. # egrep "[a-zA-Z]:[0-9][0-9][0-9]:" /etc/passwd | cut -d":" -f1

########103.8###EDICAO_ARQUIVOS_USANDO_VI#####################
vi - navegação - / procura de cima pra baixo, ? procura de baixo pra cima, h = volta um caracter, j = vai pra proxima linha , l = vai pro caracter seguinte. Entrar modo de edicao é com i , o = comeca a edicao a partir da linha de baixo, O = edita a partir da linha de cima. a = edita a partir do proximo caracter, A = edita no final da linha. cc = recortar e entrar em modo de edicao, Enter , Esc depois p pra colar.
dd = recorta mas nao entra em modo edicao, depois p = colar. d3d = recorta as 3 proximas linhas, p = pra colar as 3 linhas cortadas. yy = copia  :x = sai e salva. ! = ignora qualquer aviso, para forçar qualquer comando. ZZ = sai e salva (sem : antes do ZZ)
######101.1 Arquitetura_de_sistema############
ATA ou IDE - /dev/hda /dev/sda  são master, hdb e sdb são slave, hdc e sdc são master e hdd e sdd são slave. SATA - sem master e slave, somente sequencia de sda, sdb, sdc. SCSI - 8 bits e 16 bits
#####################101.2_BOOT_BIOS###############################
bios>MBR>Bootloader>kernel>init . MBR= conjunto de dados no primeiro setor do disco e fica o bootloader(GRUB/LILO). bootloader=gerenciador do boot, carrega o initrd. O initrd = inicia os promeiros processos do linux, redes,dns, graficos etc(systemd,systemV,Upstart), possui runlevels q sao modos de operacao.
dmesg - usado para saber o log do boot da maquina. Infomracoes de grub, hardware, discos carregados, tbm tem log de instalações, problemas de hardware.
boot uefi- uefi>bootloader>kernel>init - nao tem MBR. montado no /boot/efi, utiliza particao FAT, particoes GPT, podendo ter particoes acima de 2GB.
journalctl - tbm mostra informacoes do boot. journalctl --help #journalctl -b - mostra processos, kernel, serviços. #systemctl -k mostra so mensagens do kernel. #journalctl -f fica esperando aparecer na tela as novas informacoes em tempo real.
67.101.3 - tipos de systed - service, socket, device, mount, automount, target(runlevel), snapchat. # cd /lib/systemd/system - local dos arquivos, #ls -l *target mostra os runlevels , são links dos runlevels. Mostra tbm o target default (default.target -> graphical.target) ou seja, o target( o runlevel padrao é com grafico no meu sistema) se rodar o comando #runlevel mostra o target padrao conforme informado antes.
systemctl - programa nativo do systemd (o mesmo que usar o init e o telinit do sysV) como meu sistema é via systemd, o comando init e telinit usam o atalho ' /sbin/init -> /lib/systemd/systemd' do systemd. #systemctl list-units - para listas todas unidades do lib/systemd/system , targets,services, sockets etc..systemclt reboot, systemctl poweroff, desliga a maquina e reseta maquina.
#systemctl set-default multi-user.target - eu defino meu target default como multi-user, #systemclt isolate rescue.target - muda o nivel de execução do sistema para modo de single user. #systemctl status cron.service - para verificar o status do servico cron
###############GRUB_LEGACY_E_GRUB_2###################
Os arquivos do legacy são : /boot/grub/menu.list (arquvo principal) e o arquivo q editamos é /boot/grub/grub.conf/cfg. No GRUB2 o principal é #/boot/grub/grub.cfg e configuramos o /etc/default/grub  e /etc/grub.d/. Os discos ficam no grub legacy os discos ficam hda1 = hd0,0 e hda5 = hd0,4 o hdb3=hd1,2. No grub2 fica hda=hd0,1 e hda5=hd0,5. Comandos instalar no grub legacy: #grub-install /dev/sda e tbm o  #grub-install'(hda)'. Intalar no grub2 #grbu-install <device> #update-grub#grub-mkconfig -o
O grub default do grub legacy é default=0 e timeout=15 , já no GRUB2 é grub_default=0 e grub_timeout=15 - esse é o tempo q o grub espera antes de bootar sozinho. Parametros de boot o legacy é title "ubuntu" root(hd0,0)kernel, ja noGRUB2 fica menuentry "Ubuntu"{set root=(hd0,1) linux}
######BOOT_MANAGER_INTERACAO_COM_GRUB#######
Apertando F12 entramos no boot manager GRUB, no GRUB tem opcoes de entrar no systemd, upstart, modo de recovery mode para recuperar. Dentro do recovery, temos varias opcoes de recuperacao. Tem a opcao de memory test. Apertando a tecla E entramos para editar o boot antes de bootar. Pra entrar em modo single, digitamos single no final da linha do /boot/vmlinuz-4.4.0... ou tbm digitamos 'init=/bin/bash'
Instalação e configurar o boot manager GRUB, configuracoes e comandos - #cd /boot/ dentro de /boot tem os kernels(vlinuz) antigos e os usados no sistema, a imagem initrd.img tbm o memtest. #cd /boot/grub/grub.cfg . PAra ver o grub usado no sistema é com o comando #update-grub --version. Com o comando #update-grub - ele instala na particao MBR o grub. Editando o arquivo de configuracoes gerais do grub #vim /etc/default/grub (podemos alterar o timeout de inicio do boot, o splash e quiet para aparecer ou nao os comandos no boot)
# cd /etc/grub.d/ - outro arquivo para alterar o grub


###GERENCIAMENTO DE PACOTES####
####LAYOUT_HD_PARTICAO_PONTO_MONTAGEM_FS_MBR############
Paticionar é bom para gerenciar espaços em discos, ter diferentes tipos de filesystem por particao. proteger contra erros, niveis de seguranca diferente, backup facilitado.
Particao MBR é o foco: maximo 4 particoes primarias, sendo que uma primaria pode ser extendida, onde ciramos varias particoes logicas. OU 4 primarias ou 3 primarias e 1 extendida(com as logicas dentro) , nao tem pq ter 2 particoes extendidas pq ja se criam varias particoes dentro de 1 extendida. Logicas comecam com nuemro sda5 em diante. As primarias são só de sda1 a sda4 por exemplo
Particao / e /swap sao as 2 particoes q devem ser criadas.
Codigos de Particao : 83 Linux e 82 é swap a 5 é extendida. PArticoes comuns fora do diretorio /: /home(usuarios), /var(pode entupir), /tmp(pode entupir),/boot (tem os arquivos kernel), /usr - (arquivos aplicacoes),  Nao montados fora do diretorio / : /etc(arquivos de configuracao do sistema), /bin(comandos, scripts), /sbin(comandos, scripts), /dev(diretorio dinamicos), /proc(diretorio dinamicos), /sys(diretorio dinamicos)
LVM - gerneciar mais logicamente os espaços em disco.
HD UEFI e ESP - tipo de sistema VFAT. #efibootmgr - gerenciar boot manager, (para ver informacoes e mudar as configs), efibootmgr -v Mostra mais informacoes.
~# cat /proc/swaps verificar qual a particao de swap.


################Dispositivos_arquivos_linux_FHS_104###################
###criando particoes e Sistemas arquivos FS, mkfs , mkswap.####
104.1gdisk - mesmo que o fdisk mas serve pra criar particao em gpt ao inves de mdos(MBR), #mkfs -t ext3 /dev/sdb1 - formata para tipo ext3 na particao sdb1 . #file -s /dev/sdb1 - mostra q sdb1 esta formatado com ext3. #mkfs.ext3 /dev/sdc1 - formatando ext3 na particao sdc1. Depois de usar o fdisk e colocar uma particao como swap, temos que usar #mkswap /dev/sdb5 - formatar essa particao como swap. Depois #swapon /dev/sdb5 - inclui a particao de swap no /proc/swaps, #parted - parecido com fdisk e #gparted parecido com parted.
104.2#df -h - mostrar paritoes , uso, montagem, espaco disponivel, etc. # df -hT - mostra o Tipo de particao tbm por exemplo ext4, # df -ht ext4 - mostra só a particao que procurei, # df -i - mostra os inodes. #du - # du -ah - mostra o q cada arquivo tem de tamanho, # du -ahc - sumariza mostrando no final o total , # du -hs /home/ - mostrar o que o /home/ ocupa . # du -hs /home/paulo/* - o que cada arquivo dentro de /home/paulo/ ocupa , # du -h --max-depth=2 - se aprofunda em 2 diretorios na amostragem.
104.2#fsck - checagem e reparacao de filesystem, #fsck.ext4 /dev/sdb2 - checa como esta o sdb2, # dumpe2fs /dev/sda1 - só mostra informacoes de configuracao da particao. # tune2fs -L "Particao teste" /dev/sda1 - mudando o Label 'Particao teste' na particao sda1 . # dumpe2fs -h /dev/sda1 - podemos ver que agora o nome mudou para 'Particao teste' , # tune2fs -i 1m /dev/sda1 - mudando o tempo de checagem do disco com o comando fsck automaticamente. # tune2fs -j - altera a particao para fazer journal (caso fosse ext2 essa particao, ela se tornaria ext3 devido a inclusao do journal)
s# debugfs /dev/sda1 - dentro do degugfs usar comando 'stats' joga as mesmas infos do dumpe2fs.
######CONTROLE DE MONTAGEM E DESMONTAGEM DE FSs-MOUNT,UMOUNT,etc/fstab###################
#mount e umount - sao temporarias as montagens , #/etc/fstab - é fixa a montagem, #mount - mostra tudo q ta montado no sistema , #mount -a - monta tudo que ta no /etc/fstab , #umount -a - desmonta tudo do /etc/fstab (se nao tiver em uso) ,# mkdir /tmp/teste_mount - criando diretorio #mount /dev/sdb2 /tmp/teste_mount - montando /tmp/teste_mount em /dev/sdb2,
#/etc/fstab - Campos - <file system> <mount point>   <type>  <options>       <dump>  <pass>
###########GERENCIAMENTO_QUOTAS###########
#dentro do /etc/fstab/ - adicionamos na mesma linha do UUID que tem o /home  as opcoes ' usrquota e grpquota' agora o sistema cria os arquivos base para fazer as cotas após reiniciar ou no comando 'quotacheck -cugm / ', (baixar quota e quotatool), #edquota paulo - editar quota do usuario paulo , dentro do edquota tem os blocks que é 1kb cada blocks , tem o item soft , hard que sao os limites, onde caso o user passar do soft ainda pode usar , mas caso chegue no hard, bloqueia. #repquota - para ver os limites (reporte das quotas) - o campo grace period é o tempo que o user podera ficar dentro do campo soft
#edquota -t - para alterar o grace period, o usuario digitando #quota aparece as informacoes , caso tenha passado do limite imposto, o campo blocks aparece com um * , edquota -g suporte - editar quotas para grupo suporte , quotaoff- desabilita o sistema de quotas , quotaon - habilita o sistema de quotas.
############GERENCIAMENTO_PERMISSOES##########
#chmod g+w Aula3 - adicionando permissão w para o grupo(g) no arquivo Aula3, # chmod a+x Aula3 - adiciona para (a)All permissao de execucao (x) no Aula3. # chmod o-rx Aula3 - removendo permissao de outros(o) de ler. # chmod ug-x Aula3 - user e group removido o executar(x). # chmod o=x Aula3 - so deixa o x no others e remove o rw caso estivesse.
###############MODO_OCTAL_GERENCIA_PERMISSOES###########
r=4 w=2 x=1 , rwx = 7 , rw- = 6 , r--4 , chmod 774 Aula3 - definindo rwx rwx r-- para o Aula3, #chmod 660 Aula3 - definindo rw- rw- --- para Aula3 , # stat Aula3 - mostra as permissoes de forma geral do Aula3 , #chmod -R 644 Diretorio1 - coloca a permissao 644 recursivamente em tudo q ta dentro do diretorio1,  Atributos especiais/Bits modo de acesso - se eu executar um scrit o scrit vai executar com as permissoes do meu usuario, e nao as permissoes do arquivo de script
SUID - # ls -l /usr/bin/passwd - (saida -rwsr-xr-x 1 root root 54256 Mar 29  2016 /usr/bin/passwd) - nota-se que tem um s nas permissoes para o user root, esse s é para liberar outros usuarios para editar o passwd com o comando #chmod u+s /etc/passwd - ele adiciona o s para o usuario e assim ele pode escrever em passwd , #SGID - mesma coisa so que para o grupo - #chmod - g+s script.sh - ele adiciona o s no grupo para permitir escrita com qualquer outro usuario q nao o root. #Sticky - dentro de um diretorio só consegue apagar ou renomear um arquivo, a pessoa que criou o arquivo. # ls -ld /tmp/ saida(drwxrwxrwt 8 root root 4096 Jul 25 18:19 /tmp/)
se tem um t na permissao de outros o sticky esta ativo e somente quem criou os arquivos dentro de tmp/ consegue alterar ou apagar. Sendo assim o modo octal fica SUID=4, SGID=2, Sticky=1 , usuario, grupo, outros entao a permissao fica exemplo: 6774  no caso o SUID e SGID junto é 6 e nao tem Sticky . #chmod o+t Aula3 - inserindo o Sticky no Aula3 (somente no o de others vai o Sticky). QUando o T é maiusculo é pq nao tem o x de execucao junto, quando é o t minusculo , é pq tem a permissao x de execucao junto. (o stcky opcupa o mesmo local do x)
Adicionar o SUID usando formato octal - #chmod 4775 Aula3 - entao ficou SUID ativo rwxrwxr-x no Aula3 . Adicionando o SUID e Sticky ficaria #chmod 5775 pq o SUID=4 e Sticky=1 . #umask - sao permissoes criadas de forma automatica quando criamos arquivos e diretorios. Para arquivos ele usa o padrao 666 e substitui o umask padrao (0022 do meu root) . entao fica 6-0 = 6 que é rw-,  6-2=4 que é r-- , e 6-2=4 que é r-- , ficando para arquivos criados rw-r-r- por padrao; Para diretorios é 777 , substituindo o umask 0022 fica 7-0=7 q é rwx , depois 7-2=5 que é r-x depois 7-2=5 que é r-x , ficando rwxr-xr-x nos diretiorios criados .
#chown - fazer alteracao do dono e grupo do arquivo , é o root que fará as alteracoes com o chown. #chown lpi2 Aula2 - muda o user, #chown lpi2:suporte Aula2 ou #chown lpi2.suporte Aula2, #chown :suporte Aula2 - muda so o grupo , #chown .suporte Aula2 - muda so grupo. chown -R lpi2 diretorio2 - muda o usuario de todos os arquivos de dentro do diretorio2, #chgrp suporte Aula3 - muda so o grupo , tbm podemos usar com  -R.
######LINKS_HARD_LINK_E_SOFT-ln###########
# ln Script_Exemplo.sh Link-Hard - criando link hard chamado Link-Hard - os dois tem o mesmo inode olhando pelo comando ls-li (link hard sao dois arquivos q apontam pro mesmo lugar por isso o mesmo inode ), se alterar a permissao de um deles, os dois vao mudar. Se adicionar informacao em um, no outro tbm vai add. Nao é possivel criar link hard em particoes diferentes. Link Simbolico - # ln -s Script_Exemplo.sh.bkp Link-simbolico - criando link simbolico (lrwxrwxrwx - fica um l no inicio informando que é um link-simbolico) lin-simbolico é um atalho ,e pode ser criado entre duas particoes.
############LOCALIZACAO_ARQUIVOS################
FHS - filesystem Hierarchy Standard - /usr/bin - comandos nao essenciais. todos usuarios 'head,du,dpkg,nice' , usr/share/man - fontes do man, /bin, programas criticos 'cp, kill, rm' /sbin - programas criticos sysadmin 'fdisk fsck, mkfs' /etc/ - arquivos de config , /
######COMANDOS_ENCONTRAR_ARQUIVOS###########
#find /home -name Aula3 , encontra Aula3 dentro de /home , find /home -user lpi2 , find /home -size +50M - procura arquivo com mais de 50MB , locate - tem arquivo de database interno, proura no db interno, #locate rpm - procura tudo q tem rpm dentro da base de dados dele , para atualizar essa base de dados é com o comando #updatedb pelo arquivo de config /etc/updatedb.conf
#whereis - procura arquivos executaveis, libs, fontes , manuais de dados etc (nao encontra os diretorios de usuarios) - #whereis rpm - encontra so se tiver no compeco a string ou se ela for exatamente o que procuramos (usado para saber onde esta tal comando). #witch - procura somente no diretorio de PATH e para a busca no primeiro que encontra a palavra procurada. #type - mostra o tipo de arquivo se é interno , externo, do shell.