103.1 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objectivo: |
103.1 Trabajando en la línea de comandos |
Lección: |
1 de 2 |
Introducción
Los recién llegados al mundo de la administración de Linux y el shell Bash a menudo se sienten un poco perdidos sin la comodidad tranquilizadora de una interfaz GUI. Están acostumbrados a tener acceso con el botón derecho sobre las señales visuales y la información contextual que las utilidades del administrador de archivos gráficos ponen a disposición. Por lo tanto, es importante aprender rápidamente y dominar el conjunto relativamente pequeño de herramientas de línea de comandos a través del cual puede aprovechar instantáneamente todos los datos ofrecidos por su antigua GUI y más.
Obteniendo información del sistema
Mientras observa el rectángulo parpadeante de una línea de comandos, su primera pregunta probablemente será “¿Dónde estoy?” O, más precisamente, “¿Dónde estoy en el sistema de archivos de Linux en este momento y si, por ejemplo, he creado un nuevo archivo, ¿dónde reside?” Lo que busca aquí es su directorio de trabajo actual, y el comando pwd
te dirá lo que quieres saber:
$ pwd /home/frank
Suponiendo que Frank está actualmente conectado al sistema y ahora está en su directorio de inicio: /home/frank/
. Si Frank crea un archivo vacío usando el comando touch
sin especificar ninguna otra ubicación en el sistema de archivos, el archivo se creará dentro de /home/frank/
. Al listar el contenido del directorio usando ls
nos mostrará ese nuevo archivo:
$ touch newfile $ ls newfile
Además de su ubicación en el sistema de archivos, a menudo querrá información sobre el sistema Linux que está ejecutando. Esto puede incluir el número exacto de lanzamiento de su distribución o la versión del kernel de Linux que está cargada actualmente. La herramienta uname
es lo que busca aquí. Y, en particular, uname
usando la opción -a
(“all”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Aquí, uname
muestra que la máquina de Frank tiene instalada la versión 4.18.0 del kernel de Linux y ejecuta Ubuntu 18.04 en una CPU de 64 bits (x86_64
).
Obteniendo información de los comandos
A menudo encontrará documentación que habla sobre comandos de Linux con los que aún no está familiarizado. La línea de comandos en sí ofrece todo tipo de información útil sobre qué hacen los comandos y cómo usarlos de manera efectiva. Quizás la información más útil se encuentra dentro de los muchos archivos del sistema man
.
Como regla general, los desarrolladores de Linux escriben archivos man
y los distribuyen junto con las utilidades que crean. Los archivos man
son documentos altamente estructurados cuyo contenido está dividido intuitivamente por encabezados de sección estándar. Si escribe man
seguido del nombre de un comando, obtendrá información que incluye el nombre del comando, una breve sinopsis de uso, una descripción más detallada y algunos antecedentes históricos y de licencia importantes. Aquí hay un ejemplo:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
man
solo funciona cuando se le proporciona un nombre de comando exacto. Sin embargo, si no está seguro del nombre del comando que está buscando, puede usar el comando apropos
para buscar a través de los nombres y descripciones de la página man
. Suponiendo, por ejemplo, que no puede recordar que es uname
la que le dará su versión actual del kernel de Linux, puede pasar la palabra kernel
a apropros
. Probablemente obtendrá muchas líneas de salida, incluyendo estas:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Si no necesita la documentación completa de un comando, puede obtener rápidamente datos básicos sobre un comando usando type
. Este ejemplo usa type
para consultar cuatro comandos separados a la vez. Los resultados nos muestran que cp
(“copy”) es un programa que reside en /bin/cp
y que kill
(cambiar el estado de un proceso en ejecución) es un shell incorporado, lo que significa que es en realidad una parte del shell Bash:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Tenga en cuenta que, además de ser un comando binario regular como cp
, uname
también es “hash”. Esto se debe a que Frank recientemente utilizó "uname" y, para aumentar la eficiencia del sistema, se agregó a una tabla hash para hacer más accesible la próxima vez que se ejecute. Si ejecutara type uname
después de un arranque del sistema, Frank encontraría que type
una vez más describe uname
como un binario regular.
Note
|
Una forma más rápida de limpiar la tabla hash es ejecutar el comando |
A veces, especialmente cuando se trabaja con scripts automatizados, necesitará una fuente de información más simple sobre un comando. El comando which
, el cual con type
visualizamos anteriormente, no devolverá nada más que la ubicación absoluta de un comando. Este ejemplo localiza los comandos uname
y which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Si desea mostrar información sobre los comandos “builtin”, puede usar el comando |
Usando su historial de comandos
A menudo investigará cuidadosamente el uso adecuado de un comando y lo ejecutará con éxito junto con un complicado rastro de opciones y argumentos. Pero, ¿qué sucede unas semanas más tarde cuando necesita ejecutar el mismo comando con las mismas opciones y argumentos pero no puede recordarlo? En lugar de tener que comenzar su investigación nuevamente desde cero, a menudo podrá recuperar el comando original usando history
.
Al escribir history
, aparecerán los comandos más recientes que haya ejecutado, los cuáles aparecerán en último lugar. Puede buscar fácilmente a través de esos comandos canalizando una cadena específica al comando grep
. Este ejemplo buscará cualquier comando que incluya el texto bash_history
:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Aquí se devuelve un solo comando junto con su número de secuencia, 1605.
Y hablando de bash_history
, ese es en realidad el nombre de un archivo oculto que debe encontrar dentro del directorio de inicio de su usuario. Dado que es un archivo oculto (designado como tal por el punto que precede a su nombre de archivo), solo será visible al enumerar el contenido del directorio usando ls
con el argumento -a
:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
¿Qué hay en el archivo .bash_history
? Eche un vistazo por sí mismo: verá cientos y cientos de sus comandos más recientes. Sin embargo, es posible que se sorprenda al descubrir que faltan algunos de sus comandos más recientes. Esto se debe a que, aunque se agregan instantáneamente a la base de datos dinámica history
, las últimas adiciones a su historial de comandos no se escriben en el archivo .bash_history
hasta que salga de la sesión.
Puede aprovechar el contenido de history
para hacer que su experiencia en la línea de comandos sea mucho más rápida y eficiente usando las teclas de flecha arriba y abajo en su teclado. Al presionar la tecla hacia arriba varias veces se completará la línea de comandos con comandos recientes. Cuando llegue al que desea ejecutar por segunda vez, puede ejecutarlo presionando kbd:[Enter]. Esto facilita la recuperación y, si lo desea, la modificación de comandos varias veces durante una sesión de shell.
Ejercicios Guiados
-
Utilice el sistema
man
para determinar cómo decirle aapropos
que envíe un comando breve para que solo envíe un mensaje corto de uso y luego salga. -
Utilice el sistema
man
para determinar qué licencia de copyright se asigna al comandogrep
.
Ejercicios Exploratorios
-
Identifique la arquitectura de hardware y la versión del kernel de Linux que se utiliza en su computadora en un formato de salida fácil de interpretar.
-
Imprima las últimas veinte líneas de la base de datos dinámica
history
y el archivo.bash_history
para compararlos. -
Utilice la herramienta
apropos
para identificar la páginaman
donde encontrará el comando que necesitará para mostrar el tamaño de un dispositivo de bloque físico conectado en bytes en lugar de megabytes o gigabytes.
Resumen
En esta lección aprendimos:
-
Cómo obtener información sobre la ubicación de su sistema de archivos y la pila de software del sistema operativo.
-
Cómo encontrar ayuda para el uso de comandos.
-
Cómo identificar la ubicación del sistema de archivos y el tipo de comandos binarios.
-
Cómo encontrar y reutilizar comandos ejecutados previamente.
Los siguientes comandos se discutieron en esta lección:
pwd
-
Imprime la ruta al directorio de trabajo actual.
uname
-
Imprime la arquitectura de hardware de su sistema, la versión del kernel de Linux, la distribución y la versión de distribución.
man
-
Accede a los archivos de ayuda que documentan el uso de comandos.
type
-
Imprimer la ubicación del sistema de archivos y el tipo de uno o más comandos.
which
-
Imprime la ubicación del sistema de archivos para un comando.
history
-
Imprime o reutiliza comandos que hayan ejecutado previamente.
Respuestas a los ejercicios guiados
-
Utilice el sistema
man
para determinar cómo decirle aapropos
que envíe un comando breve para que solo envíe un mensaje corto de uso y luego salga.Ejecute
man apropos
y desplácese hacia abajo por la sección “Options” hasta llegar al párrafo--usage
. -
Utilice el sistema
man
para determinar qué licencia de copyright se asigna al comandogrep
.Ejecute
man grep
y desplácese hacia abajo a la sección “Copyright” del documento. Tenga en cuenta que el programa utiliza los derechos de autor de la Free Software Foundation.
Respuestas a ejercicios exploratorios
-
Identifique la arquitectura de hardware y la versión del kernel de Linux que se utiliza en su computadora en un formato de salida fácil de Interpretar.
Ejecute
man uname
, lea la sección “Description” e identifique los argumentos del comando que se mostrarán solo los resultados exactos que desea. Observe cómo-r
le dará la versión del kernel y-i
le proporcionará una plataforma de hardware.$ man uname $ uname -v $ uname -i
-
Imprima las últimas veinte líneas de la base de datos dinámica
history
y el archivo.bash_history
para compararlos.$ history 20 $ tail -n 20 .bash_history
-
Utilice la herramienta
apropos
para identificar la páginaman
donde encontrará el comando que necesitará para mostrar el tamaño de un dispositivo de bloque físico conectado en bytes en lugar de megabytes o gigabytes.Una forma sería ejecutar
apropos
con la cadenablock
, leer los resultados, observar quelsblk
enumera los dispositivos de bloque (y, por lo tanto, sería la herramienta más adecuada para nuestras necesidades), ejecutarman lsblk
, desplácese por la sección “Description” y observe que-b
mostrará el tamaño del dispositivo en bytes. Finalmente, ejecutelsblk -b
para visualizar la salida.$ apropos block $ man lsblk $ lsblk -b