Como Tornar Seus Scripts Bash Conscientes de Hardware
Escrever scripts para rodar em diferentes computadores Linux é difícil. Você não pode presumir que eles terão as mesmas características. O comando getconf permite verificar centenas de valores do sistema operacional e do sistema de arquivos.
Scripts de reconhecimento de hardware
Se você já escreveu um script que precisa ser executado em várias máquinas Linux, pode muito bem ter se deparado com o problema “ Estranho, ele funciona perfeitamente na minha máquina … ” dilema. Pequenas diferenças entre a arquitetura do computador, sistemas operacionais e sistemas de arquivos nas máquinas de destino podem impedir que seus scripts funcionem corretamente.
Se os seus scripts são simples e nada do que fazem — ou tentam iniciar — dependências de hardware compatível ou determinados recursos do sistema de arquivos, você pode nunca ter problemas. Porém, quanto mais complicado seu script se torna, mais críticos são os detalhes da máquina em que o script está executando. Também é importante notar que um único computador pode ter vários sistemas de arquivos instalados nele, montados em diferentes partes da árvore de diretórios. 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 sistemas operacionais e características do sistema de arquivos. Alguns deles assumem a forma de pares de valores, um mantendo o máximo do sistema e o outro mantendo o mínimo. Isso significa que você pode testar os valores do hardware ou do sistema de arquivos para garantir que seu script reagirá de acordo.
Claro, 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 durante a pesquisa para este artigo já tinham o getconf instalado, incluindo Ubuntu, Fedora e Manjaro. Curiosamente, todos eles tinham a mesma versão do getconf também, versão 2.33.
Primeiros passos com o comando getconf
Você pode verificar se tem o getconf instalado no seu computador e descobrir qual é a versão, usando a opção --version.
getconf --version
Publicidade
Para ver quantos itens getconf pode relatar, use a opção -a (all) e canalize-o por meio do comando wc. Isso contará as linhas, palavras e caracteres na saída.
getconf -a | wc
Existem 320 linhas na saída. Para ver a lista inteira de uma forma gerenciável, iremos canalizar o resultado para menos.
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 chamados por um nome mais curto ou por um nome mais longo compatível com POSIX.
Relatório de valores únicos
Para fazer o getconf relatar 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
Publicidade
A opção LONG_BIT informa se o seu kernel — e, portanto, seu sistema operacional — é de 32 bits ou 64 bits. Não existem outros parâmetros necessários 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 quisesse criar uma conta de usuário com um nome de usuário absurdamente longo, você poderia. Por outro lado, o nome de 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 abrir.
getconf OPEN_MAX
Para ver um subconjunto dos getconfvalues, podemos usar a opção -a (all) para gerar todos os valores e usar grep para filtrar aqueles que estamos interessado em. Por exemplo, para ver cada valor que tem “ NAME ” em seu título, use:
getconf -a | grep NOME
Da mesma forma, para ver todos os valores com “ GROUP ” no título, use:
getconf -a | GRUPO grep
Publicidade
Para ver os valores que têm “ INT _ ” no título, use:
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
Usando getconf com valores do sistema de arquivos
Ao usar qualquer uma das opções relacionadas às características do sistema de arquivos, você precisa dizer ao getconf sobre qual sistema de arquivos ele deve relatar. Você precisa fazer isso mesmo se tiver apenas um único disco rígido e um único sistema de arquivos instalado nele. O comando getconf não presumirá nada. Para indicar o sistema de arquivos que o 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 ver o resultado para um sistema de arquivos diferente, aponte para um diretório localizado no outro sistema de arquivos. Mesmo se você não tiver diferentes sistemas de arquivos permanentemente montados 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 cartão de memória USB, como neste exemplo. O cartão de memória é denominado “ PINK ” e está montado em “ / media / dave /.”
getconf NAME_MAX / media / dave / PINK /
Publicidade
Podemos verificar qual sistema de arquivos está no stick de memória USB usando o comando df para ver a qual dispositivo de bloco ele está conectado. Em seguida, usamos o comando lsblk com a opção -f (sistema de arquivos).
df / media / dave / PINK
lsblk -f / dev / sdb1
O stick de memória é o dispositivo de bloco / 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.
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 do script como esta.
#! / bin / bash # estamos em um sistema operacional de 32 ou 64 bits? if [$ (getconf LONG_BIT) = "64"] then # 64 bit 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 de “ 64. ” Se corresponderem, a cláusula then é executada, caso contrário, a cláusula else é executada. Você pode executar ações específicas da versão no then / elseclauses ou definir sinalizadores de variáveis que podem ser verificados em outro lugar em seu script.
Copie o texto do script em um editor e salve o arquivo como “ hw-test. sh. ” Tornaremos o script executável com o comando chmod e a opção -x (executável).
chmod + x hw-test. sh
Publicidade
Quando executamos o script, ele nos diz quais cláusulas foram acionadas. Usando essa técnica, você pode usar qualquer um dos valores getconf para direcionar seu script para realizar a ação apropriada.
./ hw-test. sh
Opção Overkill
O grande número de valores que getconf pode relatar pode ser esmagador. A página do manual é surpreendentemente breve. Se você espera que ele liste as opções e explique cada uma delas, ficará desapontado.
Você encontrará algumas descrições nas páginas de manual de sysconf e confstr. Você pode precisar cortar alguns caracteres da frente das entradas de 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 em “ limits.h ” Arquivo. Se você não souber onde o arquivo está em seu sistema, use:
Você pode usar menos para revisar esse arquivo.
Nenhum comentário