0:00:00.650,0:00:07.799 Tudo bem, pessoal, obrigado por virem. 0:00:02.428,0:00:07.799 Esse é o semestre que faltava na sua [br]fomação em ciência da computação. 0:00:07.799,0:00:11.519 Ou, pelo menos, é assim que decidimos[br]nomear 0:00:09.960,0:00:13.679 este curso. Se não é pra essa aula que 0:00:11.519,0:00:15.900 você veio, então você entrou na sala[br]errada. Nós 0:00:13.679,0:00:19.590 estaremos aqui por mais ou menos 1h só 0:00:15.900,0:00:21.180 para ajustar suas expectativas e... [br]eu quero falar 0:00:19.590,0:00:23.789 um pouco com vocês sobre o por quê 0:00:21.180,0:00:25.980 de estarmos dando este curso. O curso 0:00:23.789,0:00:29.670 se originou de uma observação que o Anish, 0:00:25.980,0:00:33.030 o José e eu fizemos enquanto dávamos [br]monitoria para vários 0:00:29.670,0:00:34.710 cursos no MIT. Basicamente, 0:00:31.320,0:00:34.710 todos nós, cientistas da computação, [br]sabemos 0:00:34.710,0:00:38.370 que computadores são ótimos em fazer 0:00:36.420,0:00:41.250 tarefas repetitivas e automatizar coisas. 0:00:38.370,0:00:43.020 Mas muitas vezes não percebemos que há 0:00:41.250,0:00:45.930 muitas ferramentas que podem fazer nossos[br]próprios 0:00:43.020,0:00:47.520 processos de desenvolvimento melhores.[br]Nós podemos ser 0:00:45.930,0:00:49.620 bem mais eficientes sobre como usamos [br]nossos 0:00:47.520,0:00:51.989 computadores porque podemos usá-los 0:00:49.620,0:00:54.360 como uma ferramenta para nós mesmos, não 0:00:51.989,0:00:57.809 apenas para criar websites ou software ou 0:00:54.360,0:00:59.670 coisas do gênero. Este curso é 0:00:57.809,0:01:03.000 uma tentativa de abordar isso e uma[br]tentativa 0:00:59.670,0:01:05.220 de mostrar para vocês algumas ferramentas [br]que vocês 0:01:03.000,0:01:07.640 podem usar para um ótimo efeito seu [br]dia a dia 0:01:05.220,0:01:11.670 em pesquisa e nos estudos. 0:01:07.640,0:01:15.150 Este vai ser um curso no qual nós 0:01:10.381,0:01:15.150 queremos ensinar tanto como aproveitar 0:01:15.150,0:01:19.200 ao máximo as ferramentas que você já 0:01:16.439,0:01:20.909 conhece, mas também, assim esperamos, [br]ensinar vocês sobre 0:01:19.200,0:01:23.520 algumas ferramentas novas, 0:01:20.909,0:01:26.250 além de como combinar essas ferramentas 0:01:23.520,0:01:28.140 para produzir coisas mais poderosas do que 0:01:26.250,0:01:31.049 vocês imaginam ser capaz de fazer [br]com o que 0:01:28.140,0:01:33.420 já sabem atualmente. Este curso está 0:01:31.049,0:01:36.630 estruturado em uma séria de aulas de 1h 0:01:33.420,0:01:38.880 e cada aula vai cobrir 0:01:36.630,0:01:40.920 um tópico em paticular. Vocês podem checar 0:01:38.880,0:01:43.439 o website, que está escrito lá, para 0:01:40.920,0:01:45.990 acessar a lista de tópicos e datas 0:01:43.439,0:01:48.210 de cada um. As aulas serão, em geral, 0:01:45.990,0:01:49.350 independentes, então vocês podem 0:01:48.210,0:01:51.450 comparecer às que lhes interessa. 0:01:49.350,0:01:53.610 Porém vamos assumir que 0:01:51.450,0:01:55.649 vocês vêm acompanhando o conteúdo, de modo 0:01:53.610,0:01:57.030 que, ao chegarmos às aulas futuras, não 0:01:55.649,0:02:02.280 vou ficar ensinando bash tudo outra vez. 0:01:57.030,0:02:05.310 Por exemplo, nós também vamos postar 0:02:02.280,0:02:08.459 tanto as notas de aula quanto as gravações 0:02:05.310,0:02:10.110 das aulas online. Ainda não decidimos 0:02:08.459,0:02:12.330 exatamente quando vamos fazer isso, 0:02:10.110,0:02:14.280 mas será após as aulas. Obviamente, os 0:02:12.330,0:02:16.620 vídeos têm de ser postados depois [br]que a aula ocorre. 0:02:14.280,0:02:19.380 O curso vai ser ministrado por mim, John e 0:02:16.620,0:02:21.120 Anish, sentados ali, e pelo Jose, 0:02:19.380,0:02:24.090 que não está aqui mas vai dar 0:02:21.120,0:02:25.740 a aula de amanhã. Lembrem-se que 0:02:24.090,0:02:27.990 estamos tentando abordar um monte 0:02:25.740,0:02:30.720 de assuntos neste curso de apenas 11 0:02:27.990,0:02:33.240 aulas de 1h, então vamos avançar 0:02:30.720,0:02:35.460 relativamente rápido. Mas, por favor, 0:02:33.240,0:02:37.080 interrompam se houver algo que vocês 0:02:35.460,0:02:38.430 não estiverem conseguindo acompanhar. 0:02:37.080,0:02:40.290 Se você achar que devemos dedicar 0:02:38.430,0:02:41.730 mais tempo a algum tópico, fale conosco. 0:02:40.290,0:02:45.240 Por favor, interrompa com perguntas. 0:02:41.730,0:02:47.220 Além disso, após cada aula estaremos 0:02:45.240,0:02:49.650 disponíveis no nono andar do 0:02:47.220,0:02:51.570 prédio 30 no Stata Center, 0:02:49.650,0:02:53.220 o prédio de ciência da computação. Então, [br]se você 0:02:51.570,0:02:55.980 aparecer no nono andar 0:02:53.220,0:02:58.140 lá, na Gates Tower, pode vir 0:02:55.980,0:03:00.750 e tentar fazer os exercícios que 0:02:58.140,0:03:02.940 vamos dar em cada aula ou simplesmente[br]fazer perguntas 0:03:00.750,0:03:04.440 sobre outras assuntos que tivermos 0:03:02.940,0:03:08.000 tratado nas aulas ou outras coisas, 0:03:04.440,0:03:08.000 como umar seu computador de forma [br]eficiente. 0:03:08.150,0:03:13.740 Devido ao tempo limitado que temos 0:03:11.640,0:03:16.530 disponível, não vai ser possível 0:03:13.740,0:03:19.080 abordar todas as ferramentas em detalhe, 0:03:16.530,0:03:21.240 então tentaremos salientar ferramentas 0:03:19.080,0:03:23.430 importantes e formas interessantes de[br]usá-las. 0:03:21.240,0:03:25.110 Não vamos, necessariamente, ir a fundo 0:03:23.430,0:03:27.540 nos detalhes de como tudo funciona or 0:03:25.110,0:03:29.070 discutir casos mais elaborados, mas[br]se vocês tiverem 0:03:27.540,0:03:31.050 perguntas sobre isso, por favor,[br]venha falar conosco 0:03:29.070,0:03:33.690 sobre isso também. Muitas dessas [br]ferramentas são 0:03:31.050,0:03:34.860 ferramentas que temos usado por anos 0:03:33.690,0:03:36.680 e podemos lhes direcionar a mais coisas 0:03:34.860,0:03:39.060 interessantes que vocês podem fazer [br]com elas. 0:03:36.680,0:03:42.990 Então, aproveitem que estamos aqui. 0:03:39.060,0:03:45.210 Esta aula vai... não quero dizer 0:03:42.990,0:03:46.980 escalar rapidamente, mas 0:03:45.210,0:03:49.050 o que vai acontecer no decorrer 0:03:46.980,0:03:51.330 dessa aula em particular é que vamos 0:03:49.050,0:03:52.530 abordar bastante do básico, e assumiremos 0:03:51.330,0:03:54.480 que vocês já sabem isso no restante do 0:03:52.530,0:03:56.010 semetre. Coisas como usar o 0:03:54.480,0:03:57.210 shell e o terminal (vou explicar o que são 0:03:56.010,0:03:59.850 para os que não conhecem ainda), 0:03:57.210,0:04:01.890 e depois, bem rapidamente, vamos 0:03:59.850,0:04:03.840 escalar para ferramentas mais avançadas 0:04:01.890,0:04:05.250 e como usá-las. Vocês já podem ver nas 0:04:03.840,0:04:07.490 notas de aula o tipo de 0:04:05.250,0:04:10.110 tópicos que vamos cobrir. 0:04:07.490,0:04:12.120 Então isso nos traz à aula de hoje 0:04:10.110,0:04:14.640 na qual vamos cobrir o shell. 0:04:12.120,0:04:16.950 O shell vai ser uma 0:04:14.640,0:04:19.290 das formas primárias de interagir com seu 0:04:16.950,0:04:21.299 computador. Quando você quiser fazer mais[br]coisas 0:04:19.290,0:04:24.540 do que as que são possíveis com as [br]interfaces visuais, 0:04:21.299,0:04:26.370 com as quais talvez você esteja [br]acostumada/o, lhe permitam fazer. 0:04:24.540,0:04:26.550 As interfaces visuais são limitadas no 0:04:26.370,0:04:28.560 que 0:04:26.550,0:04:29.669 elas lhe permitem fazer, porque você só 0:04:28.560,0:04:32.009 pode fazer as coisas para as quais há 0:04:29.669,0:04:34.919 botões, sliders ou campos de inputs. 0:04:32.009,0:04:37.470 Geralmente essas ferramentas textuais [br]são construídas 0:04:34.919,0:04:39.900 para serem combinadas umas com as outras, [br]mas 0:04:37.470,0:04:41.430 há também diversas formas diferentes de 0:04:39.900,0:04:42.960 combiná-las, programá-las ou 0:04:41.430,0:04:44.940 automatizá-las e é por isso que, 0:04:42.960,0:04:48.060 neste curso, vamos focar na 0:04:44.940,0:04:49.860 linha de comando ou em ferramentas[br]baseadas em texto. 0:04:48.060,0:04:51.870 O shell é o local se faz a 0:04:49.860,0:04:53.849 maioria desse trabalho. Então para [br]aqueles que 0:04:51.870,0:04:56.729 não estão acostumados com o shell, [br]a maioria 0:04:53.849,0:04:59.219 das plataformas oferecem algum tipo [br]de shell. 0:04:56.729,0:05:00.780 No Windows, há o PowerShell, mas 0:04:59.219,0:05:04.139 há também outros shell disponíveis 0:05:00.780,0:05:06.389 no Windows. Já no Linux vocês vão [br]encontrar um monte de 0:05:04.139,0:05:08.219 terminais, que são janelas que lhes [br]permitem 0:05:06.389,0:05:10.500 visualizar shells e vocês também vão 0:05:08.219,0:05:13.229 encontrar diversos tipos de shells. O mais 0:05:10.500,0:05:15.810 comum deles é o bash, ou 'born 0:05:13.229,0:05:17.460 again shell'. Por ser um shell tão comum, 0:05:15.810,0:05:18.990 é basicamente esse que vamos 0:05:17.460,0:05:21.300 usar nessas aulas. 0:05:18.990,0:05:23.580 Se você usa Mac OS, você provavelmente 0:05:21.300,0:05:26.159 já tem o bash ou uma versão antiga dele 0:05:23.580,0:05:27.479 se você abrir o app do terminal. Então, 0:05:26.159,0:05:29.190 se você quiser acompanhar em qualquer uma 0:05:27.479,0:05:30.210 dessas plataformas, fique à vontade, mas 0:05:29.190,0:05:32.520 tenha em mente que o curso vai ser 0:05:30.210,0:05:34.229 meio que baseado em Linux no que diz[br]respeito a como 0:05:32.520,0:05:39.000 vamos ensinar, ainda que a maioria dessas[br]ferramentas 0:05:34.229,0:05:40.409 funcione em todas as plataformas. [br]Se você quiser 0:05:39.000,0:05:42.539 instalar um terminal e um shell e 0:05:40.409,0:05:45.330 não sabe como fazer isso muito bem,[br]ficaremos felizes em 0:05:42.539,0:05:47.400 lhes ajudar na nossa sala ou, geralmente, 0:05:45.330,0:05:51.599 é bem fácil buscar no Google 0:05:47.400,0:05:57.060 'sua plataforma' mais 'terminal' e você 0:05:51.599,0:05:59.039 vai achar um. Bom, quando você abre um 0:05:57.060,0:06:01.169 terminal você vê algo que se parece com 0:05:59.039,0:06:04.229 isso. Normalmente vai ter 0:06:01.169,0:06:06.000 uma única linha no topo, o que é 0:06:04.229,0:06:07.710 conhecido como prompt do shell. 0:06:06.000,0:06:10.020 Você pode ver que meu prompt do shell 0:06:07.710,0:06:12.090 parece com isso, tem meu nome de usuário,[br]o nome 0:06:10.020,0:06:14.219 da máquina que estou usando, o caminho 0:06:12.090,0:06:16.770 da pasta onde estou (vamos falar de [br]caminhos 0:06:14.219,0:06:18.719 um pouco mais tarde) e daí ele 0:06:16.770,0:06:20.969 fica piscando lá, pedindo 0:06:18.719,0:06:22.440 um input. Esse é o prompt do shell 0:06:20.969,0:06:25.860 onde você diz ao shell o que quer 0:06:22.440,0:06:27.479 que ele faça. Dá pra customizar 0:06:25.860,0:06:28.620 bastante esse prompt, quando você abri-lo 0:06:27.479,0:06:31.139 na sua máquina talvez ele não vai ter [br]exatamente 0:06:28.620,0:06:33.840 essa aparência. Talvez um pouco, 0:06:31.139,0:06:35.399 se você já tiver configurado, 0:06:33.840,0:06:38.279 ou pode ter muitas outras 0:06:35.399,0:06:39.779 formas. Não vamos falar muito 0:06:38.279,0:06:40.350 sobre customizar seu shell nesta 0:06:39.779,0:06:41.910 aula em particular, 0:06:40.350,0:06:43.710 faremos isso mais tarde. Aqui vamos 0:06:41.910,0:06:47.790 só falar sobre como usar esse 0:06:43.710,0:06:49.860 shell para fazer coisas úteis. Esta é 0:06:47.790,0:06:51.750 a principal interface de texto que você 0:06:49.860,0:06:53.430 tem para seu computador, através do shell. 0:06:51.750,0:06:55.950 No shell, você pode digitar 0:06:53.430,0:06:58.920 comandos e os comandos podem ser 0:06:55.950,0:07:00.570 coisas relativamente simples. Geralmente 0:06:58.920,0:07:02.550 você vai executar programas com 0:07:00.570,0:07:04.470 argumentos. Como isso funciona? Bem, 0:07:02.550,0:07:06.210 um programa que podemos executar é o [br]de data. 0:07:04.470,0:07:07.380 É só digitar date e apertar 0:07:06.210,0:07:10.290 enter, aí ele vai 0:07:07.380,0:07:12.330 te mostrar a data e hora. Você também 0:07:10.290,0:07:14.850 pode executar um programa com argumentos. 0:07:12.330,0:07:17.790 Isso é uma forma de modificar o[br]comportamento 0:07:14.850,0:07:20.760 do programa. Por exemplo, há um 0:07:17.790,0:07:22.410 programa chamado echo. O echo imprime 0:07:20.760,0:07:25.050 os argumentos que você passa, e esses 0:07:22.410,0:07:27.330 arugmentos são simplesmente coisas 0:07:25.050,0:07:29.820 separadas por um espaço em branco logo [br]após o nome. 0:07:27.330,0:07:30.720 Então podemos dizer hello e ele vai [br]imprimir 0:07:29.820,0:07:32.940 hello de volta. 0:07:30.720,0:07:35.610 Talvez não muito surpreendente, mas isso 0:07:32.940,0:07:37.050 é uma das coisas básicas dos argumentos. 0:07:35.610,0:07:38.550 Uma coisa que vocês vão notar é que [br]eu disse 0:07:37.050,0:07:40.380 que argumentos são separados por 0:07:38.550,0:07:42.060 espaços em branco. Talveu vocês se [br]perguntem, "bom, 0:07:40.380,0:07:44.310 e se eu quiser um argumento com várias 0:07:42.060,0:07:47.220 palavras?" Você pode pôr essas coisas[br]entre aspas, e aí dá para 0:07:44.310,0:07:50.310 fazer coisas como echo hello espaço 0:07:47.220,0:07:52.710 world e agora o programa echo recebe 0:07:50.310,0:07:55.380 um argumento que contém a string 0:07:52.710,0:07:57.540 hello world com um espaço. Bom, também dá 0:07:55.380,0:07:58.770 para usar aspas simples para isso. [br]Vou explicar a 0:07:57.540,0:08:00.480 diferença entre aspas simples e 0:07:58.770,0:08:03.420 aspas duplas quando falarmos 0:08:00.480,0:08:06.120 sobre scripting em bash. Vocês também 0:08:03.420,0:08:09.000 podem escapar um caracter, então, por 0:08:06.120,0:08:12.150 exemplo, hello world. Isso também 0:08:09.000,0:08:15.720 funciona. Todas as regras sobre 0:08:12.150,0:08:17.340 como escapar e como analisar e 0:08:15.720,0:08:19.590 dar vários argumentos e variáveis 0:08:17.340,0:08:21.330 nós vamos cobrir mais tarde. Espero 0:08:19.590,0:08:23.520 que não encontrem muitas coisas esquisitas[br]sobre isso. Nós temos de 0:08:21.330,0:08:26.070 provocar vocês sobre isso. Lembrem-se pelo 0:08:23.520,0:08:27.930 menos que argumentos são separados [br]por espaços, então, 0:08:26.070,0:08:29.610 se você quiser fazer algo como criar um 0:08:27.930,0:08:31.920 diretório chamado "my photos", 0:08:29.610,0:08:33.780 não dá para simplesmente digitar[br]make directory my photos. 0:08:31.920,0:08:35.880 Assim ele vai criar dois diretórios, 0:08:33.780,0:08:40.010 um chamado my e outro chamado photos e 0:08:35.880,0:08:43.229 provavelmente não é isso que você quer. 0:08:40.010,0:08:45.600 Uma coisa que você pode se perguntar é[br]como o 0:08:43.229,0:08:48.839 shell sabe o que são esses programas [br]quando 0:08:45.600,0:08:50.700 eu digito date ou echo. Como ele 0:08:48.839,0:08:53.190 sabe o que esses programas devem 0:08:50.700,0:08:54.000 fazer. A resposta é que o seu 0:08:53.190,0:08:55.439 programa, seu 0:08:54.000,0:08:57.000 computador tem um monte de programas 0:08:55.439,0:08:59.759 embutidos que já vêm com a máquina. 0:08:57.000,0:09:02.579 Assim como seu computador pode vir com o 0:08:59.759,0:09:05.339 aplicativo do terminal, ou com 0:09:02.579,0:09:07.800 o Windows Explorer ou 0:09:05.339,0:09:09.569 com algum tipo de navegador, ele também 0:09:07.800,0:09:11.639 já vem com aplicações específicas para 0:09:09.569,0:09:14.819 o terminal, e elas ficam salvas no 0:09:11.639,0:09:18.209 seu sistema de arquivos e o shell tem 0:09:14.819,0:09:19.949 uma maneira de determinar onde um[br]programa está 0:09:18.209,0:09:22.459 localizado. Basicamente, ele tem uma [br]forma de buscar 0:09:19.949,0:09:24.620 por programas. Ele faz isso através de 0:09:22.459,0:09:27.389 algo chamado variável de ambiente 0:09:24.620,0:09:29.970 invariante. Uma variável de ambiente 0:09:27.389,0:09:31.560 é uma variável que pode ser 0:09:29.970,0:09:33.899 usada para linguagens de programação. 0:09:31.560,0:09:35.160 Na verdade, o shell e o bash 0:09:33.899,0:09:37.350 em particular é 0:09:35.160,0:09:39.420 uma linguagem de programação. Esse 0:09:37.350,0:09:41.550 prompt que aparece aqui 0:09:39.420,0:09:43.470 é capaz não somente de rodar um programa 0:09:41.550,0:09:46.470 com argumentos. Ele também pode fazer [br]outras coisas como 0:09:43.470,0:09:47.910 while loops, for loops, condicionais... 0:09:46.470,0:09:49.860 Tudo isso. Você pode definir 0:09:47.910,0:09:51.000 funções, pode ter variáveis, todas essas 0:09:49.860,0:09:52.860 coisas você consegue fazer no shell. 0:09:51.000,0:09:56.399 Vamos abordar boa parte disso na próxima 0:09:52.860,0:09:57.990 aula sobre shell scripting. Mas, por ora, 0:09:56.399,0:09:59.790 vamos olhar para 0:09:57.990,0:10:01.199 essa variável de ambiente em particular. 0:09:59.790,0:10:02.699 Variáveis de ambiente são coisas que 0:10:01.199,0:10:04.829 estão definidas toda vez que você inicia [br]o shell. 0:10:02.699,0:10:06.600 Vocês não precisam defini-las toda vez 0:10:04.829,0:10:08.160 que abrem o shell, há 0:10:06.600,0:10:09.750 várias delas que já estão definidas, como 0:10:08.160,0:10:11.850 onde fica seu diretório home, qual 0:10:09.750,0:10:13.079 é seu nome de usuário. Há uma que é[br]essencial 0:10:11.850,0:10:16.170 para esse caso em particular 0:10:13.079,0:10:18.930 que é a variável de caminho. Então se 0:10:16.170,0:10:22.589 eu digitar echo $PATH, ele vai 0:10:18.930,0:10:25.100 me mostrar todos os caminhos na minha [br]máquina 0:10:22.589,0:10:27.930 onde o shell vai buscar por programas. 0:10:25.100,0:10:30.870 Vocês vão notar que isso é uma lista 0:10:27.930,0:10:33.000 separada por dois pontos. Ela pode ser 0:10:30.870,0:10:36.000 um pouco longa e difícil de ler, mas o[br]importante 0:10:33.000,0:10:38.279 é que, sempre que você digitar o nome de 0:10:36.000,0:10:41.610 um programa, o shell vai buscar nesta 0:10:38.279,0:10:43.769 lista de caminhos da sua máquina, olhando 0:10:41.610,0:10:46.920 em cada diretório em busca de um 0:10:43.769,0:10:49.110 programa ou arquivo cujo nome coincida 0:10:46.920,0:10:51.029 com o comando que você está tentando [br]rodar. No meu caso, 0:10:49.110,0:10:52.800 quando tento rodar date ou echo, ele 0:10:51.029,0:10:54.509 vai rodar por essa lista um por vez 0:10:52.800,0:10:56.370 até achar um que contenha o 0:10:54.509,0:10:58.410 programa chamado date ou echo, e aí 0:10:56.370,0:11:00.000 ele vai rodá-lo. Se quisermos saber 0:10:58.410,0:11:01.649 qual exatamente ele roda, há um 0:11:00.000,0:11:04.620 comando chamado which. O which nos permite 0:11:01.649,0:11:07.500 fazer isso, então quando eu posso digitar [br]which echo e ele 0:11:04.620,0:11:10.830 vai me dizer que, se eu quiser rodar um [br]programa 0:11:07.500,0:11:12.720 chamado echo, ele iria rodar deste aqui. 0:11:10.830,0:11:16.350 Vale a pena pausar aqui e falar sobre o 0:11:12.720,0:11:18.620 que são caminhos. Caminhos são uma forma [br]nomear a 0:11:16.350,0:11:21.630 localização de um arquivo em seu [br]computador. 0:11:18.620,0:11:24.780 No Linux e no MacOS esses caminhos são 0:11:21.630,0:11:28.170 separados por /, então 0:11:24.780,0:11:30.930 você vai ver aqui que este está no 0:11:28.170,0:11:32.760 diretório root. O / logo no começo 0:11:30.930,0:11:34.850 indica que o caminho começa 0:11:32.760,0:11:37.710 no topo do sistema de arquivos. 0:11:34.850,0:11:40.980 Depois olha no diretório chamado 0:11:37.710,0:11:43.580 usr, depois no diretório chamado bin 0:11:40.980,0:11:46.440 e depois olha no arquivo chamado echo. 0:11:43.580,0:11:48.620 No Windows, caminhos como esse são[br]geralmente 0:11:46.440,0:11:51.900 separados por \. 0:11:48.620,0:11:53.640 Quando estamos no Linux ou MacOS, 0:11:51.900,0:11:56.370 tudo mora no root, então 0:11:53.640,0:12:00.270 todos os caminhos começam com um /, [br]ou melhor, todos os 0:11:56.370,0:12:02.070 caminhos absolutos. No Windows, há um root 0:12:00.270,0:12:05.130 cada cada partição. Vocês já devem ter 0:12:02.070,0:12:08.220 visto coisas como C:\ ou D:\ . 0:12:05.130,0:12:11.340 No Windows, há um tipo de hierarquia 0:12:08.220,0:12:13.050 de caminhos de sistema para cada drive 0:12:11.340,0:12:14.850 que você tem, 0:12:13.050,0:12:18.540 enquanto no Linux e no MacOS 0:12:14.850,0:12:20.010 fica tudo sob um único nome. 0:12:18.540,0:12:21.690 Vocês devem ter notado que eu mencionei 0:12:20.010,0:12:27.360 caminho absoluto e talvez saibam o que [br]isso 0:12:21.690,0:12:29.460 significa. Caminhos absolutos são caminhos 0:12:27.360,0:12:31.890 que determinam por completo a localização [br]de um arquivo. 0:12:29.460,0:12:33.720 Neste caso, isso quer dizer que 0:12:31.890,0:12:36.540 queremos nos referir a um arquivo [br]específico chamado echo 0:12:33.720,0:12:39.030 e estamos dando o caminho completo até 0:12:36.540,0:12:42.839 esse arquivo. Mas também há outro tipo 0:12:39.030,0:12:45.240 conhecido como caminhos relativos. Um 0:12:42.839,0:12:49.320 caminho relativo se refere a onde estamos[br]no momento. 0:12:45.240,0:12:52.490 Então a forma de saber onde estamos no 0:12:49.320,0:12:56.190 momento é digitando pwd que significa 0:12:52.490,0:13:00.060 "imprima o diretório atual". 0:12:56.190,0:13:02.700 Então, se eu digitar pwd, ele 0:13:00.060,0:13:05.790 vai mostrar o caminho atual onde estou 0:13:02.700,0:13:08.220 agora, ou seja, estou no diretório 0:13:05.790,0:13:11.030 home sob o diretório root e depois 0:13:08.220,0:13:14.730 john, depois dev e assim por diante. 0:13:11.030,0:13:16.770 Daqui eu posso então decidir mudar 0:13:14.730,0:13:18.540 meu diretório atual, e todos os 0:13:16.770,0:13:20.190 caminhos relativos são ligados ao 0:13:18.540,0:13:21.329 diretório atual, que é 0:13:20.190,0:13:24.629 basicamente onde estamos no momento. 0:13:21.329,0:13:28.709 Por exemplo, neste caso, eu posso digitar 0:13:24.629,0:13:30.449 cd \home. cd quer dizer [br]"mudar de diretório". 0:13:28.709,0:13:32.610 Essa é uma forma de mudar meu diretório 0:13:30.449,0:13:34.829 atual. Neste caso, eu mudei 0:13:32.610,0:13:37.889 para o home e vocês vêem que 0:13:34.829,0:13:40.619 o prompt do shell mudou, agora dizendo 0:13:37.889,0:13:42.660 que estou no home. Ele simplesmente mostra 0:13:40.619,0:13:44.220 o nome do último segmento do caminho, 0:13:42.660,0:13:45.509 mas vocês também podem configurar o [br]terminal para mostrar 0:13:44.220,0:13:50.309 o caminho completo onde quer que 0:13:45.509,0:13:53.100 vocês estejam. Agora se eu digitar pwd[br]de novo, ele 0:13:50.309,0:13:54.869 vai me dizer que estou no /home. Há alguns 0:13:53.100,0:13:59.100 diretórios especiais 0:13:54.869,0:14:03.149 aqui. Há o . e o .. . O . 0:13:59.100,0:14:05.129 se refere ao diretório atual e o .. 0:14:03.149,0:14:06.749 se refere ao diretório acima. Essa é uma 0:14:05.129,0:14:09.540 forma de navegar facilmente pelo 0:14:06.749,0:14:13.079 sistema. Por exemplo, se eu digitar cd .. 0:14:09.540,0:14:15.179 ele vai me dizer que estou agora no /, 0:14:13.079,0:14:17.639 ou seja, no root do sistema de 0:14:15.179,0:14:22.139 arquivos. Eu estava no /home e agora estou 0:14:17.639,0:14:24.869 no /. De fato, se eu digitar pwd, ele [br]mostra 0:14:22.139,0:14:26.790 exatamente isso. Também posso usar 0:14:24.869,0:14:28.980 caminhos relativos para descer um nível no 0:14:26.790,0:14:31.769 caminho de arquivos. Então, se eu der [br]cd . /home 0:14:28.980,0:14:34.079 ele vai me mover para o 0:14:31.769,0:14:36.899 diretório home sob o diretório atual. 0:14:34.079,0:14:39.839 E isso me leva 0:14:36.899,0:14:42.119 de volta ao /home. Se eu tentar agora[br]cd ./home 0:14:39.839,0:14:44.100 de novo, ele me avisa que não há nenhum 0:14:42.119,0:14:45.569 diretório com esse nome porque não há um 0:14:44.100,0:14:49.429 diretório home sob o diretório em que 0:14:45.569,0:14:53.699 estou agora, no qual entrei com o cd. 0:14:49.429,0:14:57.509 Eu consigo usar cd para voltar todo [br]o caminho 0:14:53.699,0:15:01.110 que percorri, usando 0:14:57.509,0:15:07.040 caminhos relativos, e eu posso fazer[br]outras coisas 0:15:01.110,0:15:09.059 como ../../../../jon/ para voltar 0:15:07.040,0:15:10.649 para algum lugar lá dentro do meu sistema [br]de arquivos. 0:15:09.059,0:15:13.019 Ocorre que ele está lá no root. 0:15:10.649,0:15:15.629 Aqui temos o diretório bin, e nele 0:15:13.019,0:15:17.850 há o arquivo echo. Daí eu 0:15:15.629,0:15:20.309 posso dar world e ele roda o 0:15:17.850,0:15:22.079 programa echo que está no bin. 0:15:20.309,0:15:24.439 Essa é uma forma com a qual vocês podem[br]construir caminhos para 0:15:22.079,0:15:26.579 atravessar arbitrariamente seu sistema[br]de arquivos. 0:15:24.439,0:15:28.379 Às vezes vocês vão querer usar caminhos[br]absolutos e 0:15:26.579,0:15:29.789 às vezes, relativos. Geralmente 0:15:28.379,0:15:33.179 vocês vão querer usar o que for mais curto 0:15:29.789,0:15:34.390 mas se vocês quiserem, por exemplo, rodar 0:15:30.629,0:15:34.390 um programa ou escrever 0:15:34.390,0:15:38.980 um programa que roda esse programa, como 0:15:36.940,0:15:41.830 echo ou date, e vocês querem poder 0:15:38.980,0:15:43.660 rodá-lo a partir de qualquer local, ou 0:15:41.830,0:15:45.640 vocês dão o nome do 0:15:43.660,0:15:47.770 programa, como date ou echo, e deixam o 0:15:45.640,0:15:49.720 shell usar o caminho para descobrir onde 0:15:47.770,0:15:51.670 ele está, ou vocês dão o caminho 0:15:49.720,0:15:53.500 absoluto, porque se vocês derem um[br]caminho relativo, 0:15:51.670,0:15:55.840 e eu for lá e rodar no meu diretório home, 0:15:53.500,0:16:01.720 e vocês rodarem em um outro diretório, 0:15:55.840,0:16:04.600 pode ser que funcione para mim mas não[br]para vocês. 0:16:01.720,0:16:06.340 Em geral, quando rodamos um programa, ele 0:16:04.600,0:16:08.320 vai operar no diretório 0:16:06.340,0:16:09.910 atual, ao menos esse é o padrão, 0:16:08.320,0:16:11.980 a não ser que passemos outros argumentos. 0:16:09.910,0:16:13.750 Isso é bem útil porque significa 0:16:11.980,0:16:15.730 que muitas vezes não temos de dar 0:16:13.750,0:16:17.680 o caminho completo para as coisas, podemos[br]simplesmente 0:16:15.730,0:16:20.050 usar o nome dos arquivos no diretório 0:16:17.680,0:16:22.570 em que estamos. Uma coisa 0:16:20.050,0:16:24.280 bem útil é descobrir em que diretório 0:16:22.570,0:16:26.410 estamos. Nós já 0:16:24.280,0:16:28.060 vimos o pwd que imprime o local 0:16:26.410,0:16:31.090 onde estamos, e há um comando chamado 0:16:28.060,0:16:33.310 ls que vai listar os 0:16:31.090,0:16:35.980 arquivos no diretório atual. Então se eu 0:16:33.310,0:16:38.050 digitar ls aqui, vemos todos os arquivos 0:16:35.980,0:16:39.850 no diretório atual, certo? É uma forma 0:16:38.050,0:16:43.420 boa de rapidamente navegar 0:16:39.850,0:16:46.930 através do sistema de arquivos. Vocês vão 0:16:43.420,0:16:48.490 ver que se eu der cd .. e depois ls, ele 0:16:46.930,0:16:53.370 me mostra os arquivos naquele diretório, 0:16:48.490,0:16:56.260 mas com o ls eu posso dar 0:16:53.370,0:16:58.360 ls .. e um caminho e 0:16:56.260,0:16:59.920 aí ele lista o que tiver naquele aquivo em 0:16:58.360,0:17:04.270 vez do que o que estou agora. Ele lista [br]o outro 0:16:59.920,0:17:05.829 diretório. E vocês podem ver que se eu 0:17:04.270,0:17:09.220 for até o root também, certo, o root 0:17:05.829,0:17:11.560 tem outros arquivos. Um truque legal 0:17:09.220,0:17:13.570 que talvez vocês não conheçam aqui: há 0:17:11.560,0:17:16.570 dois outras coisas especiais que você[br]pode fazer. 0:17:13.570,0:17:18.339 Uma é usar o til. Esse 0:17:16.570,0:17:21.130 caractere te leva pro diretório 0:17:18.339,0:17:23.140 home. Então o til sempre se expande para 0:17:21.130,0:17:25.780 o diretório home e você pode usar 0:17:23.140,0:17:30.040 caminhos relativos a ele. Posso dar [br]til / dev 0:17:25.780,0:17:32.980 /pdos/classes/missing-semester/ e 0:17:30.040,0:17:36.670 agora estou lá porque esse til se expandiu 0:17:32.980,0:17:39.460 para /home/john. Um outro argumento legal 0:17:36.670,0:17:42.250 que vocês podem dar para o cd [br]especificamente 0:17:39.460,0:17:44.530 é, se vocêm derem cd -, 0:17:42.250,0:17:47.380 ele vai cd para o diretório onde você 0:17:44.530,0:17:48.180 estava antes. Se eu der cd -, volto 0:17:47.380,0:17:52.230 para o root. 0:17:48.180,0:17:53.880 Se der cd - de novo, volto para o [br]missing-semester. 0:17:52.230,0:17:55.080 É uma maneira útil de ficar indo e vindo 0:17:53.880,0:18:01.290 entre dois diretórios diferentes. 0:17:55.080,0:18:03.570 Em caso do ls, ou em caso 0:18:01.290,0:18:06.180 do cd, pode haver argumentos que vocês 0:18:03.570,0:18:07.560 não conhecem, certo? Até agora, ainda não 0:18:06.180,0:18:09.510 fizemos muito mais do que 0:18:07.560,0:18:11.520 dar caminhos, mas como é que descobrimos 0:18:09.510,0:18:14.250 que é possível passar um caminho para o ls 0:18:11.520,0:18:16.530 pra começo de conversa? Bem, a maioria 0:18:14.250,0:18:18.840 dos programas aceitam o que chamamos de[br]argumentos, como 0:18:16.530,0:18:21.570 flags e opções. Essas são coisas que 0:18:18.840,0:18:24.810 geralmente são precedidas por um -. Um dos 0:18:21.570,0:18:26.880 usos mais úteis é --help. Muitos programas 0:18:24.810,0:18:30.000 implementam esse, então se vocês rodarem, 0:18:26.880,0:18:34.020 por exemplo, ls -help, ele proveitosamente 0:18:30.000,0:18:36.000 imprime um monte de informações sobre 0:18:34.020,0:18:38.400 aquele comando. Vocêm podem ver que ele 0:18:36.000,0:18:40.260 dize que o uso é ls e que é possível dar 0:18:38.400,0:18:42.030 um número de opções, e um número de 0:18:40.260,0:18:46.350 arquivos. A forma de se ler essa linha é 0:18:42.030,0:18:48.600 três pontos significa zero ou um 0:18:46.350,0:18:50.850 ou mais e os colchetes 0:18:48.600,0:18:52.890 querem dizer opcional. Nesse caso, 0:18:50.850,0:18:54.300 há um número opcional de opções 0:18:52.890,0:18:56.790 e um número opcional de arquivos. 0:18:54.300,0:18:58.740 Vejam que ele explica o que o programa 0:18:56.790,0:19:00.720 faz e também especifica um número 0:18:58.740,0:19:03.000 de diferentes tipos de flags e opções 0:19:00.720,0:19:04.950 que podemos escolher. Geralmente[br]chamamos essas coisas 0:19:03.000,0:19:07.830 com um - e uma única letra 0:19:04.950,0:19:09.900 de flag ou qualquer coisa que 0:19:07.830,0:19:11.730 não leva um valor de flag, e qualquer 0:19:09.900,0:19:16.640 coisa que leva um valor chamamos de[br]opção. Então, 0:19:11.730,0:19:22.260 por exemplo, - a and - all são ambos flags 0:19:16.640,0:19:24.180 e -C ou --color é uma opção. Uma coisa 0:19:22.260,0:19:30.330 que vocês vão ver se descerem bastante a 0:19:24.180,0:19:37.140 tela é a flag -l. Ops. 0:19:30.330,0:19:39.480 A flag -l usa 0:19:37.140,0:19:40.860 o formato de lista longa. Isso é 0:19:39.480,0:19:43.350 especialmente útil por si só, 0:19:40.860,0:19:46.890 mas vamos ver o que ela faz. 0:19:43.350,0:19:48.450 Se eu der ls -l, ele imprime 0:19:46.890,0:19:49.890 os arquivos no diretório atual, mas ele 0:19:48.450,0:19:52.170 dá muito mais informação sobre esses 0:19:49.890,0:19:54.600 arquivos. Vocês vão ver que vão usar 0:19:52.170,0:19:56.280 bastante isso porque 0:19:54.600,0:20:00.810 essas informações adicionais que ele 0:19:56.280,0:20:02.010 mostra são geralmente bem úteis. Vamos 0:20:00.810,0:20:09.030 ver um pouco dessas informações. 0:20:02.010,0:20:10.110 Primeiramente, o d no começo 0:20:09.030,0:20:11.760 de alguns desses itens 0:20:10.110,0:20:14.820 indica que aquele item é um diretório. 0:20:11.760,0:20:16.020 Então o _data aqui, por exemplo, 0:20:14.820,0:20:18.690 é um diretório, 0:20:16.020,0:20:22.650 enquanto o html não é um diretório, 0:20:18.690,0:20:25.410 mas sim um arquivo. As letras seguintes 0:20:22.650,0:20:28.650 indicam as permissões que estão 0:20:25.410,0:20:30.810 definidas para este arquivo. Então, como 0:20:28.650,0:20:32.640 vimos antes, talvez eu não consiga abrir 0:20:30.810,0:20:34.170 um certo arquivo ou não consiga 0:20:32.640,0:20:35.760 entrar em um diretório. Tudo isso é 0:20:34.170,0:20:37.980 regido pelas permissões daquele arquivo 0:20:35.760,0:20:41.430 ou diretório em particular. A maneira de 0:20:37.980,0:20:43.500 interpretar isso é: o primeiro dos três 0:20:41.430,0:20:45.810 grupos são as permissões definidas para o 0:20:43.500,0:20:49.560 dono do arquivo. Todos esses arquivos 0:20:45.810,0:20:52.020 que estamos vendo têm eu dono como. 0:20:49.560,0:20:53.880 O segundo grupo de três caraceteres se [br]refere 0:20:52.020,0:20:56.100 às permissões do grupo que é dono desse 0:20:53.880,0:20:58.650 arquivo. Neste caso, todos esses arquivos 0:20:56.100,0:21:01.770 também pertencem ao grupo john. 0:20:58.650,0:21:03.900 Já o último grupo de três é uma lista 0:21:01.770,0:21:06.290 das permissões para todo o restante, [br]ou seja, 0:21:03.900,0:21:08.550 qualquer um que não seja nem dono nem [br]membro do grupo. 0:21:06.290,0:21:10.980 Esse diretório está um pouco sem graça 0:21:08.550,0:21:14.190 porque eu sou o dono de todos os itens, 0:21:10.980,0:21:17.490 mas se dermos cd / 0:21:14.190,0:21:20.280 ls -l vocês vão ver que 0:21:17.490,0:21:22.800 aqui todos os arquivos pertencem ao root. 0:21:20.280,0:21:24.090 Vamos voltar para esse assunto do [br]usuário root, só vejam 0:21:22.800,0:21:26.400 que aqui as permissões são 0:21:24.090,0:21:31.410 um pouco mais interessantes. Os grupos de 0:21:26.400,0:21:34.290 três significam leitura, escrita e [br]execução. 0:21:31.410,0:21:36.450 Isso signifca coisas diferentes para [br]arquivos e para 0:21:34.290,0:21:37.980 diretórios. Para arquivos, é bem simples: 0:21:36.450,0:21:40.170 se vocês tiverem permissão de leitura para 0:21:37.980,0:21:41.820 um arquivo, vocês conseguem ler seu 0:21:40.170,0:21:43.950 conteído. Se tiver permissão de escrita 0:21:41.820,0:21:46.200 para um arquivo, podem salvá-lo 0:21:43.950,0:21:48.270 e adicionar conteúdo a ele, ou até 0:21:46.200,0:21:50.670 substitui-lo completamente. E se você 0:21:48.270,0:21:52.620 tiver x na execução de um arquivo, 0:21:50.670,0:21:57.390 você pode executá-lo. Então, 0:21:52.620,0:22:00.030 se dermos ls -l /usr/bin, 0:21:57.390,0:22:02.640 vocês verão que todos 0:22:00.030,0:22:04.590 têm a permissão de execução ativada 0:22:02.640,0:22:06.480 para todas as pessoas que não forem donas 0:22:04.590,0:22:08.280 do arquivo. É assim porque o programa 0:22:06.480,0:22:09.420 echo, por exemplo, queremos que possa 0:22:08.280,0:22:11.700 ser executado por qualquer um usando[br]o computador. 0:22:09.420,0:22:13.920 Não há motivo pra dizer que apenas 0:22:11.700,0:22:15.570 alguns usuários podem rodar o echo. 0:22:13.920,0:22:18.420 Isso não faz sentido. 0:22:15.570,0:22:20.960 Já para diretórios, essas permissões 0:22:18.420,0:22:23.550 são um pouco diferentes. Leitura 0:22:20.960,0:22:26.460 quer dizer que podemos olhar quais 0:22:23.550,0:22:28.770 arquivos existem dentro desse diretório. 0:22:26.460,0:22:30.530 Associem leitura como list para [br]diretórios. 0:22:28.770,0:22:33.420 Estamos autorizados a listar seu conteúdo? 0:22:30.530,0:22:36.210 Escrita para um diretório diz se estamos 0:22:33.420,0:22:39.090 autorizados a renomear, criar ou remover 0:22:36.210,0:22:42.030 arquivos dentro dele. Faz sentido, 0:22:39.090,0:22:45.240 mas lembrem-se de que isso significa que, 0:22:42.030,0:22:47.580 se vocês têm permissão de escrita em um [br]arquivo 0:22:45.240,0:22:49.950 mas não têm permissão de escrita no 0:22:47.580,0:22:52.080 diretório dele, vocês não podem deletar o[br]arquivo. 0:22:49.950,0:22:54.420 Você pode esvaziá-lo, mas não deletá-lo, 0:22:52.080,0:22:57.660 porque para isso seria preciso escrever 0:22:54.420,0:22:59.130 no diretório em si. Finalmente, execução 0:22:57.660,0:23:01.950 em diretórios é algo que confunde bastante 0:22:59.130,0:23:04.650 as pessoas. Executar em um diretório 0:23:01.950,0:23:07.230 é o que se chama buscar. O nome 0:23:04.650,0:23:10.200 não ajuda muito, mas o que quer dizer é 0:23:07.230,0:23:13.470 que podemos acessar esse diretório se 0:23:10.200,0:23:15.240 quisermos chegar a um arquivo. 0:23:13.470,0:23:16.670 Se quisermos abri-lo, lê-lo ou 0:23:15.240,0:23:20.310 escrever nele, ou qualquer outra coisa, 0:23:16.670,0:23:22.710 para dar cd e entrar em um diretório 0:23:20.310,0:23:25.050 é preciso ter permissão de execução em 0:23:22.710,0:23:28.170 todos os diretórios acima dele e 0:23:25.050,0:23:30.480 no próprio diretório. Por exemplo, 0:23:28.170,0:23:34.080 para eu acessar um arquivo dentro de 0:23:30.480,0:23:35.820 /usr/bin como o /usr/bin/echo, preciso 0:23:34.080,0:23:38.100 ter permissão de execução no root, 0:23:35.820,0:23:40.380 no usr, no 0:23:38.100,0:23:42.120 bin. Se eu não tiver algum deles, 0:23:40.380,0:23:44.790 não terei permissão 0:23:42.120,0:23:48.410 de acessar aquele arquivo, porque 0:23:44.790,0:23:50.670 não terei acesso aos diretórios ao longo[br]do caminho até ele. 0:23:48.410,0:23:52.560 Vocês podem encontrar outros bits, 0:23:50.670,0:23:55.320 por exemplo, vocês podem ver 0:23:52.560,0:23:58.020 s ou t nessas listas, ou l. 0:23:55.320,0:23:58.950 Podemos conversar no tira-dúvidas 0:23:58.020,0:24:01.260 se ficarem curiosos, 0:23:58.950,0:24:04.260 a maioria não importa muito para 0:24:01.260,0:24:05.670 os assuntos que vocês vão ver neste curso, 0:24:04.260,0:24:08.100 mas é legal conhecer. Então, se quiserem 0:24:05.670,0:24:11.340 saber mais sobre eles, pesquisem 0:24:08.100,0:24:13.080 ou venham falar conosco. 0:24:11.340,0:24:14.580 Há outros programas que é bom 0:24:13.080,0:24:16.200 conhecer. Desculpa, uma coisa mais. 0:24:14.580,0:24:17.400 Como eu mencionei, se vocês só verem um - 0:24:16.200,0:24:19.470 significa que vocês não têm aquela 0:24:17.400,0:24:21.810 respectiva permissão. Por exemplo, se 0:24:19.470,0:24:23.190 houver r-x, quer dizer que vocês podem 0:24:21.810,0:24:27.390 ler e executar, mas não ler. 0:24:23.190,0:24:29.240 Há outros programas úteis 0:24:27.390,0:24:32.360 para vermos agora. 0:24:29.240,0:24:35.450 Um deles é o comando move ou mv. 0:24:32.360,0:24:39.350 Se eu der cd de volta para [br]missing-semester, aqui o mv 0:24:35.450,0:24:42.950 me permite renomear um arquivo usando 0:24:39.350,0:24:45.320 dois caminhos, o caminho antigo e o 0:24:42.950,0:24:47.870 caminho novo. Ou seja, move nos permite 0:24:45.320,0:24:49.970 tanto renomear um arquivo, como quando 0:24:47.870,0:24:52.130 mudamos o nome do arquivo mas não o 0:24:49.970,0:24:54.290 diretório, ou ele permite mover 0:24:52.130,0:24:56.360 um arquivo para um diretório diferente. 0:24:54.290,0:24:57.890 É só dar o caminho atual do arquivo 0:24:56.360,0:24:59.720 e o caminho para onde vocês querem movê-lo 0:24:57.890,0:25:02.720 e isso vai alterar sua localização e 0:24:59.720,0:25:05.480 seu nome. Por exemplo, eu posso mover 0:25:02.720,0:25:09.020 dotfiles.md para foo.md 0:25:05.480,0:25:16.280 e, da mesma forma, posso mover 0:25:09.020,0:25:19.370 de volta. Há também o comando cp. 0:25:16.280,0:25:21.860 O cp ou copy é bem parecido, 0:25:19.370,0:25:23.750 ele nos permite copiar um arquivo também 0:25:21.860,0:25:25.610 usando dois argumentos, o caminho de onde 0:25:23.750,0:25:28.340 queremos copiar e o caminho para onde 0:25:25.610,0:25:30.890 queremos copiar. Esses são caminhos [br]completos, então eu poderia 0:25:28.340,0:25:32.960 usar isso, por exemplo, para dizer que [br]quero 0:25:30.890,0:25:37.550 copiar dotfiles.md to ../foo.md. 0:25:32.960,0:25:39.710 E agora se eu der ls . 0:25:37.550,0:25:42.800 vocês podem ver que há um arquivo foo.md 0:25:39.710,0:25:44.600 naquele diretório. O cp também 0:25:42.800,0:25:47.780 recebe dois caminhos, não é preciso ser no 0:25:44.600,0:25:49.700 mesmo diretório. Igualmente existe o 0:25:47.780,0:25:52.070 comando rm que nos permite remover 0:25:49.700,0:25:54.050 um arquivo e também dá para dar caminhos. 0:25:52.070,0:25:56.750 Nesse caso, estou removendo ../foo. 0:25:54.050,0:25:59.480 Lembrem-se que o remover, 0:25:56.750,0:26:01.940 especialmente no Linux, por default 0:25:59.480,0:26:05.000 não é recursivo, então não dá para remover 0:26:01.940,0:26:07.100 um diretório usando rm. É preciso passar 0:26:05.000,0:26:09.320 a flag -r que nos permite 0:26:07.100,0:26:10.550 remover recursivamente e depois o 0:26:09.320,0:26:12.890 caminho que quer remover. Daí ele 0:26:10.550,0:26:16.370 remove tudo que estiver sob este [br]diretório. Há também 0:26:12.890,0:26:18.290 o comando rmdir que permite 0:26:16.370,0:26:21.230 remover um diretório mas só se 0:26:18.290,0:26:22.970 ele estiver vazio. Então a 0:26:21.230,0:26:23.960 ideia aqui é criar um mecanismo pra 0:26:22.970,0:26:25.429 nos dar uma certa segurança, para não 0:26:23.960,0:26:28.610 jogarmos fora acidentalmente um monte 0:26:25.429,0:26:31.040 de arquivos. O último comandozinho 0:26:28.610,0:26:32.540 que é útil usar é o mkdir que 0:26:31.040,0:26:34.429 permite criar um novo diretório. 0:26:32.540,0:26:36.110 Como falamos antes, você não quer fazer 0:26:34.429,0:26:37.940 algo assim porque senão ele vai 0:26:36.110,0:26:40.580 criar dois diretórios, um chamado 0:26:37.940,0:26:42.140 my e outro chamado photos. Para criar 0:26:40.580,0:26:42.980 um diretório assim é preciso escapar 0:26:42.140,0:26:50.120 o character de 0:26:42.980,0:26:52.519 espaço ou usar aspas. 0:26:50.120,0:26:54.919 Quando vocês quiserem mais informação 0:26:52.519,0:26:57.049 sobre como qualquer comando 0:26:54.919,0:26:58.220 nessas plataformas funciona, há um 0:26:57.049,0:27:00.649 comando bem útil para isso, que 0:26:58.220,0:27:04.610 invoca o programa chamado man, 0:27:00.649,0:27:06.409 que significa manual pages. Este programa 0:27:04.610,0:27:09.080 pede como argumento o nome de outro [br]programa 0:27:06.409,0:27:12.019 e retorna seu manual. Então, por exemplo, 0:27:09.080,0:27:14.990 podemos digitar man ls e isso vai mostrar 0:27:12.019,0:27:16.730 a página do manual do ls. Vocês vão ver 0:27:14.990,0:27:19.250 que, nesse caso do ls, o resultado é bem 0:27:16.730,0:27:20.870 parecido com o que vemos com ls -help, 0:27:19.250,0:27:23.570 porém é mais fácil navegar e 0:27:20.870,0:27:26.269 ler. Mais pro final da página vocês 0:27:23.570,0:27:28.639 encontram exemplos 0:27:26.269,0:27:29.899 sobre quem escreveu o programa, 0:27:28.639,0:27:32.389 onde encontrar mais informação e esse 0:27:29.899,0:27:32.990 tipo de coisa. Algo que pode causar [br]confusão 0:27:32.389,0:27:35.330 às vezes, 0:27:32.990,0:27:36.289 ao menos até a versão mais atual em que 0:27:35.330,0:27:38.779 eles adicionaram essa árvore no final, 0:27:36.289,0:27:41.389 que diz q para sair, é que eles não [br]costumavam 0:27:38.779,0:27:43.279 dizer isso, aperte q para sair deste 0:27:41.389,0:27:48.169 programa. Pode ser bem difícil de sair 0:27:43.279,0:27:50.750 pra quem não conhece. Falando nisso, 0:27:48.169,0:27:52.970 um atalho de teclado legal aqui é[br]ctrl+l 0:27:50.750,0:27:56.990 que limpa o terminal e volta pro topo. 0:27:52.970,0:27:59.330 Até agora só falamos sobre 0:27:56.990,0:28:01.370 programas isolados, mas o 0:27:59.330,0:28:03.019 poder do shell, na verdade, aparece 0:28:01.370,0:28:06.380 na hora em que começamos 0:28:03.019,0:28:08.419 a combinar diferentes programas, certo? 0:28:06.380,0:28:10.789 Então, em vez de rodar cd e rodar ls etc, 0:28:08.419,0:28:12.500 vocês poderiam querer encadear 0:28:10.789,0:28:13.940 diversos programas, ou 0:28:12.500,0:28:15.980 querer interagir com arquivos e 0:28:13.940,0:28:19.309 operá-los entre um programa e outro. 0:28:15.980,0:28:21.200 A forma de fazer isso é usando a 0:28:19.309,0:28:24.620 noção de streams que o shell nos dá. 0:28:21.200,0:28:25.940 Todo programa, por default, tem... 0:28:24.620,0:28:28.610 vou simplificar um pouco e falar de 0:28:25.940,0:28:31.820 dois streams primários, o de entrada 0:28:28.610,0:28:33.950 e o de saída. Por default, o stream de 0:28:31.820,0:28:35.419 entrada é basicamente seu teclado, 0:28:33.950,0:28:36.860 seu terminal, e 0:28:35.419,0:28:38.929 o que quer que você digite no terminal vai 0:28:36.860,0:28:40.610 acabar parando no seu programa, que tem 0:28:38.929,0:28:42.049 um stream de saída padrão, que é 0:28:40.610,0:28:44.330 usado sempre que o programa imprime 0:28:42.049,0:28:46.279 algo. Ele imprime no stream e, por padrão, 0:28:44.330,0:28:48.470 é também seu terminal. É por isso que 0:28:46.279,0:28:50.690 quando digito echo hello, isso é impresso 0:28:48.470,0:28:54.200 no terminal. Mas o 0:28:50.690,0:28:56.360 shell lhes dá uma forma de redirecionar 0:28:54.200,0:28:59.120 esses streams para mudar onde é a entrada 0:28:56.360,0:29:00.980 e a saída de um programa. 0:28:59.120,0:29:06.200 A maneira mais fácil de fazer isso é 0:29:00.980,0:29:08.210 usando o < e >. De modo que vocês podem 0:29:06.200,0:29:11.570 escrever algo assim ou escrever algo 0:29:08.210,0:29:14.299 assim. O > significa que 0:29:11.570,0:29:16.340 a entrada pra esse programa deve ser 0:29:14.299,0:29:21.040 redirecionada para o conteúdo desse 0:29:16.340,0:29:23.600 arquivo e o < significa que 0:29:21.040,0:29:27.559 a saída do programa precedente deve ser 0:29:23.600,0:29:28.580 redirecionada para este arquivo. Vamos 0:29:27.559,0:29:32.240 ver um exemplo de como isso funciona. 0:29:28.580,0:29:34.280 Se eu der echo hello, posso dizer que [br]quero que 0:29:32.240,0:29:36.710 o conteúdo seja salvo em 0:29:34.280,0:29:39.049 um arquivo chamado hello.txt. Como eu dei 0:29:36.710,0:29:40.520 esse caminho relativo, ele vai criar 0:29:39.049,0:29:42.980 um arquivo no diretório atual 0:29:40.520,0:29:45.440 chamado hello.text. Ao menos teoricamente 0:29:42.980,0:29:47.780 seu conteúdo deveria ser a 0:29:45.440,0:29:50.360 palavra hello. Se eu rodar isso, vejam 0:29:47.780,0:29:52.100 que nada aparece na minha saída, da 0:29:50.360,0:29:52.700 última vez que rodei echo hello 0:29:52.100,0:29:55.340 a palavra hello aparecia na tela. 0:29:52.700,0:29:57.799 Agora, essa saída foi direcionada para um 0:29:55.340,0:30:00.610 arquivo chamado hello.txt. Dá para [br]verificar 0:29:57.799,0:30:03.860 isso usando um programa chamado cat. 0:30:00.610,0:30:07.280 O cat imprime na tela o conteúdo de um[br]arquivo, então 0:30:03.860,0:30:11.059 posso rodar hello.txt e ele mostra 0:30:07.280,0:30:13.220 hello. Porém o cat também permite 0:30:11.059,0:30:16.220 esse tipo de direcionamento, então posso 0:30:13.220,0:30:17.990 dizer cat, que por default imprime sua 0:30:16.220,0:30:20.720 entrada na tela, ele apenas duplica [br]a entrada 0:30:17.990,0:30:23.809 na saída. Posso dizer que quero que 0:30:20.720,0:30:25.160 pegue sua entrada do hello.txt, e o 0:30:23.809,0:30:26.990 que vai acontecer neste caso é que 0:30:25.160,0:30:29.840 o sheel vai abrir o hello.txt, 0:30:26.990,0:30:32.540 pegar seu conteúdo e definir isso como 0:30:29.840,0:30:34.370 a entrada do cat, e aí o car vai imprimir 0:30:32.540,0:30:36.500 isso na sua saída. Como não direcionei a [br]saída, 0:30:34.370,0:30:38.179 vai aparecer no 0:30:36.500,0:30:41.870 meu terminal. Então ele vai simplesmente[br]imprimir 0:30:38.179,0:30:43.549 hello na saída. Posso usar ambos 0:30:41.870,0:30:45.470 ao menos tempo, por exemplo, 0:30:43.549,0:30:47.000 se quero copiar um arquivo sem usar o 0:30:45.470,0:30:51.500 comando cp por algum motivo, 0:30:47.000,0:30:54.470 posso fazer assim. Neste caso, não 0:30:51.500,0:30:56.540 estou passando nada ao programa cat, 0:30:54.470,0:30:58.010 só estou dizendo, funcione normalmente, 0:30:56.540,0:30:59.960 o programa cat não sabe 0:30:58.010,0:31:02.150 nada sobre esse redirecionamento. Mas 0:30:59.960,0:31:04.190 estou dizendo ao shell para usar o [br]hello.txt 0:31:02.150,0:31:08.120 como entrada para o cat e para escrever 0:31:04.190,0:31:09.470 o que quer que seja que o cat vai soltar[br]no arquivo hello.txt. 0:31:08.120,0:31:10.010 De novo, nada aparece no meu terminal, 0:31:09.470,0:31:13.340 mas se 0:31:10.010,0:31:15.620 eu der cat hello2.txt, vejo a saída como 0:31:13.340,0:31:20.630 era esperado, que é uma cópia do arquivo 0:31:15.620,0:31:23.390 original. Há, também, o sinal >> 0:31:20.630,0:31:26.570 que significa anexar em vez de 0:31:23.390,0:31:27.380 escrever por cima. Então você vai notar 0:31:26.570,0:31:29.870 que se eu digitar 0:31:27.380,0:31:32.300 cat < hello.txt > hello2.txt 0:31:29.870,0:31:34.160 de novo e depois cat hello2.txt, 0:31:32.300,0:31:36.500 ele ainda contém somente hello, apesar de 0:31:34.160,0:31:38.750 já conter um hello antes. Se eu mudar para 0:31:36.500,0:31:41.090 >> para anexar 0:31:38.750,0:31:45.890 e digitar cat nesse arquivo, 0:31:41.090,0:31:47.570 agora hello aparece duas vezes. São 0:31:45.890,0:31:49.850 comandos bem simples, geralmente 0:31:47.570,0:31:51.590 só para interagir com arquivos, mas 0:31:49.850,0:31:53.420 isso fica realmente interessante se [br]usarmos 0:31:51.590,0:31:56.150 um operador adicional do shell chamado 0:31:53.420,0:32:00.020 pipe. O pipe é uma barra vertical 0:31:56.150,0:32:02.900 e o que ele faz é pegar 0:32:00.020,0:32:05.300 a saída de um programa à esquerda e 0:32:02.900,0:32:09.650 torná-la entrada do programa 0:32:05.300,0:32:13.940 à direita. Vamos ver como funciona. 0:32:09.650,0:32:17.450 Vamos usar o exemplo do ls -l / 0:32:13.940,0:32:19.550 Isso imprime um monte de coisas. Digamos 0:32:17.450,0:32:22.460 que eu só quero a 0:32:19.550,0:32:25.670 última linha dessa saída. Bem, há um 0:32:22.460,0:32:28.940 comando chamado tail. O tail imprime 0:32:25.670,0:32:32.420 as últimas n linhas da entrada, então 0:32:28.940,0:32:34.520 posso digitar -n 1. Essa é a flag chamada 0:32:32.420,0:32:36.890 n. Também dá pra usar --lines se quiserem 0:32:34.520,0:32:38.660 uma opção mais longa, mas nesse caso 0:32:36.890,0:32:42.260 o que isso faz é imprimir a última 0:32:38.660,0:32:46.640 linha. Posso escrever tudo junto, 0:32:42.260,0:32:50.840 ls -l | tail -n 1. 0:32:46.640,0:32:53.060 Vejam aqui que o ls não sabe 0:32:50.840,0:32:55.340 nada sobre o tail e o tail não sabe nada 0:32:53.060,0:32:56.870 sobre o lr. São programas diferentes e que 0:32:55.340,0:32:59.120 nunca foram programados para ser [br]compatíveis 0:32:56.870,0:33:00.650 um com o outro. Tudo que eles sabem 0:32:59.120,0:33:02.900 fazer é ler uma entrada e escrever em uma 0:33:00.650,0:33:05.360 saída. É o pipe que os conecta 0:33:02.900,0:33:07.670 e, nesse caso particular, estou dizendo 0:33:05.360,0:33:09.380 que quero que a saída do ls sirva de 0:33:07.670,0:33:10.850 entrada para o tail e quero que a saída 0:33:09.380,0:33:12.140 do tail vá para o terminal porque não 0:33:10.850,0:33:14.240 a redirecionei. 0:33:12.140,0:33:16.730 Eu também poderia definir que 0:33:14.240,0:33:18.770 a saída deveria ir para ls.txt e, 0:33:16.730,0:33:20.990 nesse caso, se eu der cat ls.txt vou 0:33:18.770,0:33:22.640 ver a saída apropriada. Ocorre que 0:33:20.990,0:33:21.815 é possível fazer coisas muito elegantes[br]com isso. 0:33:23.340,0:33:27.720 Nós vamos ir mais a fundo na aula 0:33:25.110,0:33:30.720 'Duelando com os Dados' daqui 0:33:27.720,0:33:32.490 uns quatro dias, sobre as coisas 0:33:30.720,0:33:36.060 mais elaboradas que vocês podem fazer 0:33:32.490,0:33:37.560 ao construir pipelines mais avançados. 0:33:36.060,0:33:42.300 Pra dar um exemplo, podemos digitar 0:33:37.560,0:33:46.320 curl --head --silent google.com. 0:33:42.300,0:33:48.870 Só para mostrar como isso funciona, 0:33:46.320,0:33:52.680 esse comando retorna todos os[br]cabeçalhos HTTP 0:33:48.870,0:33:56.520 para acessar google.com. E eu posso mandar 0:33:52.680,0:34:01.260 isso direto para o grep --ignore-case 0:33:56.520,0:34:04.230 ou -i se preferir, depois -content-lenght. 0:34:01.260,0:34:06.120 Isso vai imprimir o 0:34:04.230,0:34:07.500 tamanho do conteúdo do cabeçalho. O grep 0:34:06.120,0:34:09.090 é um programa sobre o qual vamos falar [br]mais tarde. 0:34:07.500,0:34:12.660 Ele nos permite buscar uma palavra-chave 0:34:09.090,0:34:15.560 em um stream de entrada. Podemos usar o[br]pipe para mandar 0:34:12.660,0:34:20.190 para o comando cut, que recebe um 0:34:15.560,0:34:22.260 delimitador, escolhido como espaço, e eu 0:34:20.190,0:34:24.420 quero o segundo campo. Isso imprime 0:34:22.260,0:34:25.950 apenas o tamanho do conteúdo. Esse é 0:34:24.420,0:34:28.380 um exemplo bobo, só para 0:34:25.950,0:34:30.180 extrair o tamanho em bytes 0:34:28.380,0:34:32.700 do google.com pela linha de comando. 0:34:30.180,0:34:34.740 Não é algo muito útil, 0:34:32.700,0:34:36.300 mas serve para mostrar que, encadeando 0:34:34.740,0:34:38.330 essas coisas, conseguimos obter 0:34:36.300,0:34:40.980 diversos efeitos de manipulação de texto. 0:34:38.330,0:34:43.290 E os pipes não servem apenas para 0:34:40.980,0:34:45.330 dados de texto, dá para usá-lo com 0:34:43.290,0:34:47.850 imagens também. Podemos ter um 0:34:45.330,0:34:49.590 programa que manipula uma imagem em 0:34:47.850,0:34:51.450 binário como entrada e escreve uma 0:34:49.590,0:34:53.400 imagem em binário como saída. E é [br]possível encadeá-los 0:34:51.450,0:34:54.840 dessa forma (vamos dar mais exemplos 0:34:53.400,0:34:57.000 mais pra frente). 0:34:54.840,0:34:59.430 É possível usá-lo até com 0:34:57.000,0:35:00.900 vídeo se vocês quiserem. 0:34:59.430,0:35:02.940 Por exemplo, uma ótima maneira de 0:35:00.900,0:35:05.790 ter um chromecast em casa: você pode 0:35:02.940,0:35:07.920 stream um arquivo de vídeo ao definir 0:35:05.790,0:35:11.160 que o último programa no seu pipe é um 0:35:07.920,0:35:13.050 chromecast send. Com isso, dá para enviar 0:35:11.160,0:35:19.140 um arquivo de vídeo para o streaming ou 0:35:13.050,0:35:20.370 usar http para seu chromecast. 0:35:19.140,0:35:22.410 Vamos falar bem mais sobre isso na aula 0:35:20.370,0:35:25.110 'Duelando com os Dados'. Uma coisa mais 0:35:22.410,0:35:27.800 que gostaria de mostrar é como 0:35:25.110,0:35:30.390 usar o terminal de uma forma mais 0:35:27.800,0:35:31.920 interessante e talvez mais poderosa 0:35:30.390,0:35:33.840 do que vocês estão acostumados. 0:35:31.920,0:35:35.640 Essa dica talveu vai ser válida até para 0:35:33.840,0:35:37.720 quem já se sente mais 0:35:35.640,0:35:41.020 confortável com o terminal. 0:35:37.720,0:35:43.030 Primeiro precisamos abordar um tópico 0:35:41.020,0:35:44.890 importante no que diz respeito aos [br]sistemas Linux 0:35:43.030,0:35:47.620 e MacOS em particular, que é a noção 0:35:44.890,0:35:49.300 de usuário root. O usuário root é como 0:35:47.620,0:35:52.480 o administrador no Windows, 0:35:49.300,0:35:55.000 ele tem ID 0. 0:35:52.480,0:35:56.830 O usuário root é especial porque ele 0:35:55.000,0:35:59.680 pode fazer o que quiser 0:35:56.830,0:36:01.540 no seu sistema, ainda que um arquivo não 0:35:59.680,0:36:03.790 possa ser lido ou escrito por mais 0:36:01.540,0:36:06.010 ninguém, o root ainda pode acessá-lo. 0:36:03.790,0:36:09.000 O root é como um super usuário 0:36:06.010,0:36:11.260 que faz o que quiser. 0:36:09.000,0:36:13.330 Na maiorias das vezes, vocês não vão 0:36:11.260,0:36:15.550 operar como o super usuário, vocês não 0:36:13.330,0:36:17.350 vão ser o root. Vocês vão ser um usuário[br]como john 0:36:15.550,0:36:19.660 ou qualquer que seja seu nome, Esse vai 0:36:17.350,0:36:21.370 ser seu usuário, com o qual vocês agem, 0:36:19.660,0:36:23.470 porque se vocês operassem seu computador 0:36:21.370,0:36:24.700 como o usuário root o tempo todo, 0:36:23.470,0:36:26.710 e rodasse um programa errado, pode ser 0:36:24.700,0:36:29.950 que destruiriam o computador. Vocês não 0:36:26.710,0:36:31.810 querem fazer isso, certo? Mas de vez em [br]quando 0:36:29.950,0:36:34.450 vocês podem querer fazer algo que requeira 0:36:31.810,0:36:38.580 que vocês sejam root. Para esses casos, 0:36:34.450,0:36:42.790 normalmente vocês vão usar um programa[br]chamado sudo 0:36:38.580,0:36:44.740 or 'faça como su" e, nesse caso, su [br]significa 0:36:42.790,0:36:46.590 super usuário. Essa é uma forma de fazer 0:36:44.740,0:36:49.750 algo como super usuário. 0:36:46.590,0:36:51.490 Normalmente funciona assim: 0:36:49.750,0:36:53.020 escrevemos sudo e depois o comando 0:36:51.490,0:36:54.580 como fazemos no terminal. Ele vai 0:36:53.020,0:36:56.230 rodar aquele comando como se você 0:36:54.580,0:37:01.180 fosse o root em vez do seu usuário normal. 0:36:56.230,0:37:04.540 Onde vocês podem precisar de algo assim? 0:37:01.180,0:37:05.800 Bem, um há vários arquivos de sistema 0:37:04.540,0:37:07.510 especiais no seu computador, 0:37:05.800,0:37:11.070 mas, em particular, há um 0:37:07.510,0:37:14.800 chamado sysfs. Se você der cd /sys, 0:37:11.070,0:37:17.320 vamos para um mundo bem diferente. 0:37:14.800,0:37:19.720 Esse arquivo de sistema não é exatamente 0:37:17.320,0:37:22.120 um arquivo em seu computador. Na verdade, 0:37:19.720,0:37:24.180 são vários parâmetros do kernel. O kernel 0:37:22.120,0:37:26.680 é basicamente o cérebro do seu computador. 0:37:24.180,0:37:29.560 Essa é uma forma de acessar os diversos 0:37:26.680,0:37:32.680 parâmetros do kernel através do que 0:37:29.560,0:37:35.950 se parece com um arquivo de sistema. Vejam 0:37:32.680,0:37:37.690 que se eu der cd em class, por exemplo, 0:37:35.950,0:37:39.880 há diretórios para um monte de tipos 0:37:37.690,0:37:43.750 diferentes de dispositivos com os quais 0:37:39.880,0:37:47.920 posso interagir, ou muitas filas que [br]posso acessar 0:37:43.750,0:37:49.990 ou uma variedade de botões internos 0:37:47.920,0:37:50.410 esquisitos. Como eles estão mostrados [br]como arquivos, 0:37:50.410,0:37:54.280 dá para usarmos todas as ferramentas que 0:37:52.030,0:37:57.579 já vimos para manipulá-los. 0:37:54.280,0:38:01.420 Um exemplo disso é se vocês entrarem 0:37:57.579,0:38:02.440 em sys class backlight, esse backlight 0:38:01.420,0:38:04.180 permite que configuremos diretamente 0:38:02.440,0:38:06.760 a luz do nosso laptop, se ele tiver uma. 0:38:04.180,0:38:08.920 Se eu der cd e entrar no intel backlight, 0:38:06.760,0:38:10.990 porque esse é um laptop da Intel, 0:38:08.920,0:38:12.760 aqui vocês vêem que há um arquivo chamado[br]brightness 0:38:10.990,0:38:16.089 e eu posso cat brightness. Esse é o brilho 0:38:12.760,0:38:18.880 atual da minha tela. Mas mais que isso, 0:38:16.089,0:38:21.460 posso modificá-lo também para mudar o 0:38:18.880,0:38:23.740 brilho da tela. Então 0:38:21.460,0:38:25.750 vocês podem pensar que consigo... 0:38:23.740,0:38:26.799 deixe-me ver qual é o brilho máximo. 0:38:25.750,0:38:29.589 Ok, agora está no máximo. 0:38:26.799,0:38:32.319 Vocês podem imaginar que eu 0:38:29.589,0:38:35.410 poderia fazer algo como echo, 0:38:32.319,0:38:39.010 vamos reduzir, 0:38:35.410,0:38:38.010 echo 500 para brightness, 0:38:38.010,0:38:39.010 se faço isso ele diz 0:38:39.010,0:38:43.089 que a permissão foi negada. Eu não posso 0:38:40.839,0:38:45.220 modificar o brilho porque, para fazê-lo, 0:38:43.089,0:38:46.599 para modificar coisas no 0:38:45.220,0:38:48.460 kernel, é preciso ser o 0:38:46.599,0:38:50.619 administrador. Vocês podem pensar 0:38:48.460,0:38:52.960 que a forma de resolver isso é digitar 0:38:50.619,0:38:55.779 sudo echo 500 mas ainda assim a 0:38:52.960,0:38:58.260 permissão é negada. Por que? 0:38:55.779,0:39:00.549 Porque, como mencionei, esses 0:38:58.260,0:39:03.069 redirecionamentos de entrada e saída não 0:39:00.549,0:39:05.470 são algo que os programas saibam quando 0:39:03.069,0:39:07.240 usamos o pipe com o ls e o tail, o tail 0:39:05.470,0:39:09.609 não sabia do ls e o ls não sabia do tail. 0:39:07.240,0:39:11.859 O pipe e o redirecionamento foram [br]estabelecidos 0:39:09.609,0:39:14.079 pelo shell, então, nesse caso, 0:39:11.859,0:39:18.039 o que está ocorrendo é que estou[br]dizendo ao shell 0:39:14.079,0:39:21.220 para rodar o programa sudo com os [br]argumentos 0:39:18.039,0:39:24.130 echo e 500 e mandar essa saída para o 0:39:21.220,0:39:25.930 arquivo chamado brightness, mas é o shell 0:39:24.130,0:39:29.410 que está abrindo o arquivo brightness, 0:39:25.930,0:39:32.380 não o programa sudo. Nesse caso, é 0:39:29.410,0:39:33.789 o shell que está rodando quando eu tento 0:39:32.380,0:39:35.470 abrir o arquivo brightness para escrever[br]nele 0:39:33.789,0:39:37.079 e ele não tem permissão para fazer isso. 0:39:35.470,0:39:39.779 Portanto, ele dá erro. 0:39:37.079,0:39:42.339 Vocês já devem ter visto isso quando 0:39:39.779,0:39:43.750 buscam algo e acabam, no Stack Overflow 0:39:42.339,0:39:45.400 e dizem para rodar um comando tal 0:39:43.750,0:39:47.440 e eles falam, por exemplo, 0:39:45.400,0:39:52.930 eles dão uma instrução 0:39:47.440,0:39:57.970 como 1 > /sys/class 0:39:52.930,0:39:59.559 net ipv4 word, por exemplo. 0:39:57.970,0:40:02.589 Isso é algo que vocês podem ter visto se 0:39:59.559,0:40:04.240 tiverem tentado configurar um firewall 0:40:02.589,0:40:05.680 e esse comando tem de funcionar 0:40:04.240,0:40:08.200 porque o simbolozinho de hashtag 0:40:05.680,0:40:09.640 indica que deve roda como root. 0:40:08.200,0:40:11.170 Isso é raramente explicado, 0:40:09.640,0:40:12.970 mas é isso que o # significa. 0:40:11.170,0:40:15.099 Vejam no meu prompt um símbolo $ 0:40:12.970,0:40:17.710 que indica 0:40:15.099,0:40:18.819 que não estou rodando como root. 0:40:17.710,0:40:22.270 Então a questão é como eu faço pra [br]resolver isso? 0:40:18.819,0:40:24.690 Bem, eu poderia mudar para outro terminal 0:40:22.270,0:40:27.369 como root, e um jeito de fazer isso é 0:40:24.690,0:40:32.140 rodar sudo su, que significa [br]'rode o seguinte 0:40:27.369,0:40:34.329 comando como root' e o su é um comando 0:40:32.140,0:40:37.290 complicado que nos abre um shell como 0:40:34.329,0:40:40.599 super usuário. Então se faço isso, 0:40:37.290,0:40:42.010 entro a senha, vocês podem ver 0:40:40.599,0:40:44.530 que o nome de usuário no início 0:40:42.010,0:40:47.109 mudou de john para root, e o prompt 0:40:44.530,0:40:49.390 mudou de $ para #. 0:40:47.109,0:40:52.240 Se eu agora der echo 500 para 0:40:49.390,0:40:54.010 o arquivo brightness, minha tela 0:40:52.240,0:40:57.040 ficou um pouco mais escura. Vocês 0:40:54.010,0:40:58.990 não conseguem ver então terão de acreditar[br]em mim. Não deu nenhum 0:40:57.040,0:41:01.630 erro porque agora o shell está 0:40:58.990,0:41:04.540 rodando como root e não mais como 0:41:01.630,0:41:07.359 john. O usuário root tem permissão de 0:41:04.540,0:41:09.760 abrir esse arquivo. Mas com o que sabemos 0:41:07.359,0:41:11.349 sobre o terminal agora, há, na verdade, 0:41:09.760,0:41:13.720 uma maneira de fazer isso sem ter 0:41:11.349,0:41:19.119 de abrir um shell root. Funciona assim. 0:41:13.720,0:41:22.990 Deixe-me voltar para 1060. 0:41:19.119,0:41:26.589 Vocês vêem por que está diferente 0:41:22.990,0:41:29.020 aqui? Estou dizendo ao shell para 0:41:26.589,0:41:31.270 rodar o comando echo 1060, 0:41:29.020,0:41:33.369 e estou dizendo para rodar o 0:41:31.270,0:41:35.890 comando sudo tee brightness. 0:41:33.369,0:41:39.160 Estou dizendo para mandar a saída do 0:41:35.890,0:41:40.540 echo para o sudo tee. Para entender isso 0:41:39.160,0:41:43.450 vocês precisam saber o que o comando [br]tee faz. 0:41:40.540,0:41:47.079 O comando tee pega sua entrada e a escreve 0:41:43.450,0:41:49.540 tanto em um arquivo quanto na tela. 0:41:47.079,0:41:52.329 Então o tee é uma maneira conveniente se 0:41:49.540,0:41:54.160 vocês tiverem, por exemplo, um arquivo [br]de logs que queiram enviar 0:41:52.329,0:41:56.230 para deixar guardado para mais tarde, 0:41:54.160,0:41:58.059 mas também querem checar vocês mesmos. 0:41:56.230,0:41:59.770 Vocês podem usar o pipe para mandá-lo[br]para o tee, passar o nome de 0:41:58.059,0:42:01.809 um arquivo e ele vai escrever o que quer[br]que esteja na sua 0:41:59.770,0:42:04.270 entrada tanto no arquivo quanto na sua 0:42:01.809,0:42:07.630 tela. Aqui estou aproveitando esse 0:42:04.270,0:42:09.940 programa, estou dizendo 'rode o tee como 0:42:07.630,0:42:12.970 rota e use o tee direto no arquivo[br]brightness. 0:42:09.940,0:42:14.380 Nesse caso, o programa tee, 0:42:12.970,0:42:16.150 que é quem está abrindo o arquivo [br]brightness, 0:42:14.380,0:42:17.370 está rodando como root, então ele 0:42:16.150,0:42:20.190 tem permissão de fazer isso. 0:42:17.370,0:42:21.390 Se eu rodar de novo, vocês não conseguem 0:42:20.190,0:42:23.850 ver, mas o brilho aumentou no laptop, 0:42:21.390,0:42:25.770 não deu nenhum erro 0:42:23.850,0:42:27.390 e não foi preciso abrir um shell como 0:42:25.770,0:42:30.930 root e rodar comandos nele, 0:42:27.390,0:42:32.160 o que muitas vezes pode ser perigoso. 0:42:30.930,0:42:33.450 Se vocês quiserem explorar esses[br]arquivos de sistema 0:42:32.160,0:42:35.940 um pouco mais, há bastante coisa 0:42:33.450,0:42:39.450 interessante aqui. Se vocês 0:42:35.940,0:42:41.430 derem uma navegada por aqui, 0:42:39.450,0:42:42.930 vão achar bastante coisas divertidas. 0:42:41.430,0:42:45.090 Por exemplo, nós notamos que tem um 0:42:42.930,0:42:48.540 comando legal para o brilho aqui, que 0:42:45.090,0:42:49.980 outros tipos de brilhos eu poderia [br]definir? 0:42:48.540,0:42:51.860 Eu posso usar o comando find, sobre o 0:42:49.980,0:42:56.000 qual também vamos falar numa próxima aula, 0:42:51.860,0:42:58.860 Quero olhar qualquer arquivo cujo nome 0:42:56.000,0:43:01.890 se parece com brightness no 0:42:58.860,0:43:05.070 diretório atual. Não ajudou muito, talvez 0:43:01.890,0:43:08.850 não sejam arquivos. Será que soletrei[br]errado? 0:43:05.070,0:43:17.010 Hum, por que não funciona? 0:43:08.850,0:43:20.460 Oh, parece que ele não quer buscar por 0:43:17.010,0:43:23.910 brightness. Para a sorte de vocês eu já 0:43:20.460,0:43:27.480 conheço um legal. 0:43:23.910,0:43:30.090 Há um subdiretório chamado leds e 0:43:27.480,0:43:32.400 leds também têm brilho. Que tipos de leds 0:43:30.090,0:43:36.960 existem? Um monte! 0:43:32.400,0:43:38.280 Por exemplo, o led da tecla scroll lock. 0:43:36.960,0:43:40.290 A maioria de vocês provavelmente não sabe 0:43:38.280,0:43:42.780 o que é o led do scroll lock e muito 0:43:40.290,0:43:45.770 menos o que o scroll lock faz. Talvez[br]vocês já viram uma tecla 0:43:42.780,0:43:47.670 no teclado chamada scroll lock. 0:43:45.770,0:43:49.650 Basicamente ninguém mais sabe pra que 0:43:47.670,0:43:51.750 serve, ninguém usa pra nada. 0:43:49.650,0:43:55.680 É quase uma tecla morta e 0:43:51.750,0:43:57.240 um led morto. E se vocês quisessem 0:43:55.680,0:43:59.220 configurá-lo para que, toda vez que 0:43:57.240,0:44:00.960 chegar um e-mail, o led do scroll lock[br]acender? 0:43:59.220,0:44:03.270 Por que não tem nenhuma outra razão para 0:44:00.960,0:44:06.000 ele acender. Bem, se entrarmos nesse 0:44:03.270,0:44:08.130 diretório que tem um brilho 0:44:06.000,0:44:12.320 definido como 0. 0:44:08.130,0:44:12.320 Bom, o que acontece se eu escrever 1 nele? 0:44:12.590,0:44:17.220 É aconselhável vocês não saírem 0:44:15.330,0:44:18.720 escrevendo números aleatórios em qualquer[br]arquivo 0:44:17.220,0:44:20.310 deste diretório porque isso vai afetar 0:44:18.720,0:44:22.560 diretamente o kernel. Dêem uma olhada [br]antes 0:44:20.310,0:44:24.240 no que os arquivos fazem. Nesse caso aqui, 0:44:22.560,0:44:28.050 eu fiz uma pesquisa prévia com cuidado. 0:44:24.240,0:44:30.630 Vocês não conseguem ver, mas agora 0:44:28.050,0:44:33.509 no meu teclado o led da tecla scroll lock 0:44:30.630,0:44:35.400 está aceso. Se eu escrevesse um programa 0:44:33.509,0:44:37.829 que checa e-mails, eu poderia, no final 0:44:35.400,0:44:40.229 do programa, rodar um outro programa que 0:44:37.829,0:44:43.499 manda echo 1 para este arquivo, e portanto 0:44:40.229,0:44:47.460 teria uma maneira de acender o led do meu 0:44:43.499,0:44:49.680 teclado para indicar que chegou um e-mail. 0:44:47.460,0:44:50.940 Nessas alturas, vocês já devem saber 0:44:49.680,0:44:54.269 mais ou menos se virar 0:44:50.940,0:44:56.249 com o terminal, o shell e conhecer o 0:44:54.269,0:44:58.920 bastante para realizar essas tarefas 0:44:56.249,0:45:01.289 simples, ao menos teoricamente. Vocês não 0:44:58.920,0:45:02.819 deveriam mais precisar de 0:45:01.289,0:45:03.420 interfaces dependentes do mouse para 0:45:02.819,0:45:05.279 encontrar arquivos. 0:45:03.420,0:45:07.470 Um truque que faltou mostrar e vocês 0:45:05.279,0:45:10.529 podem precisar é o de abrir arquivos. 0:45:07.470,0:45:13.950 Até agora só mostrei como encontrar 0:45:10.529,0:45:17.690 arquivos, mas algo que vocês precisam 0:45:13.950,0:45:21.420 saber nesse curso é usar o 0:45:17.690,0:45:23.640 xdg-open. Esse provavelmente só vai 0:45:21.420,0:45:27.119 funcionar no Linux. Acho que no MacOS ele 0:45:23.640,0:45:29.430 se chama open e no Windows... sei lá. 0:45:27.119,0:45:31.739 O xdg-open recebe o nome de um arquivo e 0:45:29.430,0:45:34.769 vai abri-lo usando o programa apropriado. 0:45:31.739,0:45:36.180 Se vocês derem xdg-open em um arquivo 0:45:34.769,0:45:39.269 html, ele vai abrir o navegador 0:45:36.180,0:45:41.039 e abrir o arquivo. Uma vez que têm esse 0:45:39.269,0:45:42.869 programa, teoricamente vocês não 0:45:41.039,0:45:45.059 precisam nunca mais abrir uma janela do 0:45:42.869,0:45:46.799 buscador. Talvez precisem por outros 0:45:45.059,0:45:48.180 motivos, mas em teoria vocês conseguem 0:45:46.799,0:45:50.789 fazer tudo usando as ferramentas 0:45:48.180,0:45:53.849 que aprendemos hoje. Talvez pareça tudo 0:45:50.789,0:45:55.589 relativamente básico para alguns de vocês, 0:45:53.849,0:45:57.479 mas como eu mencionei, hoje tivemos 0:45:55.589,0:45:59.460 uma introdução. Agora sabemos como o 0:45:57.479,0:46:01.979 shell funciona e muito do que vamos 0:45:59.460,0:46:03.450 fazer nas próximas aulas é usar esse 0:46:01.979,0:46:07.019 conhecimento para fazer coisas bem 0:46:03.450,0:46:09.450 interessantes usando o shell. 0:46:07.019,0:46:10.979 Ou seja, hoje vimos como usar a interface 0:46:09.450,0:46:14.849 que vamos precisar, então é importante 0:46:10.979,0:46:16.650 todos saberem. Na próxima aula, 0:46:14.849,0:46:18.269 vamos falar bastante sobre como 0:46:16.650,0:46:20.309 automatizar tarefas como essas, 0:46:18.269,0:46:22.140 como escrever scripts que rodam um monte 0:46:20.309,0:46:24.390 de programas pra nós, usando 0:46:22.140,0:46:26.700 condicionais, loops etc no terminal, 0:46:24.390,0:46:29.009 ou mesmo coisas como rodar 0:46:26.700,0:46:30.390 um programa até ele quebrar, o que pode 0:46:29.009,0:46:31.979 ser bem útil em casos que queremos 0:46:30.390,0:46:35.369 rodar algo até os testes darem erro, 0:46:31.979,0:46:38.550 por exemplo. Então esse será o tópico da 0:46:35.369,0:46:39.900 aula na próxima semana. Você tinha[br]uma pergunta? 0:46:38.550,0:46:42.420 Sim, com relação ao que você mostrou no 0:46:39.900,0:46:49.770 diretório sys, provavelmente só vai [br]funcionar 0:46:42.420,0:46:52.530 se você estiver usando o subsistema do[br]Windows pro Linux... 0:46:49.770,0:46:55.440 Boa pergunta, eu não sei se 0:46:52.530,0:46:57.570 o subsistema do Windows para Linux vai 0:46:55.440,0:46:59.280 deixar aberto esses arquivos de sistema [br]no sys. Se deixar, 0:46:57.570,0:47:03.180 provavelmente vai mostrar só 0:46:59.280,0:47:08.490 umas poucas coisas... 0:47:03.180,0:47:10.320 Não sei, dê uma olhada. 0:47:08.490,0:47:11.610 Algo que vocês vão ver é que as notas 0:47:10.320,0:47:14.370 de aula dessa aula já estão 0:47:11.610,0:47:16.770 online, e no final do arquivo 0:47:14.370,0:47:18.420 tem diversos exercícios. Alguns 0:47:16.770,0:47:20.190 são relativamente fáceis, outros um 0:47:18.420,0:47:22.560 pouco mais difíceis. Sugerimos 0:47:20.190,0:47:24.060 tentar resolvê-los. 0:47:22.560,0:47:25.410 Se vocês já sabem esse conteúdo, 0:47:24.060,0:47:27.660 vai ser bem rápido, 0:47:25.410,0:47:29.400 e se não sabem vai servir para aprenderem 0:47:27.660,0:47:31.740 um monte de coisas que talvez vocês 0:47:29.400,0:47:33.150 percebam que não sabiam. No tira-dúvidas, 0:47:31.740,0:47:35.190 que vai acontecer logo 0:47:33.150,0:47:36.840 após essa aula, ficaremos felizes 0:47:35.190,0:47:38.160 em ajudá-los com os exercícios ou 0:47:36.840,0:47:39.540 com outros comandos que vocês vão 0:47:38.160,0:47:42.300 aprender nesse processo e queiram saber 0:47:39.540,0:47:44.910 como usar de forma eficiente. Enão na 0:47:42.300,0:47:46.710 próxima aula, já amanhã, vamos assumir 0:47:44.910,0:47:48.290 que vocês estão por dentro desse tipo[br]de coisa 0:47:46.710,0:47:51.750 que os exercícios vão ensinar. 0:47:48.290,0:47:53.030 Há também um endereço de e-mail 0:47:51.750,0:47:56.100 no website, vocês podem mandar questões 0:47:53.030,0:47:58.860 que aparecerem depois do tira dúvidas. 0:47:56.100,0:48:05.160 Mais alguma pergunta 0:47:58.860,0:48:07.050 antes de terminar por hoje? Não? 0:48:05.160,0:48:09.480 Tudo bem, estaremos disponíveis no 0:48:07.050,0:48:12.150 nono andar do prédio Gates, o 32, 0:48:09.480,0:48:15.830 dentro de cinco minutos. 0:48:12.150,0:48:15.830 Vejo vocês lá!