Como tornar seus scripts bash compatíveis com hardware

Escrever scripts para rodar em vários computadores Linux é difícil. Não se pode presumir que terão as mesmas características. O comando getconf permite verificar centenas de valores do sistema operacional e do sistema de arquivos.

índice

  1. Scripts compatíveis com hardware
  2. Começando com o comando getconf
  3. Relatórios de valor único
  4. Usando getconf com valores do sistema de arquivos
  5. Usando getconf em scripts
  6. opção de exagero

Scripts compatíveis com hardware

Se você já escreveu um script que precisa ser executado em uma variedade de máquinas Linux, você pode se deparar com o dilema "Estranho, funciona bem na minha máquina…". Pequenas diferenças entre a arquitetura do computador, os sistemas operacionais e os sistemas de arquivos nos computadores de destino podem impedir que os scripts funcionem corretamente.

Se seus scripts são simples e nada que eles fazem, ou tentam iniciar, depende de hardware compatível ou certas características do sistema de arquivos, você pode nunca ter um problema. Mas quanto mais complicado o script se torna, mais críticos são os detalhes da máquina na qual o script é executado. Também vale a pena notar que um único computador pode ter vários sistemas de arquivos instalados, montados em diferentes partes da árvore de diretórios. Só porque algo funciona em um diretório não significa que funcionará da mesma maneira em outro diretório.

O comando getconf pode relatar literalmente centenas de diferentes características do sistema operacional e do sistema de arquivos. Alguns deles assumem a forma de pares de valores, um dos quais contém o máximo do sistema e o outro o mínimo. Isso significa que você pode testar suas configurações de hardware ou sistema de arquivos para garantir que seu script reaja de acordo.

Obviamente, seu script não pode usar getconf na máquina de destino se não estiver instalado nessa máquina. Todas as distribuições testadas durante a pesquisa deste artigo já tinham o getconf instalado, incluindo Ubuntu, Fedora e Manjaro. Curiosamente todos eles tinham a mesma versão do getconf também a versão 2.33.

Começando com o comando getconf

Você pode verificar se o getconf instalado em seu computador e descobrir qual é a versão, usando a opção --version .

 getconf --versão 

Para ver quantos itens getconf pode relatar, use o comando -a (all) e roteie-o através do comando wc . Isso contará as linhas, palavras e caracteres na saída.

 getconf -a | banheiro 

Existem 320 linhas na saída. Para ver a lista inteira de maneira gerenciável, direcionaremos a saída para less .

 getconf -a | menos 

Você pode rolar para frente e para trás na lista para ver o que o getconf pode relatar.

Alguns dos itens são duplicados. Muitos deles podem ser nomeados com um nome mais curto ou um nome mais longo compatível com POSIX.

Relatórios de valor único

Para fazer com que getconf relate um único valor, passe o nome do valor para getconf na linha de comando. Observe que todos os nomes de opções estão em maiúsculas.

 getconf LONG_BIT 

A opção LONG_BIT informa se seu kernel e, portanto, seu sistema operacional, é de 32 bits ou 64 bits. Nenhum outro parâmetro é necessário para este comando, apenas a própria opção LONG_BIT. Outro valor simples a ser informado é LOGIN_NAME_MAX .

 getconf LOGIN_NAME_MAX 

Este é um comprimento máximo estranhamente alto para um nome de usuário, mas é verdade. Se você realmente quisesse criar uma conta de usuário com um nome de usuário absurdamente longo, você poderia. Por outro lado, o nome do host deste computador tem um comprimento máximo de 64 caracteres:

 getconf HOST_NAME_MAX 

Para ver quantos processos simultâneos uma conta de usuário pode executar, use a opção CHILD_MAX :

 getconf CHILD_MAX 

O valor OPEN_MAX retorna o número máximo de arquivos que um processo pode ter aberto.

 getconf OPEN_MAX 

Para ver um subconjunto de valores getconf podemos usar a opção -a (all) para gerar todos os valores e usar grep para filtrar os de interesse. Por exemplo, para ver cada valor que tem "NAME" no título, use:

 getconf -a | grep NAME 

Da mesma forma, para ver todos os valores com "GROUP" no título, use:

 getconf -a | grep GRUPO 

