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.
Tabla de Contenidos
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.