< Return to Video

Lecture 1: Course Overview + The Shell (2020)

  • 0:01 - 0:08
    Tudo bem, pessoal, obrigado por virem.
  • 0:02 - 0:08
    Esse é o semestre que faltava na sua
    fomação em ciência da computação.
  • 0:08 - 0:12
    Ou, pelo menos, é assim que decidimos
    nomear
  • 0:10 - 0:14
    este curso. Se não é pra essa aula que
  • 0:12 - 0:16
    você veio, então você entrou na sala
    errada. Nós
  • 0:14 - 0:20
    estaremos aqui por mais ou menos 1h só
  • 0:16 - 0:21
    para ajustar suas expectativas e...
    eu quero falar
  • 0:20 - 0:24
    um pouco com vocês sobre o por quê
  • 0:21 - 0:26
    de estarmos dando este curso. O curso
  • 0:24 - 0:30
    se originou de uma observação que o Anish,
  • 0:26 - 0:33
    o José e eu fizemos enquanto dávamos
    monitoria para vários
  • 0:30 - 0:35
    cursos no MIT. Basicamente,
  • 0:31 - 0:35
    todos nós, cientistas da computação,
    sabemos
  • 0:35 - 0:38
    que computadores são ótimos em fazer
  • 0:36 - 0:41
    tarefas repetitivas e automatizar coisas.
  • 0:38 - 0:43
    Mas muitas vezes não percebemos que há
  • 0:41 - 0:46
    muitas ferramentas que podem fazer nossos
    próprios
  • 0:43 - 0:48
    processos de desenvolvimento melhores.
    Nós podemos ser
  • 0:46 - 0:50
    bem mais eficientes sobre como usamos
    nossos
  • 0:48 - 0:52
    computadores porque podemos usá-los
  • 0:50 - 0:54
    como uma ferramenta para nós mesmos, não
  • 0:52 - 0:58
    apenas para criar websites ou software ou
  • 0:54 - 1:00
    coisas do gênero. Este curso é
  • 0:58 - 1:03
    uma tentativa de abordar isso e uma
    tentativa
  • 1:00 - 1:05
    de mostrar para vocês algumas ferramentas
    que vocês
  • 1:03 - 1:08
    podem usar para um ótimo efeito seu
    dia a dia
  • 1:05 - 1:12
    em pesquisa e nos estudos.
  • 1:08 - 1:15
    Este vai ser um curso no qual nós
  • 1:10 - 1:15
    queremos ensinar tanto como aproveitar
  • 1:15 - 1:19
    ao máximo as ferramentas que você já
  • 1:16 - 1:21
    conhece, mas também, assim esperamos,
    ensinar vocês sobre
  • 1:19 - 1:24
    algumas ferramentas novas,
  • 1:21 - 1:26
    além de como combinar essas ferramentas
  • 1:24 - 1:28
    para produzir coisas mais poderosas do que
  • 1:26 - 1:31
    vocês imaginam ser capaz de fazer
    com o que
  • 1:28 - 1:33
    já sabem atualmente. Este curso está
  • 1:31 - 1:37
    estruturado em uma séria de aulas de 1h
  • 1:33 - 1:39
    e cada aula vai cobrir
  • 1:37 - 1:41
    um tópico em paticular. Vocês podem checar
  • 1:39 - 1:43
    o website, que está escrito lá, para
  • 1:41 - 1:46
    acessar a lista de tópicos e datas
  • 1:43 - 1:48
    de cada um. As aulas serão, em geral,
  • 1:46 - 1:49
    independentes, então vocês podem
  • 1:48 - 1:51
    comparecer às que lhes interessa.
  • 1:49 - 1:54
    Porém vamos assumir que
  • 1:51 - 1:56
    vocês vêm acompanhando o conteúdo, de modo
  • 1:54 - 1:57
    que, ao chegarmos às aulas futuras, não
  • 1:56 - 2:02
    vou ficar ensinando bash tudo outra vez.
  • 1:57 - 2:05
    Por exemplo, nós também vamos postar
  • 2:02 - 2:08
    tanto as notas de aula quanto as gravações
  • 2:05 - 2:10
    das aulas online. Ainda não decidimos
  • 2:08 - 2:12
    exatamente quando vamos fazer isso,
  • 2:10 - 2:14
    mas será após as aulas. Obviamente, os
  • 2:12 - 2:17
    vídeos têm de ser postados depois
    que a aula ocorre.
  • 2:14 - 2:19
    O curso vai ser ministrado por mim, John e
  • 2:17 - 2:21
    Anish, sentados ali, e pelo Jose,
  • 2:19 - 2:24
    que não está aqui mas vai dar
  • 2:21 - 2:26
    a aula de amanhã. Lembrem-se que
  • 2:24 - 2:28
    estamos tentando abordar um monte
  • 2:26 - 2:31
    de assuntos neste curso de apenas 11
  • 2:28 - 2:33
    aulas de 1h, então vamos avançar
  • 2:31 - 2:35
    relativamente rápido. Mas, por favor,
  • 2:33 - 2:37
    interrompam se houver algo que vocês
  • 2:35 - 2:38
    não estiverem conseguindo acompanhar.
  • 2:37 - 2:40
    Se você achar que devemos dedicar
  • 2:38 - 2:42
    mais tempo a algum tópico, fale conosco.
  • 2:40 - 2:45
    Por favor, interrompa com perguntas.
  • 2:42 - 2:47
    Além disso, após cada aula estaremos
  • 2:45 - 2:50
    disponíveis no nono andar do
  • 2:47 - 2:52
    prédio 30 no Stata Center,
  • 2:50 - 2:53
    o prédio de ciência da computação. Então,
    se você
  • 2:52 - 2:56
    aparecer no nono andar
  • 2:53 - 2:58
    lá, na Gates Tower, pode vir
  • 2:56 - 3:01
    e tentar fazer os exercícios que
  • 2:58 - 3:03
    vamos dar em cada aula ou simplesmente
    fazer perguntas
  • 3:01 - 3:04
    sobre outras assuntos que tivermos
  • 3:03 - 3:08
    tratado nas aulas ou outras coisas,
  • 3:04 - 3:08
    como umar seu computador de forma
    eficiente.
  • 3:08 - 3:14
    Devido ao tempo limitado que temos
  • 3:12 - 3:17
    disponível, não vai ser possível
  • 3:14 - 3:19
    abordar todas as ferramentas em detalhe,
  • 3:17 - 3:21
    então tentaremos salientar ferramentas
  • 3:19 - 3:23
    importantes e formas interessantes de
    usá-las.
  • 3:21 - 3:25
    Não vamos, necessariamente, ir a fundo
  • 3:23 - 3:28
    nos detalhes de como tudo funciona or
  • 3:25 - 3:29
    discutir casos mais elaborados, mas
    se vocês tiverem
  • 3:28 - 3:31
    perguntas sobre isso, por favor,
    venha falar conosco
  • 3:29 - 3:34
    sobre isso também. Muitas dessas
    ferramentas são
  • 3:31 - 3:35
    ferramentas que temos usado por anos
  • 3:34 - 3:37
    e podemos lhes direcionar a mais coisas
  • 3:35 - 3:39
    interessantes que vocês podem fazer
    com elas.
  • 3:37 - 3:43
    Então, aproveitem que estamos aqui.
  • 3:39 - 3:45
    Esta aula vai... não quero dizer
  • 3:43 - 3:47
    escalar rapidamente, mas
  • 3:45 - 3:49
    o que vai acontecer no decorrer
  • 3:47 - 3:51
    dessa aula em particular é que vamos
  • 3:49 - 3:53
    abordar bastante do básico, e assumiremos
  • 3:51 - 3:54
    que vocês já sabem isso no restante do
  • 3:53 - 3:56
    semetre. Coisas como usar o
  • 3:54 - 3:57
    shell e o terminal (vou explicar o que são
  • 3:56 - 4:00
    para os que não conhecem ainda),
  • 3:57 - 4:02
    e depois, bem rapidamente, vamos
  • 4:00 - 4:04
    escalar para ferramentas mais avançadas
  • 4:02 - 4:05
    e como usá-las. Vocês já podem ver nas
  • 4:04 - 4:07
    notas de aula o tipo de
  • 4:05 - 4:10
    tópicos que vamos cobrir.
  • 4:07 - 4:12
    Então isso nos traz à aula de hoje
  • 4:10 - 4:15
    na qual vamos cobrir o shell.
  • 4:12 - 4:17
    O shell vai ser uma
  • 4:15 - 4:19
    das formas primárias de interagir com seu
  • 4:17 - 4:21
    computador. Quando você quiser fazer mais
    coisas
  • 4:19 - 4:25
    do que as que são possíveis com as
    interfaces visuais,
  • 4:21 - 4:26
    com as quais talvez você esteja
    acostumada/o, lhe permitam fazer.
  • 4:25 - 4:27
    As interfaces visuais são limitadas no
  • 4:26 - 4:29
    que
  • 4:27 - 4:30
    elas lhe permitem fazer, porque você só
  • 4:29 - 4:32
    pode fazer as coisas para as quais há
  • 4:30 - 4:35
    botões, sliders ou campos de inputs.
  • 4:32 - 4:37
    Geralmente essas ferramentas textuais
    são construídas
  • 4:35 - 4:40
    para serem combinadas umas com as outras,
    mas
  • 4:37 - 4:41
    há também diversas formas diferentes de
  • 4:40 - 4:43
    combiná-las, programá-las ou
  • 4:41 - 4:45
    automatizá-las e é por isso que,
  • 4:43 - 4:48
    neste curso, vamos focar na
  • 4:45 - 4:50
    linha de comando ou em ferramentas
    baseadas em texto.
  • 4:48 - 4:52
    O shell é o local se faz a
  • 4:50 - 4:54
    maioria desse trabalho. Então para
    aqueles que
  • 4:52 - 4:57
    não estão acostumados com o shell,
    a maioria
  • 4:54 - 4:59
    das plataformas oferecem algum tipo
    de shell.
  • 4:57 - 5:01
    No Windows, há o PowerShell, mas
  • 4:59 - 5:04
    há também outros shell disponíveis
  • 5:01 - 5:06
    no Windows. Já no Linux vocês vão
    encontrar um monte de
  • 5:04 - 5:08
    terminais, que são janelas que lhes
    permitem
  • 5:06 - 5:10
    visualizar shells e vocês também vão
  • 5:08 - 5:13
    encontrar diversos tipos de shells. O mais
  • 5:10 - 5:16
    comum deles é o bash, ou 'born
  • 5:13 - 5:17
    again shell'. Por ser um shell tão comum,
  • 5:16 - 5:19
    é basicamente esse que vamos
  • 5:17 - 5:21
    usar nessas aulas.
  • 5:19 - 5:24
    Se você usa Mac OS, você provavelmente
  • 5:21 - 5:26
    já tem o bash ou uma versão antiga dele
  • 5:24 - 5:27
    se você abrir o app do terminal. Então,
  • 5:26 - 5:29
    se você quiser acompanhar em qualquer uma
  • 5:27 - 5:30
    dessas plataformas, fique à vontade, mas
  • 5:29 - 5:33
    tenha em mente que o curso vai ser
  • 5:30 - 5:34
    meio que baseado em Linux no que diz
    respeito a como
  • 5:33 - 5:39
    vamos ensinar, ainda que a maioria dessas
    ferramentas
  • 5:34 - 5:40
    funcione em todas as plataformas.
    Se você quiser
  • 5:39 - 5:43
    instalar um terminal e um shell e
  • 5:40 - 5:45
    não sabe como fazer isso muito bem,
    ficaremos felizes em
  • 5:43 - 5:47
    lhes ajudar na nossa sala ou, geralmente,
  • 5:45 - 5:52
    é bem fácil buscar no Google
  • 5:47 - 5:57
    'sua plataforma' mais 'terminal' e você
  • 5:52 - 5:59
    vai achar um. Bom, quando você abre um
  • 5:57 - 6:01
    terminal você vê algo que se parece com
  • 5:59 - 6:04
    isso. Normalmente vai ter
  • 6:01 - 6:06
    uma única linha no topo, o que é
  • 6:04 - 6:08
    conhecido como prompt do shell.
  • 6:06 - 6:10
    Você pode ver que meu prompt do shell
  • 6:08 - 6:12
    parece com isso, tem meu nome de usuário,
    o nome
  • 6:10 - 6:14
    da máquina que estou usando, o caminho
  • 6:12 - 6:17
    da pasta onde estou (vamos falar de
    caminhos
  • 6:14 - 6:19
    um pouco mais tarde) e daí ele
  • 6:17 - 6:21
    fica piscando lá, pedindo
  • 6:19 - 6:22
    um input. Esse é o prompt do shell
  • 6:21 - 6:26
    onde você diz ao shell o que quer
  • 6:22 - 6:27
    que ele faça. Dá pra customizar
  • 6:26 - 6:29
    bastante esse prompt, quando você abri-lo
  • 6:27 - 6:31
    na sua máquina talvez ele não vai ter
    exatamente
  • 6:29 - 6:34
    essa aparência. Talvez um pouco,
  • 6:31 - 6:35
    se você já tiver configurado,
  • 6:34 - 6:38
    ou pode ter muitas outras
  • 6:35 - 6:40
    formas. Não vamos falar muito
  • 6:38 - 6:40
    sobre customizar seu shell nesta
  • 6:40 - 6:42
    aula em particular,
  • 6:40 - 6:44
    faremos isso mais tarde. Aqui vamos
  • 6:42 - 6:48
    só falar sobre como usar esse
  • 6:44 - 6:50
    shell para fazer coisas úteis. Esta é
  • 6:48 - 6:52
    a principal interface de texto que você
  • 6:50 - 6:53
    tem para seu computador, através do shell.
  • 6:52 - 6:56
    No shell, você pode digitar
  • 6:53 - 6:59
    comandos e os comandos podem ser
  • 6:56 - 7:01
    coisas relativamente simples. Geralmente
  • 6:59 - 7:03
    você vai executar programas com
  • 7:01 - 7:04
    argumentos. Como isso funciona? Bem,
  • 7:03 - 7:06
    um programa que podemos executar é o
    de data.
  • 7:04 - 7:07
    É só digitar date e apertar
  • 7:06 - 7:10
    enter, aí ele vai
  • 7:07 - 7:12
    te mostrar a data e hora. Você também
  • 7:10 - 7:15
    pode executar um programa com argumentos.
  • 7:12 - 7:18
    Isso é uma forma de modificar o
    comportamento
  • 7:15 - 7:21
    do programa. Por exemplo, há um
  • 7:18 - 7:22
    programa chamado echo. O echo imprime
  • 7:21 - 7:25
    os argumentos que você passa, e esses
  • 7:22 - 7:27
    arugmentos são simplesmente coisas
  • 7:25 - 7:30
    separadas por um espaço em branco logo
    após o nome.
  • 7:27 - 7:31
    Então podemos dizer hello e ele vai
    imprimir
  • 7:30 - 7:33
    hello de volta.
  • 7:31 - 7:36
    Talvez não muito surpreendente, mas isso
  • 7:33 - 7:37
    é uma das coisas básicas dos argumentos.
  • 7:36 - 7:39
    Uma coisa que vocês vão notar é que
    eu disse
  • 7:37 - 7:40
    que argumentos são separados por
  • 7:39 - 7:42
    espaços em branco. Talveu vocês se
    perguntem, "bom,
  • 7:40 - 7:44
    e se eu quiser um argumento com várias
  • 7:42 - 7:47
    palavras?" Você pode pôr essas coisas
    entre aspas, e aí dá para
  • 7:44 - 7:50
    fazer coisas como echo hello espaço
  • 7:47 - 7:53
    world e agora o programa echo recebe
  • 7:50 - 7:55
    um argumento que contém a string
  • 7:53 - 7:58
    hello world com um espaço. Bom, também dá
  • 7:55 - 7:59
    para usar aspas simples para isso.
    Vou explicar a
  • 7:58 - 8:00
    diferença entre aspas simples e
  • 7:59 - 8:03
    aspas duplas quando falarmos
  • 8:00 - 8:06
    sobre scripting em bash. Vocês também
  • 8:03 - 8:09
    podem escapar um caracter, então, por
  • 8:06 - 8:12
    exemplo, hello world. Isso também
  • 8:09 - 8:16
    funciona. Todas as regras sobre
  • 8:12 - 8:17
    como escapar e como analisar e
  • 8:16 - 8:20
    dar vários argumentos e variáveis
  • 8:17 - 8:21
    nós vamos cobrir mais tarde. Espero
  • 8:20 - 8:24
    que não encontrem muitas coisas esquisitas
    sobre isso. Nós temos de
  • 8:21 - 8:26
    provocar vocês sobre isso. Lembrem-se pelo
  • 8:24 - 8:28
    menos que argumentos são separados
    por espaços, então,
  • 8:26 - 8:30
    se você quiser fazer algo como criar um
  • 8:28 - 8:32
    diretório chamado "my photos",
  • 8:30 - 8:34
    não dá para simplesmente digitar
    make directory my photos.
  • 8:32 - 8:36
    Assim ele vai criar dois diretórios,
  • 8:34 - 8:40
    um chamado my e outro chamado photos e
  • 8:36 - 8:43
    provavelmente não é isso que você quer.
  • 8:40 - 8:46
    Uma coisa que você pode se perguntar é
    como o
  • 8:43 - 8:49
    shell sabe o que são esses programas
    quando
  • 8:46 - 8:51
    eu digito date ou echo. Como ele
  • 8:49 - 8:53
    sabe o que esses programas devem
  • 8:51 - 8:54
    fazer. A resposta é que o seu
  • 8:53 - 8:55
    programa, seu
  • 8:54 - 8:57
    computador tem um monte de programas
  • 8:55 - 9:00
    embutidos que já vêm com a máquina.
  • 8:57 - 9:03
    Assim como seu computador pode vir com o
  • 9:00 - 9:05
    aplicativo do terminal, ou com
  • 9:03 - 9:08
    o Windows Explorer ou
  • 9:05 - 9:10
    com algum tipo de navegador, ele também
  • 9:08 - 9:12
    já vem com aplicações específicas para
  • 9:10 - 9:15
    o terminal, e elas ficam salvas no
  • 9:12 - 9:18
    seu sistema de arquivos e o shell tem
  • 9:15 - 9:20
    uma maneira de determinar onde um
    programa está
  • 9:18 - 9:22
    localizado. Basicamente, ele tem uma
    forma de buscar
  • 9:20 - 9:25
    por programas. Ele faz isso através de
  • 9:22 - 9:27
    algo chamado variável de ambiente
  • 9:25 - 9:30
    invariante. Uma variável de ambiente
  • 9:27 - 9:32
    é uma variável que pode ser
  • 9:30 - 9:34
    usada para linguagens de programação.
  • 9:32 - 9:35
    Na verdade, o shell e o bash
  • 9:34 - 9:37
    em particular é
  • 9:35 - 9:39
    uma linguagem de programação. Esse
  • 9:37 - 9:42
    prompt que aparece aqui
  • 9:39 - 9:43
    é capaz não somente de rodar um programa
  • 9:42 - 9:46
    com argumentos. Ele também pode fazer
    outras coisas como
  • 9:43 - 9:48
    while loops, for loops, condicionais...
  • 9:46 - 9:50
    Tudo isso. Você pode definir
  • 9:48 - 9:51
    funções, pode ter variáveis, todas essas
  • 9:50 - 9:53
    coisas você consegue fazer no shell.
  • 9:51 - 9:56
    Vamos abordar boa parte disso na próxima
  • 9:53 - 9:58
    aula sobre shell scripting. Mas, por ora,
  • 9:56 - 10:00
    vamos olhar para
  • 9:58 - 10:01
    essa variável de ambiente em particular.
  • 10:00 - 10:03
    Variáveis de ambiente são coisas que
  • 10:01 - 10:05
    estão definidas toda vez que você inicia
    o shell.
  • 10:03 - 10:07
    Vocês não precisam defini-las toda vez
  • 10:05 - 10:08
    que abrem o shell, há
  • 10:07 - 10:10
    várias delas que já estão definidas, como
  • 10:08 - 10:12
    onde fica seu diretório home, qual
  • 10:10 - 10:13
    é seu nome de usuário. Há uma que é
    essencial
  • 10:12 - 10:16
    para esse caso em particular
  • 10:13 - 10:19
    que é a variável de caminho. Então se
  • 10:16 - 10:23
    eu digitar echo $PATH, ele vai
  • 10:19 - 10:25
    me mostrar todos os caminhos na minha
    máquina
  • 10:23 - 10:28
    onde o shell vai buscar por programas.
  • 10:25 - 10:31
    Vocês vão notar que isso é uma lista
  • 10:28 - 10:33
    separada por dois pontos. Ela pode ser
  • 10:31 - 10:36
    um pouco longa e difícil de ler, mas o
    importante
  • 10:33 - 10:38
    é que, sempre que você digitar o nome de
  • 10:36 - 10:42
    um programa, o shell vai buscar nesta
  • 10:38 - 10:44
    lista de caminhos da sua máquina, olhando
  • 10:42 - 10:47
    em cada diretório em busca de um
  • 10:44 - 10:49
    programa ou arquivo cujo nome coincida
  • 10:47 - 10:51
    com o comando que você está tentando
    rodar. No meu caso,
  • 10:49 - 10:53
    quando tento rodar date ou echo, ele
  • 10:51 - 10:55
    vai rodar por essa lista um por vez
  • 10:53 - 10:56
    até achar um que contenha o
  • 10:55 - 10:58
    programa chamado date ou echo, e aí
  • 10:56 - 11:00
    ele vai rodá-lo. Se quisermos saber
  • 10:58 - 11:02
    qual exatamente ele roda, há um
  • 11:00 - 11:05
    comando chamado which. O which nos permite
  • 11:02 - 11:08
    fazer isso, então quando eu posso digitar
    which echo e ele
  • 11:05 - 11:11
    vai me dizer que, se eu quiser rodar um
    programa
  • 11:08 - 11:13
    chamado echo, ele iria rodar deste aqui.
  • 11:11 - 11:16
    Vale a pena pausar aqui e falar sobre o
  • 11:13 - 11:19
    que são caminhos. Caminhos são uma forma
    nomear a
  • 11:16 - 11:22
    localização de um arquivo em seu
    computador.
  • 11:19 - 11:25
    No Linux e no MacOS esses caminhos são
  • 11:22 - 11:28
    separados por /, então
  • 11:25 - 11:31
    você vai ver aqui que este está no
  • 11:28 - 11:33
    diretório root. O / logo no começo
  • 11:31 - 11:35
    indica que o caminho começa
  • 11:33 - 11:38
    no topo do sistema de arquivos.
  • 11:35 - 11:41
    Depois olha no diretório chamado
  • 11:38 - 11:44
    usr, depois no diretório chamado bin
  • 11:41 - 11:46
    e depois olha no arquivo chamado echo.
  • 11:44 - 11:49
    No Windows, caminhos como esse são
    geralmente
  • 11:46 - 11:52
    separados por \.
  • 11:49 - 11:54
    Quando estamos no Linux ou MacOS,
  • 11:52 - 11:56
    tudo mora no root, então
  • 11:54 - 12:00
    todos os caminhos começam com um /,
    ou melhor, todos os
  • 11:56 - 12:02
    caminhos absolutos. No Windows, há um root
  • 12:00 - 12:05
    cada cada partição. Vocês já devem ter
  • 12:02 - 12:08
    visto coisas como C:\ ou D:\ .
  • 12:05 - 12:11
    No Windows, há um tipo de hierarquia
  • 12:08 - 12:13
    de caminhos de sistema para cada drive
  • 12:11 - 12:15
    que você tem,
  • 12:13 - 12:19
    enquanto no Linux e no MacOS
  • 12:15 - 12:20
    fica tudo sob um único nome.
  • 12:19 - 12:22
    Vocês devem ter notado que eu mencionei
  • 12:20 - 12:27
    caminho absoluto e talvez saibam o que
    isso
  • 12:22 - 12:29
    significa. Caminhos absolutos são caminhos
  • 12:27 - 12:32
    que determinam por completo a localização
    de um arquivo.
  • 12:29 - 12:34
    Neste caso, isso quer dizer que
  • 12:32 - 12:37
    queremos nos referir a um arquivo
    específico chamado echo
  • 12:34 - 12:39
    e estamos dando o caminho completo até
  • 12:37 - 12:43
    esse arquivo. Mas também há outro tipo
  • 12:39 - 12:45
    conhecido como caminhos relativos. Um
  • 12:43 - 12:49
    caminho relativo se refere a onde estamos
    no momento.
  • 12:45 - 12:52
    Então a forma de saber onde estamos no
  • 12:49 - 12:56
    momento é digitando pwd que significa
  • 12:52 - 13:00
    "imprima o diretório atual".
  • 12:56 - 13:03
    Então, se eu digitar pwd, ele
  • 13:00 - 13:06
    vai mostrar o caminho atual onde estou
  • 13:03 - 13:08
    agora, ou seja, estou no diretório
  • 13:06 - 13:11
    home sob o diretório root e depois
  • 13:08 - 13:15
    john, depois dev e assim por diante.
  • 13:11 - 13:17
    Daqui eu posso então decidir mudar
  • 13:15 - 13:19
    meu diretório atual, e todos os
  • 13:17 - 13:20
    caminhos relativos são ligados ao
  • 13:19 - 13:21
    diretório atual, que é
  • 13:20 - 13:25
    basicamente onde estamos no momento.
  • 13:21 - 13:29
    Por exemplo, neste caso, eu posso digitar
  • 13:25 - 13:30
    cd \home. cd quer dizer
    "mudar de diretório".
  • 13:29 - 13:33
    Essa é uma forma de mudar meu diretório
  • 13:30 - 13:35
    atual. Neste caso, eu mudei
  • 13:33 - 13:38
    para o home e vocês vêem que
  • 13:35 - 13:41
    o prompt do shell mudou, agora dizendo
  • 13:38 - 13:43
    que estou no home. Ele simplesmente mostra
  • 13:41 - 13:44
    o nome do último segmento do caminho,
  • 13:43 - 13:46
    mas vocês também podem configurar o
    terminal para mostrar
  • 13:44 - 13:50
    o caminho completo onde quer que
  • 13:46 - 13:53
    vocês estejam. Agora se eu digitar pwd
    de novo, ele
  • 13:50 - 13:55
    vai me dizer que estou no /home. Há alguns
  • 13:53 - 13:59
    diretórios especiais
  • 13:55 - 14:03
    aqui. Há o . e o .. . O .
  • 13:59 - 14:05
    se refere ao diretório atual e o ..
  • 14:03 - 14:07
    se refere ao diretório acima. Essa é uma
  • 14:05 - 14:10
    forma de navegar facilmente pelo
  • 14:07 - 14:13
    sistema. Por exemplo, se eu digitar cd ..
  • 14:10 - 14:15
    ele vai me dizer que estou agora no /,
  • 14:13 - 14:18
    ou seja, no root do sistema de
  • 14:15 - 14:22
    arquivos. Eu estava no /home e agora estou
  • 14:18 - 14:25
    no /. De fato, se eu digitar pwd, ele
    mostra
  • 14:22 - 14:27
    exatamente isso. Também posso usar
  • 14:25 - 14:29
    caminhos relativos para descer um nível no
  • 14:27 - 14:32
    caminho de arquivos. Então, se eu der
    cd . /home
  • 14:29 - 14:34
    ele vai me mover para o
  • 14:32 - 14:37
    diretório home sob o diretório atual.
  • 14:34 - 14:40
    E isso me leva
  • 14:37 - 14:42
    de volta ao /home. Se eu tentar agora
    cd ./home
  • 14:40 - 14:44
    de novo, ele me avisa que não há nenhum
  • 14:42 - 14:46
    diretório com esse nome porque não há um
  • 14:44 - 14:49
    diretório home sob o diretório em que
  • 14:46 - 14:54
    estou agora, no qual entrei com o cd.
  • 14:49 - 14:58
    Eu consigo usar cd para voltar todo
    o caminho
  • 14:54 - 15:01
    que percorri, usando
  • 14:58 - 15:07
    caminhos relativos, e eu posso fazer
    outras coisas
  • 15:01 - 15:09
    como ../../../../jon/ para voltar
  • 15:07 - 15:11
    para algum lugar lá dentro do meu sistema
    de arquivos.
  • 15:09 - 15:13
    Ocorre que ele está lá no root.
  • 15:11 - 15:16
    Aqui temos o diretório bin, e nele
  • 15:13 - 15:18
    há o arquivo echo. Daí eu
  • 15:16 - 15:20
    posso dar world e ele roda o
  • 15:18 - 15:22
    programa echo que está no bin.
  • 15:20 - 15:24
    Essa é uma forma com a qual vocês podem
    construir caminhos para
  • 15:22 - 15:27
    atravessar arbitrariamente seu sistema
    de arquivos.
  • 15:24 - 15:28
    Às vezes vocês vão querer usar caminhos
    absolutos e
  • 15:27 - 15:30
    às vezes, relativos. Geralmente
  • 15:28 - 15:33
    vocês vão querer usar o que for mais curto
  • 15:30 - 15:34
    mas se vocês quiserem, por exemplo, rodar
  • 15:31 - 15:34
    um programa ou escrever
  • 15:34 - 15:39
    um programa que roda esse programa, como
  • 15:37 - 15:42
    echo ou date, e vocês querem poder
  • 15:39 - 15:44
    rodá-lo a partir de qualquer local, ou
  • 15:42 - 15:46
    vocês dão o nome do
  • 15:44 - 15:48
    programa, como date ou echo, e deixam o
  • 15:46 - 15:50
    shell usar o caminho para descobrir onde
  • 15:48 - 15:52
    ele está, ou vocês dão o caminho
  • 15:50 - 15:54
    absoluto, porque se vocês derem um
    caminho relativo,
  • 15:52 - 15:56
    e eu for lá e rodar no meu diretório home,
  • 15:54 - 16:02
    e vocês rodarem em um outro diretório,
  • 15:56 - 16:05
    pode ser que funcione para mim mas não
    para vocês.
  • 16:02 - 16:06
    Em geral, quando rodamos um programa, ele
  • 16:05 - 16:08
    vai operar no diretório
  • 16:06 - 16:10
    atual, ao menos esse é o padrão,
  • 16:08 - 16:12
    a não ser que passemos outros argumentos.
  • 16:10 - 16:14
    Isso é bem útil porque significa
  • 16:12 - 16:16
    que muitas vezes não temos de dar
  • 16:14 - 16:18
    o caminho completo para as coisas, podemos
    simplesmente
  • 16:16 - 16:20
    usar o nome dos arquivos no diretório
  • 16:18 - 16:23
    em que estamos. Uma coisa
  • 16:20 - 16:24
    bem útil é descobrir em que diretório
  • 16:23 - 16:26
    estamos. Nós já
  • 16:24 - 16:28
    vimos o pwd que imprime o local
  • 16:26 - 16:31
    onde estamos, e há um comando chamado
  • 16:28 - 16:33
    ls que vai listar os
  • 16:31 - 16:36
    arquivos no diretório atual. Então se eu
  • 16:33 - 16:38
    digitar ls aqui, vemos todos os arquivos
  • 16:36 - 16:40
    no diretório atual, certo? É uma forma
  • 16:38 - 16:43
    boa de rapidamente navegar
  • 16:40 - 16:47
    através do sistema de arquivos. Vocês vão
  • 16:43 - 16:48
    ver que se eu der cd .. e depois ls, ele
  • 16:47 - 16:53
    me mostra os arquivos naquele diretório,
  • 16:48 - 16:56
    mas com o ls eu posso dar
  • 16:53 - 16:58
    ls .. e um caminho e
  • 16:56 - 17:00
    aí ele lista o que tiver naquele aquivo em
  • 16:58 - 17:04
    vez do que o que estou agora. Ele lista
    o outro
  • 17:00 - 17:06
    diretório. E vocês podem ver que se eu
  • 17:04 - 17:09
    for até o root também, certo, o root
  • 17:06 - 17:12
    tem outros arquivos. Um truque legal
  • 17:09 - 17:14
    que talvez vocês não conheçam aqui: há
  • 17:12 - 17:17
    dois outras coisas especiais que você
    pode fazer.
  • 17:14 - 17:18
    Uma é usar o til. Esse
  • 17:17 - 17:21
    caractere te leva pro diretório
  • 17:18 - 17:23
    home. Então o til sempre se expande para
  • 17:21 - 17:26
    o diretório home e você pode usar
  • 17:23 - 17:30
    caminhos relativos a ele. Posso dar
    til / dev
  • 17:26 - 17:33
    /pdos/classes/missing-semester/ e
  • 17:30 - 17:37
    agora estou lá porque esse til se expandiu
  • 17:33 - 17:39
    para /home/john. Um outro argumento legal
  • 17:37 - 17:42
    que vocês podem dar para o cd
    especificamente
  • 17:39 - 17:45
    é, se vocêm derem cd -,
  • 17:42 - 17:47
    ele vai cd para o diretório onde você
  • 17:45 - 17:48
    estava antes. Se eu der cd -, volto
  • 17:47 - 17:52
    para o root.
  • 17:48 - 17:54
    Se der cd - de novo, volto para o
    missing-semester.
  • 17:52 - 17:55
    É uma maneira útil de ficar indo e vindo
  • 17:54 - 18:01
    entre dois diretórios diferentes.
  • 17:55 - 18:04
    Em caso do ls, ou em caso
  • 18:01 - 18:06
    do cd, pode haver argumentos que vocês
  • 18:04 - 18:08
    não conhecem, certo? Até agora, ainda não
  • 18:06 - 18:10
    fizemos muito mais do que
  • 18:08 - 18:12
    dar caminhos, mas como é que descobrimos
  • 18:10 - 18:14
    que é possível passar um caminho para o ls
  • 18:12 - 18:17
    pra começo de conversa? Bem, a maioria
  • 18:14 - 18:19
    dos programas aceitam o que chamamos de
    argumentos, como
  • 18:17 - 18:22
    flags e opções. Essas são coisas que
  • 18:19 - 18:25
    geralmente são precedidas por um -. Um dos
  • 18:22 - 18:27
    usos mais úteis é --help. Muitos programas
  • 18:25 - 18:30
    implementam esse, então se vocês rodarem,
  • 18:27 - 18:34
    por exemplo, ls -help, ele proveitosamente
  • 18:30 - 18:36
    imprime um monte de informações sobre
  • 18:34 - 18:38
    aquele comando. Vocêm podem ver que ele
  • 18:36 - 18:40
    dize que o uso é ls e que é possível dar
  • 18:38 - 18:42
    um número de opções, e um número de
  • 18:40 - 18:46
    arquivos. A forma de se ler essa linha é
  • 18:42 - 18:49
    três pontos significa zero ou um
  • 18:46 - 18:51
    ou mais e os colchetes
  • 18:49 - 18:53
    querem dizer opcional. Nesse caso,
  • 18:51 - 18:54
    há um número opcional de opções
  • 18:53 - 18:57
    e um número opcional de arquivos.
  • 18:54 - 18:59
    Vejam que ele explica o que o programa
  • 18:57 - 19:01
    faz e também especifica um número
  • 18:59 - 19:03
    de diferentes tipos de flags e opções
  • 19:01 - 19:05
    que podemos escolher. Geralmente
    chamamos essas coisas
  • 19:03 - 19:08
    com um - e uma única letra
  • 19:05 - 19:10
    de flag ou qualquer coisa que
  • 19:08 - 19:12
    não leva um valor de flag, e qualquer
  • 19:10 - 19:17
    coisa que leva um valor chamamos de
    opção. Então,
  • 19:12 - 19:22
    por exemplo, - a and - all são ambos flags
  • 19:17 - 19:24
    e -C ou --color é uma opção. Uma coisa
  • 19:22 - 19:30
    que vocês vão ver se descerem bastante a
  • 19:24 - 19:37
    tela é a flag -l. Ops.
  • 19:30 - 19:39
    A flag -l usa
  • 19:37 - 19:41
    o formato de lista longa. Isso é
  • 19:39 - 19:43
    especialmente útil por si só,
  • 19:41 - 19:47
    mas vamos ver o que ela faz.
  • 19:43 - 19:48
    Se eu der ls -l, ele imprime
  • 19:47 - 19:50
    os arquivos no diretório atual, mas ele
  • 19:48 - 19:52
    dá muito mais informação sobre esses
  • 19:50 - 19:55
    arquivos. Vocês vão ver que vão usar
  • 19:52 - 19:56
    bastante isso porque
  • 19:55 - 20:01
    essas informações adicionais que ele
  • 19:56 - 20:02
    mostra são geralmente bem úteis. Vamos
  • 20:01 - 20:09
    ver um pouco dessas informações.
  • 20:02 - 20:10
    Primeiramente, o d no começo
  • 20:09 - 20:12
    de alguns desses itens
  • 20:10 - 20:15
    indica que aquele item é um diretório.
  • 20:12 - 20:16
    Então o _data aqui, por exemplo,
  • 20:15 - 20:19
    é um diretório,
  • 20:16 - 20:23
    enquanto o html não é um diretório,
  • 20:19 - 20:25
    mas sim um arquivo. As letras seguintes
  • 20:23 - 20:29
    indicam as permissões que estão
  • 20:25 - 20:31
    definidas para este arquivo. Então, como
  • 20:29 - 20:33
    vimos antes, talvez eu não consiga abrir
  • 20:31 - 20:34
    um certo arquivo ou não consiga
  • 20:33 - 20:36
    entrar em um diretório. Tudo isso é
  • 20:34 - 20:38
    regido pelas permissões daquele arquivo
  • 20:36 - 20:41
    ou diretório em particular. A maneira de
  • 20:38 - 20:44
    interpretar isso é: o primeiro dos três
  • 20:41 - 20:46
    grupos são as permissões definidas para o
  • 20:44 - 20:50
    dono do arquivo. Todos esses arquivos
  • 20:46 - 20:52
    que estamos vendo têm eu dono como.
  • 20:50 - 20:54
    O segundo grupo de três caraceteres se
    refere
  • 20:52 - 20:56
    às permissões do grupo que é dono desse
  • 20:54 - 20:59
    arquivo. Neste caso, todos esses arquivos
  • 20:56 - 21:02
    também pertencem ao grupo john.
  • 20:59 - 21:04
    Já o último grupo de três é uma lista
  • 21:02 - 21:06
    das permissões para todo o restante,
    ou seja,
  • 21:04 - 21:09
    qualquer um que não seja nem dono nem
    membro do grupo.
  • 21:06 - 21:11
    Esse diretório está um pouco sem graça
  • 21:09 - 21:14
    porque eu sou o dono de todos os itens,
  • 21:11 - 21:17
    mas se dermos cd /
  • 21:14 - 21:20
    ls -l vocês vão ver que
  • 21:17 - 21:23
    aqui todos os arquivos pertencem ao root.
  • 21:20 - 21:24
    Vamos voltar para esse assunto do
    usuário root, só vejam
  • 21:23 - 21:26
    que aqui as permissões são
  • 21:24 - 21:31
    um pouco mais interessantes. Os grupos de
  • 21:26 - 21:34
    três significam leitura, escrita e
    execução.
  • 21:31 - 21:36
    Isso signifca coisas diferentes para
    arquivos e para
  • 21:34 - 21:38
    diretórios. Para arquivos, é bem simples:
  • 21:36 - 21:40
    se vocês tiverem permissão de leitura para
  • 21:38 - 21:42
    um arquivo, vocês conseguem ler seu
  • 21:40 - 21:44
    conteído. Se tiver permissão de escrita
  • 21:42 - 21:46
    para um arquivo, podem salvá-lo
  • 21:44 - 21:48
    e adicionar conteúdo a ele, ou até
  • 21:46 - 21:51
    substitui-lo completamente. E se você
  • 21:48 - 21:53
    tiver x na execução de um arquivo,
  • 21:51 - 21:57
    você pode executá-lo. Então,
  • 21:53 - 22:00
    se dermos ls -l /usr/bin,
  • 21:57 - 22:03
    vocês verão que todos
  • 22:00 - 22:05
    têm a permissão de execução ativada
  • 22:03 - 22:06
    para todas as pessoas que não forem donas
  • 22:05 - 22:08
    do arquivo. É assim porque o programa
  • 22:06 - 22:09
    echo, por exemplo, queremos que possa
  • 22:08 - 22:12
    ser executado por qualquer um usando
    o computador.
  • 22:09 - 22:14
    Não há motivo pra dizer que apenas
  • 22:12 - 22:16
    alguns usuários podem rodar o echo.
  • 22:14 - 22:18
    Isso não faz sentido.
  • 22:16 - 22:21
    Já para diretórios, essas permissões
  • 22:18 - 22:24
    são um pouco diferentes. Leitura
  • 22:21 - 22:26
    quer dizer que podemos olhar quais
  • 22:24 - 22:29
    arquivos existem dentro desse diretório.
  • 22:26 - 22:31
    Associem leitura como list para
    diretórios.
  • 22:29 - 22:33
    Estamos autorizados a listar seu conteúdo?
  • 22:31 - 22:36
    Escrita para um diretório diz se estamos
  • 22:33 - 22:39
    autorizados a renomear, criar ou remover
  • 22:36 - 22:42
    arquivos dentro dele. Faz sentido,
  • 22:39 - 22:45
    mas lembrem-se de que isso significa que,
  • 22:42 - 22:48
    se vocês têm permissão de escrita em um
    arquivo
  • 22:45 - 22:50
    mas não têm permissão de escrita no
  • 22:48 - 22:52
    diretório dele, vocês não podem deletar o
    arquivo.
  • 22:50 - 22:54
    Você pode esvaziá-lo, mas não deletá-lo,
  • 22:52 - 22:58
    porque para isso seria preciso escrever
  • 22:54 - 22:59
    no diretório em si. Finalmente, execução
  • 22:58 - 23:02
    em diretórios é algo que confunde bastante
  • 22:59 - 23:05
    as pessoas. Executar em um diretório
  • 23:02 - 23:07
    é o que se chama buscar. O nome
  • 23:05 - 23:10
    não ajuda muito, mas o que quer dizer é
  • 23:07 - 23:13
    que podemos acessar esse diretório se
  • 23:10 - 23:15
    quisermos chegar a um arquivo.
  • 23:13 - 23:17
    Se quisermos abri-lo, lê-lo ou
  • 23:15 - 23:20
    escrever nele, ou qualquer outra coisa,
  • 23:17 - 23:23
    para dar cd e entrar em um diretório
  • 23:20 - 23:25
    é preciso ter permissão de execução em
  • 23:23 - 23:28
    todos os diretórios acima dele e
  • 23:25 - 23:30
    no próprio diretório. Por exemplo,
  • 23:28 - 23:34
    para eu acessar um arquivo dentro de
  • 23:30 - 23:36
    /usr/bin como o /usr/bin/echo, preciso
  • 23:34 - 23:38
    ter permissão de execução no root,
  • 23:36 - 23:40
    no usr, no
  • 23:38 - 23:42
    bin. Se eu não tiver algum deles,
  • 23:40 - 23:45
    não terei permissão
  • 23:42 - 23:48
    de acessar aquele arquivo, porque
  • 23:45 - 23:51
    não terei acesso aos diretórios ao longo
    do caminho até ele.
  • 23:48 - 23:53
    Vocês podem encontrar outros bits,
  • 23:51 - 23:55
    por exemplo, vocês podem ver
  • 23:53 - 23:58
    s ou t nessas listas, ou l.
  • 23:55 - 23:59
    Podemos conversar no tira-dúvidas
  • 23:58 - 24:01
    se ficarem curiosos,
  • 23:59 - 24:04
    a maioria não importa muito para
  • 24:01 - 24:06
    os assuntos que vocês vão ver neste curso,
  • 24:04 - 24:08
    mas é legal conhecer. Então, se quiserem
  • 24:06 - 24:11
    saber mais sobre eles, pesquisem
  • 24:08 - 24:13
    ou venham falar conosco.
  • 24:11 - 24:15
    Há outros programas que é bom
  • 24:13 - 24:16
    conhecer. Desculpa, uma coisa mais.
  • 24:15 - 24:17
    Como eu mencionei, se vocês só verem um -
  • 24:16 - 24:19
    significa que vocês não têm aquela
  • 24:17 - 24:22
    respectiva permissão. Por exemplo, se
  • 24:19 - 24:23
    houver r-x, quer dizer que vocês podem
  • 24:22 - 24:27
    ler e executar, mas não ler.
  • 24:23 - 24:29
    Há outros programas úteis
  • 24:27 - 24:32
    para vermos agora.
  • 24:29 - 24:35
    Um deles é o comando move ou mv.
  • 24:32 - 24:39
    Se eu der cd de volta para
    missing-semester, aqui o mv
  • 24:35 - 24:43
    me permite renomear um arquivo usando
  • 24:39 - 24:45
    dois caminhos, o caminho antigo e o
  • 24:43 - 24:48
    caminho novo. Ou seja, move nos permite
  • 24:45 - 24:50
    tanto renomear um arquivo, como quando
  • 24:48 - 24:52
    mudamos o nome do arquivo mas não o
  • 24:50 - 24:54
    diretório, ou ele permite mover
  • 24:52 - 24:56
    um arquivo para um diretório diferente.
  • 24:54 - 24:58
    É só dar o caminho atual do arquivo
  • 24:56 - 25:00
    e o caminho para onde vocês querem movê-lo
  • 24:58 - 25:03
    e isso vai alterar sua localização e
  • 25:00 - 25:05
    seu nome. Por exemplo, eu posso mover
  • 25:03 - 25:09
    dotfiles.md para foo.md
  • 25:05 - 25:16
    e, da mesma forma, posso mover
  • 25:09 - 25:19
    de volta. Há também o comando cp.
  • 25:16 - 25:22
    O cp ou copy é bem parecido,
  • 25:19 - 25:24
    ele nos permite copiar um arquivo também
  • 25:22 - 25:26
    usando dois argumentos, o caminho de onde
  • 25:24 - 25:28
    queremos copiar e o caminho para onde
  • 25:26 - 25:31
    queremos copiar. Esses são caminhos
    completos, então eu poderia
  • 25:28 - 25:33
    usar isso, por exemplo, para dizer que
    quero
  • 25:31 - 25:38
    copiar dotfiles.md to ../foo.md.
  • 25:33 - 25:40
    E agora se eu der ls .
  • 25:38 - 25:43
    vocês podem ver que há um arquivo foo.md
  • 25:40 - 25:45
    naquele diretório. O cp também
  • 25:43 - 25:48
    recebe dois caminhos, não é preciso ser no
  • 25:45 - 25:50
    mesmo diretório. Igualmente existe o
  • 25:48 - 25:52
    comando rm que nos permite remover
  • 25:50 - 25:54
    um arquivo e também dá para dar caminhos.
  • 25:52 - 25:57
    Nesse caso, estou removendo ../foo.
  • 25:54 - 25:59
    Lembrem-se que o remover,
  • 25:57 - 26:02
    especialmente no Linux, por default
  • 25:59 - 26:05
    não é recursivo, então não dá para remover
  • 26:02 - 26:07
    um diretório usando rm. É preciso passar
  • 26:05 - 26:09
    a flag -r que nos permite
  • 26:07 - 26:11
    remover recursivamente e depois o
  • 26:09 - 26:13
    caminho que quer remover. Daí ele
  • 26:11 - 26:16
    remove tudo que estiver sob este
    diretório. Há também
  • 26:13 - 26:18
    o comando rmdir que permite
  • 26:16 - 26:21
    remover um diretório mas só se
  • 26:18 - 26:23
    ele estiver vazio. Então a
  • 26:21 - 26:24
    ideia aqui é criar um mecanismo pra
  • 26:23 - 26:25
    nos dar uma certa segurança, para não
  • 26:24 - 26:29
    jogarmos fora acidentalmente um monte
  • 26:25 - 26:31
    de arquivos. O último comandozinho
  • 26:29 - 26:33
    que é útil usar é o mkdir que
  • 26:31 - 26:34
    permite criar um novo diretório.
  • 26:33 - 26:36
    Como falamos antes, você não quer fazer
  • 26:34 - 26:38
    algo assim porque senão ele vai
  • 26:36 - 26:41
    criar dois diretórios, um chamado
  • 26:38 - 26:42
    my e outro chamado photos. Para criar
  • 26:41 - 26:43
    um diretório assim é preciso escapar
  • 26:42 - 26:50
    o character de
  • 26:43 - 26:53
    espaço ou usar aspas.
  • 26:50 - 26:55
    Quando vocês quiserem mais informação
  • 26:53 - 26:57
    sobre como qualquer comando
  • 26:55 - 26:58
    nessas plataformas funciona, há um
  • 26:57 - 27:01
    comando bem útil para isso, que
  • 26:58 - 27:05
    invoca o programa chamado man,
  • 27:01 - 27:06
    que significa manual pages. Este programa
  • 27:05 - 27:09
    pede como argumento o nome de outro
    programa
  • 27:06 - 27:12
    e retorna seu manual. Então, por exemplo,
  • 27:09 - 27:15
    podemos digitar man ls e isso vai mostrar
  • 27:12 - 27:17
    a página do manual do ls. Vocês vão ver
  • 27:15 - 27:19
    que, nesse caso do ls, o resultado é bem
  • 27:17 - 27:21
    parecido com o que vemos com ls -help,
  • 27:19 - 27:24
    porém é mais fácil navegar e
  • 27:21 - 27:26
    ler. Mais pro final da página vocês
  • 27:24 - 27:29
    encontram exemplos
  • 27:26 - 27:30
    sobre quem escreveu o programa,
  • 27:29 - 27:32
    onde encontrar mais informação e esse
  • 27:30 - 27:33
    tipo de coisa. Algo que pode causar
    confusão
  • 27:32 - 27:35
    às vezes,
  • 27:33 - 27:36
    ao menos até a versão mais atual em que
  • 27:35 - 27:39
    eles adicionaram essa árvore no final,
  • 27:36 - 27:41
    que diz q para sair, é que eles não
    costumavam
  • 27:39 - 27:43
    dizer isso, aperte q para sair deste
  • 27:41 - 27:48
    programa. Pode ser bem difícil de sair
  • 27:43 - 27:51
    pra quem não conhece. Falando nisso,
  • 27:48 - 27:53
    um atalho de teclado legal aqui é
    ctrl+l
  • 27:51 - 27:57
    que limpa o terminal e volta pro topo.
  • 27:53 - 27:59
    Até agora só falamos sobre
  • 27:57 - 28:01
    programas isolados, mas o
  • 27:59 - 28:03
    poder do shell, na verdade, aparece
  • 28:01 - 28:06
    na hora em que começamos
  • 28:03 - 28:08
    a combinar diferentes programas, certo?
  • 28:06 - 28:11
    Então, em vez de rodar cd e rodar ls etc,
  • 28:08 - 28:12
    vocês poderiam querer encadear
  • 28:11 - 28:14
    diversos programas, ou
  • 28:12 - 28:16
    querer interagir com arquivos e
  • 28:14 - 28:19
    operá-los entre um programa e outro.
  • 28:16 - 28:21
    A forma de fazer isso é usando a
  • 28:19 - 28:25
    noção de streams que o shell nos dá.
  • 28:21 - 28:26
    Todo programa, por default, tem...
  • 28:25 - 28:29
    vou simplificar um pouco e falar de
  • 28:26 - 28:32
    dois streams primários, o de entrada
  • 28:29 - 28:34
    e o de saída. Por default, o stream de
  • 28:32 - 28:35
    entrada é basicamente seu teclado,
  • 28:34 - 28:37
    seu terminal, e
  • 28:35 - 28:39
    o que quer que você digite no terminal vai
  • 28:37 - 28:41
    acabar parando no seu programa, que tem
  • 28:39 - 28:42
    um stream de saída padrão, que é
  • 28:41 - 28:44
    usado sempre que o programa imprime
  • 28:42 - 28:46
    algo. Ele imprime no stream e, por padrão,
  • 28:44 - 28:48
    é também seu terminal. É por isso que
  • 28:46 - 28:51
    quando digito echo hello, isso é impresso
  • 28:48 - 28:54
    no terminal. Mas o
  • 28:51 - 28:56
    shell lhes dá uma forma de redirecionar
  • 28:54 - 28:59
    esses streams para mudar onde é a entrada
  • 28:56 - 29:01
    e a saída de um programa.
  • 28:59 - 29:06
    A maneira mais fácil de fazer isso é
  • 29:01 - 29:08
    usando o < e >. De modo que vocês podem
  • 29:06 - 29:12
    escrever algo assim ou escrever algo
  • 29:08 - 29:14
    assim. O > significa que
  • 29:12 - 29:16
    a entrada pra esse programa deve ser
  • 29:14 - 29:21
    redirecionada para o conteúdo desse
  • 29:16 - 29:24
    arquivo e o < significa que
  • 29:21 - 29:28
    a saída do programa precedente deve ser
  • 29:24 - 29:29
    redirecionada para este arquivo. Vamos
  • 29:28 - 29:32
    ver um exemplo de como isso funciona.
  • 29:29 - 29:34
    Se eu der echo hello, posso dizer que
    quero que
  • 29:32 - 29:37
    o conteúdo seja salvo em
  • 29:34 - 29:39
    um arquivo chamado hello.txt. Como eu dei
  • 29:37 - 29:41
    esse caminho relativo, ele vai criar
  • 29:39 - 29:43
    um arquivo no diretório atual
  • 29:41 - 29:45
    chamado hello.text. Ao menos teoricamente
  • 29:43 - 29:48
    seu conteúdo deveria ser a
  • 29:45 - 29:50
    palavra hello. Se eu rodar isso, vejam
  • 29:48 - 29:52
    que nada aparece na minha saída, da
  • 29:50 - 29:53
    última vez que rodei echo hello
  • 29:52 - 29:55
    a palavra hello aparecia na tela.
  • 29:53 - 29:58
    Agora, essa saída foi direcionada para um
  • 29:55 - 30:01
    arquivo chamado hello.txt. Dá para
    verificar
  • 29:58 - 30:04
    isso usando um programa chamado cat.
  • 30:01 - 30:07
    O cat imprime na tela o conteúdo de um
    arquivo, então
  • 30:04 - 30:11
    posso rodar hello.txt e ele mostra
  • 30:07 - 30:13
    hello. Porém o cat também permite
  • 30:11 - 30:16
    esse tipo de direcionamento, então posso
  • 30:13 - 30:18
    dizer cat, que por default imprime sua
  • 30:16 - 30:21
    entrada na tela, ele apenas duplica
    a entrada
  • 30:18 - 30:24
    na saída. Posso dizer que quero que
  • 30:21 - 30:25
    pegue sua entrada do hello.txt, e o
  • 30:24 - 30:27
    que vai acontecer neste caso é que
  • 30:25 - 30:30
    o sheel vai abrir o hello.txt,
  • 30:27 - 30:33
    pegar seu conteúdo e definir isso como
  • 30:30 - 30:34
    a entrada do cat, e aí o car vai imprimir
  • 30:33 - 30:36
    isso na sua saída. Como não direcionei a
    saída,
  • 30:34 - 30:38
    vai aparecer no
  • 30:36 - 30:42
    meu terminal. Então ele vai simplesmente
    imprimir
  • 30:38 - 30:44
    hello na saída. Posso usar ambos
  • 30:42 - 30:45
    ao menos tempo, por exemplo,
  • 30:44 - 30:47
    se quero copiar um arquivo sem usar o
  • 30:45 - 30:52
    comando cp por algum motivo,
  • 30:47 - 30:54
    posso fazer assim. Neste caso, não
  • 30:52 - 30:57
    estou passando nada ao programa cat,
  • 30:54 - 30:58
    só estou dizendo, funcione normalmente,
  • 30:57 - 31:00
    o programa cat não sabe
  • 30:58 - 31:02
    nada sobre esse redirecionamento. Mas
  • 31:00 - 31:04
    estou dizendo ao shell para usar o
    hello.txt
  • 31:02 - 31:08
    como entrada para o cat e para escrever
  • 31:04 - 31:09
    o que quer que seja que o cat vai soltar
    no arquivo hello.txt.
  • 31:08 - 31:10
    De novo, nada aparece no meu terminal,
  • 31:09 - 31:13
    mas se
  • 31:10 - 31:16
    eu der cat hello2.txt, vejo a saída como
  • 31:13 - 31:21
    era esperado, que é uma cópia do arquivo
  • 31:16 - 31:23
    original. Há, também, o sinal >>
  • 31:21 - 31:27
    que significa anexar em vez de
  • 31:23 - 31:27
    escrever por cima. Então você vai notar
  • 31:27 - 31:30
    que se eu digitar
  • 31:27 - 31:32
    cat < hello.txt > hello2.txt
  • 31:30 - 31:34
    de novo e depois cat hello2.txt,
  • 31:32 - 31:36
    ele ainda contém somente hello, apesar de
  • 31:34 - 31:39
    já conter um hello antes. Se eu mudar para
  • 31:36 - 31:41
    >> para anexar
  • 31:39 - 31:46
    e digitar cat nesse arquivo,
  • 31:41 - 31:48
    agora hello aparece duas vezes. São
  • 31:46 - 31:50
    comandos bem simples, geralmente
  • 31:48 - 31:52
    só para interagir com arquivos, mas
  • 31:50 - 31:53
    isso fica realmente interessante se
    usarmos
  • 31:52 - 31:56
    um operador adicional do shell chamado
  • 31:53 - 32:00
    pipe. O pipe é uma barra vertical
  • 31:56 - 32:03
    e o que ele faz é pegar
  • 32:00 - 32:05
    a saída de um programa à esquerda e
  • 32:03 - 32:10
    torná-la entrada do programa
  • 32:05 - 32:14
    à direita. Vamos ver como funciona.
  • 32:10 - 32:17
    Vamos usar o exemplo do ls -l /
  • 32:14 - 32:20
    Isso imprime um monte de coisas. Digamos
  • 32:17 - 32:22
    que eu só quero a
  • 32:20 - 32:26
    última linha dessa saída. Bem, há um
  • 32:22 - 32:29
    comando chamado tail. O tail imprime
  • 32:26 - 32:32
    as últimas n linhas da entrada, então
  • 32:29 - 32:35
    posso digitar -n 1. Essa é a flag chamada
  • 32:32 - 32:37
    n. Também dá pra usar --lines se quiserem
  • 32:35 - 32:39
    uma opção mais longa, mas nesse caso
  • 32:37 - 32:42
    o que isso faz é imprimir a última
  • 32:39 - 32:47
    linha. Posso escrever tudo junto,
  • 32:42 - 32:51
    ls -l | tail -n 1.
  • 32:47 - 32:53
    Vejam aqui que o ls não sabe
  • 32:51 - 32:55
    nada sobre o tail e o tail não sabe nada
  • 32:53 - 32:57
    sobre o lr. São programas diferentes e que
  • 32:55 - 32:59
    nunca foram programados para ser
    compatíveis
  • 32:57 - 33:01
    um com o outro. Tudo que eles sabem
  • 32:59 - 33:03
    fazer é ler uma entrada e escrever em uma
  • 33:01 - 33:05
    saída. É o pipe que os conecta
  • 33:03 - 33:08
    e, nesse caso particular, estou dizendo
  • 33:05 - 33:09
    que quero que a saída do ls sirva de
  • 33:08 - 33:11
    entrada para o tail e quero que a saída
  • 33:09 - 33:12
    do tail vá para o terminal porque não
  • 33:11 - 33:14
    a redirecionei.
  • 33:12 - 33:17
    Eu também poderia definir que
  • 33:14 - 33:19
    a saída deveria ir para ls.txt e,
  • 33:17 - 33:21
    nesse caso, se eu der cat ls.txt vou
  • 33:19 - 33:23
    ver a saída apropriada. Ocorre que
  • 33:21 - 33:22
    é possível fazer coisas muito elegantes
    com isso.
  • 33:23 - 33:28
    Nós vamos ir mais a fundo na aula
  • 33:25 - 33:31
    'Duelando com os Dados' daqui
  • 33:28 - 33:32
    uns quatro dias, sobre as coisas
  • 33:31 - 33:36
    mais elaboradas que vocês podem fazer
  • 33:32 - 33:38
    ao construir pipelines mais avançados.
  • 33:36 - 33:42
    Pra dar um exemplo, podemos digitar
  • 33:38 - 33:46
    curl --head --silent google.com.
  • 33:42 - 33:49
    Só para mostrar como isso funciona,
  • 33:46 - 33:53
    esse comando retorna todos os
    cabeçalhos HTTP
  • 33:49 - 33:57
    para acessar google.com. E eu posso mandar
  • 33:53 - 34:01
    isso direto para o grep --ignore-case
  • 33:57 - 34:04
    ou -i se preferir, depois -content-lenght.
  • 34:01 - 34:06
    Isso vai imprimir o
  • 34:04 - 34:08
    tamanho do conteúdo do cabeçalho. O grep
  • 34:06 - 34:09
    é um programa sobre o qual vamos falar
    mais tarde.
  • 34:08 - 34:13
    Ele nos permite buscar uma palavra-chave
  • 34:09 - 34:16
    em um stream de entrada. Podemos usar o
    pipe para mandar
  • 34:13 - 34:20
    para o comando cut, que recebe um
  • 34:16 - 34:22
    delimitador, escolhido como espaço, e eu
  • 34:20 - 34:24
    quero o segundo campo. Isso imprime
  • 34:22 - 34:26
    apenas o tamanho do conteúdo. Esse é
  • 34:24 - 34:28
    um exemplo bobo, só para
  • 34:26 - 34:30
    extrair o tamanho em bytes
  • 34:28 - 34:33
    do google.com pela linha de comando.
  • 34:30 - 34:35
    Não é algo muito útil,
  • 34:33 - 34:36
    mas serve para mostrar que, encadeando
  • 34:35 - 34:38
    essas coisas, conseguimos obter
  • 34:36 - 34:41
    diversos efeitos de manipulação de texto.
  • 34:38 - 34:43
    E os pipes não servem apenas para
  • 34:41 - 34:45
    dados de texto, dá para usá-lo com
  • 34:43 - 34:48
    imagens também. Podemos ter um
  • 34:45 - 34:50
    programa que manipula uma imagem em
  • 34:48 - 34:51
    binário como entrada e escreve uma
  • 34:50 - 34:53
    imagem em binário como saída. E é
    possível encadeá-los
  • 34:51 - 34:55
    dessa forma (vamos dar mais exemplos
  • 34:53 - 34:57
    mais pra frente).
  • 34:55 - 34:59
    É possível usá-lo até com
  • 34:57 - 35:01
    vídeo se vocês quiserem.
  • 34:59 - 35:03
    Por exemplo, uma ótima maneira de
  • 35:01 - 35:06
    ter um chromecast em casa: você pode
  • 35:03 - 35:08
    stream um arquivo de vídeo ao definir
  • 35:06 - 35:11
    que o último programa no seu pipe é um
  • 35:08 - 35:13
    chromecast send. Com isso, dá para enviar
  • 35:11 - 35:19
    um arquivo de vídeo para o streaming ou
  • 35:13 - 35:20
    usar http para seu chromecast.
  • 35:19 - 35:22
    Vamos falar bem mais sobre isso na aula
  • 35:20 - 35:25
    'Duelando com os Dados'. Uma coisa mais
  • 35:22 - 35:28
    que gostaria de mostrar é como
  • 35:25 - 35:30
    usar o terminal de uma forma mais
  • 35:28 - 35:32
    interessante e talvez mais poderosa
  • 35:30 - 35:34
    do que vocês estão acostumados.
  • 35:32 - 35:36
    Essa dica talveu vai ser válida até para
  • 35:34 - 35:38
    quem já se sente mais
  • 35:36 - 35:41
    confortável com o terminal.
  • 35:38 - 35:43
    Primeiro precisamos abordar um tópico
  • 35:41 - 35:45
    importante no que diz respeito aos
    sistemas Linux
  • 35:43 - 35:48
    e MacOS em particular, que é a noção
  • 35:45 - 35:49
    de usuário root. O usuário root é como
  • 35:48 - 35:52
    o administrador no Windows,
  • 35:49 - 35:55
    ele tem ID 0.
  • 35:52 - 35:57
    O usuário root é especial porque ele
  • 35:55 - 36:00
    pode fazer o que quiser
  • 35:57 - 36:02
    no seu sistema, ainda que um arquivo não
  • 36:00 - 36:04
    possa ser lido ou escrito por mais
  • 36:02 - 36:06
    ninguém, o root ainda pode acessá-lo.
  • 36:04 - 36:09
    O root é como um super usuário
  • 36:06 - 36:11
    que faz o que quiser.
  • 36:09 - 36:13
    Na maiorias das vezes, vocês não vão
  • 36:11 - 36:16
    operar como o super usuário, vocês não
  • 36:13 - 36:17
    vão ser o root. Vocês vão ser um usuário
    como john
  • 36:16 - 36:20
    ou qualquer que seja seu nome, Esse vai
  • 36:17 - 36:21
    ser seu usuário, com o qual vocês agem,
  • 36:20 - 36:23
    porque se vocês operassem seu computador
  • 36:21 - 36:25
    como o usuário root o tempo todo,
  • 36:23 - 36:27
    e rodasse um programa errado, pode ser
  • 36:25 - 36:30
    que destruiriam o computador. Vocês não
  • 36:27 - 36:32
    querem fazer isso, certo? Mas de vez em
    quando
  • 36:30 - 36:34
    vocês podem querer fazer algo que requeira
  • 36:32 - 36:39
    que vocês sejam root. Para esses casos,
  • 36:34 - 36:43
    normalmente vocês vão usar um programa
    chamado sudo
  • 36:39 - 36:45
    or 'faça como su" e, nesse caso, su
    significa
  • 36:43 - 36:47
    super usuário. Essa é uma forma de fazer
  • 36:45 - 36:50
    algo como super usuário.
  • 36:47 - 36:51
    Normalmente funciona assim:
  • 36:50 - 36:53
    escrevemos sudo e depois o comando
  • 36:51 - 36:55
    como fazemos no terminal. Ele vai
  • 36:53 - 36:56
    rodar aquele comando como se você
  • 36:55 - 37:01
    fosse o root em vez do seu usuário normal.
  • 36:56 - 37:05
    Onde vocês podem precisar de algo assim?
  • 37:01 - 37:06
    Bem, um há vários arquivos de sistema
  • 37:05 - 37:08
    especiais no seu computador,
  • 37:06 - 37:11
    mas, em particular, há um
  • 37:08 - 37:15
    chamado sysfs. Se você der cd /sys,
  • 37:11 - 37:17
    vamos para um mundo bem diferente.
  • 37:15 - 37:20
    Esse arquivo de sistema não é exatamente
  • 37:17 - 37:22
    um arquivo em seu computador. Na verdade,
  • 37:20 - 37:24
    são vários parâmetros do kernel. O kernel
  • 37:22 - 37:27
    é basicamente o cérebro do seu computador.
  • 37:24 - 37:30
    Essa é uma forma de acessar os diversos
  • 37:27 - 37:33
    parâmetros do kernel através do que
  • 37:30 - 37:36
    se parece com um arquivo de sistema. Vejam
  • 37:33 - 37:38
    que se eu der cd em class, por exemplo,
  • 37:36 - 37:40
    há diretórios para um monte de tipos
  • 37:38 - 37:44
    diferentes de dispositivos com os quais
  • 37:40 - 37:48
    posso interagir, ou muitas filas que
    posso acessar
  • 37:44 - 37:50
    ou uma variedade de botões internos
  • 37:48 - 37:50
    esquisitos. Como eles estão mostrados
    como arquivos,
  • 37:50 - 37:54
    dá para usarmos todas as ferramentas que
  • 37:52 - 37:58
    já vimos para manipulá-los.
  • 37:54 - 38:01
    Um exemplo disso é se vocês entrarem
  • 37:58 - 38:02
    em sys class backlight, esse backlight
  • 38:01 - 38:04
    permite que configuremos diretamente
  • 38:02 - 38:07
    a luz do nosso laptop, se ele tiver uma.
  • 38:04 - 38:09
    Se eu der cd e entrar no intel backlight,
  • 38:07 - 38:11
    porque esse é um laptop da Intel,
  • 38:09 - 38:13
    aqui vocês vêem que há um arquivo chamado
    brightness
  • 38:11 - 38:16
    e eu posso cat brightness. Esse é o brilho
  • 38:13 - 38:19
    atual da minha tela. Mas mais que isso,
  • 38:16 - 38:21
    posso modificá-lo também para mudar o
  • 38:19 - 38:24
    brilho da tela. Então
  • 38:21 - 38:26
    vocês podem pensar que consigo...
  • 38:24 - 38:27
    deixe-me ver qual é o brilho máximo.
  • 38:26 - 38:30
    Ok, agora está no máximo.
  • 38:27 - 38:32
    Vocês podem imaginar que eu
  • 38:30 - 38:35
    poderia fazer algo como echo,
  • 38:32 - 38:39
    vamos reduzir,
  • 38:35 - 38:38
    echo 500 para brightness,
  • 38:38 - 38:39
    se faço isso ele diz
  • 38:39 - 38:43
    que a permissão foi negada. Eu não posso
  • 38:41 - 38:45
    modificar o brilho porque, para fazê-lo,
  • 38:43 - 38:47
    para modificar coisas no
  • 38:45 - 38:48
    kernel, é preciso ser o
  • 38:47 - 38:51
    administrador. Vocês podem pensar
  • 38:48 - 38:53
    que a forma de resolver isso é digitar
  • 38:51 - 38:56
    sudo echo 500 mas ainda assim a
  • 38:53 - 38:58
    permissão é negada. Por que?
  • 38:56 - 39:01
    Porque, como mencionei, esses
  • 38:58 - 39:03
    redirecionamentos de entrada e saída não
  • 39:01 - 39:05
    são algo que os programas saibam quando
  • 39:03 - 39:07
    usamos o pipe com o ls e o tail, o tail
  • 39:05 - 39:10
    não sabia do ls e o ls não sabia do tail.
  • 39:07 - 39:12
    O pipe e o redirecionamento foram
    estabelecidos
  • 39:10 - 39:14
    pelo shell, então, nesse caso,
  • 39:12 - 39:18
    o que está ocorrendo é que estou
    dizendo ao shell
  • 39:14 - 39:21
    para rodar o programa sudo com os
    argumentos
  • 39:18 - 39:24
    echo e 500 e mandar essa saída para o
  • 39:21 - 39:26
    arquivo chamado brightness, mas é o shell
  • 39:24 - 39:29
    que está abrindo o arquivo brightness,
  • 39:26 - 39:32
    não o programa sudo. Nesse caso, é
  • 39:29 - 39:34
    o shell que está rodando quando eu tento
  • 39:32 - 39:35
    abrir o arquivo brightness para escrever
    nele
  • 39:34 - 39:37
    e ele não tem permissão para fazer isso.
  • 39:35 - 39:40
    Portanto, ele dá erro.
  • 39:37 - 39:42
    Vocês já devem ter visto isso quando
  • 39:40 - 39:44
    buscam algo e acabam, no Stack Overflow
  • 39:42 - 39:45
    e dizem para rodar um comando tal
  • 39:44 - 39:47
    e eles falam, por exemplo,
  • 39:45 - 39:53
    eles dão uma instrução
  • 39:47 - 39:58
    como 1 > /sys/class
  • 39:53 - 40:00
    net ipv4 word, por exemplo.
  • 39:58 - 40:03
    Isso é algo que vocês podem ter visto se
  • 40:00 - 40:04
    tiverem tentado configurar um firewall
  • 40:03 - 40:06
    e esse comando tem de funcionar
  • 40:04 - 40:08
    porque o simbolozinho de hashtag
  • 40:06 - 40:10
    indica que deve roda como root.
  • 40:08 - 40:11
    Isso é raramente explicado,
  • 40:10 - 40:13
    mas é isso que o # significa.
  • 40:11 - 40:15
    Vejam no meu prompt um símbolo $
  • 40:13 - 40:18
    que indica
  • 40:15 - 40:19
    que não estou rodando como root.
  • 40:18 - 40:22
    Então a questão é como eu faço pra
    resolver isso?
  • 40:19 - 40:25
    Bem, eu poderia mudar para outro terminal
  • 40:22 - 40:27
    como root, e um jeito de fazer isso é
  • 40:25 - 40:32
    rodar sudo su, que significa
    'rode o seguinte
  • 40:27 - 40:34
    comando como root' e o su é um comando
  • 40:32 - 40:37
    complicado que nos abre um shell como
  • 40:34 - 40:41
    super usuário. Então se faço isso,
  • 40:37 - 40:42
    entro a senha, vocês podem ver
  • 40:41 - 40:45
    que o nome de usuário no início
  • 40:42 - 40:47
    mudou de john para root, e o prompt
  • 40:45 - 40:49
    mudou de $ para #.
  • 40:47 - 40:52
    Se eu agora der echo 500 para
  • 40:49 - 40:54
    o arquivo brightness, minha tela
  • 40:52 - 40:57
    ficou um pouco mais escura. Vocês
  • 40:54 - 40:59
    não conseguem ver então terão de acreditar
    em mim. Não deu nenhum
  • 40:57 - 41:02
    erro porque agora o shell está
  • 40:59 - 41:05
    rodando como root e não mais como
  • 41:02 - 41:07
    john. O usuário root tem permissão de
  • 41:05 - 41:10
    abrir esse arquivo. Mas com o que sabemos
  • 41:07 - 41:11
    sobre o terminal agora, há, na verdade,
  • 41:10 - 41:14
    uma maneira de fazer isso sem ter
  • 41:11 - 41:19
    de abrir um shell root. Funciona assim.
  • 41:14 - 41:23
    Deixe-me voltar para 1060.
  • 41:19 - 41:27
    Vocês vêem por que está diferente
  • 41:23 - 41:29
    aqui? Estou dizendo ao shell para
  • 41:27 - 41:31
    rodar o comando echo 1060,
  • 41:29 - 41:33
    e estou dizendo para rodar o
  • 41:31 - 41:36
    comando sudo tee brightness.
  • 41:33 - 41:39
    Estou dizendo para mandar a saída do
  • 41:36 - 41:41
    echo para o sudo tee. Para entender isso
  • 41:39 - 41:43
    vocês precisam saber o que o comando
    tee faz.
  • 41:41 - 41:47
    O comando tee pega sua entrada e a escreve
  • 41:43 - 41:50
    tanto em um arquivo quanto na tela.
  • 41:47 - 41:52
    Então o tee é uma maneira conveniente se
  • 41:50 - 41:54
    vocês tiverem, por exemplo, um arquivo
    de logs que queiram enviar
  • 41:52 - 41:56
    para deixar guardado para mais tarde,
  • 41:54 - 41:58
    mas também querem checar vocês mesmos.
  • 41:56 - 42:00
    Vocês podem usar o pipe para mandá-lo
    para o tee, passar o nome de
  • 41:58 - 42:02
    um arquivo e ele vai escrever o que quer
    que esteja na sua
  • 42:00 - 42:04
    entrada tanto no arquivo quanto na sua
  • 42:02 - 42:08
    tela. Aqui estou aproveitando esse
  • 42:04 - 42:10
    programa, estou dizendo 'rode o tee como
  • 42:08 - 42:13
    rota e use o tee direto no arquivo
    brightness.
  • 42:10 - 42:14
    Nesse caso, o programa tee,
  • 42:13 - 42:16
    que é quem está abrindo o arquivo
    brightness,
  • 42:14 - 42:17
    está rodando como root, então ele
  • 42:16 - 42:20
    tem permissão de fazer isso.
  • 42:17 - 42:21
    Se eu rodar de novo, vocês não conseguem
  • 42:20 - 42:24
    ver, mas o brilho aumentou no laptop,
  • 42:21 - 42:26
    não deu nenhum erro
  • 42:24 - 42:27
    e não foi preciso abrir um shell como
  • 42:26 - 42:31
    root e rodar comandos nele,
  • 42:27 - 42:32
    o que muitas vezes pode ser perigoso.
  • 42:31 - 42:33
    Se vocês quiserem explorar esses
    arquivos de sistema
  • 42:32 - 42:36
    um pouco mais, há bastante coisa
  • 42:33 - 42:39
    interessante aqui. Se vocês
  • 42:36 - 42:41
    derem uma navegada por aqui,
  • 42:39 - 42:43
    vão achar bastante coisas divertidas.
  • 42:41 - 42:45
    Por exemplo, nós notamos que tem um
  • 42:43 - 42:49
    comando legal para o brilho aqui, que
  • 42:45 - 42:50
    outros tipos de brilhos eu poderia
    definir?
  • 42:49 - 42:52
    Eu posso usar o comando find, sobre o
  • 42:50 - 42:56
    qual também vamos falar numa próxima aula,
  • 42:52 - 42:59
    Quero olhar qualquer arquivo cujo nome
  • 42:56 - 43:02
    se parece com brightness no
  • 42:59 - 43:05
    diretório atual. Não ajudou muito, talvez
  • 43:02 - 43:09
    não sejam arquivos. Será que soletrei
    errado?
  • 43:05 - 43:17
    Hum, por que não funciona?
  • 43:09 - 43:20
    Oh, parece que ele não quer buscar por
  • 43:17 - 43:24
    brightness. Para a sorte de vocês eu já
  • 43:20 - 43:27
    conheço um legal.
  • 43:24 - 43:30
    Há um subdiretório chamado leds e
  • 43:27 - 43:32
    leds também têm brilho. Que tipos de leds
  • 43:30 - 43:37
    existem? Um monte!
  • 43:32 - 43:38
    Por exemplo, o led da tecla scroll lock.
  • 43:37 - 43:40
    A maioria de vocês provavelmente não sabe
  • 43:38 - 43:43
    o que é o led do scroll lock e muito
  • 43:40 - 43:46
    menos o que o scroll lock faz. Talvez
    vocês já viram uma tecla
  • 43:43 - 43:48
    no teclado chamada scroll lock.
  • 43:46 - 43:50
    Basicamente ninguém mais sabe pra que
  • 43:48 - 43:52
    serve, ninguém usa pra nada.
  • 43:50 - 43:56
    É quase uma tecla morta e
  • 43:52 - 43:57
    um led morto. E se vocês quisessem
  • 43:56 - 43:59
    configurá-lo para que, toda vez que
  • 43:57 - 44:01
    chegar um e-mail, o led do scroll lock
    acender?
  • 43:59 - 44:03
    Por que não tem nenhuma outra razão para
  • 44:01 - 44:06
    ele acender. Bem, se entrarmos nesse
  • 44:03 - 44:08
    diretório que tem um brilho
  • 44:06 - 44:12
    definido como 0.
  • 44:08 - 44:12
    Bom, o que acontece se eu escrever 1 nele?
  • 44:13 - 44:17
    É aconselhável vocês não saírem
  • 44:15 - 44:19
    escrevendo números aleatórios em qualquer
    arquivo
  • 44:17 - 44:20
    deste diretório porque isso vai afetar
  • 44:19 - 44:23
    diretamente o kernel. Dêem uma olhada
    antes
  • 44:20 - 44:24
    no que os arquivos fazem. Nesse caso aqui,
  • 44:23 - 44:28
    eu fiz uma pesquisa prévia com cuidado.
  • 44:24 - 44:31
    Vocês não conseguem ver, mas agora
  • 44:28 - 44:34
    no meu teclado o led da tecla scroll lock
  • 44:31 - 44:35
    está aceso. Se eu escrevesse um programa
  • 44:34 - 44:38
    que checa e-mails, eu poderia, no final
  • 44:35 - 44:40
    do programa, rodar um outro programa que
  • 44:38 - 44:43
    manda echo 1 para este arquivo, e portanto
  • 44:40 - 44:47
    teria uma maneira de acender o led do meu
  • 44:43 - 44:50
    teclado para indicar que chegou um e-mail.
  • 44:47 - 44:51
    Nessas alturas, vocês já devem saber
  • 44:50 - 44:54
    mais ou menos se virar
  • 44:51 - 44:56
    com o terminal, o shell e conhecer o
  • 44:54 - 44:59
    bastante para realizar essas tarefas
  • 44:56 - 45:01
    simples, ao menos teoricamente. Vocês não
  • 44:59 - 45:03
    deveriam mais precisar de
  • 45:01 - 45:03
    interfaces dependentes do mouse para
  • 45:03 - 45:05
    encontrar arquivos.
  • 45:03 - 45:07
    Um truque que faltou mostrar e vocês
  • 45:05 - 45:11
    podem precisar é o de abrir arquivos.
  • 45:07 - 45:14
    Até agora só mostrei como encontrar
  • 45:11 - 45:18
    arquivos, mas algo que vocês precisam
  • 45:14 - 45:21
    saber nesse curso é usar o
  • 45:18 - 45:24
    xdg-open. Esse provavelmente só vai
  • 45:21 - 45:27
    funcionar no Linux. Acho que no MacOS ele
  • 45:24 - 45:29
    se chama open e no Windows... sei lá.
  • 45:27 - 45:32
    O xdg-open recebe o nome de um arquivo e
  • 45:29 - 45:35
    vai abri-lo usando o programa apropriado.
  • 45:32 - 45:36
    Se vocês derem xdg-open em um arquivo
  • 45:35 - 45:39
    html, ele vai abrir o navegador
  • 45:36 - 45:41
    e abrir o arquivo. Uma vez que têm esse
  • 45:39 - 45:43
    programa, teoricamente vocês não
  • 45:41 - 45:45
    precisam nunca mais abrir uma janela do
  • 45:43 - 45:47
    buscador. Talvez precisem por outros
  • 45:45 - 45:48
    motivos, mas em teoria vocês conseguem
  • 45:47 - 45:51
    fazer tudo usando as ferramentas
  • 45:48 - 45:54
    que aprendemos hoje. Talvez pareça tudo
  • 45:51 - 45:56
    relativamente básico para alguns de vocês,
  • 45:54 - 45:57
    mas como eu mencionei, hoje tivemos
  • 45:56 - 45:59
    uma introdução. Agora sabemos como o
  • 45:57 - 46:02
    shell funciona e muito do que vamos
  • 45:59 - 46:03
    fazer nas próximas aulas é usar esse
  • 46:02 - 46:07
    conhecimento para fazer coisas bem
  • 46:03 - 46:09
    interessantes usando o shell.
  • 46:07 - 46:11
    Ou seja, hoje vimos como usar a interface
  • 46:09 - 46:15
    que vamos precisar, então é importante
  • 46:11 - 46:17
    todos saberem. Na próxima aula,
  • 46:15 - 46:18
    vamos falar bastante sobre como
  • 46:17 - 46:20
    automatizar tarefas como essas,
  • 46:18 - 46:22
    como escrever scripts que rodam um monte
  • 46:20 - 46:24
    de programas pra nós, usando
  • 46:22 - 46:27
    condicionais, loops etc no terminal,
  • 46:24 - 46:29
    ou mesmo coisas como rodar
  • 46:27 - 46:30
    um programa até ele quebrar, o que pode
  • 46:29 - 46:32
    ser bem útil em casos que queremos
  • 46:30 - 46:35
    rodar algo até os testes darem erro,
  • 46:32 - 46:39
    por exemplo. Então esse será o tópico da
  • 46:35 - 46:40
    aula na próxima semana. Você tinha
    uma pergunta?
  • 46:39 - 46:42
    Sim, com relação ao que você mostrou no
  • 46:40 - 46:50
    diretório sys, provavelmente só vai
    funcionar
  • 46:42 - 46:53
    se você estiver usando o subsistema do
    Windows pro Linux...
  • 46:50 - 46:55
    Boa pergunta, eu não sei se
  • 46:53 - 46:58
    o subsistema do Windows para Linux vai
  • 46:55 - 46:59
    deixar aberto esses arquivos de sistema
    no sys. Se deixar,
  • 46:58 - 47:03
    provavelmente vai mostrar só
  • 46:59 - 47:08
    umas poucas coisas...
  • 47:03 - 47:10
    Não sei, dê uma olhada.
  • 47:08 - 47:12
    Algo que vocês vão ver é que as notas
  • 47:10 - 47:14
    de aula dessa aula já estão
  • 47:12 - 47:17
    online, e no final do arquivo
  • 47:14 - 47:18
    tem diversos exercícios. Alguns
  • 47:17 - 47:20
    são relativamente fáceis, outros um
  • 47:18 - 47:23
    pouco mais difíceis. Sugerimos
  • 47:20 - 47:24
    tentar resolvê-los.
  • 47:23 - 47:25
    Se vocês já sabem esse conteúdo,
  • 47:24 - 47:28
    vai ser bem rápido,
  • 47:25 - 47:29
    e se não sabem vai servir para aprenderem
  • 47:28 - 47:32
    um monte de coisas que talvez vocês
  • 47:29 - 47:33
    percebam que não sabiam. No tira-dúvidas,
  • 47:32 - 47:35
    que vai acontecer logo
  • 47:33 - 47:37
    após essa aula, ficaremos felizes
  • 47:35 - 47:38
    em ajudá-los com os exercícios ou
  • 47:37 - 47:40
    com outros comandos que vocês vão
  • 47:38 - 47:42
    aprender nesse processo e queiram saber
  • 47:40 - 47:45
    como usar de forma eficiente. Enão na
  • 47:42 - 47:47
    próxima aula, já amanhã, vamos assumir
  • 47:45 - 47:48
    que vocês estão por dentro desse tipo
    de coisa
  • 47:47 - 47:52
    que os exercícios vão ensinar.
  • 47:48 - 47:53
    Há também um endereço de e-mail
  • 47:52 - 47:56
    no website, vocês podem mandar questões
  • 47:53 - 47:59
    que aparecerem depois do tira dúvidas.
  • 47:56 - 48:05
    Mais alguma pergunta
  • 47:59 - 48:07
    antes de terminar por hoje? Não?
  • 48:05 - 48:09
    Tudo bem, estaremos disponíveis no
  • 48:07 - 48:12
    nono andar do prédio Gates, o 32,
  • 48:09 - 48:16
    dentro de cinco minutos.
  • 48:12 - 48:16
    Vejo vocês lá!
Title:
Lecture 1: Course Overview + The Shell (2020)
Description:

more » « less
Video Language:
English
Duration:
48:17

Portuguese, Brazilian subtitles

Revisions