Sistema de Arquivos no Linux - Parte 6

Aula 13 · GNU/Linux para Servidores

Transcrição do áudio

É, coleguinha, chegamos agora para discutir diretórios. E diretório, na verdade, não é uma pasta. Diretório, se você olhar, ele é o quê? Ele é um arquivo que aponta para outros arquivos. Simples. E isso é interessante. É mais fácil para o ser humano, por a Fordance, acreditar na ideia de coisas contém coisas, como pasta contém documentos. Por questão de a Fordance, de usabilidade. Tecnicamente, então, o diretório é um arquivo que aponta para outros inodes. Então, eu tenho uma árvore hierárquica. Uma árvore hierárquica, beleza? O chão de que eu fui parar aqui. Foi mal, galera. Então, aqui, eu tenho um arquivo que aponta para outra tabela, que na verdade é um outro arquivo de arquivos, de arquivos, e assim vão. Estão fazendo essas associações a inodes. Bom, e aí, naturalmente, vamos ver aqui um exemplo aqui de código. Olha só. Aqui eu tenho abaixo um exemplo de código que ele vai listar arquivos. E feito em C++. Você vai precisar do IowString, que é uma biblioteca conhecida na Standard Iow, que tem definições de objetos para manipulação de Iow em geral, como um dispositivo de entrada e saída de bloco. File System, execução de operações de sistemas de arquivos em arquivos. Bom, então, vamos lá. IowString, FileString. Então, isso aqui é muito comum, tá? Para toda hora que você for utilizar STD, 2.2. File System, você pode usar FS. Se você falar que o namespace é igual, é como se eu criasse um apelido. No Python, você pode fazer isso também, né? Você dá um import, alguma coisa, S, alguma coisa. Por exemplo, BuildfulSulp, cara, pelo amor de Deus. No Python, você pode chegar aqui, né? E Python, Python 3, né? Então, import, request, S, por exemplo, RE. E aí, depois você consegue. RE.get. Vamos colocar aqui. Attps, 2.barabarra, www.curso, rater.com.br. Legal. E aí, eu acabei de fazer um request. Veja que eu não precisei colocar request.get. Eu chamei de RE. Então, eu dei um nome para aquilo, certo? Exite. Eu dei um nome para aquilo. Aqui também, é como é feito no Python, né? Desculpe, não se você mais mais. NamespaceFS. Você pode ver que aqui no código eu chamo FS, ó. FS, está vendo? Senão você teria que colocar std, 2.filesystem, 2.direktory, interator. Essa é a ideia por trás de você usar namespace. A galera diz que é uma má prática isso aqui. É uma má prática. Mas eu não vou negar para você que eu tenho vísculos. Minha cervejinha, meu name space. O que que esse código faz? O MEI, ele é executado, né? No Python, nós temos que chamar explicitamente. No caso, no C mais mais, ele é chamado implicitamente. Então, aqui eu crio uma string, std, 2.2.string. É como eu crio uma string C mais mais, tá? C mais mais tem string, C não tem string. Standard, Lib, 2.2.string.spacepath. O nome da variável é peth. O tipo não é como Java que o S é maiúsculo. O tipo aqui praticamente é um S minúsculo. É estranho, né? Para um javeiro, para um cara de C sharp, vir aqui para C mais mais. Tem algumas particularidades, coleguinha. E aqui, uma string que está sendo colocada em peth. Logo em seguida, eu vou utilizar aqui o directory Interator, que é tipo uma função estática. Vamos colocar assim. Tipo uma função estática que retorna os entry, e eu posso fazer um laço de repetição. Isso aqui é semelhante a um for it. Semelhante a um for it. Não é bem um for it. Tem algumas considerações, tá? Aqui, essa estrutura é muito interessante, porque esse directory Interator vai interagindo à medida que você vai usando. Então você não tem o total. Olha que interessante. Você não tem o total. Então esse for vai interagindo, vai interagindo e pegando. Por isso que é um Interator. Ele vai pegando e vai caminhando. A cada vez que ele passa, ele pega um, ele pega mais um. Não tem o total, não é uma lista. Na verdade, ele não se sabe quando começa. Então você pode usar também o IOS se quiser. Como só tem uma linha, seu código só tem uma linha aqui debaixo do for, você não precisa das chaves do for. Os mais antigos, um pouco mais velhos que eu, eles colocaram essa linha aqui atrás do... Deixa eu ver se eu não coloquei, cara. Não, coloquei. Ele colocaria essa linha aqui atrás do for aqui. Se fosse um cara mais antigo que eu, pouca coisa. Tudo bem? Eu vou aqui ficar expandando a minha idade pra vocês. Legal. E nessa linha faz o quê? STD 2.2.COUT. Que é tipo você colocar no console de saída. Vamos colocar assim. Você vai escrever na saída da tela. Vai escrever o quê? Isso aqui é uma injeção. Como assim? Ele vai injetar o resultado disso, nisso, e depois vai injetar os bits aqui nisso. E vai escrever na tela. Bem-vindo ao C Mais Mais, coleguinha. Gostaria de fazer um curso pra vocês de C Mais Mais. O que é esse ENDL? Esse aqui é o Endline. Por exemplo, tem sistema operacional que a quebra de linha é uma barra N. Tem sistema operacional que é barra R e barra N. Então ao utilizar o Endline, o C Mais Mais pega quebra de linha adequado ao seu sistema operacional. Entry.pef. Então quer dizer que cada entry, que é um tipo meio que dinâmico, ele vai pegar lá uma função chamada PEF. Porque você não definiu entry em momento algum, né? Ele vai criar aqui em tempo de execução na memória. Vai invocar uma função PEF que retorna o PEF. Então ele vai escrever o nome lá dos arquivos que estão no diretório raiz. Ele não é recursivo. Ou seja, ele executa sobre o diretório barra e para. Simples assim. Seria o que... O teu Ls. Seria o teu Ls. Então vamos lá, vamos... Na natureza nada se perde, nada se cria. Tudo se copia. Acho que isso que de listar a pulto CPP, né? Tá bom, vamos lá. Vem aqui. CD... mkdir.tmp, tá? Clear. CD.tmp. Veja, PWD. Eu estou dentro do meu diretório de usuário. Tá? Aqui eu posso fazer o que eu quiser. Nano.listar.cpp. E aí vamos colar isso aqui. Sim. Vamos remover aqui. Vamos remover aqui. Legal? Não vou ditar tudo isso não, cara. Já sofri demais a minha vida. Também, se você vai ficar aqui me vendo digitar, cara. Opa. Eu só tenho que fazer uma forma de conseguir pegar todo esse código sem esse estilo que eu criei para o material, né? Eu vou usar espaços, tá? Galera que trabalha comigo fica puta comigo, né? Porque a galera fica puta no feminino, né? Eu sou no masculino. Eu fico puto com eles. É diferente. Ó, então olha só, né? Esse aqui é o nosso código, certo? Ctrl-O. Salvei. Beleza? Tá. É, algumas considerações. Engava ou inserchapi a chave aqui em cima. Em ser mais mais a chave aqui embaixo. Qual a diferença? Não tinha execução nenhuma, amiguinho. Nenhuma. Ruma. G mais mais. Listar. Traço. Ó. Listar. E aí eu tiro o cpp. Legal? E aí eu compilar e gerar um executável aqui mesmo, certo? Ele é esse traço, ele é. Saiba você. Preste atenção. Uma técnica hacker muito bacana. Você leva o código até o cliente e compila no cliente. Automaticamente ele dá permissão de execução. Tá? Isso é muito importante. Quer dizer que esse código foi compilado na sua máquina. Portanto, as ferramentas de defesa não são muito eficazes contra ele. Por exemplo, no Windows, compilando C-Sharp no Windows, em tempo de execução, eu consigo dias sem ser detectado pelo Defender. Só para você ter uma noção. E aí ele lista. Ponto barra. Ponto barra. Listar. Ponto barra, porque eu já listei a aula de iNode. Ponto barra diz. Da onde eu estou tem um cara chamado Listar. E aí ele executa. Ponto barra, da onde eu estou, tem o Listar. E aí ele lista. Legal? O programa Idiota, feito em C++, serve para você executar, aí ver, brincar e discutir. Contei os coleguinhos. Eu estava dando aula de alguma coisa aqui. Ah, de Python. Python para hacker os coleguinhos. Legal. Aqui já é uma busca recursiva. Desculpe. Uma listagem recursiva. A recursividade, ela é interessante. Como funciona? Continuo aqui com io string file string. Filesystem, desculpe. Na hora de executar, olha só, se é um diretório, eu pego o PFE e chamo Listar novamente. E aí eu vou de forma recursiva. Isso se chama recursividade. Quando uma função chama ela mesmo para fazer aquele serviço. Então eu vou listar um diretório. Se é arquivo, eu imprimo na tela. Se não é arquivo, eu imprimo na tela e inicio uma listagem daquele diretório. Beleza? Muito simples. Na boa, não vou nem criar um novo lá. Vou simplesmente chegar lá e vou mandar aqui a real. Vou apagar esse cara toda aqui e vamos ver direitinho aqui. Recursividade é algo muito importante. Cai muito ali nas questões das provas básicas de programação. Se o programador não sabe fazer ou resolver problemas de recursividade. Aí vai eu aqui e ela aqui. Normal para um velho como eu. Ah, eu vou tomar vergonha na cara. E vou. E vou. Pode deixar o código pronto da próxima vez. Isso aqui se chama identação, tá galera? É fundamental. Se o aluno me chama para ver um código e o código não tá identado, eu vi as costas. Entendeu? Opa! Eu matei uma chave errada aí. Eu matei uma chave errada aqui cara. Com certeza. Olha, a número de chaves não tá batendo. Não, não, tá batendo sim. Ah, a professora olhou meu código, virou as costas. Tá lógico, pô. Tu não me dêntara o código meu amigo. Eu não vou enxergar nunca um código não identado. Tá certinho o número de chaves. Essa chave aqui. Essa chave aqui. Essa chave aqui. Legal. Só uma confirmada. O menchama o home. Joga no listar. Recebe o home. Aí ele faz o interator e lista o home. Tudo aquilo que for naturalmente diretório eu chamo listar novamente. Todas as chaves estão fechadas, todos os pontos invíguas estão no lugar, control o, ok. Control x. Eu tenho que recompilar, gente. Porque não é Python que você edita e roda e tá valendo. Tem que recompilar. A boveve pode ser que venha muitos arquivos agora, né. E vai vir muito arquivo, né. Ele foi recursivo, vocês viram. Ele vai entrando e vai indo tudo, cara. Olha que daora. E aí você poderia procurar, por exemplo, tudo que é texte, tudo que é script. Dá pra fazer várias execuções ali, ideias. E é pra isso que você estuda programação no curso de Linux para infraestrutura. Pra você aprender a resolver problemas, coleguinha. Então o giz diretório valida, se é um diretório ou não. Até a nossa próxima aula que vamos falar sobre arquivos de bloco. Até lá, até mais. Tchau.
Voltar ao curso