Como aprender mais sobre o kernel do Linux em sua própria máquina



Experimente Nosso Instrumento Para Eliminar Problemas

Aprender a trabalhar com GNU / Linux geralmente envolve aprender a trabalhar com um ambiente de desktop. A tecnologia de tema permite que esses ambientes de desktop imitem as interfaces de dispositivos iOS, Microsoft Windows e OS X. Isso ajuda a minimizar isso, por assim dizer. Muitas pessoas vão além e aprendem a administração de linha de comando do Unix com os shells Bash ou tcsh. No entanto, tornar-se familiarizado com os aspectos internos do kernel Linux pode ajudá-lo a entender melhor como diferentes partes do opcode interagem entre si.



Algumas pessoas argumentariam que seria melhor ir além e aprender adicionalmente como os compiladores transmutam o código C em instrutores de máquina para um microprocessador. Os defensores do código assembly, então, argumentariam que é melhor aprender ASM para realmente entender a programação nas plataformas x86 e x86_64. Independentemente dessas posições, os comandos básicos do Linux podem fornecer uma riqueza de informações sobre como o kernel vê seu computador. Aprender através do paradigma visual, mas sem tocar, é uma ótima maneira de dominar o próprio kernel. Embora a conta raiz tenha sido usada para os exemplos nesta página, é altamente recomendável que você apenas visualize os diretórios vinculados ao kernel por meio de uma conta de usuário.



Método 1: o diretório / proc

O diretório / proc fica em uma das regiões primárias do diretório raiz de nível superior em qualquer estrutura de arquivo Unix. Ele contém o que é chamado de sistema de arquivos proc, mais conhecido como procfs, que contém informações sobre como diferentes recursos acessam a memória do kernel. Ele é mapeado para / proc no momento em que o sistema é inicializado. Uma vez que esta estrutura de arquivo proxy serve como uma interface para a estrutura de dados interna dentro do kernel do Linux, é mais uma vez melhor apenas explorar isso por meio de uma conta de usuário. A maioria dos arquivos é classificada pela estrutura de arquivos do sistema visível como somente leitura de qualquer maneira, mas é melhor estar do lado seguro.



Dito isso, cada um deles é um arquivo de texto, então você pode visualizá-los se desejar. Use o comando cd para entrar no diretório / proc e, em seguida, emita ls para ver o que está lá. Use o comando cat, menos ou mais com qualquer um dos arquivos para examiná-los. O arquivo cpuinfo é um bom lugar para começar, já que mostra como o kernel vê seu microprocessador. Observe o arquivo stat para ver os processos em execução.

2016-11-25_020006

Digitar dispositivos felinos permitirá que você veja quais itens estão conectados à sua máquina.



2016-11-25_020109

A propósito, você sempre pode emitir o comando man proc para um resumo de como a estrutura do arquivo / proc se relaciona com o kernel. A página servida vem do Manual do Programador Linux.

2016-11-25_020156

Método 2: o diretório / sys

Sua próxima parada no tour de seu kernel é / sys, que é outro diretório mapeado para uma estrutura de arquivo simulada. Isso segue o mesmo conceito geral do Unix que / proc, mas em vez disso, é exportar ativamente informações sobre unidades de dispositivo associadas e vários subsistemas do kernel. Se você já trabalhou com um sistema baseado em BSD, então você deve estar mais familiarizado com o sysctl fornecendo essas funções. Dispositivos de barramento PCI, USB e S / 390 são todos mapeados para o diretório / sys.

Use cd / sys para acessar o diretório e, em seguida, execute o comando ls ou dir. Você pode ter diretórios intitulados block, class, devices, fs, kernel e talvez outros. Você pode explorá-los para outros arquivos simples que contêm informações sobre o sistema, mas, mais uma vez, faça isso a partir de uma conta de usuário e mantenha uma visão, mas não mexa na sua mentalidade.

Método 3: o diretório / dev

Use o comando cd / dev para acessar o diretório / dev, que pode ser a estrutura virtual do kernel com a qual você já está mais familiarizado. O nome significa dispositivos e contém a representação de arquivo dos dispositivos conectados ao seu sistema. Um comando ls neste diretório retornará muitos arquivos até mesmo na distribuição de servidor mais simples.

2016-11-25_020242

Alguns deles são muito especiais. O arquivo / dev / null é um dispositivo nulo que não faz nada. Se você digitar cat / dev / null, não obterá nada disso. É chamado de balde de bits e a saída pode ser redirecionada a ele para manter a tela limpa. Um arquivo chamado / dev / zero contém nada além de zero dados, que podem ser gravados em um disco para zerá-los. Os arquivos aleatórios e urandom contêm dados aleatórios de lixo para a criação de hashes de segurança.

