Posts filed under ‘Linux’
Reiniciar linux si tod lo demás es imposible
Si ctrl + alt + Backspace o la combinación de teclas de función no funciona …
- Pulsar Alt y SysRq (Imprimir Pantalla) y a la vez teclearREISUB.
- El ordenador se reiniciará
Montar un sistema de archivo remoto usando sshfs
Traducción libre del artículo http://www.debianadmin.com/mount-a-remote-file-system-through-ssh-using-sshfs.html
Introducción
Sshs es un sistema de archivos cliente basado en ssh.
Por lo tanto necesitaremos un servidor ejecutando un servidor ssh y un cliente con sshfs, en donde se montará el sistema de archivos mediante el uso de ssh.
Características
- Basado en FUSE ( framework de sistema de ficheros para linux que permite entre otras cosas encriptar sistemas de ficheros, comprimir etc)
- Multi hilo
- Permite lecturas de hast 64k
- Cacheo del contenido de los directorios
- Funciona en el espacio de usuario por lo que no es necesario privilegios especiales para hacerlo funcionar.
Instalación en Debian
#apt-get install fuse-utils sshfs
# modprobe fuse
Uso
$ sshfs usuario@maquina: punto_de_montaje
Esto montará el directorio home del usuario en el directorio local punto_de_montaje. El directorio deberá tener los permisos adecuados. Si quisiéramos montar otro directorio deberíamos hacerlo
Ejemplo
- Crear el punto de montaje:
#mkdir /mnt/remote - Cambiar los permisos:
#chown [nombre-usuario]:[nombre-grupo] /mnt/remote/ - Añadir el usuario al grupo fuse
#adduser [usuario] fuse - Iniciar sesión con el usuario y monta el sistema de ficheros remoto
#sshfs usuario-remoto@servidor-remoto:/remoto/directorio /mnt/remote/
Para desmontar el directorio
fusermount -u punto_de_montaje
Listado de comandos útiles en Bash
VARIABLES DE ENTORNO
set - export $PATH=/variable/entorno echo $PATH env - Muestra las variables de entornos del usuario
MÓDULOS
lsmod - Muestrar los módulos cargados en el núcleo de Linux modprobe nombre_modulo -> Añade o quita módulos del kernel
PROCESOS
fg - procesos en foreground bg - procesos en background ps -auxw - Ver todos los procesos y que no nos corte la pantalla killall nombre_proceso - Si deseamos matar todos los procesos ejecutados por el comando vim kill -l - Ver todas las señales de los procesosEstados de los procesos
Id | Estado del proceso |
D | uninterruptible sleep (usually IO) |
R | runnable (on run queue)- Proceso ejecutando o en cola |
S | sleeping - Proceso dormido |
T | traced or stopped - Proceso detenido |
W | paging - Proceso paginado |
X | dead - Proceso muerto |
Z | zombie Aquellos procesos cuyos procesos padres han muerto dejando el proceso hijo sin finalizar. Cuando esto ocurre no es una buena señal. |
ESTADÍSTICAS
free -m De memoria vmstat -s -S: M Del sistema
GENÉRICAS
watch 'ls -la' Muestra el resultado de un comando cada x segundos which comando - Localiza el comando type comando - Muestra los aliases del comando sudo comando usuario - Ejecuta un comando como si fuera otro usuario
RUNLEVELES
chkconfig --list ejemplo Muestra/Modifica el estado de los servicios del sistema en cada nivel de arranque (runlevel)
DISCOS
cat /dev/cdrom > /usr/imagen.iso - Crea una imagen del cdrom cat /dev/hda > /dev/hdb - Clona el disco duro mount -rt iso9660 /dev/hdc /cdrom - Montar en modo lectura con sitema de fichero iso9660 un cdrom fsck /dev/hda1 - Comprueba el disco fdisk -l - Muestra las particiones del disco
CADENAS Y FICHEROS
tr 'A-Z' 'a-z'
RED
netstat -atun | grep ESTAB - Muestra las conexiones establecidas con nuestra máquina netstat -a - Muestras los puertos abiertos ifdown eth0 - Desactiva el servicio de red para la tarjeta eth0 ifup eth0 - Activa el servicio de red para la tarjeta eth0 iptraf - Herramienta gráfica de gestión de tráfico de red /usr/sbin/iftop - Otra herramienta de análisis de tráfico
TAR
tar -tzvf fichero.tar Muestra el contenido del fichero
COMPILACIÓN
gcc -o prueba prueba.c
FIND
find / -name mysql* -exec rm {} - Busca todos los ficheros que comiencen por mysql y los elimina find . -name "*mysql*" -print - Busca todos los ficheros que contengan la palabra mysql
HORAS
date --set=15:30 - Cambiar la hora
APT
apt-cache search datoabuscar - Busca una aplicación en la lista de aplicaciones a instalar (sólo distribuciones Debian) apt-get install nombreaplicacion - Instala la aplicación especificada (si se tiene conexión a Internet), sólo disponible en distribuciones Debian apt-get install -f - Comprueba la correcta instalación de los paquetes descargados en '/var/cache/apt/archives/', repitiendo la instalación si fuese necesario o bajando algún paquete dependiente que no se haya descargado apt-get update - Actualiza la base de datos de paquetes a actualizar o instalar a partir del fichero '/etc/apt/sources.list'. La base de datos la constituyen un conjunto de ficheros ubicados en '/var/lib/apt/lists/' apt-get upgrade - Actualiza todos los paquetes instalados en el sistema a la última versión disponible apt-get clean - Elimina todos los paquetes (.deb) descargados (almacenados automáticamente en '/var/cache/apt/archives/') apt-get update && apt-get -f dist-upgrade && apt-get clean . Actualizar completamente el listado de paquetes disponibles Si estás detrás de un proxy no transparente apt-get necesita IP y puerto del proxy obtenido de unas variable de entorno que vamos a menter automáticamente en .bashrc y .bash_profile: export http_proxy=http://128.19.54.25:8080/ export ftp_proxy=http://128.19.54.25:8021/
YUM
Por defecto YUM lee el fichero de configuración /etc/yum.conf Importar las claves GPG rpm --import /usr/share/rhn/RPM-GPG-KEY rpm --import /usr/share/rhn/BETA-RPM-GPG-KEYyum info festival yum install festival yum list festival* yum update RedHat sólo ofrece soporte para up2date up2date
10 Buenos hábitos a la hora de programar en shell scripting
Traducción propia del artículo de IBM http://www-128.ibm.com/developerworks/aix/library/au-badunixhabits.html
1 – Definir una estructura de árbol de una sóla vez
mkdir -p tmp/a/b/c en vez de ~ $ mkdir tmp ~ $ cd tmp ~/tmp $ mkdir a ~/tmp $ cd a ~/tmp/a $ mkdir b ~/tmp/a $ cd b ~/tmp/a/b/ $ mkdir c ~/tmp/a/b/ $ cd c ~/tmp/a/b/c $ Y mejor todavía, pues crea el directorio project y dentro los distintos directorios mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
2 – Cambiar el path, no mover el fichero. Por ejemplo, no desempaquetar ficheros directamente en el directorio que deseemos. Para ello podemo usar la opción -C
tar xvf -C tmp/a/b/c newarc.tar.gz
3 – Combinar comandos con operadores de control
Por ejemplo: Ejecutar un comando sólo si otro comando ha devuelto 0 exit status. cd tmp/a/b/c && tar xvf ~/archive.tar Otro ejemplo: Ejecutar un comando sólo si otro comando no ha devuelto un 0 exit status. cd tmp/a/b/c || tar xvf ~/archive.tar
4 – Entrecomillar variables con cuidado
Ejemplos: ls tmp/ a b ~ $ VAR="tmp/*" ~ $ echo $VAR tmp/a tmp/b ~ $ echo "$VAR" tmp/* ~ $ echo $VARa ~ $ echo "$VARa" ~ $ echo "${VAR}a" tmp/*a ~ $ echo ${VAR}a tmp/a
5 – Usar secuencias de escape para controlar la entrada en el log
cd tmp/a/b/c || > mkdir -p tmp/a/b/c && > tar xvf -C tmp/a/b/c ~/archive.tar cd tmp/a/b/c > || > mkdir -p tmp/a/b/c > && > tar xvf -C tmp/a/b/c ~/archive.tar
6 – Agrupar los comandos en una lista para poder ir redirigiendo los resultados
Ej. Ejecutar una lista de comandos en un subshell ~( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && > VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) > | mailx admin -S "Archive contents" Ej. Ejecutar una lista de comandos en el propio shell ~ $ { cp ${VAR}a . && chown -R guest.guest a && > tar cvf newarchive.tar a; } | mailx admin -S "New archive"
7 – Usar xargs fuera de find. Usar con -e. Por defecto se considera el símbolo _ como fin de línea. Si por alguna razón aparece ese símbolo en una línea como único carácter con xargs, todo lo que venga detrás no será filtrado.
~ $ find some-file-criteria some-file-path | > xargs some-great-command-that-needs-filename-arguments Otros ejemplos de xargs $ xargs a b c Control-D a b c ~ $ Otros ejemplos: ~/tmp $ ls -1 | xargs December_Report.pdf README a archive.tar mkdirhier.sh ~/tmp $ ls -1 | xargs file December_Report.pdf: PDF document, version 1.3 README: ASCII text a: directory archive.tar: POSIX tar archive mkdirhier.sh: Bourne shell script text executable ~/tmp $
8 – Evitar usar grep y wc -l. Usar mejor -c que cuenta las líneas y es más rápido
time grep -c and tmp/a/longfile.txt
9 – Es preferible usar awk en vez de grep
Usar ls -l | awk '$6 == "Dec"' en vez de ls -l /tmp/a/b/c | grep Dec
10 – No usar tuberías con grep y cat puesto que grep toma el nombre del fichero como argumento
BIEN time grep and tmp/a/longfile.txt MAL time cat tmp/a/longfile.txt | grep and
Uso del comando at y crontab para programar tareas
COMANDO AT
# Programar tareas puntualmente
at -f /scripts/copia 5am tomorrow at -f /scripts/copia 3:50am May 19
#Para ver los trabajos activos
atq at -l
CRONTAB
crontab -e
Se abre el editor vi y nos permite editarlo.
Pulsamos la letra i, editamos el fichero.
Pulsamos la tecla Esc, y escribimos :qw para guardar los cambios.
Si no deseamos guardarlos escribimos :q!
# Ejecución de un comando todos los días a media noche 0 0 * * * /comando # Ejecución de un comando cada hora en punto 0 * * * * /comando # Ejecución de un comando el primer día de cada mes a las 0 y a las 12 horas 0 0,12 1 * * /comando # Ejecución de un comando el día 12 que sea domingo, lunes o sábado a las 2 de la mañana 0 2 12 * 0,1,6 /comando # Ejecución de un comando cada 5 minutos */5 * * * * /comando #Ejecución de un comando cada media hora 0,30 * * * * /comando
# Para poder ver las tareas
crontab -l
Comprobar si existe un fichero en bash
if [ -d “$RUTA_COPIA/$i” ]
then
echo “Ya existe”
else
mkdir $RUTA_COPIA/$i
fi
Arrays en bash
sitio[1]=bbdd1
sitio[2]=bbd2
# Recorro el array
for i in “${sitio[@]}”
do
echo $i;
done