Tutoriales

6 comandos obsoletos de Linux y las herramientas que debería usar en su lugar

En el desarrollo de software, las cosas cambian a una velocidad increíble debido a las mejoras en el hardware y los entornos. Por la misma razón, las herramientas cambian. En ocasiones, las herramientas antiguas no se adaptan bien a los cambios, por lo que acaban desvaneciéndose y siendo sustituidas por otras utilidades (con el punto discutible de que las nuevas herramientas son mejores que las anteriores).

Este artículo comparte un puñado de herramientas antiguas que es posible que aún esté usando, qué debería usar en su lugar y por qué debería cambiar a estas alternativas mejoradas que brindan la misma funcionalidad, si no más. Estas herramientas también están bien mantenidas. Así que aquí está mi lista, sin ningún orden específico.

egrep y fgrep: use banderas en su lugar

El venerable comando grep es uno de los mejores ejemplos de la filosofía del sistema operativo Unix:

Escriba programas que hagan una cosa y la hagan bien. Escribir programas para trabajar juntos. Escriba programas para manejar flujos de texto porque esa es una interfaz universal.

los egrep (grep extendido) utiliza expresiones regulares para hacer coincidir una línea. Sin embargo, egrep fue desaprobado a favor del uso regular grep con la bandera grep -E. Por ejemplo:

$ egrep '^[fj]' /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
josevnz:x:1000:1000:josevnz:/home/josevnz:/bin/bash

$ grep -E '^[fj]' /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash

Ambos ejemplos coinciden con las líneas que comienzan con la letra j o F en el /etc/passwd expediente.

Otro ejemplo de agregar una nueva bandera es fgrep. los grep fijo El comando usa una cadena fija para hacer coincidir (sin optimizaciones, por lo que es más rápido que una expresión regular) en lugar de -E. Ha sido reemplazado por grep -F. Aquí hay una comparación:

$ fgrep 'josevnz' /etc/passwd
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash

$ grep -F 'josevnz' /etc/passwd
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash

¿Por qué se reemplazaron egrep y fgrep?

Tiene más sentido usar banderas para que una herramienta proporcione un comportamiento similar. solo necesitas saber eso grep con una bandera puede usar expresiones regulares o realizar una búsqueda exacta.

[ For more tips, download the Linux grep command cheat sheet. ]

nslookup: Todavía vivo pero no bien

Levante la mano si alguna vez ha intentado obtener la dirección IP de un servidor como este:

$ nslookup kodegeek.com
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
Name:	kodegeek.com
Address: 50.63.7.206

Una alternativa para nslookup es dig. Aquí hay un ejemplo similar al anterior:

$ dig @192.168.1.1 kodegeek.com A +noall +answer +nocmd
kodegeek.com.		600	IN	A	50.63.7.206

A continuación, el modo interactivo muestra cómo obtener el registro del puntero (PTR) del mismo servidor (esta es una búsqueda inversa para obtener el nombre del servidor proporcionando la dirección IP):

> set type=ptr
> 50.63.7.206
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
206.7.63.50.in-addr.arpa	name = ip-50-63-7-206.ip.secureserver.net.

Authoritative answers can be found from:

El comando equivalente en dig Se ve como esto:

$ dig -x @192.168.1.1 kodegeek.com +noall +answer +nocmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22696
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;1.1.168.\@192.in-addr.arpa.	IN	PTR

;; AUTHORITY SECTION:
in-addr.arpa.		3549	IN	SOA	b.in-addr-servers.arpa. nstld.iana.org. 2022033331 1800 900 604800 3600

;; Query time: 24 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue May 17 05:08:21 EDT 2022
;; MSG SIZE  rcvd: 122

kodegeek.com.		600	IN	A	50.63.7.206

los dig comando puede hacer cosas que nslookup no poder. Por ejemplo, puede solicitar una transferencia de DNS de una zona de dominio (incluidos todos los tipos de registro) para hacer una copia de seguridad de su dominio DNS:

$ dig +short ns kodegeek.com
ns51.domaincontrol.com.
ns52.domaincontrol.com.
$ dig axfr kodegeek.com @ns51.domaincontrol.com.
# *Note:* In this case it won't work because kodegeek.com has a domain protection. But the domain in your intranet may work.

Sin embargo, nslookup puede hacer cosas que la excavación no puede, como el modo interactivo amigable, que es muy útil cuando se exploran dominios DNS. También puede ejecutarse en modo no interactivo.

[ Download the Manage your Linux environment for success eBook to learn ways to streamline your work. ]

Entonces, ¿cuál es la diferencia? los dig La utilidad utiliza las bibliotecas de resolución del sistema operativo (las bibliotecas que realizan búsquedas de direcciones en DNS) y nslookup no es. Los dos pueden comportarse de manera diferente al resolver direcciones.

¿Por qué se reemplazó nslookup?

Realmente, nslookup no fue reemplazado por dig (o host). Por Wikipedia:

