Como tornar seus scripts Bash compatíveis com hardware

Conteúdo

Bash Shell

Escrever scripts para rodar em diferentes computadores Linux é difícil. Não se pode presumir que terão as mesmas características. a getconf O comando permite que você verifique centenas de configurações do sistema operacional e do sistema de arquivos.

Scripting com certificação de hardware

Se a qualquer momento você escreveu um script que deve ser executado em uma variedade de máquinas Linux, es factible que se haya enfrentado al dilema de “Estranho, funciona bem na minha máquina …”. Pequenas diferenças entre a arquitetura do computador, sistemas operacionais e sistemas de arquivos em máquinas de destino podem impedir que seus scripts funcionem corretamente.

Se seus scripts são simples e nada fazem, ou tente começar, depende do hardware compatível ou de certos recursos do sistema de arquivos, é possível que nunca tenha um obstáculo. Mas quanto mais complexo seu script fica, mais críticos são os detalhes da máquina que executa o script. Também é importante observar que um único computador pode ter vários sistemas de arquivos instalados, montado em diferentes partes da árvore de diretórios. Só porque algo funciona em um diretório não significa que funcionará da mesma forma em outro diretório.

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

De qualquer forma, seu script não pode usar getconf no computador de destino, se não estiver instalado nesse computador. Todas as distribuições que foram testadas ao pesquisar este post tinham getconf já instalado, incluindo Ubuntu, Fedora e Manjaro. curiosamente, todos eles tinham a mesma versão de getconf O que mais, a versão 2.33.

Introdução ao comando getconf

Você pode verificar o que você tem getconf instalado no seu computador e descubra qual é a versão, usando o --version opção.

getconf --version

Para ver quantas postagens getconf pode informar, Use o -a (todo o mundo) e canalizá-lo através do wc comando. Isso vai contar as linhas, palavras e caracteres na saída.

getconf -a | banheiro

Existem 320 linhas na saída. Para ver a lista completa de uma forma gerenciável, vamos canalizar a saída para less .

getconf -a | menos

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

Getconv -a output no visualizador de arquivos menos

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

Reportar valores únicos

Causa getconf para relatar um único valor, passe o nome do valor para getconf na linha de comando. Observe que todos os nomes alternativos estão em maiúsculas.

getconf LONG_BIT

a LONG_BIT Opção informa se o kernel, e por isso, seu sistema operacional, Isto é 32 bits o de 64 bits. Nenhum outro parâmetro é necessário para este comando, apenas a própria opção LONG_BIT. Outro valor simples para relatar é LOGIN_NAME_MAX .

getconf LOGIN_NAME_MAX

Esse é um comprimento máximo estranhamente alto para um nome de usuário, mas é verdade. Se você realmente deseja criar uma conta de usuário com um nome de usuário ridiculamente longo, poderia fazer isto. Pelo contrário, O nome do host deste computador tem um comprimento máximo de 64 personagens:

getconf HOST_NAME_MAX

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

getconf CHILD_MAX

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

getconf OPEN_MAX

Para ver um subconjunto do getconfvalores que podemos usar o -a (tudo) opção de gerar todos os valores e usar grep para filtrar os que nos interessam. Como um exemplo, para ver todos los valores que disponen “NOME” en su título, usar:

getconf -a | grep NAME

Da mesma forma, para ver todos los valores conGRUPOen su título, usar:

getconf -a | agarrar GRUPO

Para ver los valores que disponenINT_en su título, usar:

getconf -a | grep _INT

Isso mostra os valores máximo e mínimo que uma variável inteira pode conter neste computador.

RELACIONADO: Como pesquisar com “grep” usando strings em um arquivo

Use getconf com valores de sistema de arquivos

Quando você usa qualquer uma das alternativas associadas aos recursos do sistema de arquivos, deve indicar getconf sobre qual sistema de arquivos relatar. Você deve fazer isso mesmo se tiver apenas um único disco rígido e um único sistema de arquivos instalado. a getconf O comando não assumirá nada. Para indicar o sistema de arquivos getconf deve informar, 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, escriba:

getconf NAME_MAX /

Para ver a saída de um sistema de arquivos diferente, apontar para um diretório localizado em outro sistema de arquivos. Mesmo se você não tiver diferentes sistemas de arquivos montados permanentemente em sua árvore de diretórios, você pode se encontrar com outro sistema de arquivos temporariamente anexado à sua árvore de diretórios.

Isso é exatamente o que acontece quando você insere um pendrive USB, como neste exemplo. La tarjeta de memoria se llamaPINKy está montada en “/ meios de comunicação / dave /”.

getconf NAME_MAX / media / dave / PINK /

Podemos verificar qual sistema de arquivos está no stick USB usando o df comando para ver a qual dispositivo de bloco está conectado. Mais tarde usamos o lsblk comando com o -f (Sistema de arquivo) opção.

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 obteremos resultados diferentes para dois diretórios na mesma árvore de diretórios.. Eles estão na mesma árvore de diretórios, mas têm 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.

Como um exemplo, para executar ações diferentes, dependendo se o script está sendo executado em um sistema operacional de 32 bits o de 64 bits, puede usar una sección de secuencia de comandos como esta.

#!/bin / bash

# are we on a 32 ou 64 bit OS?
E se [ $(getconf LONG_BIT) = "64" ]
então
  # 64 bit
  echo "64-bit machine."
outro
  # 32 bit
  echo "32-Bit machine."
ser

a if declaración compara la salida de la getconf LONG_BIT comando con el valor de “64”. Si coinciden, a then la cláusula se ejecuta caso contrario el else se ejecuta la cláusula. Puede realizar acciones específicas de la versión en el then/elsecláusulas o establezca indicadores de variables que se pueden verificar en otra parte de su secuencia de comandos.

Copie el texto del script en un editor y guarde su archivo como “hw-test.sh”. Faremos o script executável com o chmod comando e o -x (executável) opção.

chmod + x hw-test.sh

Quando executamos o script, nos diz quais cláusulas foram ativadas. Usando esta técnica, você pode usar qualquer um dos getconf valores para direcionar seu script para a ação apropriada.

./hw-test.sh

Excesso de alternativas

O grande número de valores que getconf pode ser opressor. a man A página é surpreendentemente curta. Se você espera que eu liste as alternativas e explique cada uma, você ficará desapontado.

Você encontrará algumas descrições no man páginas para sysconf e confstr. Você pode precisar cortar alguns caracteres da frente do confstr ingressos. Como um exemplo, isso não funciona:

getconf _CS_GNU_LIBC_VERSION

mas isso fez:

getconf GNU_LIBC_VERSION

Además encontrará algunas descripciones en el archivolimits.h”. Se você não sabe onde esse arquivo está em seu sistema, usar:

whereis limts.h 

A seguir, Você pode usar less para verificar aquele arquivo.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.