Escribir scripts para ejecutar en diferentes computadoras Linux es difícil. No se puede hacerse cargo que tendrán las mismas características. los getconf
El comando le posibilita verificar cientos de valores del sistema operativo y del sistema de archivos.
Secuencias de comandos con acreditación de hardware
Si en algún momento ha escrito una secuencia de comandos que debe ejecutarse en una gama de máquinas Linux, es factible que se haya enfrentado al dilema de «Extraño, funciona bien en mi máquina …». Las pequeñas diferencias entre la arquitectura de la computadora, los sistemas operativos y los sistemas de archivos en las máquinas de destino pueden impedir que sus scripts funcionen correctamente.
Si sus scripts son simples y nada de lo que hacen, o intentan iniciar, depende del hardware compatible o de ciertas capacidades del sistema de archivos, es factible que nunca tenga un obstáculo. Pero cuanto más complejo se torna su script, más críticos son los detalles de la máquina que ejecuta el script. Además es importante destacar señalar que una sola computadora puede tener varios sistemas de archivos instalados, montados en diferentes partes del árbol de directorios. El hecho de que algo funcione en un directorio no significa que funcionará de la misma manera en otro directorio.
los getconf
El comando puede informar literalmente sobre cientos de diferentes sistemas operativos y características del sistema de archivos. Algunos de estos toman la forma de pares de valores, uno con el máximo del sistema y el otro con el mínimo. Esto significa que puede probar los valores del sistema de archivos o del hardware para asegurarse de que su secuencia de comandos reaccione en consecuencia.
De todos modos, su secuencia de comandos no puede utilizar getconf
en el equipo de destino si no está instalado en ese equipo. Todas las distribuciones que se probaron al investigar este post habían getconf
ya instalado, incluidos Ubuntu, Fedora y Manjaro. Curiosamente, todos tenían la misma versión de getconf
además, la versión 2.33.
Primeros pasos con el comando getconf
Puedes chequear que tienes getconf
instalado en su computadora y averigüe qué versión es, usando el --version
opción.
getconf --version
Para ver cuántos posts getconf
puede informar, utilice el -a
(todos) y canalizarlo a través de la wc
mando. Esto contará las líneas, palabras y caracteres en la salida.
getconf -a | wc
Hay 320 líneas en la salida. Para ver la lista completa de una manera manejable, canalizaremos la salida a less
.
getconf -a | less
Puede desplazarse hacia adelante y hacia atrás en el listado para ver qué getconf
puede informar.
Algunos de los ítems están duplicados. A muchos de ellos se les puede llamar por un nombre más corto o por un nombre más largo compatible con POSIX.
Informar sobre valores únicos
Causar getconf
para informar sobre un solo valor, pase el nombre del valor a getconf
en la línea de comando. Tenga en cuenta que todos los nombres de las alternativas están en mayúsculas.
getconf LONG_BIT
los LONG_BIT
Option informa si su kernel, y por eso, su sistema operativo, es de 32 bits o de 64 bits. No se requieren otros parámetros para este comando, solo la propia opción LONG_BIT. Otro valor simple sobre el que informar es LOGIN_NAME_MAX
.
getconf LOGIN_NAME_MAX
Esa es una longitud máxima extrañamente alta para un nombre de usuario, pero es cierto. Si verdaderamente quisiera crear una cuenta de usuario con un nombre de usuario ridículamente largo, podría hacerlo. Por el contrario, el nombre de host de esta computadora dispone de una longitud máxima de 64 caracteres:
getconf HOST_NAME_MAX
Para ver cuántos procesos simultáneos puede ejecutar una cuenta de usuario, utilice el CHILD_MAX
opción:
getconf CHILD_MAX
los OPEN_MAX
value devuelve el número máximo de archivos que un procedimiento puede tener abiertos.
getconf OPEN_MAX
Para ver un subconjunto del getconf
valores podemos utilizar el -a
(todo) opción para generar todos los valores y utilizar grep
para filtrar los que nos interesan. A modo de ejemplo, para ver todos los valores que disponen «NOMBRE» en su título, utilice:
getconf -a | grep NAME
De la misma forma, para ver todos los valores con «GRUPO» en su título, utilice:
getconf -a | grep GROUP
Para ver los valores que disponen «INT_» en su título, use:
getconf -a | grep _INT
Esto muestra los valores máximo y mínimo que una variable entera puede contener en esta computadora.
RELACIONADO: Cómo buscar con «grep» usando cadenas en un archivo
Utilizar getconf con valores del sistema de archivos
Cuando utiliza cualquiera de las alternativas asociadas con las características del sistema de archivos, debe indicar getconf
sobre qué sistema de archivos debe informar. Debe hacer esto inclusive si solo tiene un solo disco duro y un solo sistema de archivos instalados. los getconf
El comando no asumirá nada. Para indicar el sistema de archivos getconf
debe informar, debe proporcionar una ruta a un directorio en ese sistema de archivos.
Para ver la longitud máxima de un nombre de archivo para el sistema de archivos montado en la raíz del árbol de directorios del sistema de archivos, escriba:
getconf NAME_MAX /
Para ver el resultado de un sistema de archivos distinto, apunte a un directorio ubicado en el otro sistema de archivos. Inclusive si no tiene diferentes sistemas de archivos montados permanentemente en su árbol de directorios, puede encontrarse con otro sistema de archivos adjunto temporalmente a su árbol de directorios.
Esto es exactamente lo que sucede cuando inserta una memoria USB, como en este ejemplo. La tarjeta de memoria se llama «PINK» y está montada en «/ media / dave /».
getconf NAME_MAX /media/dave/PINK/
Podemos verificar qué sistema de archivos hay en la memoria USB usando el df
comando para ver a qué dispositivo de bloque está conectado. Posteriormente usamos el lsblk
comando con el -f
(sistema de archivos) opción.
df /media/dave/PINK
lsblk -f /dev/sdb1
La tarjeta de memoria es un dispositivo de bloqueo. /dev/sdb1
y el sistema de archivos es FAT32
. Es por ello que obtendremos resultados diferentes para dos directorios en el mismo árbol de directorios. Están en el mismo árbol de directorios, pero disponen diferentes sistemas de archivos subyacentes.
RELACIONADO: ¿Qué sistema de archivos debo usar para mi unidad USB?
Usando getconf en Scripts
Podemos incorporar fácilmente la salida de getconf
en decisiones dentro de nuestros scripts de shell.
A modo de ejemplo, para realizar diferentes acciones dependiendo de si la secuencia de comandos se ejecuta en un sistema operativo 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 or 64 bit OS? if [ $(getconf LONG_BIT) = "64" ] then # 64 bit echo "64-bit machine." else # 32 bit echo "32-Bit machine." fi
los if
declaración compara la salida de la getconf LONG_BIT
comando con el valor de «64». Si coinciden, el 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/else
clá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». Haremos que el script sea ejecutable con el chmod
comando y el -x
(ejecutable) opción.
chmod +x hw-test.sh
Cuando ejecutamos el script, nos dice cuáles de las cláusulas se activaron. Usando esta técnica, puede utilizar cualquiera de los getconf
valores para dirigir su secuencia de comandos a realizar la acción adecuada.
./hw-test.sh
Exceso de alternativas
La gran cantidad de valores que getconf
puede ser abrumador. los man
La página es sorprendentemente breve. Si espera que enumere las alternativas y explique cada una, se sentirá decepcionado.
Encontrarás algunas descripciones en el man
páginas para sysconf
y confstr
. Es factible que deba recortar algunos caracteres del frente del confstr
entradas. A modo de ejemplo, esto no funcionó:
getconf _CS_GNU_LIBC_VERSION
pero esto hizo:
getconf GNU_LIBC_VERSION
Además encontrará algunas descripciones en el archivo «limits.h». Si no sabe dónde está ese archivo en su sistema, use:
whereis limts.h
A continuación, puede usar less
para revisar ese archivo.