# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

chattr y lsattr: visualizar y modificar atributos en sistemas de ficheros Linux


Hace unos días explicamos en una entrada cómo hacer que ningún usuario (incluido root) pudiera borrar ficheros en Linux. Para ello hacíamos uso de dos comandos, lsattr y chattr:

El primer comando, lsattr permite listar los atributos asignados a los ficheros de un sistema de ficheros Linux, mientras que chattr permite modificar dichos atributos. El uso de lsattr no tiene demasiado misterio, ya que únicamente nos servirá para listar atributos, ejemplo:

$ lsattr -a
------------- ./..
------------- ./.bash_history
------------- ./.
------------- ./prueba.txt
------------- ./.bashrc
------------- ./.bash_profile
------------- ./.ssh
------------- ./.bash_logout

En este caso, no hay atributos asignados a los ficheros de la carpeta en la que ejecutamos lsattr. Para comenzar a asignar atributos haremos uso del comando chattr. A continuación vamos a ver mediante ejemplos algunas de las posibilidades que nos ofrece, las letras que pasamos como parámetro simbolizan los atributos a modificar y el (+) o el (-) si lo añadimos o quitamos. Como parámetros opcionales a chattr podemos pasar que el cambio de atributos sea recursivo (R), verbose (V) y suprimir la salida de errores (f).

Asignar el atributo ‘A’ para que cuando se acceda al fichero no se modifique el registro atime. De este modo no quedarán registrada la fecha del último acceso al fichero:

# chattr +A prueba.txt
# lsattr prueba.txt
-------A----- prueba.txt

Asignar el atributo ‘c’ para que el fichero se comprima automáticamente en el disco por el kernel. Cuando se lea el fichero se servirá descomprimido:

# chattr +c prueba.txt
# lsattr prueba.txt
--------c---- prueba.txt

Asignamos el atributo ‘i’ para que el fichero no pueda ser modificado, borrado o renombrado:

# chattr +i prueba.txt
# lsattr prueba.txt
----i-------- prueba.txt

Asignamos el atributo ‘u’ para que cuando el fichero se borre, sus datos permanezcan guardados y permitan al usuario su recuperación:

# chattr +u prueba.txt
# lsattr prueba.txt
-u----------- prueba.txt

Y así podríamos seguir con una gran cantidad de distintos atributos. Como siempre, podéis revisarlos en la página man de chattr. Por supuesto, los atributos se pueden asignar a la vez:

# chattr +uiAc prueba.txt
# lsattr prueba.txt
 -u--i--Ac---- prueba.txt

Cómo vaciar ficheros en Linux


Existen varias formas de vaciar el contenido de ficheros en sistemas Unix desde la línea de comandos, algunas de ellas son las siguientes:

# echo "" > fichero
# > fichero
# :> fichero
# cat /dev/null > fichero
# true > fichero

apropos: buscador de comandos en la shell


Es imposible conocer todos los comandos que nos ofrece cualquier shell, para solucionar este “problema” existen herramientas que nos hacen la vida más fácil, una de ellas es el comando apropos.

Apropos es un comando que busca dentro de las descripciones de cada una de las páginas man las palabras claves que le indiquemos pasandolas como argumentos. Estas palabras claves pueden contener comodines o ser la palabra clave exacta.

Por ejemplo, si quisieramos buscar comandos que sirven para copiar ficheros podríamos hacerlo del siguiente modo (suponiendo un sistema en idioma inglés):

$ apropos "copy files"
cp (1)               - copy files and directories
cpio (1)             - copy files to and from archives
install (1)          - copy files and set attributes

Como véis nos muestra tres comandos que pueden servirnos para realizar operaciones de copiado de ficheros. Otro ejemplo podría ser la búsqueda de un comando/programa para gestionar particiones:

$ apropos "partition"
addpart (8)          - simple wrapper around the "add partition" ioctl
cfdisk (8)           - Curses/slang based disk partition table manipulator for Linux
delpart (8)          - simple wrapper around the "del partition" ioctl
fdisk (8)            - Partition table manipulator for Linux
iostat (1)           - Report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions an...
mpartition (1)       - partition an MSDOS hard disk
partprobe (8)        - inform the OS of partition table changes
partx (8)            - telling the kernel about presence and numbering of on-disk partitions.
sfdisk (8)           - Partition table manipulator for Linux

Como véis es un comando muy útil en situaciones que no conocemos un comando para realizar una determinada tarea.

Comandos RPM


RPM Package Manager (o RPM, originalmente llamado Red Hat Package Manager) es una herramienta de administración de paquetes pensada básicamente para Linux. Es capaz de instalar, actualizar, desinstalar, verificar y solicitar programas. RPM es el formato de paquete de partida del Linux Standard Base. Wikipedia

Originalmente desarrollado por Red Hat para Red Hat Linux, en la actualidad muchas distribuciones GNU/Linux lo usan, dentro de las cuales las más destacadas son Fedora Linux, MandrivaLinux, SuSE Linux y Conectiva Linux. También se ha portado a otros sistemas operativos.

A continuación explico los comandos básicos para la gestion de paquetería RPM, instalar, desinstalar, actualizar, buscar, etc.

Instalación de paquetes RPM

# rpm -ivh foo-2.0-4.i386.rpm
# rpm -i ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm
# rpm -i http://oss.oracle.com/projects/firewire/dist/files/kernel-2.4.20-18.10.1.i686.rpm

