1 of 47

Linux

Aula III

Semana de Calouros 2025

Login: linux25X (X: 1-150)

Senha: Linux25#X

2025

2 of 47

Relembrando…

3 of 47

Comandos

  • cd - altera o diretório atual (working directory)
  • ls - lista conteúdo do diretório
  • touch - atualiza data de acesso/modificação ou cria novo arquivo
  • mkdir - cria diretório
  • rm & rmdir - remove arquivo/diretório
  • cp - copia arquivo/diretório
  • mv [arquivo] [destino] - move arquivo/diretório
  • mv [arquivo] [novo nome] - renomeia arquivo/diretório
  • file - especifica tipo do arquivo
  • du - mostra o tamanho de arquivo/diretório
  • quota - mostra o consumo de sua quota na macalan

4 of 47

Texto para treino

wget https://www.inf.ufpr.br/dlpg21/linux/memorias.txt

5 of 47

Entrada e saída de dados

1

6 of 47

Streams

  • Nos sistemas Unix, há a convenção de utilização de entradas e saídas padrão para a entrada e saída de dados
  • São definidas três conexões/streams/fluxos padrão:
    • stdinstandard input (entrada padrão)
    • stdoutstandard output (saída padrão)
    • stderrstandard error (erro padrão)
  • Por estas streams ocorre o fluxo dados entre o teclado, processos e a tela, mediados pelo shell
  • Por padrão, o stdin recebe dados do teclado, e stdout e stderr imprime mensagens na tela
  • Contudo, é possível utilizar conteúdo de arquivos no stdin, e redirecionar a saída de stdout e stderr para arquivos, em vez da tela
  • Então, a partir daqui, em vez de usarmos a expressão “imprimir na tela”, falaremos “escrever na saída/erro padrão”
  • Veremos como redirecionar as streams adiante

7 of 47

Streams

8 of 47

echo

  • Escreve o texto (argumento) na saída padrão
  • Por padrão, escreve o caractere de nova linha \n no fim do texto
  • Para evitar a escrita do new line, utilize a opção -n

9 of 47

cat & tac concatenate

  • Lê arquivo(s) passado(s) como argumento(s), o(s) concatena e escreve na saída padrão
  • Caso não seja passado nenhum argumento, lê os dados da entrada padrão (stdin)
  • O comando tac performa a mesma tarefa do cat, porém, escreve as linhas na ordem reversa

10 of 47

Caracteres coringas

2.

11 of 47

Redirecionamento das streams

  • É possível alterar a fonte da stdin e as saídas de stdout e stderr a partir de caracteres coringas
  • Para redirecionar a saída padrão para um arquivo, utiliza-se > e >>, destrutivo e não-destrutivo respectivamente
    • echo ‘Hello, world!’ > hello.txt
    • echo ‘abc’ >> hello.txt
    • echo ‘destruindo’ > hello.txt
    • echo ‘echo abc’ > echo.txt
  • Para enviar dados de um arquivo para stdin, utiliza-se <
    • cat < hello.txt
    • bash < echo.txt

12 of 47

Regex regular expressions

  • As expressões regulares são amplamente utilizadas em diversas áreas da computação
  • Com elas, é possível representar padrões de texto a partir de sequência de caracteres
  • Alguns de seus caracteres são possíveis de serem usados no shell como caracteres coringas
  • 💡 Pesquise sobre regex

regexr.com

13 of 47

Caracteres coringas

  • * → representa zero ou mais ocorrências de quaisquer caracteres
  • ? → representa uma ocorrência de um caractere qualquer, pode ser combinado (ex: ?????.txt)
  • [] → representa uma ocorrência de algum caractere presente entre os colchetes, pode ser combinado (ex: [2468][13579].txt)
  • {} → com chaves é possível representar sequências de caracteres
    • echo {1..100}
    • echo {a..z}
  • & → colocado no fim de um comando, coloca o processo em background e libera o prompt
    • gedit teste.txt &

14 of 47

Caracteres coringas

  • ; → com este caracter é possível separar comandos em apenas uma linha
    • echo a; echo b
  • $ → usada para representar variáveis de ambiente do shell
    • echo $PATH
  • → usada para representar texto permitindo caracteres especiais
    • echo “Data: $(date)”
  • ‘ → usada para representar texto anulando efeito dos caracteres especiais
    • echo ‘Data: $(date)’

15 of 47

Caracteres coringas

16 of 47

