Localizar archivos en Linux

30 06 2008

Existen varias herramientas para localizar ficheros, pero es necesario saber cuál es la más adecuada en cada caso:

  • which: determina la localización de un comando y muestra la ruta completa del ejecutable (busca en el PATH del usuario).
  • find: localiza archivos que hagan match con una expresión. Tiene cantidad de opciones útiles.
  • locate: localiza archivos buscando en una base de datos (por ej. var/lib/mlocate/mlocate.db) previamente creada.
  • updatedb: crea o actualiza la base de datos de locate.
  • whatis: muestra descripciones del man, para matches con palabras exactas.
  • apropos: busca matches parciales y muestra la descripción del man.




Administrando permisos

29 06 2008

En Linux el control de accesos a los ficheros se implementa mediante un conjunto de propiedades, que se guardan en el inodo del fichero. Se consideran tres clases de usuarios:

  1. Usuario: usuario propietario.
  2. Grupo: grupo propietario.
  3. Otros: resto de usuarios del sistema.

Para cada clase se definen tres tipos de permisos: lectura (r), escritura (w), y ejecución (x).  Todos los permisos son binarios. Esto nos da en total 9 bits para los permisos de usuario, grupo y otros (rwxrwxrwx), pero existen tres bits adicionales:

SUID: es aplicable sólo para ejecutables, no tiene efecto en directorios. Si el bit está activado, no importa quien lo haya ejecutado, pues tendrá los permisos de su propietario (como si fuera root).

SGID: es lo mismo que SUID pero aplicado al grupo. La diferencia es que aplicado a un directorio, los nuevos archivos creados se asignan al mismo grupo propietario del directorio, no importa quien los cree.

Sticky: actualmente aplicar el sticky bit a ejecutables no tiene sentido. En el caso de un directorio, los únicos que pueden renombrar o eliminar archivos son el propietario del fichero, el propietario del directorio y root.

El uso de los bits extras es poco frecuente, por lo que no gastamos realmente tres bits. Los bits de SUID y SGID se marcarán sustituyendo la x de usuario o grupo por s o S (en mayúsculas indica que no estaba a 1). En el caso del sticky bit se sustutuirá la x de otros por t o T.

Ejemplo:

6755 = rwsr-sr-x

Comandos:

  • umask: configura la máscara por defecto en la creación de ficheros.
  • chmod: modifica los permisos de un archivo.
  • chown: cambia el usuario y grupo propietario.
  • chgrp: cambia el grupo propietario.




Administrando cuotas de disco

28 06 2008

Las cuotas para usuarios se pueden aplicar para cada filesystem de /etc/fstab, pero se suelen aplicar sólo a donde los usuarios guardan archivos, como /home/username.

Cada sistema de archivos tiene hasta 5 tipos de limitaciones en la cuota:

  • Hard limit por usuario: es la máxima cantidad de espacio que un usuario puede tener, y una vez alcanzada no podrá escribir en el disco.
  • Soft limit por usuario: una vez alcanzado se alerta al usuario de la situación, pero puede seguir trabajando normalmente.
  • Hard limit por grupo: una vez superado ningún usuario del grupo podrá escribir, aunque su límite individual no se haya superado.
  • Soft limit por grupo: igual que el soft limit por usuario, pero en referencia al grupo.
  • Periodo de gracia: una vez se alcanza el soft limit, el usuario o grupo entra en el periodo de gracia. Una vez se agota el tiempo, el soft limit se convierte en hard limit.

Comandos:

  • quota: muestra los límites para usuarios o grupos.
  • quotaon: activa cuotas ya configuradas para uno o más filesystems.
  • quotaoff: deshabilita cuotas.
  • quotacheck: examina los sistemas de archivos y compila las bases de datos de las cuotas (archivos quota.user y quota.group).
  • edquota: modifica cuotas para usuarios y grupos.
  • reqquota: reporta el estado de las cuotas.




Comandos Vi básicos

28 06 2008

En ocasiones el único editor disponible puede ser vi, y debemos conocer algunos comandos básicos:

i: insertar en la posición actual.

I: insertar al principio de la línea.

a: concatenar despues de la posición actual.

A:  concatenar al final de la línea.

o: empezar una nueva línea después de la actual.

r: reemplazar el carácter actual.

x: borrar el caracter actual.

d: cortar.

y: copiar.

p: pegar.

. : repetir el último comando.

u: deshacer el último comando.

/expr: buscar expresion.

:q: quit.

:w: guardar.

ZZ: guardar y salir.

Hay muchos más, pero para editar un fichero y salir del paso… suficiente :wink:





Expresiones regulares en Linux

28 06 2008

Las expresiones regulares o patrones son usadas por algunos comandos en linux para hacer búsquedas y otras tareas, en archivos de texto. Algunos de los comandos que las usan son grep y sed.

Este es un pequeño resumen:

Expresion regular Extendida (egrep) Descripción
^ Match inicio de una línea
$ Match final de una línea
\< y \> Match espacio en blanco, inicio y final de línea.
[abc] o [a-z] Match con carácteres simples.

En el primer ejemplo con a, b o c, y en el segundo con cualquiera del rango.