Para ver os valores que possuem "INT_" no título, use:

 getconf -a | grep _INT 

Mostra os valores máximos e mínimos que uma variável inteira pode conter neste computador.

RELACIONADO: Como "grep" usando strings em um arquivo

Usando getconf com valores do sistema de arquivos

Ao usar qualquer uma das opções de recursos do sistema de arquivos, você deve informar getconf qual sistema de arquivos relatar. Você deve fazer isso mesmo se tiver apenas um único disco rígido e sistema de arquivos instalado. O comando getconf não assume nada. Para indicar que o sistema de arquivos getconf deve relatar, você deve fornecer um caminho para um diretório nesse sistema de arquivos.

Para ver o comprimento máximo de um nome de arquivo para o sistema de arquivos montado na raiz da árvore de diretórios do sistema de arquivos, digite:

 getconf NAME_MAX / 

Para visualizar a saída de um sistema de arquivos diferente, aponte para um diretório localizado no outro sistema de arquivos. Mesmo que você não tenha vários sistemas de arquivos montados permanentemente em sua árvore de diretórios, você pode encontrar outro sistema de arquivos temporariamente anexado à sua árvore de diretórios.

Isso é exatamente o que acontece quando você insere um pendrive, como neste exemplo. O cartão de memória é denominado "PINK" e é montado em "/media/dave/".

 getconf NAME_MAX /media/dave/PINK/ 

Podemos verificar qual sistema de arquivos está no pendrive usando o comando df para ver a qual dispositivo de bloco ele está conectado. Portanto, usamos o comando lsblk com a opção -f (sistema de arquivos).

 df /media/dave/PINK
 lsblk -f /dev/sdb1 

O cartão de memória é um dispositivo de bloqueio. /dev/sdb1 e o sistema de arquivos é FAT32 . É por isso que obtemos resultados diferentes para dois diretórios na mesma árvore de diretórios. Eles estão localizados na mesma árvore de diretórios, mas possuem diferentes sistemas de arquivos subjacentes.

RELACIONADO: Qual sistema de arquivos devo usar para minha unidade USB?

Usando getconf em scripts

Podemos facilmente incorporar a saída de getconf em decisões dentro de nossos scripts de shell.

Por exemplo, para executar ações diferentes dependendo se o script está sendo executado em um sistema operacional de 32 ou 64 bits, você pode usar uma seção de script como esta.

 #!/bin/bash # estamos em um sistema operacional de 32 ou 64 bits? if [ $(getconf LONG_BIT) = "64" ] então # 64 bits echo "máquina de 64 bits." else # 32 bits echo "máquina de 32 bits." fi

A instrução if compara a saída do comando getconf LONG_BIT com o valor "64". Se eles corresponderem, a cláusula then é executada, caso contrário, a cláusula else é executada. Você pode executar ações específicas da versão nas cláusulas then/else ou definir sinalizadores de variáveis ​​que podem ser verificados em outro lugar no script.

Copie o texto do script em um editor e salve o arquivo como "hw-test.sh". Vamos tornar o script executável com o comando chmod e a opção -x (executável).

 chmod +x hw-test.sh 

Quando executamos o script, ele nos informa qual das cláusulas foi ativada. Usando essa técnica, você pode usar qualquer um dos valores getconf para direcionar o script para tomar a ação apropriada.

 ./hw-test.sh 

opção de exagero

O número de valores que getconf pode obter pode ser esmagador. A página man é surpreendentemente curta. Se você espera que eu liste as opções e explique cada uma delas, você ficará desapontado.

Encontre algumas descrições nas páginas man para sysconf is confstr . Você pode precisar cortar alguns caracteres da frente das inserções confstr . Por exemplo, isso não funcionou:

 getconf _CS_GNU_LIBC_VERSION

mas isso fez:

 getconf GNU_LIBC_VERSION

Você também encontrará algumas descrições no arquivo "limits.h". Se você não sabe onde esse arquivo está em seu sistema, use:

 onde é limts.h

Você pode usar less para revisar esse arquivo.

  • A violação de dados da Saudi Aramco coloca 1 TB de dados roubados à venda
  • Como gerenciar fusos horários em contêineres do Docker

descubra mais conteúdo

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

Deixe uma resposta Cancelar resposta

Ir arriba