Sistema de Arquivos no Linux TAC, CAT, CMP, MORE - Parte 11
Aula 18 · GNU/Linux para Servidores
Transcrição do áudio
Há muito tempo atrás nós não tínhamos uma tecnologia chamada Jornalyn. Então os arquivos eram praticamente escritos diretamente no sistema secundário de armazenamento. E então nós tínhamos uma preocupação muito grande com arquivos corrompidos. Bom, sempre foi uma preocupação, mas antigamente acontecia e eu passei por isso algumas vezes. Bom, quando o arquivo se corrompe, é possível binariamente você corrigir mais aí, já não é para qualquer um. Acontece que alguns sistemas de arquivos, bom, assunto que vamos ver aqui dois capítulos, eles implantaram um negócio chamado Jornalyn. E nesse Jornalyn, todas as alterações não são feitas diretamente no sistema secundário, são feitos na memória com notícias de alteração. E essas notícias de alteração são persistidas no disco. Então quer dizer que agora não se corrompe mais arquivos como se corrompiam no passado. Por que estou falando isso? Porque antigamente era um sacrilejo você abrir um arquivo de configuração só para ver o arquivo, ou seja, não é para editar com uma ferramenta de edição. Então é lógico que eu vou explicar isso aqui para vocês. Eu sei que agora é como você acertar um átomo na galáxia que seria mais próxima, mas vai que alguém consiga acertar esse átomo com tiro nessa galáxia mais próxima. Ou seja, vai que aconteça esse erro e aí você vai ficar pistolado comigo. Então vamos lá. Esses são duas operações tão básicas que nós fazemos sobre os arquivos. Primeiro, ler um arquivo. Eu só quero ver o conteúdo do arquivo, porra. Só quero ver quem o cara colocou lá. Oi, eu quero editar o arquivo. O ruim é quando você quer ler o arquivo, não porque você quer ver o que o cara escreveu lá. É porque você quer ver o que você escreveu. Cara, isso aí, meu ser... Se você chegar nesse ponto aí vai passear com cachorro. Ahahahah. Bom, um erro clássico, então, clássico do passado, é você pegar um arquivo para ler e utilizar ferramentas, então, de edição. Isso leva a riscos. Aí tem aqui uma nota de roda-pé, 23 riscos reduzidos em sistemas de arquivos que utilizam o jornal. Cara, ficou ao passar do arquivo Word para o PDF. Agora eu vi que não ficou legal as notas de roda-pé. A alta de roda-pé eu tinha feito com uma fonte menor e uma linha. Bom, futuro resolve isso. Bom, então vamos lá. E aí, naturalmente, pode corromper um arquivo. Caso você precise ler um arquivo, utilize cat conforme exemplo abaixo. Bom, tem um arquivo muito importante no mundo Linux. E eu posso abrir aqui porque é uma máquina de aula. Não é minha máquina real, jamais poderia, atualmente, deixar isso aqui passar, né? Cate barra e tab, CVTC, pass, tab. Ou seja, PAS, tab. E ele completa para mim. Legal. Então eu escrevi no output. O output, ele é, naturalmente, um descritor, que vamos falar mais para frente. Então o programa escreve no descritor de output do programa, que entra no input do terminal. E aí mostra na tela para mim. Que é algo que nós vamos ver no futuro. Olha só, está aqui o arquivo. Superusuário root. Por que que eu sei que é um superusuário? O que é o conceito de superusuário? Está vendo esse zero aqui? Então pense você, no princípio do princípio, os arquivos estão sendo copiados e uma nova imagem está sendo ali instalada em um disco e está virando um sistema opressional. Tudo é copiado para o usuário, ID0, grupo zero. Então quem for ID0 é superusuário, ou seja, pode manipular qualquer arquivo. Vou repetir. Quem é zero pode manipular qualquer arquivo. Puta merda. Então isso é uma das coisas que distingue esse usuário como superusuário. Lógico que você poderia muito bem e é comum do mundo hacker. Preste atenção. Você vem aqui no WW data e colocar zero aqui. Pode. Por que você tem que entender que no passado, na época dos programas antigos que utilizava DBF, utilizava arquivos de dados antigos, a primeira coluna é a chave de tudo. Não a segunda, não a terceira, a primeira. Então é a primeira que não se repete, mas aqui é a segunda, a terceira, a terceira coluna. Então essa pode se repetir. Então o cara coloca 33 aqui. Bom, qual é a vantagem que é de zero no lugar do 33? Espera aí. Qual é a vantagem disso? Quer dizer que todo processo que roda com o usuário WW data, ele pode ser o superusuário. Ele executa operações sobre os arquivos lá do kernel, lá da instalação. Puta merda. Então você faz um superusuário. Qual é a vantagem de colocar no WW data? Geralmente o WW data, ele, geralmente, ele é muito usado para o usuário de websites. Então se você consegue fazer um upload de um script malicioso para um website, você consegue executar ele como superusuário. Hum, um papo esse nós vamos ter mais pra frente. Tá? Legal, né? Bom, é bom conhecer as coisas, cara. É muito bom você conhecer. Estudar, ler, saber, conversar com as pessoas. Tá? Você, naturalmente, pode ver o final de arquivo traço e... Cara, eu já usei esse comando aqui com vocês. Lembra do arquivo InXC++ que eu copiei, colei e vei os caracteres do Microsoft Word? Hum, então. Vamos lá, então. Traço e... Linux. O caracté de quebra de linha é esse aqui, ó. Tá? Que eu não grifei. Então a linha começa aqui e termina aqui para nós, para nós, para a máquina não. Tá vendo? Aqui, ó. Ó. Então, quer dizer o seguinte, se você comparar... Se você comparar essa linha, certo? Com essa linha, você só não vai ver esse último caracté. Então essa linha está íntegra. Ela não foi corrompida. Então eu vou ver esse último caracté e aí eu pego isso aqui. Aí eu olho aqui. Cara, igualzinho. Não foi corrompida. Então quando um arquivo ele é corrompida, é assim que nós fazemos. Nós comparamos e só tiramos isso aqui. Se for o Microsoft Windows, vai ver uma coisa maluca lá, tá? Olha só. Aqui, aqui, aqui, aqui. Ó, barra em barra-bèche, ó. Exclamação, M, cifrão. Tá vendo isso aqui? Exclamação não desculpe. É o acento circunflexo. Eu acho que é isso. Não lembro. Tá vendo aqui o circunflexo e o M? Não deveria existir, cara. Não deveria existir. Então esse arquivo está corrompido logo aqui. Na verdade, todas as linhas, né? O cara parece que copiou de um PDF na internet e colou. O cara copiou da internet e algum PDF e colou. E é o merda que deu. E isso aqui não deixa com que esse script seja executado. Então, se você tem dúvida, você olha para o teu script e fala ou para o teu corte e fala assim, pô, mas está correto. Eu não rei nenhum cara que ter. Cara, qual conta sua aí da mulher? Nos fechamento de string. Tá? Beleza? Bom, tem arquivos que são muito longos, né? Não sei se vocês já viram, né? E às vezes nós temos que olhar com outros leitores. O Cache nem sempre é o múniculeitor de arquivo que utilizamos. Beleza? Aqui está mostrando o seguinte. Legal. Pera aí. Imagina então o que eu tenho aqui também. O que dá para se fazer com Cache? Concaternação de textos. Você tem um arquivo logo do processo 1, do programa 1, logo do processo 2. Com o Cache, você pode colocar os logs aqui e colocar esse sinal de maior e um arquivo que não existe. Então ele vai concatenar os dois arquivos nesse arquivo aqui. Que é comum fazer isso quando nós temos várias rotinas de backups e aí tem vários logs e aí nós juntamos os logs em um único log para mandar com o comando mail. O Linux tem um comando chamado mail, dá para a gente mandar o email com o log de um processo. Só que em vez de mandar 10 logs, se junta tudo em um e manda ele depois no final. Tá? Bom, aqui nós temos um Cache simples. Basicamente, agora estamos utilizando strings na linguagem C você não tem string. Na linguagem C você tem um array de char. E por isso que no passado você tinha limite para os textos. Limite para o nome de uma pessoa, limite, sete tudo limite. Já no C++ nós temos uma classe chamada string e com ela nós temos então a possibilidade de criar um objeto do tipo string. String é um texto, mas não encarado para nós programadores como array de char. Bom, aqui estou usando WebStream. Vamos mexer com arquivos, vamos pegar a linha do arquivo e vamos mexer com dispositivos de I.O. Vamos mexer com o disco. Aqui, se o cara não colocou os dois argumentos, porque dois argumentos? Eu vou fazer assim, tipo assim, meu Cache, por exemplo, não, meu Cache, meu Cache, e vou passar o argumento do arquivo que eu leio. Então, o que acontece? Esse aqui é o argumento zero, esse aqui é o argumento um. São dois argumentos, tá? Por isso que eu estou testando se o número de argumentos aqui é diferente de dois. Não, tem que ser exatamente dois. Sinal eu saio com exit um. Nós vamos ver mais para frente, sempre que um processo sai com um número diferente de zero, significa que deu erro. Que erro deu? Bom, aí o programador que vai ter que definir. Que número representa, por exemplo, o número de argumentos? Não corrente, vamos colocar assim. Bom, aqui nós temos o I.F.StringFile, para nós abrirmos arquivos. Bom, geralmente, se eu estivesse programando em Java, deixa eu abrir com a ferramenta de texto. Se você estivesse programando em Java, como seria isso aqui? Vamos lá. Eu estou com um problema aqui, gente, do QBSControl. Cara, se acredita que tem um plano contra o cara. Do scroll. Se você estivesse programando em Java, seria assim, né? Se estivesse. Não é Java, tá, galera? I.F.String... Ah, é. I.F.String, se fosse. File é igual a Neo. Espera aí, deixa eu arrumar minha cadeira aqui. Neo. Neo. I.F.String. E aqui entraria o quê? Aqui entraria no caso, o caminho do arquivo que estaria além do lógico. Existe isso no Java, tá? Estou só te falando como é a estrutura aqui do C++. Argue, V, colcheite 1. Se você olhar, olha a diferença dessa linha, que seria uma nomenclatura Java para uma nomenclatura do C++. Pera, desculpa, galera. Estou morrendo, hein, galera? Proveitem, perguntem. Seria assim. Então isso é um grande impercílio, porque nós temos um rebanho de pessoas formadas em Java, em C-Sharp, e que elas não entendem a nomenclatura do C++. Olha como eu criei um objeto do C++. Repara, File é um nome praticamente da variável que eu estou criando. Mas aí eu meto um parênteses aqui e eu já coloco argumento. Cara, é muito diferente. E essa file aqui, ó, é isso aqui. Então isso faz com que muitos programadores apanhem no C++. Não é uma linguagem de físo, cara. Ela só tem suas particularidades. Legal, depois que eu tenho o arquivo carregado aqui nesse objeto, eu crio uma string vazia, e então eu faço um IO2, praticamente, não desculpe, um IO com o Gateline. O Gateline, ele acha, então, todas as linhas pelo fim de string. Cadê? Aqui não tem. Legal, então eu vou ter que... Então esse Gateline, ele vai achar. Ele vai achar isso aqui, seguido de uma quebra de linha, barra N. Quando ele achar isso aí, seguido de um barra N, ele vai fazer, pô, isso é uma quebra de linha, e aí ele vai retornar a linha. Bom, e aí o que ele faz? Ele carrega a linha aqui dentro do STR. Bom, se fosse um programador Java, como que esses caras fariam, né? Você tem que entender que eles fariam assim. O cara, eu fechei, né cara? Bom, a minha decisão de fonte se mantém. Então, praticamente, se fosse Java, como seria uma inquilatura, ele criaria LINE, então, string STR, não é isso? Aí ele colocaria tipo assim, STR vai ser, por exemplo, file.getLine, certo? Seria assim, e o ILE, por exemplo, STR for diferente de NULL, e aí ele faria assim, e aí ele iria... Aí aqui ele iria dar um print, Sistem.out.println, certo? E aqui ele, então, iria colocar o STR, certo? E aí, naturalmente, depois ele iria repetir isso aqui, aqui embaixo, e vai. E vai, vai, vai, vai, vai, vai, certo? Então, assim que seria a programação em Java, e aqui seria a programação em C++. Bom, em particularidades, lógico, em particularidades, mas repare que Java, você manipula o objeto mais fácil, é mais fácil você enxergar o objeto sendo manipulado, entende? É uma grande vantagem do mundo Java. Aqui não, repare, você está pegando a string, aqui, deixa eu colocar aqui. Você está pegando a string vazia, e você está passando ela como argumento para uma função, e essa função recebe o objeto-arquivo e o objeto string, e ele preenche ali dentro para você, lá dentro ele preenche para você. Então, lá dentro dessa função, ele preenche a string com o file, você não consegue enxergar manipulação de objetos. E então, você só tem muita chamada de função, muita chamada de função, mas você não tem a manipulação do objeto. Isso faz com que o C++ seja menos intuitivo que o Java, menos intuitivo que o C++, menos intuitivo, não sei não, do Python, tá? Porque quem fez o Python é apaixonado pelo estilo C++, estilo C++. E então, ele escreve lá ali. Então, é compilhe, roda, você vai ver que ele vai ter nenhum arquivo, legal? O comando TAC, ele é o contrário do Cache. Entender a piada? Ó, TAC, né? Então, você troca aqui para um C e troca aqui para um T, TAC. Cate, TAC, ó. C-A-T, Cate. T-A-C, TAC. O TAC você imprime ele invertido. Você imprime ele invertido do Cache. É, basicamente isso. É o último, cara. Já usei uma ou duas vezes na minha vida. É útil usar uma ou duas vezes na minha vida. Imagine que você tem um arquivo gigantesco, gigantesco, gigantesco, gigantesco. E você precisa ler esse arquivo gigantesco. Pô, cara. E agora? Bom, esse arquivo não existe no Debian 13, não existe mais, tá? Não existe. Pô, cara, agora eu lembrei, vou ter que mudar meu livro, hein? Isso aqui é do Debian até o 12. O C-C-T-L ponto conf, é um arquivo de configuração lá dos primórdios do Linux. Bom, vamos lá. O more funciona assim. Deixa eu reduzir minha tela aqui. Legal. More, tá? ETC, Net, opa, NetTab, tá. Legal. Intertab, legal? Ah, arquivo pequeno também. Ah, eu vou abrir aqui, então, o ETC, Paz, WD. Olha, veja. Ele leu na tela esse pedacinho e colocou pra mim que isso aqui é só 16% do arquivo. Se eu quiser ler um pouquinho mais, eu pressiono uma vez o enter. Olha, cada vez que eu pressiono o enter, ele vai colocando mais uma linha. Tá vendo? Cara, o more é muito útil mesmo, cara. Quando o arquivo não é grande, quando o arquivo não é grande, você pode também... Pra você sair no tromite ao Q, tá? Você pode, então, ter um outro problema com o seu uso more. Vê, veja, ó. Legal. L-S-B-BIN, certo? Ih, que aí? Você viu? Ah, é só aumentar a tela. Meu amigo, tem muito servidor que a tela é isso aqui, cara. Tem muito servidor que a tela é isso aqui. E o page-up, page-down, não funciona. Em todos os servidores, em tudo. Então, você quer ver lá no começo, porra. Como é que você faz? Você fez isso aqui, né? Preste atenção. Pipe, opa. Pipe, pipe more. Ele escreveu o começo. Rapaz, olha que coisa esquisita tem lá no início do meu sistema de arquivos, hein? Olha isso aqui, hein? Cara, eu desconheço isso aqui, cara. Já fiquei assustado. E aí eu vou pressionando enter, ó. Como eu não tenho o final do arquivo, ele não me diz quantos por cento. Ele tá lendo da memória. Ele não sabe o final. Então, ele não coloca a porcentagem, né? Tem duas formas de você ler as coisas. Aonde você já tem tudo, então você começa a ler, então você sabe o final, você sabe quanto tem. Opção 2, você está lendo de um stream. O stream você nunca sabe quantos bits tem pra ler. Tá? Eu ensino vocês a programar mais no futuro. Hoje, hoje não. Eu nem caguei hoje, cara. Porra. Como é que eu... Para sair o quê? Tá? Pressiona a letra aqui. Você sai. Legal? Beleza. Tá. Por isso que eu não vendo esse custo aí, o dê, cara. Não é que caguei hoje. Não tem como ensinar programação, eu não caguei, porra. Outro arquivo que não tá mais no Linux, que é o syslog, né? Todo o mecanismo depois do... Desculpe. Uma falha de segurança no Linux dentro do log fez porra... Uma reescrita do mecanismo de log do Linux. Então alguns arquivos deixaram de existir, porque decidiram, já que vão ter que reescrever a merda toda, já decidiram então melhorar, né? CD barra var, barra log. Então aqui, meu coleguinha, ficam então todos os arquivos de log, né? Elestraço L, H de um ano, eu quero ver aqui, aqui em tamanhos de kbytes, 50 kbytes, 4 kbytes, é um diretório, né, gente? 50 kbytes, diretório, 1 megabyte. Tá vendo aqui, ó? dpkg.log, olha o tamanho desse log. Bom, é um comando que eu vou ensinar a vocês mais pra frente, mas eu já vou ensinar agora pra você, já que nós estamos aqui, né? Um... o readme logs... Tá bom, olha só, vamos lá, olha. sudo, teio, na verdade, eu não precisaria de ser um superusuário, porque olha só, o R aqui, para others, others tem um Rzinho, então eu não preciso de ser superusuário, tá? Quando que eu utilizo superusuário? Pra você não utiliza superusuário a qualquer momento, você tem que confirmar, porque você vai virar um preguiçoso, relaxado, e aí quando você fizer a merda na infraestrutura, você vai quebrar a empresa que você trabalha. Então você não vai ser um merda relaxado, bosta, tá? E você vai pensar bem, eu não uso ou não uso o sudo. Pra cada comando, teio, traço, F, posso passar vergonha agora, né? Da onde eu estou, tem um arquivo dpkg, eu dei um tab, eu coloquei dp e dei um tab. Bem sugestivo para os meus alunos, hein? dp, dp, coleguinha e tab, passa para o próximo. Dá um ente, então ele fica parado aqui. Ele fica parado aqui, certo? Deixa eu abrir aqui, pra vocês entender um outro terminal. Sudo, isso eu preciso porque vou dar um update, update, traço, apet, update, traço, y, legal? Então ele vai tentar, não tem nada pra fazer instalação, não tem nada de dpkg pra colocar. Aff, sudo apet install, por exemplo, nettools, opa. Ó, tá vendo aqui, tá andando? Tá vendo que ele andou? Ah, pera aí, então quer dizer que se alguma coisa é escrita nesse arquivo, ele fica com um cursor parado aqui esperando. E aí o que instala, joga no arquivo dos logs e eu vejo, é assim que você acompanha a execução de programas. No caso eu estou vendo a execução do dpkg. dpkg é o mecanismo de instalação do débian que vocês vão ver mais pra frente. Ah, então quer dizer que eu consigo acompanhar o que está acontecendo no meu Linux executando o comando tail, traço f e o arquivo de log que eu quero, exatamente. Contra o c, contra o c, você sai do tail. Então tail serve pra isso. Pra você acompanhar os archivos que se modificam com o passar do tempo. O log do PHP, o log do Apache, o log do Tomcat, o log do sistema. Todinho você consegue acompanhar assim usando o tail. O tail eu utilizo bastante porque eu estou sempre acompanhando as merdas que estão acontecendo. Entendeu? Entendeu, coleguinha? Legal. Acho bom que tem entendido. Peraí, vou usar meu olho aqui. Vamos lá. Ah, o tail aqui. Precisou do sudo no tail para o syslog porque no débian 12 o syslog só pode ser lido pelo superusuário. Porque é baseado no syslog que o Hacker consegue informações do seu Linux. Então ele não pode ser acessado por qualquer usuário. Então por isso que, no caso que... Eu achei o dpkg um risco de segurança. Pra mim aqui deveria ser um tracinho. O bootstrap. Mas não é o bootstrap do Linux, do HTML não. O bootstrap do sistema operacional. Aqui, ó. Esse R aqui eu estou achando um sacrilegio, cara. Que merda é essa daqui? O jornal, linha aqui, ó. Oh, com permissão especial. Oh, cara, que merda, hein, cara. Já vou explicar aqui que é a permissão especial daqui a pouquinho. Beleza. Split. Split é quando você quer cortar um arquivo. Cara, isso aqui é importante, cara. Você tem um arquivo gigante e você quer cortar ele em parte. Split, traço L de lista, de linha de scoop, quatro linhas. Um arquivo grande. E parte é o que ele vai colocar no nome do arquivo. Então você parte um, parte dois, parte três, parte quatro. Ah, desculpe aqui, ó. Parte A, parte B, parte C, parte C, parte D. Entenderam? Parte A, parte B, parte D. E aí ele vai colocar. Certo? Cara, isso aqui é importante pra caramba, porque você tem grandes arquivos gigantescos, como por exemplo, cenas vazadas e você quer analisar se na sua infraestrutura alguém está usando aquelas cenas, né? Então você pode particionar o arquivo em pedaços de milhão. Então um milhão, dois milhão, três milhão de cenas separados. E aí você roda um teste no primeiro arquivo, em vez de você rodar em três, quatro milhões de cenas pra você verificar se o usuário usou uma cena dessas vazadas, você faz só no primeiro milhão, por exemplo. Corte em pedaços. Próximo vídeo, vamos falar sobre editores vinano e o grande problema do mundo Linux e dos gatos pipinos. Até mais, tchau!