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 GNU/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 $ head -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