103.2 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objetivo: |
103.2 Procesar secuencias de texto usando filtros |
Lección: |
1 de 1 |
Introducción
Tratar con el texto es una parte importante del trabajo de cada administrador de sistemas. Doug McIlroy, miembro del equipo de desarrollo original de Unix, resumió la filosofía de Unix y dijo (entre otras cosas importantes): “...Escribe programas para manejar flujos de texto, porque esa es una interfaz universal.”. Linux está inspirado en el funcionamiento de Unix y adopta firmemente su filosofía, por lo que un administrador cuenta con muchas herramientas de manipulación de texto dentro de una distribución de Linux.
Una revisión rápida sobre redirecciones y tuberías (Pipes)
También de la filosofía Unix:
-
"...Escribe programas que hagan una cosa y que la hagan bien."
-
"...Escribe programas para trabajar junto a otros programas".
Una forma importante de hacer que los programas funcionen juntos es a través de piping y redirections. Casi todos sus programas de manipulación de texto obtendrán texto de una entrada estándar (stdin), lo enviarán a una salida estándar (stdout) y enviarán eventuales errores a una salida de error estándar (stderr). A menos que especifique lo contrario, la entrada estándar será la que escriba en su teclado (el programa lo leerá después de presionar la tecla Enter). Del mismo modo, la salida estándar y los errores se mostrarán en la pantalla de su terminal. Veamos cómo funciona esto.
En su terminal, teclee cat
y luego presione la tecla Enter. Luego
teclee un texto al azar.
$ cat This is a test This is a test Hey! Hey! It is repeating everything I type! It is repeating everything I type! (I will hit ctrl+c so I will stop this nonsense) (I will hit ctrl+c so I will stop this nonsense) ^C
Para obtener más información sobre el
comando cat
(el término
proviene de “concatenate”), consulte las
páginas del manual.
Note
|
Si está trabajando en una
instalación realmente simple
de un servidor Linux, algunos
comandos como |
Como se dijo anteriormente, si no
especifica de dónde debe leer cat
,
leerá desde la entrada estándar (lo que
escriba) y enviará lo que lea a su
ventana de terminal (su salida
estándar).
Ahora intente lo siguiente:
$ cat > mytextfile This is a test I hope cat is storing this to mytextfile as I redirected the output I will hit ctrl+c now and check this ^C $ cat mytextfile This is a test I hope cat is storing this to mytextfile as I redirected the output I will hit ctrl+c now and check this
El >
(mayor que)
indica a cat
que dirija su
salida al archivo mytextfile
,
no a la salida estándar. Ahora intente
esto:
$ cat mytextfile > mynewtextfile $ cat mynewtextfile This is a test I hope cat is storing this to mytextfile as I redirected the output I will hit ctrl+c now and check this
Esto tiene el efecto de copiar mytextfile
a mynewtextfile
. En
realidad, puede verificar que estos dos
archivos tienen el mismo contenido
ejecutando el comando diff
:
$ diff mynewtextfile mytextfile
Como no hay salida, los archivos son
iguales. Ahora intente con el operador
de redireccionamiento anexado (>>
):
$ echo 'This is my new line' >> mynewtextfile $ diff mynewtextfile mytextfile 4d3 < This is my new line
Hasta ahora hemos usado redirecciones
para crear y manipular archivos. También
podemos usar tuberías (representadas por
el símbolo |
) para
redirigir la salida de un programa a
otro. Encontremos las líneas donde se
encuentra la palabra “this”:
$ cat mytextfile | grep this I hope cat is storing this to mytextfile as I redirected the output I will hit ctrl+c now and check this $ cat mytextfile | grep -i this This is a test I hope cat is storing this to mytextfile as I redirected the output I will hit ctrl+c now and check this
Ahora hemos canalizado la salida de cat
a otro comando: grep
. Note
que cuando ignoramos mayúsculas y
minúsculas (usando la opción -i
)
obtenemos una línea extra como
resultado.
Procesando flujos de texto
Leer un archivo comprimido
Crearemos un archivo llamado ftu.txt
que contenga una lista de los
siguientes comandos:
bzcat cat cut head less md5sum nl od paste sed sha256sum sha512sum sort split tail tr uniq wc xzcat zcat
Ahora usaremos el comando grep
para imprimir todas las líneas que
contienen la cadena cat
:
$ cat ftu.txt | grep cat bzcat cat xzcat zcat
Otra forma de obtener esta
información es simplemente usar el
comando grep
para
filtrar el texto directamente, sin la
necesidad de usar otra aplicación para
enviar el flujo de texto a stdout
.
$ grep cat ftu.txt bzcat cat xzcat zcat
Note
|
Recuerde que hay muchas formas de realizar la misma tarea con Linux. |
Hay otros comandos que manejan
archivos comprimidos (bzcat
para archivos comprimidos con el
comando bzip
, xzcat
para archivos comprimidos con el
comando xz
y zcat
para archivos comprimidos con el
comando gzip
) y cada uno
se usa para ver el contenido de un
archivo comprimido basado en el
algoritmo de compresión utilizado.
Verifique que el archivo recién
creado ftu.txt
sea el
único en el directorio, luego cree una
versión comprimida gzip
del archivo:
$ ls ftu* ftu.txt $ gzip ftu.txt $ ls ftu* ftu.txt.gz
Luego, use el comando zcat
para ver el contenido del archivo
comprimido con gzip:
$ zcat ftu.txt.gz bzcat cat cut head less md5sum nl od paste sed sha256sum sha512sum sort split tail tr uniq wc xzcat zcat
Tenga en cuenta que gzip
comprimirá ftu.txt
en ftu.txt.gz
y eliminará el archivo original. Por
defecto, no se mostrará ningún
resultado del comando gzip
.
Sin embargo, si desea que gzip
le diga qué está haciendo, use la
opción -v
para la salida
“verbose”.
Ver un archivo paginado
Usted sabe que cat
concatena un archivo a la salida
estándar (una vez que se proporciona
un archivo después del comando). El
archivo /var/log/syslog
es donde su sistema Linux almacena
todo lo importante que sucede en su
sistema. Usando el comando sudo
para elevar los privilegios para poder
leer el archivo /var/log/syslog
:
$ sudo cat /var/log/syslog
…verá mensajes que se desplazan muy
rápido dentro de la ventana de su
terminal. Puede canalizar la salida al
programa less
para que
los resultados se paginen. Al usar less
puede usar las teclas de flecha para
navegar a través de la salida y
también usar comandos similares a vi
para navegar y buscar en todo el
texto.
Sin embargo, en lugar de canalizar el
comando cat
en un
programa de paginación, es más
pragmático usar el programa de
paginación directamente:
$ sudo less /var/log/syslog ... (salida omitida para mayor claridad)
Obtener una parte de un archivo de texto
Si solo es necesario revisar el
inicio o el final de un archivo, hay
otros métodos disponibles. El comando
head
se usa para leer las
primeras diez líneas de un archivo de
manera predeterminada, y el comando tail
se usa para leer las últimas diez
líneas de un archivo de manera
predeterminada. Ahora intente:
$ sudo head /var/log/syslog Nov 12 08:04:30 hypatia rsyslogd: [origin software="rsyslogd" swVersion="8.1910.0" x-pid="811" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Nov 12 08:04:30 hypatia systemd[1]: logrotate.service: Succeeded. Nov 12 08:04:30 hypatia systemd[1]: Started Rotate log files. Nov 12 08:04:30 hypatia vdr: [928] video directory scanner thread started (pid=882, tid=928, prio=low) Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'A - ATSC' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'C - DVB-C' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'S - DVB-S' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'T - DVB-T' Nov 12 08:04:30 hypatia vdr[882]: vdr: no primary device found - using first device! Nov 12 08:04:30 hypatia vdr: [929] epg data reader thread started (pid=882, tid=929, prio=high) $ sudo tail /var/log/syslog Nov 13 10:24:45 hypatia kernel: [ 8001.679238] mce: CPU7: Core temperature/speed normal Nov 13 10:24:46 hypatia dbus-daemon[2023]: [session uid=1000 pid=2023] Activating via systemd: service name='org.freedesktop.Tracker1.Miner.Extract' unit='tracker-extract.service' requested by ':1.73' (uid=1000 pid=2425 comm="/usr/lib/tracker/tracker-miner-fs ") Nov 13 10:24:46 hypatia systemd[2004]: Starting Tracker metadata extractor... Nov 13 10:24:47 hypatia dbus-daemon[2023]: [session uid=1000 pid=2023] Successfully activated service 'org.freedesktop.Tracker1.Miner.Extract' Nov 13 10:24:47 hypatia systemd[2004]: Started Tracker metadata extractor. Nov 13 10:24:54 hypatia kernel: [ 8010.462227] mce: CPU0: Core temperature above threshold, cpu clock throttled (total events = 502907) Nov 13 10:24:54 hypatia kernel: [ 8010.462228] mce: CPU4: Core temperature above threshold, cpu clock throttled (total events = 502911) Nov 13 10:24:54 hypatia kernel: [ 8010.469221] mce: CPU0: Core temperature/speed normal Nov 13 10:24:54 hypatia kernel: [ 8010.469222] mce: CPU4: Core temperature/speed normal Nov 13 10:25:03 hypatia systemd[2004]: tracker-extract.service: Succeeded.
Para ayudar a ilustrar el número de
líneas que se muestran, podemos
canalizar la salida del comando head
al comando nl
, que
mostrará el número de líneas de texto
transmitidas al comando:
$ sudo head /var/log/syslog | nl 1 Nov 12 08:04:30 hypatia rsyslogd: [origin software="rsyslogd" swVersion="8.1910.0" x-pid="811" x-info="https://www.rsyslog.com"] rsyslogd was HUPed 2 Nov 12 08:04:30 hypatia systemd[1]: logrotate.service: Succeeded. 3 Nov 12 08:04:30 hypatia systemd[1]: Started Rotate log files. 4 Nov 12 08:04:30 hypatia vdr: [928] video directory scanner thread started (pid=882, tid=928, prio=low) 5 Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'A - ATSC' 6 Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'C - DVB-C' 7 Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'S - DVB-S' 8 Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'T - DVB-T' 9 Nov 12 08:04:30 hypatia vdr[882]: vdr: no primary device found - using first device! 10 Nov 12 08:04:30 hypatia vdr: [929] epg data reader thread started (pid=882, tid=929, prio=high)
Y podemos hacer lo mismo canalizando
la salida del comando tail
al comando wc
, que por
defecto contará el número de palabras
dentro de un documento, y usando la
opción -l
para imprimir
el número de líneas de texto que el
comando ha leído:
$ sudo tail /var/log/syslog | wc -l 10
Si un administrador necesita revisar,
más o menos, desde el comienzo o desde
el final de un archivo, la opción -n
puede usarse para limitar la salida
del comando:
$ sudo tail -n 5 /var/log/syslog Nov 13 10:37:24 hypatia systemd[2004]: tracker-extract.service: Succeeded. Nov 13 10:37:42 hypatia dbus-daemon[2023]: [session uid=1000 pid=2023] Activating via systemd: service name='org.freedesktop.Tracker1.Miner.Extract' unit='tracker-extract.service' requested by ':1.73' (uid=1000 pid=2425 comm="/usr/lib/tracker/tracker-miner-fs ") Nov 13 10:37:42 hypatia systemd[2004]: Starting Tracker metadata extractor... Nov 13 10:37:43 hypatia dbus-daemon[2023]: [session uid=1000 pid=2023] Successfully activated service 'org.freedesktop.Tracker1.Miner.Extract' Nov 13 10:37:43 hypatia systemd[2004]: Started Tracker metadata extractor. $ sudo head -n 12 /var/log/syslog Nov 12 08:04:30 hypatia rsyslogd: [origin software="rsyslogd" swVersion="8.1910.0" x-pid="811" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Nov 12 08:04:30 hypatia systemd[1]: logrotate.service: Succeeded. Nov 12 08:04:30 hypatia systemd[1]: Started Rotate log files. Nov 12 08:04:30 hypatia vdr: [928] video directory scanner thread started (pid=882, tid=928, prio=low) Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'A - ATSC' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'C - DVB-C' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'S - DVB-S' Nov 12 08:04:30 hypatia vdr: [882] registered source parameters for 'T - DVB-T' Nov 12 08:04:30 hypatia vdr[882]: vdr: no primary device found - using first device! Nov 12 08:04:30 hypatia vdr: [929] epg data reader thread started (pid=882, tid=929, prio=high) Nov 12 08:04:30 hypatia vdr: [882] no DVB device found Nov 12 08:04:30 hypatia vdr: [882] initializing plugin: vnsiserver (1.8.0): VDR-Network-Streaming-Interface (VNSI) Server
Los fundamentos de sed, el Editor de Stream
Echemos un vistazo a los otros
archivos, términos y utilidades que no
tienen cat
en sus
nombres. Podemos hacer esto pasando la
opción -v
a grep
,
que indica al comando que solo muestre
las líneas que no contienen cat
:
$ zcat ftu.txt.gz | grep -v cat cut head less md5sum nl od paste sed sha256sum sha512sum sort split tail tr uniq wc
La mayor parte de lo que podemos
hacer con grep
también
podemos hacerlo con sed
,
el editor de flujo para filtrar y
transformar texto (como se indica en
la página del manual sed
).
Primero recuperaremos nuestro archivo
ftu.txt
descomprimiendo
el archivo gzip
en el
que lo convertimos:
$ gunzip ftu.txt.gz $ ls ftu* ftu.txt
Ahora, podemos usar sed
para listar solo las líneas que
contienen la cadena cat
:
$ sed -n /cat/p < ftu.txt bzcat cat xzcat zcat
Hemos utilizado el signo menor que <
para dirigir el contenido del archivo
ftu.txt a
al comando sed
.
La palabra encerrada entre barras (es
decir, /cat/
) es el
término que estamos buscando. La
opción -n
instruye a sed
para que no produzca salida (a no ser
que aparezcan instrucciones
posteriores del comando p
).
Intente ejecutar este mismo comando
sin la opción -n
para
ver qué sucede:
$ sed /cat/d < ftu.txt cut head less md5sum nl od paste sed sha256sum sha512sum sort split tail tr uniq wc
Si no usamos la opción -n
,
sed
imprimirá todo desde
el archivo, excepto lo que la d
indica a sed
que elimine
de su salida.
Un uso común de sed
es
buscar y reemplazar texto dentro de un
archivo. Suponga que desea cambiar
cada aparición de cat
a
dog
. Puede usar sed
para hacer esto proporcionando la
opción s
para
intercambiar cada instancia del primer
término, cat
, por el
segundo término, dog
:
$ sed s/cat/dog/ < ftu.txt bzdog dog cut head less md5sum nl od paste sed sha256sum sha512sum sort split tail tr uniq wc xzdog zdog
En lugar de utilizar un operador de
redireccionamiento (<
)
para pasar el archivo ftu.txt
a nuestro comando sed
,
podemos hacer que el comando sed
opere directamente en el archivo. Lo
intentaremos a continuación, mientras
creamos simultáneamente una copia de
seguridad del archivo original:
$ sed -i.backup s/cat/dog/ ftu.txt $ ls ftu* ftu.txt ftu.txt.backup
La opción -i
realizará
una operación sed
directamente en el archivo original.
Si no utiliza el .backup
después del parámetro -i
,
simplemente sobreescribirá su archivo
original. Cualquier cosa que
use como texto después del parámetro -i
será el nombre con el que se guardará
el archivo original antes de las
modificaciones que le solicitó a sed
.
Garantizar la integridad de los datos
Hemos demostrado lo fácil que es manipular archivos en Linux. Hay momentos en los que es posible que desee compartir un archivo con otra persona, y desea asegurarse de que el destinatario termine con una copia verdadera del archivo original. Un uso muy común de esta técnica se practica cuando los servidores de distribuciones de Linux alojan imágenes de CD o DVD descargables de su software junto con archivos que contienen los valores de suma de comprobación calculados de esas imágenes de disco. Aquí hay un listado de ejemplo de un servidor de descarga de Debian:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [PARENTDIR] Parent Directory - [SUM] MD5SUMS 2019-09-08 17:46 274 [CRT] MD5SUMS.sign 2019-09-08 17:52 833 [SUM] SHA1SUMS 2019-09-08 17:46 306 [CRT] SHA1SUMS.sign 2019-09-08 17:52 833 [SUM] SHA256SUMS 2019-09-08 17:46 402 [CRT] SHA256SUMS.sign 2019-09-08 17:52 833 [SUM] SHA512SUMS 2019-09-08 17:46 658 [CRT] SHA512SUMS.sign 2019-09-08 17:52 833 [ISO] debian-10.1.0-amd64-netinst.iso 2019-09-08 04:37 335M [ISO] debian-10.1.0-amd64-xfce-CD-1.iso 2019-09-08 04:38 641M [ISO] debian-edu-10.1.0-amd64-netinst.iso 2019-09-08 04:38 405M [ISO] debian-mac-10.1.0-amd64-netinst.iso 2019-09-08 04:38 334M ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
En la lista anterior, los archivos de imagen del instalador de Debian están acompañados por archivos de texto que contienen sumas de verificación de los archivos de los diversos algoritmos (MD5, SHA1, SHA256 y SHA512).
Note
|
Una suma de comprobación es
un valor derivado de un
cálculo matemático, basado
en una función hash
criptográfica, contra un
archivo. Existen diferentes
tipos de funciones hash
criptográficas que varían en
intensidad: |
Una vez que descargue un archivo (por
ejemplo, la imagen debian-10.1.0-amd64-netinst.iso
),
comparará la suma de comprobación del
archivo que se descargó con un valor
de suma de comprobación que se le
proporcionó.
Aquí hay un ejemplo para ilustrar el
punto. Calcularemos el valor SHA256
del archivo ftu.txt
utilizando el comando sha256sum
:
$ sha256sum ftu.txt 345452304fc26999a715652543c352e5fc7ee0c1b9deac6f57542ec91daf261c ftu.txt
La larga cadena de caracteres que
precede al nombre del archivo es el
valor de suma de comprobación SHA256
de este archivo de texto. Cree un
archivo que contenga ese valor, para
usarlo durante la verificación de la
integridad de nuestro archivo de texto
original. Podemos hacer esto con el
mismo comando sha256sum
y redirigir la salida a un archivo:
$ sha256sum ftu.txt > sha256.txt
Ahora, para verificar el archivo ftu.txt
,
solo usamos el mismo comando y
proporcionamos el nombre de archivo
que contiene nuestro valor de suma de
comprobación junto con -c
:
$ sha256sum -c sha256.txt ftu.txt: OK
El valor contenido en el archivo
coincide con la suma de comprobación
SHA256 calculada para nuestro archivo
ftu.txt
, tal como se
espera. Sin embargo, si se modificara
el archivo original (a consecuencia de
algunos bytes perdidos durante la
descarga de un archivo, o alguien lo
hubiera alterado deliberadamente), la
comprobación del valor fallará. En
tales casos, sabemos que nuestro
archivo está dañado o corrupto y no
podemos confiar en la integridad de su
contenido. Para probar esto,
agregaremos texto al final del
archivo:
$ echo "new entry" >> ftu.txt
Ahora intentaremos verificar la integridad del archivo:
$ sha256sum -c sha256.txt ftu.txt: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
Y vemos que la suma de comprobación no coincide con lo que se esperaba para el archivo. Por lo tanto, no podemos confiar en la integridad de este archivo. Podríamos intentar descargar una nueva copia de un archivo, informar del fallo de la suma de verificación al remitente del archivo o informarlo al equipo de seguridad del centro de datos, según la importancia del archivo.
Buscando más en los archivos
El comando octal dump (od
)
a menudo se usa para depurar
aplicaciones y varios tipos de
archivos. Por sí solo, el comando od
solo enumerará el contenido de un
archivo en formato octal. Podemos usar
nuestro archivo ftu.txt
en un primer ejemplo de uso.
$ od ftu.txt 0000000 075142 060543 005164 060543 005164 072543 005164 062550 0000020 062141 066012 071545 005163 062155 071465 066565 067012 0000040 005154 062157 070012 071541 062564 071412 062145 071412 0000060 060550 032462 071466 066565 071412 060550 030465 071462 0000100 066565 071412 071157 005164 070163 064554 005164 060564 0000120 066151 072012 005162 067165 070551 073412 005143 075170 0000140 060543 005164 061572 072141 000012 0000151
La primera columna de salida es el
desplazamiento de bytes para cada
línea de salida. Como od
imprime la información en formato
octal de manera predeterminada, cada
línea comienza con el desplazamiento
de bytes de ocho bits, seguido de ocho
columnas, cada una con el valor octal
de los datos dentro de esa columna.
Tip
|
Recuerde que un byte tiene 8 bits de longitud. |
Si necesita ver el contenido de un
archivo en formato hexadecimal, use la
opción -x
:
$ od -x ftu.txt 0000000 7a62 6163 0a74 6163 0a74 7563 0a74 6568 0000020 6461 6c0a 7365 0a73 646d 7335 6d75 6e0a 0000040 0a6c 646f 700a 7361 6574 730a 6465 730a 0000060 6168 3532 7336 6d75 730a 6168 3135 7332 0000100 6d75 730a 726f 0a74 7073 696c 0a74 6174 0000120 6c69 740a 0a72 6e75 7169 770a 0a63 7a78 0000140 6163 0a74 637a 7461 000a 0000151
Ahora cada una de las ocho columnas después del desplazamiento de bytes está representada por sus equivalentes hexadecimales.
Un uso útil del comando od
es para depurar scripts. Por ejemplo,
el comando od
puede
mostrarnos caracteres que normalmente
no se ven que existen dentro de un
archivo, como las entradas newline.
Podemos hacer esto con la opción -c
,
de modo que en lugar de mostrar la
notación numérica para cada byte,
estas entradas de columna se mostrarán
como sus equivalentes de caracteres:
$ od -c ftu.txt 0000000 b z c a t \n c a t \n c u t \n h e 0000020 a d \n l e s s \n m d 5 s u m \n n 0000040 l \n o d \n p a s t e \n s e d \n s 0000060 h a 2 5 6 s u m \n s h a 5 1 2 s 0000100 u m \n s o r t \n s p l i t \n t a 0000120 i l \n t r \n u n i q \n w c \n x z 0000140 c a t \n z c a t \n 0000151
Todas las entradas de nueva línea
dentro del archivo están representadas
por los caracteres ocultos \n
.
Si solo desea ver todos los caracteres
dentro de un archivo y no necesita ver
la información de desplazamiento de
bytes, la columna de desplazamiento de
bytes se puede eliminar de la salida
de la siguiente manera:
$ od -An -c ftu.txt b z c a t \n c a t \n c u t \n h e a d \n l e s s \n m d 5 s u m \n n l \n o d \n p a s t e \n s e d \n s h a 2 5 6 s u m \n s h a 5 1 2 s u m \n s o r t \n s p l i t \n t a i l \n t r \n u n i q \n w c \n x z c a t \n z c a t \n
Ejercicios Guiados
-
Alguien acaba de donar una computadora portátil a su escuela y ahora desea instalar Linux en ella. No hay manual y se vio obligado a arrancarlo desde una unidad de memoria USB sin gráficos en absoluto. Obtiene acceso a un terminal de shell y se conoce, para cada procesador que tenga, habrá una línea para él en el archivo
/proc/cpuinfo
:processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 (líneas saltadas) processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 158 (se saltaron más líneas)
-
Usando los comandos
grep
ywc
muestre cuántos procesadores tiene.
-
Haga lo mismo con
sed
en lugar degrep
.
-
-
Explore su archivo local
/etc/passwd
con los comandosgrep
,sed
,head
ytail
según las siguientes tareas:-
¿Qué usuarios tienen acceso a un shell Bash?
-
Su sistema tiene varios usuarios que existen para manejar programas específicos o para fines administrativos. No tienen acceso a un shell. ¿Cuántos de esos existen en su sistema?
-
¿Cuántos usuarios y grupos existen en su sistema (recuerde: use solo el archivo
/etc/passwd
)?
-
Muestre solo la primera línea, la última línea y la décima línea de su archivo
/etc/passwd
.
-
-
Considere este ejemplo de archivo
/etc/passwd
. Copie las líneas siguientes en un archivo local llamadomypasswd
para este ejercicio.root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync nvidia-persistenced:x:121:128:NVIDIA Persistence Daemon,,,:/nonexistent:/sbin/nologin libvirt-qemu:x:64055:130:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:122:133:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin carol:x:1000:2000:Carol Smith,Finance,,,Main Office:/home/carol:/bin/bash dave:x:1001:1000:Dave Edwards,Finance,,,Main Office:/home/dave:/bin/ksh emma:x:1002:1000:Emma Jones,Finance,,,Main Office:/home/emma:/bin/bash frank:x:1003:1000:Frank Cassidy,Finance,,,Main Office:/home/frank:/bin/bash grace:x:1004:1000:Grace Kearns,Engineering,,,Main Office:/home/grace:/bin/ksh henry:x:1005:1000:Henry Adams,Sales,,,Main Office:/home/henry:/bin/bash john:x:1006:1000:John Chapel,Sales,,,Main Office:/home/john:/bin/bash
-
Liste todos los usuarios en el grupo
1000
(usesed
para seleccionar solo el campo apropiado) de su archivomypasswd
.
-
Liste solo los nombres completos de todos los usuarios de este grupo (use
sed
ycut
).
-
Ejercicios Exploratorios
-
Una vez más, utilizando el archivo
mypasswd
de los ejercicios anteriores, idee un comando Bash que seleccionará a una persona de la Oficina Principal para ganar un concurso de rifas. Use el comandosed
para imprimir solo las líneas de la Oficina Principal, y luego una secuencia de comandocut
para recuperar el nombre de cada usuario de estas líneas. A continuación, deseará ordenar aleatoriamente estos nombres y solo imprimir el nombre superior de la lista.
-
¿Cuántas personas trabajan en Finanzas, Ingeniería y Ventas? (Considere explorar el comando
uniq
).
-
Ahora debe preparar un archivo CSV (valores separados por comas) para poder importar fácilmente, desde el archivo
mypasswd
en el ejemplo anterior, el archivopersons.csv
a LibreOffice. El contenido del archivo tendrá el siguiente formato:First Name,Last Name,Position Carol,Smith,Finance ... John,Chapel,Sales
Tip: Utilice los comandos
sed
,cut
ypaste
para lograr los resultados deseados. Tenga en cuenta que la coma (,
) será el delimitador de este archivo. -
Suponga que la hoja de cálculo
persons.csv
creada en el ejercicio anterior es un archivo importante y queremos asegurarnos de que nadie la manipule desde el momento en que la enviamos a alguien y el momento en que nuestro destinatario la recibe. ¿Cómo podemos asegurar la integridad de este archivo usandomd5sum
?
-
Te prometiste a ti mismo que leerías un libro clásico de 100 líneas por día y decidiste comenzar con Mariner y Mystic de Herman Melville. Diseñe un comando usando
split
que separe este libro en secciones de 100 líneas cada una. Para obtener el libro en formato de texto plano, búsquelo en https://www.gutenberg.org.
-
Usando
ls -l
en el directorio/etc
, ¿qué tipo de listado obtiene? Usando el comandocut
en la salida del comandols
dado, ¿cómo mostraría solo los nombres de archivo? ¿Qué pasa con el nombre del archivo y el propietario de los archivos? Junto con los comandosls -l
ycut
, utilice el comandotr
para suprimir las apariciones múltiples de un espacio en un solo espacio para ayudar a formatear la salida con un comandocut
.
-
Este ejercicio asume que está en una máquina real (no en una máquina virtual). También debe tener una memoria USB con usted. Revise las páginas del manual para el comando
tail
y descubra cómo seguir un archivo a medida que se le agrega texto. Mientras monitorea la salida de un comandotail
en el archivo/var/log/syslog
, inserte una memoria USB. Escriba el comando completo que usaría para obtener el Producto, el Fabricante y la cantidad total de almacenamiento de su memoria USB.
Resumen
Tratar con flujos de texto es de gran importancia cuando se administra cualquier sistema Linux. Las secuencias de texto se pueden procesar utilizando scripts para automatizar las tareas diarias o encontrar información de depuración relevante en los archivos de registro. Aquí hay un breve resumen de los comandos cubiertos en esta lección:
cat
-
Se usa para combinar o leer archivos de texto sin formato.
bzcat
-
Permite el procesamiento o lectura de archivos comprimidos utilizando el método
bzip2
. xzcat
-
Permite el procesamiento o la lectura de archivos comprimidos utilizando el método
xz
. zcat
-
Permite el procesamiento o la lectura de archivos comprimidos utilizando el método
xz
. less
-
Este comando pagina los contenidos de un archivo, y permite la navegación y la funcionalidad de búsqueda.
head
-
Este comando mostrará las primeras 10 líneas de un archivo de forma predeterminada. Con el uso de la opción
-n
se pueden mostrar menos o más líneas. tail
-
Este comando mostrará las últimas 10 líneas de un archivo de forma predeterminada. Con el uso de la opción
-n
se pueden mostrar menos o más líneas. La opción-f
se utiliza para seguir la salida de un archivo de texto cuando se escriben nuevos datos. wc
-
Abreviatura de “word count”, pero dependiendo de los parámetros que use contará caracteres, palabras y líneas.
sort
-
Se utiliza para organizar la salida de una lista alfabéticamente, alfabéticamente inversa o en orden aleatorio.
uniq
-
Se usa para enumerar (y contar) cadenas coincidentes.
od
-
El comando “octal dump” se utiliza para mostrar un archivo binario en notación octal, decimal o hexadecimal.
nl
-
El comando “number line” mostrará el número de líneas en un archivo, así como volver a crear un archivo con cada línea precedida por su número de línea.
sed
-
El editor de flujo se puede usar para encontrar ocurrencias coincidentes de cadenas usando Expresiones regulares, así como editar archivos usando patrones predefinidos.
tr
-
El comando traducir puede reemplazar caracteres y también elimina y comprime caracteres repetidos.
cut
-
Este comando puede imprimir columnas de archivos de texto como campos basados en el delimitador de caracteres de un archivo.
paste
-
Unir archivos en columnas según el uso de separadores de campo.
split
-
Este comando puede dividir archivos más grandes en archivos más pequeños según los criterios establecidos por las opciones del comando.
md5sum
-
Se utiliza para calcular el valor hash MD5 de un archivo. También se utiliza para verificar un archivo contra un valor hash existente para garantizar la integridad de un archivo.
sha256sum
-
Se utiliza para calcular el valor hash SHA256 de un archivo. También se utiliza para verificar un archivo contra un valor hash existente para garantizar la integridad de un archivo.
sha512sum
-
Se utiliza para calcular el valor hash SHA512 de un archivo. También se utiliza para verificar un archivo contra un valor hash existente para garantizar la integridad de un archivo.
Respuestas a los ejercicios guiados
-
Alguien acaba de donar una computadora portátil a su escuela y ahora desea instalar Linux en ella. No hay manual y se vio obligado a arrancarlo desde una unidad de memoria USB sin gráficos en absoluto. Obtiene acceso a un terminal de shell y se conoce, para cada procesador que tenga, habrá una línea para él en el archivo
/proc/cpuinfo
:processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 (líneas saltadas) processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 158 (se saltaron más líneas)
-
Usando los comandos
grep
ywc
muestra cuántos procesadores tiene.Aquí hay dos opciones:
$ cat /proc/cpuinfo | grep processor | wc -l $ grep processor /proc/cpuinfo | wc -l
Ahora que sabe que hay varias maneras en que puede hacer lo mismo, ¿cuándo debería usar una u otra? Realmente depende de varios factores, los dos más importantes son el rendimiento y la legibilidad. La mayoría de las veces usará comandos de shell dentro de scripts de shell para automatizar sus tareas y cuanto más grandes y complejos sean sus scripts, más tendrá que preocuparse por mantenerlos rápidos.
-
Haga lo mismo con
sed
en lugar degrep
Ahora, en lugar de
grep
intentaremos esto consed
:$ sed -n /processor/p /proc/cpuinfo | wc -l
Aquí usamos
sed
con el parámetro-n
para quesed
no imprima nada excepto lo que coincide con la expresiónprocessor
, como lo indica el comandop
. Como hicimos en las solucionesgrep
,wc -l
contará la cantidad de líneas, por lo tanto, la cantidad de procesadores que tenemos.Estudie el siguiente ejemplo:
$ sed -n /processor/p /proc/cpuinfo | sed -n '$='
Esta secuencia de comandos proporciona resultados idénticos al ejemplo anterior donde la salida de
sed
se canalizaba a un comandowc
. La diferencia aquí es que, en lugar de usarwc -l
para contar el número de líneas, se invoca nuevamentesed
para proporcionar una funcionalidad equivalente. Una vez más, estamos suprimiendo la salida desed
con la opción-n
, excepto por la expresión que llamamos explícitamente, que es'$='
. Esta expresión le dice ased
que coincida con la última línea ($
) y luego imprima ese número de línea (=
).
-
-
Explore su archivo local
/etc/passwd
con los comandosgrep
,sed
,head
ytail
según las siguientes tareas:-
¿Qué usuarios tienen acceso a un shell Bash?
$ grep ":/bin/bash$" /etc/passwd
Mejoraremos esta respuesta mostrando solo el nombre del usuario que utiliza el shell Bash.
$ grep ":/bin/bash$" /etc/passwd | cut -d: -f1
El nombre de usuario es el primer campo (parámetro
-f1
del comandocut
) y el archivo/etc/passwd
usa:
como separadores (parámetro-d:
del comandocut
) simplemente canalice la salida del comandogrep
al comandocut
apropiado. -
Su sistema tiene varios usuarios que existen para manejar programas específicos o para fines administrativos. No tienen acceso a un shell. ¿Cuántos de esos existen en su sistema?
La forma más fácil de encontrar esto es imprimiendo las líneas de las cuentas que no usan el shell Bash:
$ grep -v ":/bin/bash$" /etc/passwd | wc -l
-
¿Cuántos usuarios y grupos existen en su sistema? (recuerde: use solo el archivo
/etc/passwd
)El primer campo de cualquier línea dada en su archivo
/etc/passwd
es el nombre de usuario, el segundo es típicamente unax
que indica que la contraseña del usuario no está almacenada aquí (está encriptada en el archivo/etc/shadow
) El tercero es el ID de usuario (UID) y el cuarto es el ID de grupo (GID). Entonces esto debería darnos la cantidad de usuarios:$ cut -d: -f3 /etc/passwd | wc -l
Bueno, la mayoría de las veces lo hará. Sin embargo, hay situaciones en las que establecerá diferentes superusuarios u otros tipos especiales de usuarios que comparten el mismo UID (ID de usuario). Entonces, para estar seguros, canalizaremos el resultado de nuestro comando
cut
al comandosort
y luego contaremos el número de líneas.$ cut -d: -f3 /etc/passwd | sort -u | wc -l
Ahora, para el número de grupos:
$ cut -d: -f4 /etc/passwd | sort -u | wc -l
-
Muestre solo la primera línea, la última línea y la décima línea de su archivo
/etc/passwd
Esto lo hará:
$ sed -n -e '1'p -e '10'p -e '$'p /etc/passwd
Recuerde que el parámetro
-n
le dice ased
que no imprima nada más que lo especificado por el comandop
. El signo de dólar ($
) usado aquí es una expresión regular que significa la última línea del archivo.
-
-
Considere este ejemplo de archivo
/etc/passwd
. Copie las líneas siguientes en un archivo local llamadomypasswd
para este ejercicio.root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync nvidia-persistenced:x:121:128:NVIDIA Persistence Daemon,,,:/nonexistent:/sbin/nologin libvirt-qemu:x:64055:130:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:122:133:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin carol:x:1000:2000:Carol Smith,Finance,,,Main Office:/home/carol:/bin/bash dave:x:1001:1000:Dave Edwards,Finance,,,Main Office:/home/dave:/bin/ksh emma:x:1002:1000:Emma Jones,Finance,,,Main Office:/home/emma:/bin/bash frank:x:1003:1000:Frank Cassidy,Finance,,,Main Office:/home/frank:/bin/bash grace:x:1004:1000:Grace Kearns,Engineering,,,Main Office:/home/grace:/bin/ksh henry:x:1005:1000:Henry Adams,Sales,,,Main Office:/home/henry:/bin/bash john:x:1006:1000:John Chapel,Sales,,,Main Office:/home/john:/bin/bash
-
Liste todos los usuarios en el grupo 1000 (use
sed
para seleccionar solo el campo apropiado) de su archivomypasswd
:El GID es el cuarto campo en el archivo
/etc/passwd
. Puede tener la tentación de probar esto:$ sed -n /1000/p mypasswd
En este caso, también obtendrá esta línea:
carol:x:1000:2000:Carol Smith,Finance,,,Main Office:/home/carol:/bin/bash
Esto no es correcto ya que Carol Smith es miembro de GID 2000 y la coincidencia se produjo debido al UID. Sin embargo, es posible que haya notado que después del GID, el siguiente campo comienza con un carácter en mayúscula. Podemos usar una expresión regular para resolver este problema.
$ sed -n /:1000:[A-Z]/p mypasswd
La expresión
[A-Z]
coincidirá con cualquier carácter en mayúsculas. Aprenderá más sobre esto en la lección respectiva. -
Liste solo los nombres completos de todos los usuarios de este grupo (use
sed
ycut
):Utilice la misma técnica que utilizó para resolver la primera parte de este ejercicio y canalícela a un comando de corte.
$ sed -n /:1000:[A-Z]/p mypasswd | cut -d: -f5 Dave Edwards,Finance,,,Main Office Emma Jones,Finance,,,Main Office Frank Cassidy,Finance,,,Main Office Grace Kearns,Engineering,,,Main Office Henry Adams,Sales,,,Main Office John Chapel,Sales,,,Main Office
¡No del todo! Tenga en cuenta cómo los campos dentro de sus resultados pueden estar separados por
,
. Así que canalizaremos la salida a otro comandocut
, usando,
como delimitador.$ sed -n /:1000:[A-Z]/p mypasswd | cut -d: -f5 | cut -d, -f1 Dave Edwards Emma Jones Frank Cassidy Grace Kearns Henry Adams John Chapel
-
Respuestas a ejercicios exploratorios
-
Una vez más, utilizando el archivo
mypasswd
de los ejercicios anteriores, elabore un comando Bash que seleccione a una persona de la oficina principal para ganar un concurso de rifa. Utilice el comandosed
para imprimir solo las líneas para la oficina principal, y luego una secuencia de comandocut
para recuperar el nombre de cada usuario de estas líneas. A continuación, querrá ordenar estos nombres al azar e imprimir solo el nombre superior de la lista.Primero explore cómo el parámetro
-R
manipula la salida del comandosort
. Repita este comando un par de veces en su máquina (tenga en cuenta que deberá encerrarMain Office
entre comillas simples, por lo quesed
lo manejará como una sola cadena):$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d, -f1 | sort -R
Aquí hay una solución al problema:
$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d, -f1 | sort -R | head -1
-
¿Cuántas personas trabajan en Finanzas, Ingeniería y Ventas? (Considere explorar el comando
uniq
).Siga construyendo sobre la base de lo que aprendió en los ejercicios anteriores. Intente lo siguiente:
$ sed -n /'Main Office'/p mypasswd $ sed -n /'Main Office'/p mypasswd | cut -d, -f2
Observe que ahora no nos importa el
:
como delimitador. Solo queremos el segundo campo cuando dividimos las líneas por los caracteres,
.$ sed -n /'Main Office'/p mypasswd | cut -d, -f2 | uniq -c 4 Finance 1 Engineering 2 Sales
El comando
uniq
solo generará las líneas únicas (no las líneas repetidas) y el parámetro-c
le dice auniq
que cuente las ocurrencias de las líneas iguales. Aquí hay una advertencia:uniq
solo considerará líneas adyacentes. Cuando este no sea el caso, tendrá que usar el comandosort
. -
Ahora desea preparar un archivo CSV (valores separados por comas) para poder importar fácilmente, desde el archivo
mypasswd
en el ejemplo anterior, el archivopersons.csv
a LibreOffice. El contenido del archivo tendrá el siguiente formato:First Name,Last Name,Position Carol,Smith,Finance ... John,Chapel,Sales
Tip: Utilice los comandos
sed
,cut
ypaste
para lograr los resultados deseados. Tenga en cuenta que la coma (,) será el delimitador de este archivo.Comience con los comandos
sed
ycut
, basándose en lo que aprendimos de los ejercicios anteriores:$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d" " -f1 > firstname
Ahora tenemos el archivo
firstname
con los nombres de nuestros empleados.$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d" " -f2 | cut -d, -f1 > lastname
Ahora tenemos el archivo
lastname
que contiene los apellidos de cada empleado.A continuación, determinamos en qué departamento trabaja cada empleado:
$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d, -f2 > department
Antes de trabajar en la solución final, pruebe los siguientes comandos para ver qué tipo de salida generan:
$ cat firstname lastname department $ paste firstname lastname department
Y ahora para la solución final:
$ paste firstname lastname department | tr '\t' , $ paste firstname lastname department | tr '\t' , > names.csv
Aquí usamos el comando
tr
para traducir\t
, el separador de tabulación, por un,
.tr
es bastante útil cuando necesitamos intercambiar un carácter por otro. Asegúrese de revisar las páginas de manual paratr
ypaste
. Por ejemplo, podemos usar la opción-d
para el delimitador para hacer que el comando anterior sea menos complejo:$ paste -d, firstname lastname department
Usamos el comando
paste
aquí una vez que necesitábamos familiarizarte con él. Sin embargo, podríamos haber realizado fácilmente todas las tareas en una sola cadena de comando:$ sed -n /'Main Office'/p mypasswd | cut -d: -f5 | cut -d, -f1,2 | tr ' ' , > names.csv
-
Supongamos que la hoja de cálculo
names.csv
creada en el ejercicio anterior es un archivo importante y queremos asegurarnos de que nadie lo manipulará desde el momento en que se lo enviamos a alguien y el momento en que nuestro destinatario lo recibe. ¿Cómo podemos asegurar la integridad de este archivo usandomd5sum
?Si busca en las páginas de manual
md5sum
,sha256sum
ysha512sum
, verá que todas comienzan con el siguiente texto:“compute and check XXX message digest”
Donde “XXX” es el algoritmo que se utilizará para crear este resumen de mensajes.
Usaremos
md5sum
como ejemplo y luego puedes probar con los otros comandos.$ md5sum names.csv 61f0251fcab61d9575b1d0cbf0195e25 names.csv
Ahora, por ejemplo, puede hacer que el archivo esté disponible a través de un servicio ftp seguro y enviar el mensaje resumen generado utilizando otro medio seguro de comunicación. Si el archivo ha sido ligeramente modificado, el mensaje resumen será completamente diferente. Solo para probarlo, edite
names.csv
y cambie James a Jones como se muestra aquí:$ sed -i.backup s/James/Jones/ names.csv $ md5sum names.csv f44a0d68cb480466099021bf6d6d2e65 names.csv
Siempre que haga que los archivos estén disponibles para su descarga, siempre es una buena práctica distribuir también un corresponsal message digest para que las personas que descarguen su archivo puedan producir un nuevo message digest y compararlo con el original. Si navega por https://kernel.org encontrará la página https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/sha256sums.asc donde puede obtener el sha256sum para todos los archivos disponible para descarga.
-
Te prometiste a ti mismo que leerías un libro clásico de 100 líneas por día y decidiste comenzar con Mariner y Mystic de Herman Melville. Diseñe un comando usando
split
que separe este libro en secciones de 100 líneas cada una. Para obtener el libro en formato de texto plano, búsquelo en https://www.gutenberg.org.Primero obtendremos el libro completo del sitio del Proyecto Gutenberg, donde puede obtener este y otros libros que están disponibles en el dominio público.
$ wget https://www.gutenberg.org/files/50461/50461-0.txt
Es posible que necesite instalar
wget
si aún no está instalado en su sistema. Alternativamente, también puede usarcurl
. Useless
para verificar el libro:$ less 50461-0.txt
Ahora dividiremos el libro en trozos de 100 líneas cada uno:
$ split -l 100 -d 50461-0.txt melville
50461-0.txt
es el archivo que dividiremos.melville
será el prefijo para los archivos divididos. El-l 100
especifica el número de líneas y la opción-d
le dice asplit
que numere los archivos (usando el sufijo proporcionado). Puede usarnl
en cualquiera de los archivos divididos (probablemente no en el último) y confirmar que cada uno de ellos tenga 100 líneas. -
Usando
ls -l
en el directorio/etc
, ¿qué tipo de listado obtiene? Usando el comandocut
en la salida del comandols
dado, ¿cómo mostraría solo los nombres de archivo? ¿Qué pasa con el nombre del archivo y el propietario de los archivos? Junto con los comandosls -l
ycut
, utilice el comandotr
para suprimir las apariciones múltiples de un espacio en un solo espacio para ayudar a formatear la salida con un comandocut
.El comando
ls
por sí solo le dará solo los nombres de los archivos. Sin embargo, podemos preparar la salida dels -l
(la lista larga) para extraer información más específica.$ ls -l /etc | tr -s ' ' , drwxr-xr-x,3,root,root,4096,out,24,16:58,acpi -rw-r--r--,1,root,root,3028,dez,17,2018,adduser.conf -rw-r--r--,1,root,root,10,out,2,17:38,adjtime drwxr-xr-x,2,root,root,12288,out,31,09:40,alternatives -rw-r--r--,1,root,root,401,mai,29,2017,anacrontab -rw-r--r--,1,root,root,433,out,1,2017,apg.conf drwxr-xr-x,6,root,root,4096,dez,17,2018,apm drwxr-xr-x,3,root,root,4096,out,24,16:58,apparmor drwxr-xr-x,9,root,root,4096,nov,6,20:20,apparmor.d
El parámetro
-s
indica atr
que reduzca los espacios repetidos en una sola instancia de un espacio. El comandotr
funciona para cualquier tipo de carácter repetitivo que especifique. Luego reemplazamos los espacios con una coma,
. En realidad, no necesitamos reemplazar los espacios en nuestro ejemplo, así que simplemente omitiremos el,
.$ ls -l /etc | tr -s ' ' drwxr-xr-x 3 root root 4096 out 24 16:58 acpi -rw-r--r-- 1 root root 3028 dez 17 2018 adduser.conf -rw-r--r-- 1 root root 10 out 2 17:38 adjtime drwxr-xr-x 2 root root 12288 out 31 09:40 alternatives -rw-r--r-- 1 root root 401 mai 29 2017 anacrontab -rw-r--r-- 1 root root 433 out 1 2017 apg.conf drwxr-xr-x 6 root root 4096 dez 17 2018 apm drwxr-xr-x 3 root root 4096 out 24 16:58 apparmor
Si solo se desean los nombres de archivo, todo lo que necesitamos que se muestre es el noveno campo:
$ ls -l /etc | tr -s ' ' | cut -d" " -f9
Para el nombre de archivo y el propietario de un archivo necesitaremos los campos noveno y tercero:
$ ls -l /etc | tr -s ' ' | cut -d" " -f9,3
¿Qué pasa si solo necesitamos los nombres de las carpetas y su propietario?
$ ls -l /etc | grep ^d | tr -s ' ' | cut -d" " -f9,3
-
Este ejercicio asume que está en una máquina real (no en una máquina virtual). También debe tener una memoria USB con usted. Revise las páginas del manual para el comando
tail
y descubra cómo seguir un archivo a medida que se le agrega texto. Mientras monitorea la salida de un comandotail
en el archivo/var/log/syslog
, inserte una memoria USB. Escriba el comando completo que usaría para obtener el Producto, el Fabricante y la cantidad total de almacenamiento de su memoria USB.$ tail -f /var/log/syslog | grep -i 'product\:\|blocks\|manufacturer' Nov 8 06:01:35 brod-avell kernel: [124954.369361] usb 1-4.3: Product: Cruzer Blade Nov 8 06:01:35 brod-avell kernel: [124954.369364] usb 1-4.3: Manufacturer: SanDisk Nov 8 06:01:37 brod-avell kernel: [124955.419267] sd 2:0:0:0: [sdc] 61056064 512-byte logical blocks: (31.3 GB/29.1 GiB)
Por supuesto, este es un ejemplo y los resultados pueden variar según el fabricante de la memoria USB. Observe que ahora usamos el parámetro
-i
con el comandogrep
ya que no estamos seguros de si las cadenas que estamos buscando estaban en mayúsculas o minúsculas. También utilizamos|
como un OR lógico, por lo que buscamos líneas que contenganproduct
ORblocks
ORmanufacturer
.