nslookup era miembro del software del servidor de nombres BIND. Temprano... en el desarrollo de BIND 9, el Consorcio de Sistemas de Internet planeó desaprobar nslookup a favor de host y dig. Esta decisión se revirtió en 2004 con el lanzamiento de BIND 9.3, y nslookup cuenta con soporte completo desde entonces.

Así es Perfectamente bien para usar ambos.

ifconfig, netstat, ruta: prueba ip

podrías usar ifconfig para obtener información sobre las interfaces de red y cambiar su configuración. Por ejemplo:

$ /sbin/ifconfig
docker0: flags=4099  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:43:f9:d0:b4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0: flags=4099  mtu 1500
        ether 00:1f:f3:46:38:96  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 30  bytes 1170 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30  bytes 1170 (1.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wls1: flags=4163  mtu 1500
        inet 192.168.1.16  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::ac00:48ea:c7a6:1488  prefixlen 64  scopeid 0x20
        inet6 fd22:4e39:e630:1:6688:3ffd:ea5b:d9e9  prefixlen 64  scopeid 0x0
        ether 00:23:6c:7b:db:ac  txqueuelen 1000  (Ethernet)
        RX packets 1115786  bytes 107099421 (102.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 548530  bytes 359598134 (342.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Sin embargo, ifconfig fue reemplazado por ip. A continuación, le mostramos cómo enumerar sus interfaces de red usando ip:

$ ip address 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0:  mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:1f:f3:46:38:96 brd ff:ff:ff:ff:ff:ff
3: wls1:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:23:6c:7b:db:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.16/24 brd 192.168.1.255 scope global noprefixroute wls1
       valid_lft forever preferred_lft forever
    inet6 fd22:4e39:e630:1:6688:3ffd:ea5b:d9e9/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::ac00:48ea:c7a6:1488/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: docker0:  mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:43:f9:d0:b4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Otra herramienta útil es route. Use el siguiente comando para verificar la tabla de enrutamiento (la información sobre cómo su máquina se conecta a otras máquinas):

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    600    0        0 wls1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wls1

los ip El comando también puede mostrar la tabla de enrutamiento. El siguiente ejemplo muestra por qué esta herramienta se hizo cargo:

$ ip route list
default via 192.168.1.1 dev wls1 proto static metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.1.0/24 dev wls1 proto kernel scope link src 192.168.1.16 metric 600

Otra utilidad que fue reemplazada es netstat. Con netstat, puede ver la lista de conexiones activas, entre otras cosas. Por ejemplo, para ver la lista de conexiones TCP de escucha activa en sus servidores sin resolución de nombres, escriba:

$ /usr/bin/netstat --numeric --tcp --listen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 :::9323                 :::*                    LISTEN     
tcp6       0      0 :::5355                 :::*                    LISTEN     
tcp6       0      0 :::9100                 :::*                    LISTEN    

En este caso, el comando ss es el reemplazo:

$ ss --numeric --tcp --listen
State               Recv-Q               Send-Q                             Local Address:Port                             Peer Address:Port              Process              
LISTEN              0                    32                                 192.168.122.1:53                                    0.0.0.0:*
LISTEN              0                    4096                               127.0.0.53%lo:53                                    0.0.0.0:*
LISTEN              0                    128                                      0.0.0.0:22                                    0.0.0.0:*
LISTEN              0                    128                                    127.0.0.1:631                                   0.0.0.0:*
LISTEN              0                    4096                                     0.0.0.0:5355                                  0.0.0.0:*
LISTEN              0                    128                                         [::]:22                                       [::]:*
LISTEN              0                    128                                        [::1]:631                                      [::]:*
LISTEN              0                    4096                                           *:9323                                        *:*
LISTEN              0                    4096                                        [::]:5355                                     [::]:*
LISTEN              0                    4096                                           *:9100                                        *:*

¿Por qué quedaron en desuso ifconfig, route y netstat?

En este caso, la falta de mantenimiento fue la ruina de estas herramientas. Las herramientas más nuevas tomaron su lugar, según Wikipedia:

Muchas distribuciones de Linux han desaprobado el uso de ifconfig y route a favor del paquete de software iproute2, como ArchLinux o RHEL desde la versión 7, que ha estado disponible desde 1999 para Linux 2.2. iproute2 incluye soporte para todas las funciones comunes de ifconfig(8), route(8), arp(8) y netstat(1). También incluye compatibilidad con la configuración de multidifusión, administración de enlaces virtuales y túneles, control de tráfico y configuración de IPsec de bajo nivel, entre otras funciones.

Lecciones para llevar

  • Es una buena idea mantenerse al día con las herramientas más recientes, ya que los desarrolladores corrigen errores y agregan funcionalidades útiles que pueden no estar presentes en versiones anteriores. Se trata de ser más productivo.
  • El software antiguo tiende a no obtener correcciones de errores. Si se dejan desatendidos, algunos de ellos podrían comprometer su sistema.
  • ¡Y no todas las afirmaciones de que una herramienta está obsoleta son ciertas! Como de costumbre, haga su tarea y asegúrese de que sus servicios públicos estén al día.

LEER  PipeViewer: explore la seguridad y los permisos de las canalizaciones con nombre de Windows

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba