RESUMEN

RESUMEN

La palabradominioSe refiere a dos conceptos diferentes en Linux:

  1. Un programa ejecutable, comogrep(o un shell incorporado, comocd). Uso de ejemplo: "Aquí están los 10 comandos principales de Linux que debes aprender".
  2. 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 grepy cdcomo "utilidades", yreservas "dominio"para las instrucciones. Usados ​​consistentemente, estos términos son inequívocos.


Para abordar sus casos por turno

  1. "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 truelas 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, sety trap, que afectan el estado interno del shell, peronoinclude cd, 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 con execvp), "utilidad" es suficiente para cubrir ambas categorías a nivel de usuario. Los artículos de sintaxis de shell como ify whileno son utilidades en absoluto.

  2. "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 como ifconstrucciones 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 en grep com /etc/hostses grep, 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 comando

echo 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 execallí; 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 execvellamadas 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 de wordlist)

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 initcomando" o "El ld-linux.socomando".

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 grepcomando", estás hablando de todas las cosas que puedes hacer con el grepprograma, que forma "una familia de comandos". Esto también se aplica a comandos parciales, como el dicho "el apt installcomando es para instalar paquetes"cuando el comando completo apt installnormalmente no hace nada útil.

información relacionada