[^a-z] Match inverso. Cualquier carácter fuera del rango.
. Match con cualquier carácter excepto newline.
* * Match con cero o más instancias del carácter anterior.
\? ? Match con cero o una instancia de la expresión regular anterior.
\+ + Match con una o mas instancias de la expresión regular anterior.
\{n,m\} {n,m} Match un rango de ocurrencias de la expresión regular anterior entre n y m.
\| | Es como una “OR”.
  • El comando sed:

Sed es un programa que permite filtrar y transformar texto. Sed trabaja con el texto por medio de direcciones y comandos de edición. Las direcciones localizan las líneas, y los comandos modifican el texto.

  • Direcciones:
  1. Un número de línea o un rango (inicio, final). Ej. (1,$) todas las líneas.
  2. Una expresion regular de la forma (/expr/).
  3. Un numero de línea con un intervalo, de la forma n~s, donde n es la línea inicial y s el salto. Ej. 1~2 serían las líneas impares.
  • Comandos:

d: borrar líneas.

s: sustituciones de la forma s/patron/remplazo/[flags]. Los flags son:

g: remplazar todas las instancias.

n: remplazar la n-ésima instancia.

p: imprimir la lína si se produce una sustitución.

y: transforma carácteres.

  • El comando grep:

Busca un patrón en un archivo o entrada estándar.

-c: cuenta las líneas que hacen match.

-h: muestra las líneas que hacen match.

-i: ignora distinción entre mayúsculas y minúsculas.

-n: muestra números de línea.

-v: match inverso.

-E: expresiones regulares extendidas. Equivale al comando egrep.

  • Ejemplos:
$ sed '/^#/d' prueba

Borra líneas de prueba que contengan # al principio de línea.

$ grep -c '^$' prueba

Cuenta el número de líneas vacías de prueba.

$ grep '\<[0-9]\{3,5\}\}\>' prueba

Muestra las líneas que contengan un número de 3, 4 o 5 dígitos.

$ sed 'y/abc/123/' prueba

Transforma los carácteres a, b y c, por 1, 2 y 3 respectivamente.





Resumen de comandos (parte 2)

27 06 2008
  • tee: recibe la entrada estándar y la escribe en cada fichero y en sálida estándar.
  • ps: muestra información de los procesos que estan corriendo en ese instante.
  • pstree: muestra un árbol jerárquico de procesos.
  • top: muestra información de los procesos, pero contínuamente actualizada.
  • kill: envía un signal a un proceso.

Un signal es un mensaje enviado a un proceso por el kernel o el usuario. Los más útiles son:

Signal Significado
HUP 1 Hang up. Se envía automáticamente al desconectar un modem. También se usa para que algunos programas relean sus ficheros de configuración.
INT 2 Interrupt. Se envia con Ctrl-C.
KILL 9 Matar el proceso incondicionalmente e inmediatamente.
TERM 15 Termina el proceso, si es posible “limpiamente”. Se envia con Ctrl-C.
TSTP 20 Para la ejecución y preparado para continuar. Se envia con Ctrl-Z.
CONT 18 Continua la ejecución. Se envia cuando usamos fg o bg despues de Ctrl-Z.
  • jobs: lista los jobs activos.
  • bg: pasa un job a background, como si se hubiera arrancado con &.
  • fg: situa un job en foreground, convirtiéndolo en el current job.
  • nice: asigna prioridad a un proceso. La prioridad está entre -20 a +19 (negativos aumentan la prioridad).
  • renice: nice sólo modifica la prioridad en el momento de arrancar. Para modificar un programa en ejecución usaremos renice.




Resumen de comandos (parte 1)

24 06 2008

Estos son algunos comandos útiles para procesar texto:

  • cut: selecciona columnas o campos de uno o más ficheros. No modifica los ficheros originales.
  • expand: convierte las tabulaciones de un fichero en espacios.
  • fmt: reformatea cada párrafo de un archivo, escribiéndolo por la salida estándar.
  • head: por defecto muestra las primeras 10 lineas de cada fichero.
  • join: contatena dos líneas que contengan campos idénticos en una sola línea.
  • nl: numera las líneas de un fichero y lo escribe por la salida estándar.
  • od: vuelca en la salida estándar archivos en base ocho por defecto, y otros formatos.
  • paste: escribe secuencialmente en la salida estándar cada línea de los ficheros seleccionados separados por tabuladores.
  • pr: pagina ficheros para su impresión.
  • sort: ordena los ficheros de entrada,  por defecto alfabéticamente.
  • split: corta un archivo en pates de tamaño fijo.
  • tac: es el inverso al comando cat. Imprime por la salida estándar ficheros desde la última línea.
  • tail: imprime las últimas líneas de uno o más ficheros.
  • tr: traduce y borra carácteres de la entrada estándar y escribe por la entrada estándar.
  • unexpand: es el opuesto a expand. Convierte espacios a tabulaciones.
  • uniq: elimina las líneas adjacentes repetidas de la entrada y muestra el resultado por sálida estándar.
  • wc: muestra el número de carácteres, palabras y líneas de un fichero.
  • xargs: ejecuta el comando indicado una o más veces con los argumentos especificados.