Variáveis de ambiente

3.

17 of 47

Variáveis de ambiente

  • Variáveis são objetos (localizadas na memória) que armazenam valores para serem usados em um programa
  • A shell também possui variáveis, as quais podem ser alteradas pelo usuário, são chamadas de variáveis de ambiente (environment variables) ou variáveis shell
  • Os nomes destas variáveis iniciam com $, e são escritas em letras maiúsculas
  • Exemplos:
    • $HOME → armazena o diretório pessoal do usuário (ex: “/home/pet”)
    • $USER → armazena o usuário logado que abriu a shell (ex: “pet”)
    • $LANG → armazena a linguagem do sistema operacional (ex: “pt_BR.UTF-8”)
    • $SHELL → armazena a localização do executável da shell atual (ex: “/bin/bash”)

18 of 47

Variáveis de ambiente

  • Para ler uma variável de ambiente específica, utilize o comando echo

19 of 47

Variáveis de ambiente

  • Para listar todas as variáveis de ambiente, utilize o comando printenv

20 of 47

Variável $PATH

  • A variável $PATH armazena os diretórios, separados pelo caractere “:”, nos quais a shell procurará os executáveis dos comandos digitados pelo usuário
  • Por exemplo, ao utilizar o comando ls, a shell precisará encontrar seu arquivo executável, assim, procurará em todos os diretórios de $PATH até encontrá-lo, que então será executado
  • Logo, caso você precise utilizar um programa que não esteja em um diretório da $PATH, precisará utilizar o início “./”, seguido do caminho do arquivo

21 of 47

Variável $PATH

  • Exemplo de conteúdo da $PATH

* O comando tr substitui todas as ocorrências de um caractere por outro

22 of 47

Adicionar diretório ao $PATH

  • É possível adicionar diretórios à variável $PATH, para isso utilize o comando export
  • export PATH=”<diretório>:$PATH”

23 of 47

Adicionar diretório ao $PATH

  • Contudo, esta mudança é temporária, e não funcionará em outras sessões shell
  • Para tornar a mudança permanente, é preciso adicionar o comando ao arquivo de configuração da shell, o “~/.bashrc” ou “~/.profile” para o bash
  • Toda vez que uma shell bash é iniciada, estes arquivos são executados
  • Logo, ao iniciar a shell, o comando export será executado, atualizando o $PATH

24 of 47

Usuários e grupos

4.

25 of 47

Usuários e grupos

  • Usuários e grupos são usados para controle de acesso a arquivos e diretórios
  • Usuários podem ser adicionados e removidos, com eles é possível logar no sistema
  • Grupos são conjuntos de usuários, que podem receber permissões específicas que se aplicam a todos os usuários presentes nele
  • Ao instalar o Linux, um usuário é criado por padrão, o usuário root

26 of 47

Superusuário (sudo)

  • O root é um superusuário, ou seja, é um usuário administrador que pode controlar qualquer aspecto do sistema operacional, desde acessar qualquer arquivo/diretório a rodar qualquer comando
  • Como usuário comum, é possível rodar um comando como root usando o comando sudo (Super User DO!) como prefixo
    • $ sudo apt install nvim
  • Contudo, para poder utilizar o comando sudo, o usuário deve estar no grupo sudoers, que apenas o root e outros usuários sudoers conseguem gerenciar
    • $ cat /etc/sudoers (só conseguirá rodar como superusuário, rs)

27 of 47

Permissões

5.

28 of 47

Permissões

  • Há três tipos de permissões aplicadas a arquivos e diretórios:
    • Read: leitura
    • Write: escrita, alteração e deleção
    • Execute: execução
  • Estas permissões podem ser definidas para três entidades:
    • User: seu usuário (dono do arquivo/diretório)
    • Group: usuários presentes nos seus grupos
    • Others: o resto
  • Cada arquivo e diretório possuem um dono, que é o criador do item
  • O dono pode gerenciar seus arquivos e diretórios para atribuir permissões de leitura, escrita e/ou execução a outros usuários
  • O superusuário tem permissão para leitura, escrita e execução em qualquer arquivo/diretório!

29 of 47

Permissões

  • Rode: $ ls -l

30 of 47

chmod change mode

  • Para alterar permissões, utiliza-se o comando chmod
  • O primeiro argumento é as entidades em que as permissões serão mudadas
  • O segundo argumento é o tipo de alteração
  • O terceiro argumento é o tipo de permissão
  • A notação textual segue:
    • $ chmod [ugoa] [+-=] [rwx] [arquivo/diretório]
  • As possibilidades do terceiro argumento podem ser combinadas
    • Ex: $ chmod ug=rw, o-rw hello.txt
  • Ao ser utilizado em diretórios, é possível utilizar a opção -R (Recursivo) para aplicar as mudanças em todos os arquivos/diretórios filhos
  • 💡 Pesquise sobre a notação octal do chmod

31 of 47

public_html

  • Ao adicionar um arquivo no seu diretório public_html do DInf, não se esqueça de alterar as permissões para permitir a leitura e execução do arquivo pelo servidor nginx
  • $ chmod o+rx index.html

32 of 47

Histórico

6.

33 of 47

history

  • A shell, por padrão, escreve os comandos executados num arquivo de histórico
  • Bash: ~/.bash_history
  • zsh: ~/.zsh_history
  • Assim, é possível utilizar o comando history que exibe o histórico dos comandos
  • Para limpar o histórico, utilize:
    • history -c

34 of 47

Redirecionamento de streams entre comandos

7.

35 of 47

Pipeline

  • Você pode redirecionar a saída de um comando (stdout) para ser usada como entrada (stdin) de outro usando pipe (caractere ‘|’)
  • comando1 | comando2 | comando3 - comando1 gera entrada pro comando2 e o comando2 pro comando3.
  • Exemplos:
    • ls | tac - imprime o ls da última linha para a primeira
    • ls -t | tac - imprime o ls em ordem crescente de data

36 of 47

Mais comandos de leitura

8.

37 of 47

head

  • Por padrão, lê as primeiras 10 linhas de um arquivo
  • É possível especificar quantas linhas lidas com a opção -n [número]
  • Ex:
    • $ head arquivo.txt
    • $ head -n 20 arquivo.txt

38 of 47

tail

  • Por padrão, lê as últimas 10 linhas de um arquivo
  • É possível especificar quantas linhas lidas com a opção -n [número]
  • Ex:
    • $ tail arquivo.txt
    • $ tail -n 20 arquivo.txt

39 of 47

less

  • Lê um arquivo de forma interativa
  • Isto é, não imprime todo o arquivo na tela, em vez disso, é possível navegar pelo arquivo utilizando setas, mouse etc.
  • Ideal para arquivos grandes
  • “q” para sair, “h” para mostrar a tela de ajuda
  • “/padrao” grifa as ocorrências de “padrao” no documento
  • Versão melhorada do comando “more”

40 of 47

Buscando arquivos

9.

41 of 47

find

  • Formato: find [ponto-inicial] [opções] [argumento]
  • Ponto inicial: por onde começar a procura (padrão: diretório atual)
  • Opções: no geral, especifica que tipo de argumento o comando irá procurar, como nome, data de criação, permissão. Exemplo de opção: -iname.
  • Argumento: o que o comando irá procurar levando em consideração o tipo dado nas opções.

42 of 47

Filtrando texto

10.

43 of 47

grep

  • Procura por uma palavra/frase/expressão dentro de um arquivo.
    • Global Regular Expression Print
    • Globally looks for a Regular Expression and Print
    • Global Regular Expression Parser
  • Formato: grep [opções][expressão][arquivo]
  • cat doc.txt | grep legal - Pega as linhas de doc.txt com a palavra “legal”
  • Você pode sempre usar o man para ver as opções:
    • man grep

44 of 47

cut

  • Usado para “cortar” o texto por colunas
  • Opções
    • -d’c: usa ‘c’ como caractere delimitador
    • -fn : retorna apenas o campo (field) número n
    • -fn,m : retorna apenas os campos (field) número n e m
  • O caractere TAB é o padrão de delimitador
  • Parecido com outro comando: awk
  • cat documento.csv | cut -d’,’ -f1 - Colunas separadas por vírgula, coluna 1

45 of 47

Exercício

$ wget https://www.inf.ufpr.br/dlpg21/linux/aula2.tar.gz

$ tar -xvf aula2.tar.gz

$ wget https://www.inf.ufpr.br/dlpg21/linux/aula3.tar.gz

$ tar -xvf aula3.tar.gz

46 of 47

Avalie a aula

forms.gle/g66SYoExDMkzisiZ8

Conta como presença!

47 of 47

Obrigado!

Obrigado!

pet.inf.ufpr.br

pet@inf.ufpr.br

@petcompufpr