Se você já formatou um disco, provavelmente tem pelo menos alguma experiência com a maneira como o kernel do Linux os vê. Cada disco conectado ao sistema recebe um nome como sda, sdb e assim por diante para cada disco. Diferentes tipos de disco recebem nomes diferentes. Lembre-se de que o diretório / dev utiliza uma definição potencial de disco em ciência da computação formal, em vez da maneira que normalmente usamos esse termo. Isso significa que um disco rígido, um SSD, um cartão SD, um cartão microSDHC, um sistema de arquivos de smartphone montado conectado via USB, pen drives e até mesmo tablets montados são todos discos para o kernel.

Cada nome de disco no Linux recebe um numeral após ele, indicando um número de partição. Se você tinha um SSD com duas partições primárias, então você poderia ter / dev / sda1 e / dev / sda2 como volumes válidos. Mais do que provável, se você estiver executando o Linux em um desktop ou laptop com particionamento no estilo MBR, então você tem / dev / sda1 configurado para a partição ext4 que realmente tem o Linux instalado. Mais do que provável, / dev / sda2 é uma partição estendida que contém / dev / sda5 como uma partição swap. Este esquema é comum, mas de forma alguma necessário. Observe que, como a partição de troca neste exemplo comum é um disco lógico dentro de uma partição estendida, ela recebe 5 em vez de 3 como seu numeral.

Se você quiser aprender mais sobre como o kernel vê e formata partições, então você pode realmente ver uma lista de partições suportadas com o comando fdisk. Enquanto fdisk não grava tabelas de partição até que você diga, ainda é melhor tentar fazer isso com algo que você não se importa em torrar. É recomendado apontá-lo para algo como um stick USB vazio que você poderia reformatar facilmente.

Digamos que seu bastão esteja aparecendo como / dev / sdc , então você poderia usar sudo fdisk / dev / sdc para carregá-lo. Se você tiver uma partição válida nela, digite t para alterar o tipo e o tipo L para carregar uma lista de códigos hexadecimais. Observe que os esquemas de partição MBR e GUID se comunicam com o kernel de maneira diferente e, portanto, têm atribuições diferentes.

2016-11-25_020331

Na maioria das vezes, você terá unidades definidas para o tipo 83, que é para unidades do Linux, 82, que é para partições de troca do Linux ou um dos tipos de arquivo FAT. O FAT remonta, de uma forma ou de outra, a 1977 e ainda é preferido para muitos tipos de dispositivos móveis, bem como muitas unidades removíveis. Observe que alguns tipos de partição, como o tipo 0x0c, apresentam algo chamado suporte LBA.

Quando um programador projeta um kernel para um sistema operacional, ele tem algumas maneiras diferentes de ver os discos. Uma é dividir os pratos em cilindros, cabeças e setores. Essa foi a maneira clássica de se referir a discos rígidos por mais tempo. A geometria de disco genuína nunca foi realmente importante para o Linux e, infelizmente, esse esquema fica sem endereços após aproximadamente 8 Gigabytes binários. A segunda maneira é usar o endereçamento C / H / S lógico, que faz isso, mas depois permite que o controlador de disco mapeie os números de cilindro, cabeçote e setor onde quiserem. É por isso que um sistema operacional poderia teoricamente alegar que havia cabeças em um cartão SD ou um pendrive quando isso fosse fisicamente impossível.

O terceiro método é através do endereçamento de bloco lógico, que é o significado do LBA. Cada bloco físico em um volume recebe um numeral neste esquema. O sistema operacional diz ao controlador de disco para gravar em um determinado bloco numerado, mas não sabe realmente se esse é o bloco direto no disco. Este é o esquema mais usado hoje e certamente tem sido usado na grande maioria dos discos rígidos desde meados da década de 1990.

O Linux oferece suporte ao kernel para montar uma ampla variedade de tipos de partição sem entrada direta, mas ainda é melhor não ser muito estranho ao selecioná-los. Você poderia torrar seus dados se fizesse um tipo de partição muito estranho para a escolha de correspondência do sistema de arquivos.

Método 4: chamadas de sistema do manual do programador do Linux

Leitores de páginas de manual integrados incluídos na maioria das distribuições Linux podem realmente fornecer um curso intensivo sobre chamadas de sistema, o que pode ajudar imensamente no aprendizado sobre o kernel. Inicie o navegador de páginas de manual do xman a partir de um link .desktop, se você tiver um, ou alternativamente, mantendo pressionada a tecla super e R ao mesmo tempo, digitando xman e pressionando enter. Selecione a opção “Página manual” e escolha “Seções” e finalmente “(2) Chamadas do sistema” no menu suspenso.

2016-11-25_020430

Uma vez que uma opção dizia “ introdução ”Aparecer, selecione-o. Uma página do Manual do Programador Linux que irá ensiná-lo um pouco sobre chamadas de sistema irá cumprimentá-lo.

2016-11-25_020518

6 minutos lidos