Como podéis observar, podemos instalar paquetes RPM descargardos en el propio sistema además de hacerlo directamente vía ftp o http. En cuanto a los parámetros, -i es de install, -v de verbose y -h de hash, podéis verlo en la ayuda del propio comando (–help o man)

Desinstalar paquetes RPM

# rpm -e foo

Actualizar paquetes RPM

# rpm -Uvh foo-1.0-2.i386.rpm
# rpm -Uvh ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm
# rpm -Uvh http://oss.oracle.com/projects/firewire/dist/files/kernel-2.4.20-18.10.1.i686.rpm

Lo que hacemos al actualizar de este modo vía rpm es desinstalar el paquete antiguo e instalar el nuevo, también soporta el protocolo ftp y http.

Listar todos los paquetes RPM instalados en el sistema

# rpm -qa

Esta orden listará todos los paquetes instalados en el sistema.

Listar determinados paquetes RPM

# rpm -q foo

De este modo listamos la información de un determinado paquete, su nombre, versión, etc.

Listar información de un paquete RPM

# rpm -qi foo

Listar ficheros de un paquete RPM instalado

# rpm -ql foo

Verificar firma de un paquete RPM

# rpm --checksig foo

Por supuesto, “foo” es un ejemplo de paquete… ;)

Traducido y adaptado de RPM Commands.

Tabla de equivalencias entre comandos DOS y UNIX


Esta tabla servirá de referencia a aquellos usuarios que pasen de DOS a UNIX o viceversa:

Tarea ...                         DOS                     UNIX

Listar ficheros dir/w dir ls dir ls -l Mostrar contenido de ficheros type cat Mostrar contenido de ficheros type filename | more more paginando Copiar fichero copy cp Buscar cadena en fichero find grep fgrep Comparar ficheros comp diff Renombrar fichero rename OR ren mv Borrar fichero erase OR del rm Borrar directorio rmdir OR rd rmdir Cambiar permisos de ficheros attrib chmod Crear directorio mkdir o md mkdir Moverse entre directorios chdir OR cd cd Ayuda help man apropos Mostrar fecha y hora date, time date Mostrar espacio disponible chkdsk df Imprimir fichero print lpr Mostrar cola de impresión print lpq

Fuente: DOS to UNIX Translation

Unix ToolBox: Base de datos de comandos y tareas Unix/Linux/BSD


Unix ToolBox es un excelente sitio web que recopila comandos, tareas, scripts,etc de Unix/Linux/BSD separados por categorías, además de ser una excelente guía práctica con ejemplos de cada comando, tanto para usuarios avanzados, intermedios como principiantes. Os dejo las categorías y un ejemplo de como es por ejemplo, la subcategoría hardware dentro de sistema, podéis acceder al sitio web directamente desde aquí.

  1. System
  2. Processes
  3. File System
  4. Network
  5. SSH SCP
  6. VPN with SSH
  7. RSYNC
  8. SUDO
  9. Encrypt Files
  10. Encrypt Partitions
  11. SSL Certificates
  12. CVS
  13. SVN
  14. Useful Commands
  15. Install Software
  16. Convert Media
  17. Printing
  18. Databases
  19. Disk Quota
  20. Shells
  21. Scripting
  22. Programming
  23. Online Help

Información Hardware

Kernel detected hardware

# dmesg                              # Detected hardware and boot messages
# lsdev                              # information about installed hardware
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # Read BIOS

Linux

# cat /proc/cpuinfo                  # CPU model
# cat /proc/meminfo                  # Hardware memory
# grep MemTotal /proc/meminfo        # Display the physical memory
# watch -n1 'cat /proc/interrupts'   # Watch changeable interrupts continuously
# free -m                            # Used and free memory (-m for MB)
# cat /proc/devices                  # Configured devices
# lspci -tv                          # Show PCI devices
# lsusb -tv                          # Show USB devices
# lshal                              # Show a list of all devices with their properties
# dmidecode                          # Show DMI/SMBIOS: hw info from the BIOS

FreeBSD

# sysctl hw.model                    # CPU model
# sysctl hw                          # Gives a lot of hardware information
# sysctl vm                          # Memory usage
# dmesg | grep "real mem"            # Hardware memory
# sysctl -a | grep mem               # Kernel memory settings and info
# sysctl dev                         # Configured devices
# pciconf -l -cv                     # Show PCI devices
# usbdevs -v                         # Show USB devices
# atacontrol list                    # Show ATA devices
# camcontrol devlist -v              # Show SCSI devices

Comandos que nunca debes lanzar en tu sistema


En los foros oficiales de Ubuntu hace unos meses se creó este hilo, en el cual se indican los comandos Unix/Linux más peligrosos que existen, y que con algo tan simple como la ejecución de un comando puedes destruir todo un sistema operativo.

Casualidad que uno de ellos da nombre a este blog (rm -rf /)… bueno, en parte ;)

Y recordad, NUNCA lancéis estos comandos, a no ser que sepáis expresamente lo que estáis haciendo.

Como no quiero hacerme responsable de que alguien los ejecute, directamente os doy el enlace al artículo jajaja:

- Comandos que NUNCA debes ejecutar en tu sistema Unix

Chuleta / guía de comandos Unix/Linux


FossWire han realizado una excelente guía de comandos Unix/Linux, es realmente una chuleta que viene bien tener a mano, quizas no tanto para los administradores avanzados pero sí para los principiantes:
Chuleta comandos Linux Unix

La guía está disponible en los siguientes idiomas: