
La palabradominioSe refiere a dos conceptos diferentes en Linux:
- Un programa ejecutable, comogrep(o un shell incorporado, comocd). Uso de ejemplo: "Aquí están los 10 comandos principales de Linux que debes aprender".
- Una cadena de texto completo enviada al shell para su ejecución, comogrep com/etc/hosts. Uso de ejemplo: "Escriba un comando de Linux y presione Entrar".
¿Alguien tiene alguna práctica recomendada para evitar esta ambigüedad al escribir prosa sobre comandos de Linux? Aquí hay algunos intentos que ya he rechazado:
- usando la palabraprogramaoejecutablepor el significado #1. Es inexacto para las funciones integradas de shell.
- usando la fraselínea de comandopor el significado #2. Esto es confuso porque "línea de comando" también es sinónimo de "shell".
- usando la frasecadena de comandopor el significado #2. Es impreciso porque tanto el n.º 1 como el n.º 2 son cadenas.
Se agradece cualquier consejo.
Respuesta1
POSIXse refiere a las cosas que son semejantes grep
y cd
como "utilidades", yreservas "dominio"para las instrucciones. Usados consistentemente, estos términos son inequívocos.
Para abordar sus casos por turno
"Un programa ejecutable, como grep (o un shell integrado, como cd)"es unutilidad:
UtilidadUn programa, excluyendoutilidades integradas especialesproporcionado como parte del lenguaje de comandos de Shell, que se puede llamar por su nombre desde un shell para realizar una tarea específica o un conjunto de tareas relacionado.
Cual esaclarado aún más con:
El sistema puede implementar ciertas utilidades como funciones de shell o utilidades integradas.
Para ser explícito, esto incorpora utilidades ordinarias como
true
las que se encuentran comúnmente como componentes integrados del shell.Formalmente "utilidades integradas especiales" están separados de las utilidades que no se especifican más; estas son cosas como
break
,.
,eval
,set
ytrap
, que afectan el estado interno del shell, peronoincludecd
, que es un elemento integrado normal. Fuera de las necesidades matizadas de la especificación (cierto comportamiento de asignación de variables difiere y no están disponibles conexecvp
), "utilidad" es suficiente para cubrir ambas categorías a nivel de usuario. Los artículos de sintaxis de shell comoif
ywhile
no son utilidades en absoluto."Una cadena de texto completo enviada al shell para su ejecución, como
grep com /etc/hosts
"es undominio:DominioUna directiva al shell para realizar una tarea particular.
Los comandos incluyen comandos simples como
grep com /etc/hosts
, canalizaciones y comandos compuestos comoif
construcciones y comandos de agrupación con( ... )
, pero la palabra "comando" nunca se refiere a una utilidad en sí. Dentro de un comando, unnombre del comandopuede aparecer que identifica una utilidad o una función: el nombre del comando engrep com /etc/hosts
esgrep
, en referencia ala utilidad grep.
Los usos vernáculos de "comando" para referirse a una utilidad o función pueden aclararse según el contexto, pero el significado formal es sólo el de una instrucción. Si es necesario evitar por completo la ambigüedad,puedes usar consistentemente "utilidad" y "comando"para esos dos roles.
Sin embargo, probablemente no se puede esperar que los usuarios hagan esa distinción por sí mismos, por lo que los artículos sobre los "10 principales comandos de Linux" optimizados para motores de búsqueda probablemente estén tomando la decisión correcta para sus incentivos.
Respuesta2
RESUMEN
El tipo de ambigüedad que usted hace referencia a percibir aquí se soluciona mejor utilizando términos comoprograma, unArchivo ejecutable, o simplemente unejecutablepara el que tiene/es un camino, versuscomando de shello inclusolínea de comando cuando quieras hacer referencia a todo lo que escribes en tuintérprete de comandos.
Contexto histórico
El índice de las primeras impresiones deEl lenguaje de programación C("K&R", Prentice-Hall) contenía solo una mención de la palabradominio, y no por esa palabra específicamente sino porargumentos de línea de comando. Este pequeño núcleo de significado proporciona la semilla fundamental que germinó y se ramificó en todos los usos posteriores. De la página 111 de una impresión de 1978:
5.11 Argumentos de la línea de comandos
En entornos que admiten C, existe una manera de pasar argumentos o parámetros de línea de comandos a un programa cuando comienza a ejecutarse.
Es decir, la palabradominiose usa únicamente en un contexto de shell (porque un shell por definición es unintérprete de comandos), ya sea en uso interactivo o en programación con script. Los autores continúan con este ejemplo:
El ejemplo más simple de las declaraciones y el uso necesarios es el programa
echo
, que simplemente repite sus argumentos de la línea de comandos en una sola línea, separados por espacios en blanco. Es decir, si el comandoecho hello, world
se da, la salida es
hello, world
Observe cómo K&R habla allí de programas y líneas de comando. En otras palabras, es lo que el IEEEPOSIX 1003.2se trata de,noquéPOSIX 1003.1es. En términos generales, Dot-1 cubre la programación en C, mientras que Dot-2 cubre la programación en shell.
Y de lo que realmente estás hablando aquí es de programación Shell, no de programación C. Por eso la introducción aSección 1 del Manual del programador de Unixmenciona comandos, no llamadas a funciones:
NOMBRE
introducción: introducción a los comandos generales (herramientas y utilidades)
DESCRIPCIÓN
Las páginas del manual en la sección 1 contienen la mayoría de los comandos que componen el entorno de usuario de BSD. Algunos de los comandos incluidos en la sección 1 son editores de texto, intérpretes de shell de comandos, herramientas de búsqueda y clasificación, comandos de manipulación de archivos, comandos de estado del sistema, comandos de copia remota de archivos, comandos de correo, compiladores y herramientas de compilación, herramientas de salida formateadas y comandos de impresora de líneas. .
Todos los comandos establecen un valor de estado al salir que se puede probar para ver si el comando se completó normalmente. Los valores de salida y su significado se explican en los manuales individuales. Tradicionalmente, el valor 0 significa la finalización exitosa del comando.
Si estuviera hablando en la jerga 1003.1, podría llamarlo el argumento de cadena paraelsistemafunción en la biblioteca C. Esto se debe a que no es una llamada al sistema en sí, sino una función de biblioteca que emplea varias llamadas al sistema internamente, una de las cuales es
execve
. Esa llamada al sistema toma un
char *
argumento constante como primer argumento, que es la ruta al archivo ejecutable en el sistema de archivos.
Soluciones publicadas
Una solución publicada utiliza sistemáticamente las siguientes definiciones:
Archivo ejecutable
Aarchivoque está especialmente marcado para indicarle alSistema operativoque está bien ejecutar este archivo como un programa. Generalmente abreviado como "ejecutable".
dominio
Encaparazónprogramación, la combinación sintáctica del nombre de un programa y sus argumentos. En términos más generales, cualquier cosa que escriba en un shell (un intérprete de comandos) que lo inicie a hacer algo. [...]
argumentos de línea de comando
Los valores que usted proporciona junto con el nombre de un programa cuando le dice a un caparazónpara ejecutar undominio. [...]
nombre del comando
El nombre deprogramaactualmente en ejecución, como se escribió en ellínea de comando. [...]
Tomado de la cuarta edición deProgramación Perl(O'Reilly), y utilizado aquí con la amable autorización de los autores de ese libro. :) .
Si tiene suerte, podrá encontrarlos todos usted mismo, y más, simplemente escribiendo esta sencilla línea de comando en su shell para que ejecute elhombreejecutable/programa para usted:
man perlglossary
Pero si no tienes tanta suerte,también puedes encontrarlos aquí.
Comandos de shell
Este podría ser un comando de shell:
exec 2>errs.out
Observe que no había nada exec
allí; Acabamos de reorganizar un descriptor de archivo.
Lo mismo ocurre aquí:
exec 5<&0 # save old stdin
exec 0<&3 # read some_var
exec 0<&4 # read another_var
exec 0<&5 # restore it
Entonces, cada línea en un script es un "comando", incluso aquí (donde dejo como ejercicio para el lector cuántas execve
llamadas al sistema reales genera cuando se ejecuta en su totalidad):
#!/bin/sh
device=/dev/rmt8
dd_noise='^[0-9]+\+[0-9]+ records (in|out)$'
exec 3>&1
status=`((dd if=$device ibs=64k 2>&1 1>&3 3>&- 4>&-; echo $? >&4) | egrep -v "$dd_noise" 1>&2 3>&- 4>&-) 4>&1`
exit $status
Tomado de la venerable JeremiadLa programación Csh se considera dañina, usado nuevamente aquí con amable permiso, bla, bla, bla. :)
Respuesta3
Una solución bastante simple (y la esquiva filosófica y lingüística habitual) es distinguir entreUsandola palabradominio, yMencionandola palabradominio. Por ejemplo, ciertas palabras realizan acciones, incluso en inglés común, y su uso es cómo lo hacen. Si dices "Sí, quiero" en las circunstancias adecuadas, podrías casarte, por ejemplo. Pero no si estás citando lo que alguien más podría decir. Todo lo citado es una Mención, no un Uso.
Entonces, la primera lista de comandos no son usos de comandos; son menciones de comandos.
Los segundos ejemplos, como mi favorito.
$ rev wordlist | sort | rev > speculum
(que produce una copia alfabéticamente invertida dewordlist
)
realmente hará algo, por lo que definitivamente son Usos.
Respuesta4
Yo consideraríano hay necesidad decomo respuesta, ya que la ambigüedad descrita no causa ningún daño de todos modos.
En todos los contextos que he visto, cuando la palabra "comando" se refiere a un programa ejecutable, siempre es algo que un usuario final escribiría en un shell para ejecutarlo. Nunca había visto expresiones como "El init
comando" o "El ld-linux.so
comando".
Cuando "comando" se refiere a un programa de línea de comandos, en realidad siempre se refiere a "la familia de comandos que comienza con dicho programa". Por ejemplo, cuando dices "El grep
comando", estás hablando de todas las cosas que puedes hacer con el grep
programa, que forma "una familia de comandos". Esto también se aplica a comandos parciales, como el dicho "el apt install
comando es para instalar paquetes"cuando el comando completo apt install
normalmente no hace nada útil.