Hay muchos buenos argumentos para acostumbrarse a la interfaz de línea de comandos (CLI). Sin embargo, como principiante completo, puede ser difícil comenzar, y una nueva sesión de shell puede parecer un poco intimidante:
¡Repasemos los conceptos básicos de CLI!
Lo primero que necesita es un emulador de terminal: un programa que emule el acceso de solo texto a su máquina. Cualquier sistema operativo (SO) tendrá una gran variedad de emuladores: todos son bastante similares y las principales diferencias serán:
Al principio, debería estar de acuerdo con lo que está disponible allí en su sistema operativo o entorno de desarrollo integrado (IDE).
Shell es un programa que interpreta sus comandos y ejecuta programas por usted. Es algo diferente al simulador de terminal del que hablamos anteriormente. En cierto modo, en su interfaz gráfica, abre la terminal, y dentro de la terminal, tiene un intérprete de comandos de solo texto.
Hay muchas opciones disponibles, con diferencias sutiles que pueden alterar mucho la experiencia del usuario.
Z shell, o Zsh, es un intérprete de comandos moderno y popular. Su interfaz es fácil de usar y hay paquetes comunitarios disponibles que le permiten personalizar su experiencia de shell: Oh My Zsh . Lo he usado durante algunos años y la mayoría de mis hábitos CLI están adaptados de él.
Bash es una alternativa un poco más antigua a Zsh. Es muy común, por lo que puede esperar que esté disponible en muchas máquinas que encontrará por ahí. Muchos accesos directos de Zsh también funcionan allí, pero usa diferentes archivos de configuración y el lenguaje de secuencias de comandos es un poco diferente.
La carcasa estándar. Es parte de los comandos estándar de Unix, y se garantiza que estará en cualquier máquina similar a Unix que encuentre. Por tanto, es una apuesta segura a la hora de escribir guiones.
La interfaz de usuario carece de muchas mejoras modernas, por lo que no la usaría para nada más que cableado de secuencias de comandos.
¿Puede verificar su caparazón con echo $?
:
En mi caso, es zsh
Cada shell es un programa y se puede ejecutar directamente desde otro shell. Por ejemplo:
De esta forma, puedes comprobar qué shells tienes instalados y probarlos rápidamente. Para cambiar el shell de forma permanente, puedes usar el comando chsh
(cambiar shell), tanto en Linux como en macOS:
Si no tiene el shell que desea usar, primero debe instalarlo; el comando exacto depende de su sistema operativo o distribución de Linux.
Entonces, una vez que tenga su terminal en funcionamiento, ¿cómo lo usa?
CLI le permite ejecutar comandos escribiendo su nombre en la terminal y presionando enter. Cada comando es un programa separado que ofrece una interfaz extensa y cada uno viene con su propia documentación.
Asimismo, cada sistema operativo trae su propio conjunto de comandos, pero comparten similitudes, especialmente con los sistemas inspirados en Unix, macOS y Linux.
En Windows, la línea de comando estándar cmd
tiene un conjunto de comandos muy diferente, pero también hay muchas opciones disponibles para obtener una interfaz similar:
Unix fue un sistema operativo que estuvo disponible públicamente en 1973 e influyó en muchas cosas que vinieron después. Su especificación actual define 161 comandos , pero afortunadamente solo necesitas un puñado de ellos para beneficiarte de CLI.
Ejemplo de comandos:
ls
enumera los archivos en una carpeta: de forma predeterminada, muestra el contenido de la carpeta actual:
pwd
muestra la ruta actual en la que está ejecutando sus comandos:
cd
cambia el directorio; de forma predeterminada, va al directorio de inicio ( https://asciinema.org/ grabación o captura de pantalla)
Cada comando puede tomar argumentos adicionales. Los argumentos son valores separados por espacios que vienen después del nombre del comando. El significado de los argumentos depende del programa. Puede leer acerca de los diferentes argumentos en la documentación del comando:
Muchos comandos estándar vienen con diferentes opciones que le permiten modificar el comportamiento del programa. Por ejemplo, ls
se usa muy a menudo con las siguientes opciones:
-a
: para mostrar todos los archivos, incluidos los que comienzan con .
—una convención de Unix para archivos ocultos
-l
—muestra archivos en formato largo—proporcionando más información
Una convención común es permitir opciones como parámetros separados, ls -a -l
, o combinados en un solo parámetro, ls -la
.
Un parámetro es un argumento que proporciona un valor al comando o una de sus opciones.
Entonces, por ejemplo, con el ejemplo anterior, puede proporcionar una ruta para cambiar el comportamiento predeterminado:
ls workspace
de trabajo: enumera los archivos en la carpeta del espacio de trabajo:
cd workspace
—cambia el directorio actual al espacio de trabajo:
cat file
—muestra el contenido del archivo en la pantalla:
El significado de los parámetros depende del programa; al principio, puede esperar que necesite verificar mucho la documentación.
La salida estándar es el texto que se agrega a la línea de comando cuando ejecuta el programa. Su texto se muestra por el camino feliz de la ejecución. Los ejemplos que hemos visto hasta ahora muestran la salida estándar de diferentes comandos.
Cuando aprende C++, una de las primeras cosas que aprende es cout
, la salida estándar.
De forma predeterminada, la salida estándar solo se muestra en la pantalla, pero puede redirigirla fácilmente a un archivo con el operador >
. Ejemplo:
La salida de error es donde los programas muestran información sobre los problemas encontrados durante la ejecución. Mientras se ejecutan comandos directamente desde la terminal, la salida de error y la salida estándar se tratan de la misma manera: solo se muestran en la pantalla. Por ejemplo, cuando trato de ls
un archivo que no existe:
La diferencia se vuelve obvia cuando redirige la salida a un archivo:
En un flujo de trabajo normal, la entrada estándar es lo que escribe en su programa. Los comandos que hemos visto hasta ahora no suelen usarse en un modo interactivo. Un ejemplo simple puede ser una página de man
que permita el desplazamiento:
Para aquellos con experiencia en C++, han escuchado este término para cin
:
cin >> variable;
Para muchos comandos comunes, la entrada estándar se vuelve especialmente importante debido al operador de tubería.
Los conductos son formas de conectar la salida estándar de un programa con la entrada estándar de otro. Así es como CLI logra la interoperabilidad que mencioné en mi artículo anterior .
El uso de canalizaciones le permite combinar diferentes comandos de muchas maneras creativas. Mostraré algunos ejemplos más adelante en esta serie. Por ahora, un ejemplo simple es:
Donde:
cat …
lee archivos y devuelve su contenido en salida estándar,
less
: obtiene el valor de la entrada estándar y lo ajusta a la pantalla
Del mismo modo, mediante el uso de la utilidad de búsqueda grep
:
Donde:
cat …
—como arriba
grep 1
: obtiene el valor de la entrada estándar y lo filtra solo a las líneas que contienen 1
. Ya hemos mencionado el operador >
utilizado para escribir la salida estándar de un comando en un archivo. Este operador anula el archivo con la salida que proporcionamos. Si desea agregarlo a un archivo existente, puede usar >>
en su lugar.
Todo lo que sucede en la línea de comandos se realiza en el contexto de una ubicación de disco específica: un directorio de trabajo. Cuando especifica rutas de archivo relativas, para lectura o escritura, se resuelven desde el directorio de trabajo.
Por lo general, configura su directorio de trabajo en una carpeta superior del proyecto en el que está trabajando. Cuando inicia una nueva sesión, generalmente el directorio de trabajo se establece en su directorio de inicio.
Los intérpretes de Shell le ofrecen muchos atajos para acelerar su trabajo. Con el tiempo, comenzarás a usarlos de manera intuitiva, sin pensar en ellos.
A menudo, cuando comparto la pantalla con principiantes, recuerdo que esos accesos directos son obvios: a continuación, le mostraré algunos trucos de productividad para trabajar con la línea de comandos.
Yo mismo estoy usando Zsh, y estos accesos directos funcionan allí. Al menos algunos de ellos también deberían funcionar en Bash, pero puede depender de la versión y configuración exactas.
El truco principal para ser rápido con CLI es no escribir todo todo el tiempo. El caso más básico es recuperar un comando que ha ejecutado unas pocas líneas antes. Puede hacerlo presionando la tecla de flecha hacia arriba.
Con la flecha hacia arriba y la flecha hacia abajo, puede desplazarse por los comandos recientes y, una vez que encuentre uno similar al que desea ejecutar ahora, puede editarlo. Esto acelera mucho todo el proceso porque a menudo ejecuta comandos similares, con algunas pequeñas diferencias en los argumentos.
El desplazamiento manual está bien para obtener uno o varios de los comandos más recientes. Sin embargo, si desea obtener algo más del pasado, puede utilizar la función de búsqueda. De forma predeterminada, el comando que puede usar es CTRL + R para comenzar una búsqueda en su historial de comandos:
No tiene que escribir todos los comandos que le gustaría ejecutar. Tanto Zsh como Bash admiten la tecla de tabulación como una forma de solicitar autocompletar: completarán el comando o el nombre del archivo si son únicos o le mostrarán todas las opciones disponibles si lo que escribe coincide con muchas posibilidades.
Zsh también proporciona autocompletar para las opciones de comando.
El autorrelleno es una excelente característica en dos niveles: lo ayuda a ahorrar tiempo al escribir y reduce los errores. A medida que aprende CLI, debe asegurarse de adquirir el hábito de usar la función de autocompletar tanto como sea posible.
Puede acelerar aún más la escritura utilizando comodines para hacer coincidir los nombres de varios archivos:
A menudo, cuando un programa tiene tantos resultados que no caben en la pantalla, utiliza otro programa como buscapersonas, una herramienta que le permite navegar por los resultados y desplazarse hacia arriba y hacia abajo. La mayoría de las veces, el programa utilizado para eso es less
. Hay algunas cosas que vale la pena tener en cuenta cuando lo usa.
En primer lugar, no se desplace con la barra de desplazamiento proporcionada por su emulador de terminal. less
vuelve a dibujar toda la pantalla de texto al final de la salida.
Si se desplaza hacia arriba dentro del emulador de terminal, verá lo que devolvieron otros programas antes, no el contenido del archivo que desea leer. En lugar de desplazarse con la barra de desplazamiento (rueda de desplazamiento), use las flechas hacia arriba y hacia abajo para moverse por el archivo.
Otro punto común de confusión: ¿cómo me voy ahora? Puede salir del modo de pantalla completa de 'menos' presionando q
. A menudo tiene el estilo :q
porque otros programas (por ejemplo, vim
) usan :
para iniciar un comando.
En la línea de comandos, todo es texto, y el texto es fácil de buscar. Puede buscar dentro del contenido mostrado por less escribiendo /<search term>
y navegar a través de los resultados escribiendo n
y N
:
less
admite otros comandos de navegación similares a los que puede encontrar en vim
:
j
: desplazarse hacia abajo una líneak
: desplazarse hacia arriba una líneagg
: desplazarse hasta el principio del archivoG
: desplazarse hasta el final del archivod/u
—abajo/arriba media pantalla
Esos accesos directos lo ayudarán a navegar rápidamente por el archivo.
¡Eso es genial! La línea de comandos es una gran herramienta para aumentar su eficiencia mientras programa. Puede registrarse aquí para recibir mis actualizaciones a medida que publico otros materiales relacionados con la línea de comandos.
También publicado aquí